PWM硬件原理:定时器、计数器与输出模式

各位同学,今天我们正式进入PWM的核心硬件原理。说实话,很多做嵌入式开发的朋友,写PWM驱动时只会在数据手册里翻寄存器地址,却搞不清定时器内部到底怎么工作的。我个人觉得,搞懂硬件原理,写驱动才有底气。

PWM定时器工作原理

PWM的本质,就是利用定时器产生一个周期性的方波,并且能调节高电平的宽度。你想想看,一个定时器就像一个不停转动的钟表,每到一定时间就触发一次事件。

典型的PWM定时器包含以下几个核心模块:

  • 时钟源:提供基础计数脉冲,通常是系统时钟经过分频后的信号
  • 计数器:从0开始递增或递减,到达设定值后复位或翻转
  • 比较器:实时比较计数器当前值和预设的比较值
  • 输出控制:根据比较结果控制输出引脚的电平

我在项目中遇到过一个问题:某款MCU的PWM输出频率总是不对。查了半天,发现是时钟分频配置错了。嗯,这里要注意,定时器的时钟源往往有多级分频,每一级都要算清楚。

核心公式:

PWM频率 = 定时器时钟频率 / (预分频值 + 1) / (自动重装载值 + 1)

占空比 = 比较值 / (自动重装载值 + 1) × 100%

PWM计数器与比较器

计数器是PWM的心脏。它按照时钟节拍不断累加,就像一个永不停歇的跑步运动员。比较器则站在终点线旁边,时刻盯着运动员的位置。

我习惯把计数器的工作过程分成三个阶段:

  1. 计数阶段:计数器从0开始,每个时钟周期加1
  2. 比较阶段:比较器将当前计数值与预设的比较值做对比
  3. 复位/翻转阶段:计数值达到自动重装载值时,计数器复位到0

举个例子,假设自动重装载值设为99,比较值设为40:

  • 计数器从0跑到99,总共100个时钟周期
  • 当计数值小于40时,输出高电平
  • 当计数值大于等于40时,输出低电平
  • 计数值到99后,下一个时钟复位到0,重新开始

这样,一个周期内高电平占了40个时钟,低电平占了60个时钟,占空比就是40%。

避坑指南:

我曾经在调试电机驱动时,发现PWM占空比总是偏小。后来才意识到,比较器的比较逻辑有"大于等于"和"大于"两种模式,选错了模式,占空比就会差一个时钟周期。对于高频PWM,这一个周期的影响可不小。

PWM输出模式

PWM的输出模式主要有两种:边沿对齐模式和中心对齐模式。这两种模式在实际项目中有不同的应用场景。

边沿对齐模式

边沿对齐模式是最常用的PWM输出方式。计数器从0递增到自动重装载值,然后立即复位到0。输出波形的上升沿或下降沿对齐在计数周期的起点。

特点:

  • 计数器只做递增计数
  • 输出波形不对称,上升沿和下降沿位置不同
  • 适合直流电机调速、LED调光等应用
  • 实现简单,占空比更新响应快

中心对齐模式

中心对齐模式则复杂一些。计数器先递增到自动重装载值,再递减回到0,形成一个三角波。输出波形的中心点对齐在计数值达到峰值的位置。

特点:

  • 计数器做递增-递减双向计数
  • 输出波形对称,上升沿和下降沿关于中心对称
  • 适合电机控制中的互补PWM输出
  • 谐波含量更低,EMI性能更好
对比项 边沿对齐模式 中心对齐模式
计数方式 单向递增 双向递增-递减
波形对称性 不对称 对称
PWM频率 时钟频率 / (ARR+1) 时钟频率 / (2 × ARR)
占空比更新 下一个周期立即生效 需等待计数方向切换
典型应用 LED调光、普通电机 伺服电机、三相逆变

重要提醒:

中心对齐模式下,占空比更新时机要特别注意。我曾经在伺服驱动项目中,因为占空比更新发生在计数递增阶段,导致输出波形出现毛刺。正确的做法是在计数方向切换时(即计数值达到峰值或谷值)更新比较值。

PWM输出模式对比图

下面这张图展示了两种模式的波形差异,我建议你仔细看看计数器的变化轨迹:

PWM输出模式对比 边沿对齐模式 计数值 0 ARR 比较值 输出 中心对齐模式 计数值 0 ARR 比较值 输出 边沿对齐:计数器单向递增,输出不对称 中心对齐:计数器双向计数,输出对称,谐波更少

实际项目中的选择建议

说了这么多理论,到底什么时候用哪种模式?我根据自己的项目经验,给你几个参考:

  • LED调光:用边沿对齐就够了,简单高效
  • 直流有刷电机:边沿对齐模式,注意死区时间设置
  • 伺服电机控制:必须用中心对齐模式,对称波形能减少转矩脉动
  • 三相逆变器:中心对齐模式,配合互补PWM输出

个人经验:

我做过一个无人机电调项目,刚开始用边沿对齐模式,电机在高转速时噪音很大。换成中心对齐模式后,噪音明显降低,效率也提升了3%左右。说白了,中心对齐模式虽然实现复杂一点,但在高性能应用中值得投入。

小结

这一章我们聊了PWM定时器的工作原理,重点理解了计数器和比较器的配合关系。两种输出模式各有优劣,边沿对齐简单直接,中心对齐性能更好。你想想看,搞懂了这些硬件细节,后面写驱动的时候,寄存器配置就变得顺理成章了。