本文将介绍 LPC804 的 PWM 使用。
- PWM 的生成
LPC804 的 PWM 是由 Ctimer 生成的,我们先了解生成 PWM 需要的主要参数:PWM 周期和占空比。Ctimer 有 4 个 match register 用于生成 PWM ,一个用于使定时器达到 PWM 周期的时候复位,重新计数,另一个用于控制占空比,即用来翻转电平。所以 user manual 中会有下列一段描述,Ctimer 只能生成 3 路 PWM 。
再看一下 LPC804 的 PWM 属性,
- PWM 的开始都是以低电平开始的。
- 当计数器的值(TC 寄存器的值)与 MRx(x = 0,1,2,3) 寄存器的值相等的时候,电平会从低变为高,如果需要使 PWM 一直为低,即占空比为 0 ,只需要将 MRx 寄存器的值设置大于 PWM 周期的值。
- 如果 MRx 寄存器的值等于 PWM 周期的值,在下一个时钟脉冲会变为低电平,所以 PWM 会出现一个高电平脉冲。
- 如果 MRx 寄存器的值为 0 ,则会在一直为高电平,及占空比 100%。
- PWM 的切换
打开 SDK 工程中的 PWM 例程: SDK_2.6.0_LPC804\boards\lpcxpresso804\driver_examples\ctimer\simple_pwm
此时只是设置一次 PWM ,并未切换,作如下修改:
PWM 频率降低便于观察,测量 PWM 波形,可以看到不时会有较长的低电平出现
这在产品中可能会影响到其效果,那么该如何解决这个问题呢?在 Ctimer 章节可以看到有个寄存器 MSR
在新的 PWM 周期开始的时候 MRx 寄存器可以从 MSRx 寄存器 Reload 新的匹配值,这就可以确保保持原有的完整周期跑完之后再无缝切换为新的 PWM ,不过注意,还需在 MCR 寄存器中使能对应通道的 reload :
话不多说,将代码作如下修改:
观察波形图,此时左右滑动就不会有异常电平出现了。
参考资料:
- 《LPC80x User Manual》
用户手册包含了外设配置方法,由 NXP 官网提供下载,链接如下:
- LPC804 官方 SDK 包
SDK 包里包含了许多例程,由 NXP 官网提供下载,链接如下:
https://mcuxpresso.nxp.com/en/select
评论