Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of HHH_MOTOR_TRAP_Polled_TFM by
PWM.cpp@5:f3eba32e78a7, 2019-03-18 (annotated)
- Committer:
- ConfigArray
- Date:
- Mon Mar 18 11:11:15 2019 +0000
- Revision:
- 5:f3eba32e78a7
- Parent:
- 4:2f93d15d1d3f
good
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ConfigArray | 1:a8b0806fba3f | 1 | #include "mbed.h" |
ConfigArray | 1:a8b0806fba3f | 2 | #include "math.h" |
ConfigArray | 1:a8b0806fba3f | 3 | #include "Defines.h" |
ConfigArray | 1:a8b0806fba3f | 4 | #include "PWM.h" |
ConfigArray | 1:a8b0806fba3f | 5 | #include <string> |
ConfigArray | 1:a8b0806fba3f | 6 | |
ConfigArray | 5:f3eba32e78a7 | 7 | //#define PWMPRESCALE (12-1) |
ConfigArray | 1:a8b0806fba3f | 8 | #define PWM 200 |
ConfigArray | 1:a8b0806fba3f | 9 | |
ConfigArray | 5:f3eba32e78a7 | 10 | void InitPWM(int PWMPRESCALE) |
ConfigArray | 1:a8b0806fba3f | 11 | { |
ConfigArray | 1:a8b0806fba3f | 12 | LPC_PINCON->PINSEL4 = (1<<0)|(1<<0)|(1<<2)|(1<<4)|(1<<6)|(1<<8)|(1<<10); //set up the pins to be PWM outputs '01 01 01 0101 01' is pwm mode put onto Mbed pins 26,25,24,23. |
ConfigArray | 1:a8b0806fba3f | 13 | LPC_PINCON->PINMODE2 |= (2<<0)|(2<<2)||(2<<4)|(2<<6)|(2<<8)|(2<<10)|(2<<12)|(2<<14)|(2<<16)|(2<<18)|(2<<20)|(2<<22)|(2<<24)|(2<<26)|(2<<28); // no pull ups //no pull ups/pull downs on PIN1 |
ConfigArray | 1:a8b0806fba3f | 14 | LPC_PWM1->MCR = (1<<0)|(1<<1); //Generate interrupt on mathc, also Reset PWM timer counter on PWM1_MR0 match : match control register |
ConfigArray | 1:a8b0806fba3f | 15 | |
ConfigArray | 1:a8b0806fba3f | 16 | LPC_PWM1->PR = PWMPRESCALE; //1 micro-second resolution (24 ticks to pclk) |
ConfigArray | 1:a8b0806fba3f | 17 | LPC_PWM1->MR0 = 100; //80 1\2 uS ticks to match = 40uS period for 25kHz. output goes high every time TCNT matches |
ConfigArray | 1:a8b0806fba3f | 18 | |
ConfigArray | 1:a8b0806fba3f | 19 | LPC_PWM1->MR1 = 1; //1us - default pulse duration i.e. width. changed by analgo in. output goes low everytime TCN matched |
ConfigArray | 1:a8b0806fba3f | 20 | LPC_PWM1->MR2 = 1; //match comapre registers for the 4 PWM channels |
ConfigArray | 1:a8b0806fba3f | 21 | LPC_PWM1->MR3 = 1; |
ConfigArray | 1:a8b0806fba3f | 22 | LPC_PWM1->MR4 = 1; |
ConfigArray | 1:a8b0806fba3f | 23 | LPC_PWM1->MR5 = 1; |
ConfigArray | 1:a8b0806fba3f | 24 | LPC_PWM1->MR6 = 1; |
ConfigArray | 1:a8b0806fba3f | 25 | |
ConfigArray | 1:a8b0806fba3f | 26 | LPC_PWM1->LER = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 27 | LPC_PWM1->TCR = (1<<1); //Reset PWM timer counter & prescale counter : timer control register |
ConfigArray | 1:a8b0806fba3f | 28 | LPC_PWM1->TCR = (1<<0) | (1<<3); //Enable counters and enter PWM Mode, **PWM Generation goes active now** |
ConfigArray | 1:a8b0806fba3f | 29 | NVIC_EnableIRQ(PWM1_IRQn); |
ConfigArray | 1:a8b0806fba3f | 30 | |
ConfigArray | 1:a8b0806fba3f | 31 | } |
ConfigArray | 1:a8b0806fba3f | 32 | |
ConfigArray | 1:a8b0806fba3f | 33 | |
ConfigArray | 1:a8b0806fba3f | 34 | |
ConfigArray | 1:a8b0806fba3f | 35 | |
ConfigArray | 1:a8b0806fba3f | 36 | |
ConfigArray | 1:a8b0806fba3f | 37 | |
ConfigArray | 1:a8b0806fba3f | 38 | void EnablePWM(unsigned char PWMChannel) |
ConfigArray | 1:a8b0806fba3f | 39 | { |
ConfigArray | 1:a8b0806fba3f | 40 | switch(PWMChannel) |
ConfigArray | 1:a8b0806fba3f | 41 | { |
ConfigArray | 1:a8b0806fba3f | 42 | case 1: LPC_PWM1->PCR |= (1<<9); break; //pin 20 |
ConfigArray | 1:a8b0806fba3f | 43 | case 2: LPC_PWM1->PCR |= (1<<10); break; |
ConfigArray | 1:a8b0806fba3f | 44 | case 3: LPC_PWM1->PCR |= (1<<11); break; |
ConfigArray | 1:a8b0806fba3f | 45 | |
ConfigArray | 1:a8b0806fba3f | 46 | case 4: LPC_PWM1->PCR |= (1<<12); break; |
ConfigArray | 1:a8b0806fba3f | 47 | case 5: LPC_PWM1->PCR |= (1<<13); break; |
ConfigArray | 1:a8b0806fba3f | 48 | case 6: LPC_PWM1->PCR |= (1<<14); break; //pin 26 |
ConfigArray | 1:a8b0806fba3f | 49 | } |
ConfigArray | 1:a8b0806fba3f | 50 | } |
ConfigArray | 1:a8b0806fba3f | 51 | |
ConfigArray | 1:a8b0806fba3f | 52 | |
ConfigArray | 1:a8b0806fba3f | 53 | |
ConfigArray | 1:a8b0806fba3f | 54 | void DisablePWM(unsigned char PWMChannel) |
ConfigArray | 1:a8b0806fba3f | 55 | { |
ConfigArray | 1:a8b0806fba3f | 56 | switch(PWMChannel) |
ConfigArray | 1:a8b0806fba3f | 57 | { |
ConfigArray | 1:a8b0806fba3f | 58 | case 1: |
ConfigArray | 1:a8b0806fba3f | 59 | LPC_PWM1->MR1 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 60 | LPC_PWM1->LER = (1<<1); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 61 | wait(0.002); //wait for LER to take affect |
ConfigArray | 1:a8b0806fba3f | 62 | LPC_PWM1->PCR &= 0xfdff; break; //disable the PWM channel - it stops low, PCR is pulse width control register- enables PWM channels |
ConfigArray | 1:a8b0806fba3f | 63 | |
ConfigArray | 1:a8b0806fba3f | 64 | case 2: |
ConfigArray | 1:a8b0806fba3f | 65 | LPC_PWM1->MR2 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 66 | LPC_PWM1->LER = (1<<2); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 67 | wait(0.002); |
ConfigArray | 1:a8b0806fba3f | 68 | LPC_PWM1->PCR &= 0xfbff; break; //bits 9,10,11 and 12 enable PWM 1,2,3,4. |
ConfigArray | 1:a8b0806fba3f | 69 | |
ConfigArray | 1:a8b0806fba3f | 70 | case 3: |
ConfigArray | 1:a8b0806fba3f | 71 | LPC_PWM1->MR3 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 72 | LPC_PWM1->LER = (1<<3); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 73 | wait(0.002); |
ConfigArray | 1:a8b0806fba3f | 74 | LPC_PWM1->PCR &= 0xf7ff; break; //clear all of these bits |
ConfigArray | 1:a8b0806fba3f | 75 | |
ConfigArray | 1:a8b0806fba3f | 76 | case 4: |
ConfigArray | 1:a8b0806fba3f | 77 | LPC_PWM1->MR4 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 78 | LPC_PWM1->LER = (1<<4); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 79 | wait(0.002); |
ConfigArray | 1:a8b0806fba3f | 80 | LPC_PWM1->PCR &= 0xefff; break; |
ConfigArray | 1:a8b0806fba3f | 81 | |
ConfigArray | 1:a8b0806fba3f | 82 | case 5: |
ConfigArray | 1:a8b0806fba3f | 83 | LPC_PWM1->MR5 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 84 | LPC_PWM1->LER = (1<<5); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 85 | wait(0.002); |
ConfigArray | 1:a8b0806fba3f | 86 | LPC_PWM1->PCR &= 0xDfff; break; |
ConfigArray | 1:a8b0806fba3f | 87 | |
ConfigArray | 1:a8b0806fba3f | 88 | case 6: |
ConfigArray | 1:a8b0806fba3f | 89 | LPC_PWM1->MR6 = 0; //set duty to zero - ensures safe turn off |
ConfigArray | 1:a8b0806fba3f | 90 | LPC_PWM1->LER = (1<<6); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 91 | wait(0.002); |
ConfigArray | 1:a8b0806fba3f | 92 | LPC_PWM1->PCR &= 0xBfff; break; |
ConfigArray | 1:a8b0806fba3f | 93 | } |
ConfigArray | 1:a8b0806fba3f | 94 | } |
ConfigArray | 1:a8b0806fba3f | 95 | |
ConfigArray | 1:a8b0806fba3f | 96 | |
ConfigArray | 1:a8b0806fba3f | 97 | |
ConfigArray | 1:a8b0806fba3f | 98 | void SetPWM(int a,int b,int c,int d,int e,int f) |
ConfigArray | 1:a8b0806fba3f | 99 | { |
ConfigArray | 1:a8b0806fba3f | 100 | LPC_PWM1->MR1 = a; //1us - default pulse duration i.e. width. changed by analgo in |
ConfigArray | 1:a8b0806fba3f | 101 | LPC_PWM1->MR2 = b; //match comapre registers for the 4 PWM channels |
ConfigArray | 1:a8b0806fba3f | 102 | LPC_PWM1->MR3 = c; |
ConfigArray | 1:a8b0806fba3f | 103 | LPC_PWM1->MR4 = d; |
ConfigArray | 1:a8b0806fba3f | 104 | LPC_PWM1->MR5 = e; |
ConfigArray | 1:a8b0806fba3f | 105 | LPC_PWM1->MR6 = f; |
ConfigArray | 1:a8b0806fba3f | 106 | LPC_PWM1->LER = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6); //update values in MR0 and MR1: latch enabe register |
ConfigArray | 1:a8b0806fba3f | 107 | } |
ConfigArray | 1:a8b0806fba3f | 108 | |
ConfigArray | 1:a8b0806fba3f | 109 | |
ConfigArray | 1:a8b0806fba3f | 110 | |
ConfigArray | 1:a8b0806fba3f | 111 | |
ConfigArray | 1:a8b0806fba3f | 112 | |
ConfigArray | 1:a8b0806fba3f | 113 | |
ConfigArray | 1:a8b0806fba3f | 114 |