LPC2138微控制器之PWM
PWM(Pulse width modulation)脉冲宽度调制技术广泛应用在从测量、通信到功率控制与变换的许多领域中,如步进电机控制、充电电流控制等。
LPC2138微控制器基于Timer模块实现PWM功能,PWM控制器可以配置为Timer模式,也可以配置为PWM模式。配置为PWM模式时,可以通过PWM引脚向外输出调制的电平信号。
PWM控制器拥有预分频计数和控制寄存器、时钟计数和控制寄存器、多达7个比较寄存器、4个外部引脚电平跳变捕获输入信号和捕获寄存器。
当PWM控制器工作在PWM模式时,它可以通过7个比较寄存器的不同组合和配置,输出最多6路单边沿PWM输出信号或者最多3路双边沿PWM输出信号,也可以是二者的组合。
2个PWM比较寄存器控制一个PWM单边沿输出信号,其中一个控制PWM时钟周期,另外一个控制边沿位置。PWM单边沿输出信号一个时钟周期内必须从高电平开始输出。
3个PWM比较寄存器控制一个PWM双边沿输出信号,其中一个控制PWM时钟周期,另外两个控制两个边沿位置。
PWM 1只能实现单边沿输出,PWM 2~6都可以实现双边沿输出,但是建议使用PWM2、4、6实现双边沿输出。
实例
PWM 2 4 6双边沿PWM信号。
需要注意的是:
1) PWMMR0控制PWM时钟周期,PWMMR1~6负责边沿跳变;
2) 往PWMMR寄存器中写入值实际上是写入一个shadow寄存器,必须使能PWMLER锁存寄存器,才能在下一个PWM时钟周期生效;
#include <lpc213x.h> #include "pwm.h" void pwm_init(void) { /* configure P0.7~9 as PWM output */ PINSEL0 &= ~0x000FC000; PINSEL0 |= 0x000A8000; /* PWMTC increment every 8 PCLK */ PWMPR = 0x07; /* reset on PWMMR2,4,6 */ PWMMCR = 0x00082082; /* PWM 2,4,6 double edge controlled, enable output */ PWMPCR = 0x5454;
/* PWM Clock Cycle Rate */ PWMMR0 = 0x100; /* PWM2 */ PWMMR1 = 0x24; PWMMR2 = 0x81; /* PWM4 */ PWMMR3 = 0x24; PWMMR4 = 0x81; /* PWM6 */ PWMMR5 = 0x24; PWMMR6 = 0x81; /* Latch PWMMR Values */ PWMLER = 0x7F; /* enable PWM */ PWMTCR = 0x02; PWMTCR = 0x09; }