• 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; }
  • 相关阅读:
    2018.08.02
    加油。
    2018.07.08
    2018.06.22
    LeetCode #169. Majority Element 数组 摩尔投票法
    LeetCode #119 Pascal's Triangle II 数组 滚动数组
    LeetCode #845 Longest Mountain in Array 数组 线性DP
    LeetCode #41 First Missing Positive 数组
    LeetCode #384 Shuffle an Array 数组 洗牌算法
    LeetCode #189 Rotate Array 数组 双变量 双指针
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/12392206.html
Copyright © 2020-2023  润新知