查看: 7203|回复: 10

[原创] 【LPC11U68】9. 定时器/计数器—PWM

[复制链接]
  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
    发表于 2018-11-7 18:48:28 | 显示全部楼层 |阅读模式
    本帖最后由 stm1024 于 2021-9-11 11:59 编辑

    PWM这个没啥好多说的,在MCU的视角看,其实就是定时器+IO翻转,连51这种入门级的单片机都可以实现,当然这种方式就像软件模拟I2C或者SPI协议一样,自己还要操心时序,而真正的硬件级的PWM,只需要你配置好之后,就可以不用再去查询或者去中断实现IO翻转,能够自动输出PWM,能节省CPU的资源。LPC11U68中使用了EMR和PWMC实现PWM波。
    1. #include "cmsis.h"
    2. #include "core_cm0plus.h"
    3. #include "board.h"

    4. int main()
    5. {
    6.     //for led
    7.     LPC_SYSCTL->SYSAHBCLKCTRL|=1<<6;//GPIO clock
    8.     LPC_GPIO->DIR[2]|= 1<<17;//P2.17 output
    9.    
    10.     //config gpio for pwm,see user manual
    11.     LPC_GPIO->DIR[0]|= 1<<8;
    12.     LPC_IOCON->PIO0[8]=IOCON_FUNC2;//P0.8 as CT16B0_MAT0
    13.    
    14.     //for CT16B0
    15.     LPC_SYSCTL->SYSAHBCLKCTRL|=1<<7;//CT16B0 clock
    16.     LPC_TIMER16_0->IR=1;//reset channel 0 interrupt
    17.     LPC_TIMER16_0->PR=1000-1;
    18.     LPC_TIMER16_0->MR[0]=12000;  
    19.     LPC_TIMER16_0->MR[1]=48000;

    20.     LPC_TIMER16_0->MCR=17;//allow MR0 generate interrupt,MR1 will clear TC
    21.     LPC_TIMER16_0->TCR=1;//enable TC & PC
    22.    
    23.     //PWM
    24.     LPC_TIMER16_0->EMR=(3<<4);//toggle
    25.     LPC_TIMER16_0->PWMC=1;//enable pwm

    26.     //interrupt enable
    27.         NVIC_ClearPendingIRQ(TIMER_16_0_IRQn);
    28.         NVIC_EnableIRQ(TIMER_16_0_IRQn);
    29.     while(1)
    30.     {
    31.     }
    32. }

    33. void TIMER16_0_IRQHandler(void)
    34. {
    35.     if(1==LPC_TIMER16_0->IR)//Match Pending for ch0
    36.     {
    37.         LPC_TIMER16_0->IR=1;//reset channel 0 interrupt
    38.         LPC_GPIO->NOT[2]=(1<<17);//toggle red led
    39.         }
    40. }
    复制代码
    同样,和模拟实现可以选择任何针脚的方式不同,PWM需要接特定的针脚:
    2018-11-07_184238.png


    通过MR1和PR确定PWM的周期,其中MR1配置为让TC清零,这样周期就是SYSCLK/(1000*48000)=1Hz,刚好是1秒1次。通过MR0确定占空比,由于TC<EM<MR0的时候输出低电平,MR0<EM<MR1时输出高电平,因此,这个占空比是(MR1-MR0)/MR1=(48000-12000)/48000=75%。

    编译,下载,上逻辑分析仪:
    523406780871597274.jpg

    通道1接P2.17,也就是红色LED的针脚,应该是1秒翻转1次,通道2接P0.8,就是PWM输出端口。抓波:
    2018-11-07_182658.png

    周期、占空比都符合预期。注意看LED针脚的电平翻转,都是在PWM波的上升沿,因为这个位置就是MR0的值。

    PS:感觉这个版块好冷清啊~
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-11-9 13:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    1

    主题

    42

    帖子

    0

    注册会员

    Rank: 2

    积分
    52
    最后登录
    2018-11-9
    发表于 2018-11-7 21:51:49 | 显示全部楼层
    厉害 已经开始跑time了
    加油骚年
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
     楼主| 发表于 2018-11-8 09:25:30 | 显示全部楼层
    charliewong 发表于 2018-11-7 21:51
    厉害 已经开始跑time了

    过奖, 争取每天都学一点,多了解一下NXP家这个系列的芯片
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-11 19:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    3

    主题

    27

    帖子

    1

    注册会员

    Rank: 2

    积分
    190
    最后登录
    2019-1-25
    发表于 2018-11-9 11:16:24 | 显示全部楼层
    多些点啊,找不到学习资料,就看你的了
    做人,最重要的就是开心啦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
     楼主| 发表于 2018-11-9 11:34:23 | 显示全部楼层
    tthmy 发表于 2018-11-9 11:16
    多些点啊,找不到学习资料,就看你的了

    lpcopen,那个还是很值得学习的,然后多看看user manual
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2207
    最后登录
    2025-8-11
    发表于 2018-11-10 19:57:44 | 显示全部楼层
    学习一下,全是寄存器配置的
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
     楼主| 发表于 2018-11-12 08:15:25 | 显示全部楼层
    mzy2364 发表于 2018-11-10 19:57
    学习一下,全是寄存器配置的

    多看看user manual,你会发现寄存器操作虽然读起来慢,但是更容易理解。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2207
    最后登录
    2025-8-11
    发表于 2018-11-12 08:34:41 | 显示全部楼层
    stm1024 发表于 2018-11-12 08:15
    多看看user manual,你会发现寄存器操作虽然读起来慢,但是更容易理解。

    以后要慢慢学习寄存器操作
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2207
    最后登录
    2025-8-11
    发表于 2018-11-12 10:06:39 | 显示全部楼层
    楼主,我的资料里面怎么没找到寄存器,我是看的LPC11U6X.pdf
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 10:39
  • 签到天数: 1873 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112711
    最后登录
    2025-8-30
     楼主| 发表于 2018-11-12 10:25:21 | 显示全部楼层
    mzy2364 发表于 2018-11-12 10:06
    楼主,我的资料里面怎么没找到寄存器,我是看的LPC11U6X.pdf

    是User manual,不是datasheet。
    文档编号为:UM10732
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-31 06:57 , Processed in 0.098149 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表