zoukankan      html  css  js  c++  java
  • 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; }
  • 相关阅读:
    [20200316]dmesg与时间戳2.txt
    [20200312]不要设置net.ipv4.tcp_tw_recycle=1.txt
    [20200223]关于latch and mutext的优化.txt
    [20200211]使用DBMS_SHARED_POOL.MARKHOT与sql_id的计算.txt
    [20200129]子光标不共享BIND_EQUIV_FAILURE.txt
    [20200103]GUID转换GUID_BASE64.txt
    [20191220]关于共享内存段相关问题.txt
    [20191218]降序索引疑问4.txt
    git工具-系列目录
    git工具-git基础
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/12392206.html
Copyright © 2011-2022 走看看