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 桥驱动电路的核心结构:
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 调制是电机控制的基石。占空比算不对,H 桥搭不对,死区设不对,后面三环调得再好也是白搭。我见过太多人花几周调 PID,结果问题出在 PWM 频率太低导致电流纹波太大。先把这章吃透,后面的事就顺了。