第3章 PWM调制技术:从原理到实战

各位同学,咱们今天聊聊PWM调制。说实话,PWM这东西看着简单,但里面的门道真不少。我刚开始做电机控制那会儿,觉得不就是个方波嘛,有啥好研究的?结果第一个项目就栽了跟头——电机嗡嗡响,效率还低得可怜。后来才明白,PWM调制的选择,直接决定了你整个驱动系统的成败。

3.1 PWM基本原理

PWM,全称是脉冲宽度调制。说白了,就是通过调整脉冲的宽度,来模拟一个连续变化的电压。

你想想看,我们给电机供电,要么是VCC,要么是GND,没有中间状态。但电机需要的是平滑的电压啊,怎么办?

答案就是:让开关管快速地在导通和关断之间切换。只要切换频率够快,电机的电感就会把这种脉冲信号平滑成连续的电流。

这里有个核心公式:

占空比 = Ton / T × 100%

其中:
Ton = 导通时间
T   = PWM周期

占空比50%,等效电压就是VCC的一半。占空比75%,等效电压就是VCC的75%。就这么简单。

关键参数:

  • PWM频率:一般无刷电机用10kHz-20kHz。低于人耳听觉范围会有噪音,高于20kHz开关损耗会增大。
  • 分辨率:比如8位PWM,占空比可以调0-255级。我建议至少用12位以上,否则低速时电机抖动明显。

3.2 单极性调制与双极性调制

这两种调制方式,是很多新手容易搞混的地方。我当年也踩过坑,咱们一个一个说清楚。

3.2.1 单极性调制

单极性调制,就是在一个PWM周期内,输出电压只在一个方向上变化。要么从0到VCC,要么从0到-VCC。

举个例子:

  • 上桥臂用PWM控制,下桥臂常开或常关
  • 或者反过来,下桥臂PWM,上桥臂固定

优点:

  • 开关损耗小(只有一半的管子在高频切换)
  • 电流纹波小
  • 电磁干扰相对较低

缺点:

  • 动态响应稍慢
  • 在过零点附近可能出现电流断续

我的经验:单极性调制适合对效率要求高的场合,比如电动工具、风扇。我在做一款手持吸尘器时,用的就是单极性调制,效率做到了92%以上。

3.2.2 双极性调制

双极性调制就猛了。在一个PWM周期内,输出电压会在VCC和-VCC之间来回切换。也就是说,不管占空比多少,上下桥臂都在高频开关。

比如占空比50%,输出就是正负交替,平均值为0。占空比75%,正的时间多,负的时间少,平均值就是正的。

优点:

  • 动态响应快
  • 电流连续性好,低速性能好
  • 过零点平滑

缺点:

  • 开关损耗大(四个管子都在高频切换)
  • 电流纹波大
  • EMI问题更严重
对比项 单极性调制 双极性调制
开关损耗
电流纹波
动态响应
低速性能 一般
EMI
适用场景 高效率、低噪音 高动态、伺服控制

注意:双极性调制虽然性能好,但发热量很大。我曾经在一个伺服驱动器项目里用了双极性调制,结果MOS管温度直接飙到85度,不得不加了大散热片。所以,选型时一定要算好热预算。

3.3 互补PWM与死区时间设置

这部分是实战中的重中之重。很多电机驱动炸管,都是死区时间没设好。

3.3.1 什么是互补PWM

互补PWM,就是同一桥臂的上下两个管子,一个导通时另一个必须关断。它们的PWM信号是互补的——上管高电平时下管低电平,反过来也一样。

但问题来了:

任何开关管都有导通和关断延迟。上管还没完全关断,下管就导通了——这就是直通短路,瞬间烧管子。

3.3.2 死区时间

死区时间,就是为了避免直通,在两个管子切换时插入的一段「都关断」的时间。

比如:

  • 上管关断后,等100ns,再让下管导通
  • 反过来也一样

这段等待时间,就是死区时间。

// 伪代码示例:死区时间插入
void PWM_Update(uint32_t duty_cycle) {
    // 上管PWM
    TIM1->CCR1 = duty_cycle;
    // 下管PWM(互补输出)
    TIM1->CCR2 = TIM1->ARR - duty_cycle;
    // 死区时间由硬件自动插入
    // 设置死区时间为 100ns
    TIM1->BDTR = 0x0A;  // 具体值取决于时钟频率
}

死区时间设置原则:

  • 不能太小:小于开关管的关断延迟,就会直通
  • 不能太大:死区时间内没有电流流过,会导致波形失真、效率下降
  • 一般推荐:取开关管关断延迟的1.5-2倍

3.3.3 实际项目中的死区设置

我曾经在一个项目中,用了IRF540N这种老管子,关断延迟大概80ns。我设了150ns的死区,结果还是炸管了。

查了半天才发现,问题出在PCB布局上——走线太长,寄生电感导致关断时间变长了。后来我把死区调到300ns,才稳定下来。

所以,死区时间不能光看datasheet,还要考虑实际电路板的寄生参数。

我的建议:

  1. 先按datasheet的关断延迟×2设置死区
  2. 用示波器看上下管的栅极波形,确保没有交叠
  3. 逐步减小死区,直到波形开始出现交叠,再回退20%
  4. 留出安全余量,批量生产时器件参数会有离散性

3.4 总结与避坑指南

好了,咱们把PWM调制技术捋一遍:

  • PWM本质:用开关信号模拟连续电压
  • 单极性:效率高、纹波小,适合普通应用
  • 双极性:响应快、低速好,适合伺服控制
  • 互补PWM:必须加死区,否则炸管
  • 死区设置:不能只看datasheet,要实测

避坑指南:

我曾经犯过一个低级错误——在代码里手动插入了死区时间,结果发现MCU的定时器硬件本身就支持死区插入。手动插入不仅浪费CPU资源,还容易出bug。所以,能用硬件就别用软件,这是嵌入式开发的铁律。

下一章咱们聊电流采样与检测技术,这是FOC控制的基础。到时候我会分享一个我在电流采样上踩过的坑——采样电阻选型不当,导致整个系统震荡。嗯,到时候细说。