3. PWM 调制原理:让电机听懂数字信号

做电机控制这些年,我见过不少新手上来就调 PID,结果电机要么嗡嗡响不动,要么直接烧管子。其实很多问题都出在 PWM 调制上。说白了,PWM 就是数字世界和模拟世界的翻译官——单片机只会输出 0 和 1,但电机需要连续变化的电压。怎么翻译?靠的就是占空比。

3.1 PWM 基本概念

PWM,全称 Pulse Width Modulation,脉冲宽度调制。名字听着唬人,本质就一句话:固定频率,改变高电平的宽度。

想象一个方波信号:

  • 周期 T:一个完整脉冲的时间,单位秒
  • 频率 f:1/T,单位 Hz
  • 脉宽 t_on:高电平持续的时间
  • 占空比 D:t_on / T × 100%

核心公式:

平均电压 V_avg = D × V_supply

占空比 50%,12V 供电 → 平均电压 6V

我刚开始做 BLDC 驱动时,总以为 PWM 频率越高越好。后来发现,频率太高,MOSFET 开关损耗直线上升,散热片烫得能煎鸡蛋。频率太低呢?电机噪音大,电流纹波也大。一般直流有刷电机用 10-20kHz,无刷电机用 16-20kHz,刚好避开人耳敏感区。

3.2 占空比与平均电压

为什么改变占空比就能调电压?电机是感性负载,电流不能突变。PWM 高电平时电流上升,低电平时电流通过续流二极管继续流。只要 PWM 频率远高于电机电气时间常数,电流就基本平滑,平均电压就等于占空比乘以电源电压。

举个例子:

占空比 12V 系统平均电压 24V 系统平均电压 电机转速(近似)
0% 0V 0V 停止
25% 3V 6V 低速
50% 6V 12V 中速
75% 9V 18V 高速
100% 12V 24V 全速

实战经验:占空比不要从 0% 直接跳到 100%。电机启动电流很大,我吃过这个亏——一次测试中直接满占空比起动,电源过流保护跳了。建议软启动,几百毫秒内逐步增加占空比。

3.3 H 桥驱动电路

要控制电机正反转,一个开关管不够,得用 H 桥。四个开关管(MOSFET 或 IGBT)摆成 H 形,电机在中间横杠上。

H 桥的四种工作状态:

  • 正转:Q1 和 Q4 导通,电流从左到右
  • 反转:Q2 和 Q3 导通,电流从右到左
  • 刹车(能耗制动):Q1 和 Q3 导通,或 Q2 和 Q4 导通,电机短路
  • 滑行(续流):所有开关管关断,电流通过体二极管续流

⚠️ 致命陷阱:绝对不能让 Q1 和 Q2 同时导通,也不能让 Q3 和 Q4 同时导通。这叫「直通短路」,电流瞬间大到能炸管子、烧 PCB 走线。我见过一块板子直通后 MOSFET 直接炸飞,连焊盘都掀了。

下面这张图是 H 桥驱动电路的核心结构:

H 桥驱动电路结构图 H 桥驱动电路结构 VCC (12V/24V) Q1 Q2 Q3 Q4 M 直流电机 GND 电流方向→ 正转:Q1+Q4 导通,电流 VCC → Q1 → 电机 → Q4 → GND 反转:Q2+Q3 导通,电流 VCC → Q2 → 电机 → Q3 → GND

3.4 单极性调制 vs 双极性调制

有了 H 桥,怎么给 PWM 信号?两种主流方式。

单极性调制:

  • 正转时:Q1 给 PWM,Q4 常开,Q2/Q3 关断
  • 反转时:Q2 给 PWM,Q3 常开,Q1/Q4 关断
  • 特点:每个周期只有一个管子高频开关,损耗小
  • 电流纹波:较小

双极性调制:

  • 正转时:Q1/Q4 同时 PWM,Q2/Q3 互补 PWM
  • 反转时:Q2/Q3 同时 PWM,Q1/Q4 互补 PWM
  • 特点:四个管子都在高频开关,损耗大
  • 电流纹波:较大,但零位附近线性度好
对比项 单极性调制 双极性调制
开关损耗 低(2 管高频) 高(4 管高频)
电流纹波 小 大
零位线性度 有死区非线性 好
EMI 干扰 较小 较大
适用场景 大多数直流电机 伺服、高精度位置控制

我的选择习惯:做风机、水泵这类应用,我无脑用单极性,效率高发热小。做位置伺服,尤其需要零位附近微调时,双极性的线性度优势就体现出来了。不过代价是 MOSFET 温度会高 10-15°C,散热得跟上。

3.5 死区时间设置

回到刚才说的直通问题。即使软件上保证 Q1 关断后才开 Q2,实际中 MOSFET 关断需要时间。如果 Q1 还没完全关断,Q2 就导通了,瞬间短路。

死区时间就是在上管关断和下管导通之间插入的一段「空白期」,让两个管子都关断一小段时间。

死区时间怎么设?

  • 看 MOSFET 数据手册:关断延迟时间 t_off + 下降时间 t_f
  • 留余量:一般取计算值的 1.5-2 倍
  • 常见值:500ns - 2μs,取决于 MOSFET 和驱动芯片

⚠️ 我曾经踩过的坑:有一款 MOSFET 标称关断时间 80ns,我设了 200ns 死区,觉得绰绰有余。结果批量生产时,一批管子批次差异导致关断时间到了 150ns,200ns 死区不够用,连续烧了 3 块板子。后来我统一设到 500ns,再也没出过问题。记住:死区宁大勿小,大一点只是效率略降,小了就是炸管。

死区时间对波形的影响:

  • 死区期间,电机电流通过体二极管续流
  • 输出电压会偏离理想值,产生「死区效应」
  • 死区效应在低速、轻载时最明显,会导致电流畸变

补偿方法:

  • 软件补偿:根据电流方向调整占空比,抵消死区影响
  • 硬件补偿:用更快的驱动芯片,减小死区需求
  • 我常用的方法:低速时用电流闭环补偿,高速时死区影响小,直接忽略

下面这张图展示了 PWM 信号加上死区时间后的时序关系:

PWM 死区时间时序图 PWM 死区时间时序 上管 Q1 下管 Q2 死区 死区期间 两管均关断 t 0 T/2 T 死区时间 = 上管关断沿 到 下管开通沿 的时间间隔 典型值:500ns ~ 2μs,宁大勿小

最后说一句,PWM 调制是电机控制的基石。占空比算不对,H 桥搭不对,死区设不对,后面三环调得再好也是白搭。我见过太多人花几周调 PID,结果问题出在 PWM 频率太低导致电流纹波太大。先把这章吃透,后面的事就顺了。