Edit online

PWM 输出模式

Read time: 1 minute(s)

PWM 产生

通过设置寄存器字段 PWM_MODE = 0x0,使 PWM 进入 PWM 输出模式。在该模式下,通过周期寄存器 PWM_PRD 和比较寄存器 PWM_CMP,可以调节 PWM 的频率以及占空比。

PWM 的生成方式,固定为在计数器 PWM_CNT = 0 的时刻,PWM 的输出为高电平。在 PWM_CNT = PWM_CMP 的时刻,PWM 的输出为低电平。

PWM 的输出频率和占空比计算方式如下:
  • PWM_FRE = PWM_CNT_CLK / PWM_PRD

  • PWM_DUTY = PWM_CMP / PWM_PRD

  • PWM_CNT_CLK = SYS_CLK / DIV

下图以 PWM_PRD = 0x7,PWM_CMP = 0x4 的 PWM 输出为例,占空比为 4/7:



动态更新

PWM 的周期值 PWM_PRD 和比较值 PWM_CMP,支持动态更新,更新的方式
  • 立即更新:修改 PWM_PRD 和 PWM_CMP 寄存器后,PWM 立即生效。
  • 影子更新:修改 PWM_PRD 和 PWM_CMP 寄存器后,在下一个周期进行 PWM 的更新,即下一个周期的 PWM_CNT_Z 对应的时刻进行更新。

PWM_CMP 立即更新的举例:

PWM_CMP 从 CMP0 更新到 CMP1,其中 CMP1 小于 CMP0,也小于当前的计数器数值。



PWM_CMP 影子更新的举例

PWM_CMP 从 CMP0 更新到 CMP1,其中 CMP1 小于 CMP0,也小于当前的计数器数值。



PWM_PRD 立即更新的举例:

PWM_PRD 从 PRD0 更新到 PRD1,其中 PRD1 小于 PRD0。



PWM_PRD 影子更新的举例

PWM_PRD 从 PRD0 更新到 PRD1,其中 PRD1 是小于 PRD0。



中断信号

PWM 在 PWM 模式下,支持中断的产生,中断信号如下:

  • PWM_CNT_Z:在计数器 PWM_CNT = 0 的时刻,对应产生的标记信号。
  • PWM_CNT_CMP:在计数器 PWM_CNT = PWM_CMP 的时刻,对应产生的标记信号。
  • PWM_CNT_PRD:在计数器 PWM_CNT =(PWM_CNT_PRD - 1)的时刻,对应产生的标记信号。