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; }
原文地址:https://www.cnblogs.com/justin-y-lin/p/12392206.html