Skip to content
进阶#定时器#PWM#占空比#死区#正交编码#电机

定时器与 PWM 原理 Timer & PWM ​

1. 设计动机 ​

<>

需要"可调能量"的地方——调 LED 亮度、控电机转速、给开关电源做控制——几乎都用 PWM(Pulse Width Modulation,脉冲宽度调制):一串固定频率的方波,用改变高电平占空比的方式等效出平均电压,比 DAC 省成本、效率高。

定时器是产生 PWM 的硬件引擎。硬件工程师要懂的是:PWM 频率由哪些寄存器决定、占空比怎么算、驱动电机时为什么要加续流二极管和死区。这些都不是软件细节,而是直接关系到管子会不会烧、电机会不会抖。

2. 原理图 ​

定时器内核是一个向上计数器 CNT,每个经预分频 PSC 后的时钟加 1,数到 ARR(自动重装载值)溢出归零。CNT 与 CCR(比较寄存器)比较:CNT<CCR 输出高、CNT≥CCR 输出低,就得到固定周期、占空比可调的 PWM。

定时器计数与 PWM 生成:时钟经预分频驱动向上计数器,与 ARR/CCR 比较后输出 PWM
定时器计数与 PWM 生成:时钟经预分频驱动向上计数器,与 ARR/CCR 比较后输出 PWM

3. 静态分析(DC) ​

PWM 的直流等效就是平均电压:

Vavg=D⋅VOH,D=CCRARR+1V_{avg}=D\cdot V_{OH},\quad D=\frac{CCR}{ARR+1}

  • 占空比 D=CCR/(ARR+1)。ARR=999、CCR=300 时 D=30%。
  • 直流看:PWM 经电感/电容平滑后,输出约 D×电源电压;这就是开关电源和电机调速的原理。

4. 动态分析(AC / 瞬态) ​

PWM 频率由时钟、预分频、周期共同决定:

fPWM=fCK(PSC+1)(ARR+1)f_{PWM}=\frac{f_{CK}}{(PSC+1)(ARR+1)}

  • 例:fCK=72MHzf_{CK}=72\text{MHz}、PSC=0、ARR=999 → fPWM=72kHzf_{PWM}=72\text{kHz}。
  • 频率选择:太高开关损耗大、EMI 重;太低电机有可闻噪音、LED 有频闪。电机常用 16~25kHz,LED 调光 >20kHz 避免频闪。

5. 环路分析 ​

<>

PWM 的等效电压分辨率 = log2(ARR+1)。ARR=999 约 10bit;但 fPWM=fCK/ARRf_{PWM}=f_{CK}/ARR,要更高分辨率就得拉大 ARR、降低频率。高频与高分辨率不可兼得——这是 PWM 设计的核心折中。电机控制常取 16kHz + 10~12bit 分辨率。

6. 元件取值与工程权衡 ​

  • PWM 频率:电机 16~25kHz(避开可闻噪音);LED >20kHz;开关电源按磁性元件设计。
  • 栅极电阻:PWM 经 10~100Ω 串到 MOSFET 栅极,抑制振铃。
  • 续流二极管:感性负载(电机/继电器)必须并续流二极管,否则关断瞬间反电动势打穿 MOSFET。
  • 死区:半桥上下管互补时必须插死区,防直通。

7. 完整设计示例 ​

<>
  1. 需求:MCU 时钟 72MHz,PWM 25kHz、占空比 0~100%。
  2. 算 ARR:ARR=72MHz/25kHz−1=2879ARR=72\text{MHz}/25\text{kHz}-1=2879,PSC=0。
  3. 分辨率:约 11.5bit。
  4. 调光:CCR=1440 得 50% 占空。
  5. 驱动:LED 串限流电阻(见 GPIO)。
  6. 验算:f=72M/2880=25kHzf=72\text{M}/2880=25\text{kHz},>20kHz 无频闪。

8. 仿真与实验 ​

  • 示波器量 PWM 脚,核对频率与占空比是否等于 fCK/((PSC+1)(ARR+1))f_{CK}/((PSC+1)(ARR+1))。
  • 改 CCR,观察平均亮度/转速随占空比变化。
  • 电机不带续流二极管关断,观察漏极尖峰电压。

扩展与变种电路 ​

扩展1:PWM 经 MOSFET 低边驱动电机 Low-Side Drive ​

