【LPC800 系列】 PWM 的配置及使用

本文将介绍 LPC804 的 PWM 使用。

  • PWM 的生成

LPC804 的 PWM 是由 Ctimer 生成的,我们先了解生成 PWM 需要的主要参数:PWM 周期和占空比。Ctimer 有 4 个 match register 用于生成 PWM ,一个用于使定时器达到 PWM 周期的时候复位,重新计数,另一个用于控制占空比,即用来翻转电平。所以 user manual 中会有下列一段描述,Ctimer 只能生成 3 路 PWM 。

 

 

再看一下 LPC804 的 PWM 属性,

  1. PWM 的开始都是以低电平开始的。
  2. 当计数器的值(TC 寄存器的值)与 MRx(x = 0,1,2,3) 寄存器的值相等的时候,电平会从低变为高,如果需要使 PWM 一直为低,即占空比为 0 ,只需要将 MRx 寄存器的值设置大于 PWM 周期的值。
  3. 如果 MRx 寄存器的值等于 PWM 周期的值,在下一个时钟脉冲会变为低电平,所以 PWM 会出现一个高电平脉冲。
  4. 如果 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 :

 

 

话不多说,将代码作如下修改:

 

 

观察波形图,此时左右滑动就不会有异常电平出现了。

 

 

 

参考资料:

  1. 《LPC80x User Manual》

用户手册包含了外设配置方法,由 NXP 官网提供下载,链接如下:

https://www.nxp.com.cn/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc800-cortex-m0-plus-/low-cost-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:LPC80X?fpsp=1&tab=Documentation_Tab

  1. LPC804 官方 SDK 包

SDK 包里包含了许多例程,由 NXP 官网提供下载,链接如下:

https://mcuxpresso.nxp.com/en/select

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论