(ESL12) Pulse Width Modulation
〽️

(ESL12) Pulse Width Modulation

#include <LPC17xx.H> #define SHADOW_COPY 0x000000FF void PWM_Init(void); void PWM1_IRQHandler(void); unsigned long int i; unsigned char flag; int main(void) { PWM_Init(); while (1) ; } void PWM_Init(void) { LPC_SC->PCONP = (1 << 6); // PWM1 is powered LPC_PINCON->PINSEL7 = 0x000C0000; // PWM1.2 is selected for the pin P3.25 LPC_PWM1->PR = 0x00000000; // Count frequency : Fpclk LPC_PWM1->PCR = 0x00000400; // select PWM2 single edge LPC_PWM1->MCR = 0x00000003; // Reset and interrupt on PWMMR0 LPC_PWM1->MR0 = 30000; // setup match register 0 count LPC_PWM1->MR2 = 0x00000100; // setup match register MR1 LPC_PWM1->LER = SHADOW_COPY; // enable shadow copy register LPC_PWM1->TCR = 0x00000002; // RESET COUNTER AND PRESCALER LPC_PWM1->TCR = 0x00000009; // enable PWM and counter NVIC_EnableIRQ(PWM1_IRQn); } void PWM1_IRQHandler(void) { LPC_PWM1->IR = 0xFF; // clear the interrupts if (flag == 0x00) { LPC_PWM1->MR2 += 100; LPC_PWM1->LER = SHADOW_COPY; if (LPC_PWM1->MR2 >= 27000) // Is Duty Cycle 90% ?? { flag = 0xFF; LPC_PWM1->LER = SHADOW_COPY; } } else if (flag == 0xFF) { LPC_PWM1->MR2 -= 100; LPC_PWM1->LER = SHADOW_COPY; if (LPC_PWM1->MR2 <= 0x300) // Is Duty Cycle 1% ?? { flag = 0x00; LPC_PWM1->LER = SHADOW_COPY; } } }