定位:PWM 直接驱动不了电机电流,要靠 MOSFET 做功率开关。

PWM 经栅极电阻驱动 N-MOSFET 低边开关,电机接 VM,反并联续流二极管
PWM 经栅极电阻驱动 N-MOSFET 低边开关,电机接 VM,反并联续流二极管
<>
  • PWM 高 → MOSFET 通 → 电机两端加 VM,电流上升。
  • PWM 低 → MOSFET 关 → 电感电流不能突变,经续流二极管续流。
  • 平均电压 = D×VM,占空比调速。栅极电阻 10~100Ω 抑制栅极振铃。

取值对比:

栅极电阻开关速度EMI/振铃
10Ω快振铃大
47Ω中折中
100Ω慢损耗大
<>
  • 现象:MOSFET 反复击穿。
  • 原因:关断瞬间电机电感反电动势产生高压尖峰,超过 MOSFET 耐压。
  • 解决:电机两端反并联快恢复续流二极管(或用带体二极管/内置的 MOSFET 模块)。

扩展2:互补 PWM 与死区 Complementary PWM ​

定位:半桥/全桥驱动,上下管交替导通。

半桥上下 MOSFET 互补 PWM,插入死区防止上下管同时导通直通
半桥上下 MOSFET 互补 PWM,插入死区防止上下管同时导通直通
<>
  • 上管 PWMH、下管 PWML 反相。若两管同时导通,VM 经两管直通到地,瞬间大电流烧管。
  • 死区(Dead Time):先关一个、延时几十~几百 ns 再开另一个,保证任一时刻只有一管导通。
  • 现代高级定时器自带死区生成硬件,无需软件插入。

取值对比:

死区风险说明
0直通烧管不可接受
100~500ns折中按开关速度取
过大波形畸变低速时失真明显
<>
  • 现象:管子发烫、电源电流大。
  • 原因:MOSFET 关断拖尾,死区内未真正关断就开另一只。
  • 解决:加大死区或选开关更快的管子;用带死区的互补输出定时器。

扩展3:正交编码器接口 Quadrature Encoder ​

定位:测位置/转速,免 CPU 扫描。

正交编码器 A/B 两相接到定时器编码器模式,硬件自动加减计数
正交编码器 A/B 两相接到定时器编码器模式,硬件自动加减计数
<>
  • 编码器输出 A、B 两相,相位差 90°。正转时 A 超前 B,反转时相反。
  • 定时器编码器模式在 A 沿根据 B 电平决定加/减计数,硬件自动完成,CPU 只定期读 CNT。
  • 无需软件消抖,倍频(×2/×4)提高分辨率。

取值对比:

方案CPU 占用精度
外部中断逐沿高一般
定时器编码器模式极低高(可倍频)
<>
  • 现象:计数乱跳。
  • 原因:长线噪声、接触抖动被当成沿。
  • 解决:A/B 加合适上拉、短线缆,必要时 RC 滤波。

9. 常见坑与故障现象 ​

<>
  • 频率算错:忘了 PSC 或 ARR+1,PWM 频率差几倍。按 f=fCK/((PSC+1)(ARR+1))f=f_{CK}/((PSC+1)(ARR+1)) 核对。
  • 感性负载无续流:击穿开关管。加续流二极管。
  • 半桥直通:无死区或死区太小烧管。用互补输出+死区。
  • 频率太低可闻噪音/频闪:电机嗡嗡响、LED 闪。提到 16~25kHz 以上。

10. 自测题 ​

时钟 72MHz、PSC=0、ARR=999,PWM 频率和 30% 占空比的 CCR 是多少?

f=72M/(1×1000)=72kHzf=72\text{M}/(1\times1000)=72\text{kHz};30% 占空 → CCR=0.3×1000=300。

为什么驱动电机这种感性负载要并联续流二极管?

关断时电感电流不能突变,会产生高压尖峰试图维持电流;续流二极管给电流提供回路,把尖峰钳位,保护开关管。

半桥上下管为什么要加死区?

防止上下管同时导通造成 VM 到地的低阻直通大电流。死区保证先关后开,任一时刻只有一管导通。

11. 参考资料 ​

  • STM32 定时器/高级定时器应用笔记
  • TI 电机驱动与 PWM 设计指南
  • 功率电子半桥死区设计资料