3. PWM 调制技术:从原理到实战
PWM 调制,说白了就是让电机转起来的“油门”。你给多大占空比,电机就跑多快。但这里面的门道,远不止一个方波信号那么简单。我做了十几年驱动,见过太多因为 PWM 没调好而烧管子、电机抖得像跳舞的案例。今天咱们就把 PWM 的基本原理、SPWM 和 SVPWM 的差异、还有那个让人头疼的死区时间,一次性讲透。
3.1 PWM 基本原理:你以为是方波,其实是能量
PWM 的全称是 Pulse Width Modulation,脉冲宽度调制。它的核心思想很简单:用固定频率的方波,通过改变高电平的宽度(也就是占空比),来调节平均电压。
举个例子,你有一个 24V 的电源,占空比 50%,那电机两端的平均电压就是 12V。占空比 75%,平均电压就是 18V。嗯,这里要注意,电机是个感性负载,电流不会像电压那样跳变,它会通过续流二极管平滑下来。所以实际加在电机上的电流波形,是连续的。
关键公式:
- 占空比 D = T_on / T_period
- 平均电压 V_avg = D × V_supply
- PWM 频率 f = 1 / T_period
频率怎么选?我个人习惯是:对于普通直流有刷电机,1kHz 到 20kHz 都行。低于 1kHz 你会听到明显的“滋滋”声,那是线圈在振动。高于 20kHz 人耳听不见,但开关损耗会上升。我一般取 10kHz 到 16kHz,既安静又高效。
我的经验: 有一次我在一个项目里用了 500Hz 的 PWM,结果电机低速时抖得像筛子。后来发现是频率太低,电流纹波太大,导致转矩脉动。换成 10kHz 后,问题立刻消失。所以,低频 PWM 只适合对噪音不敏感的大功率场合。
3.2 SPWM 与 SVPWM:正弦波 vs 空间矢量
SPWM(正弦脉宽调制)和 SVPWM(空间矢量脉宽调制)是交流电机驱动中最常用的两种调制方式。很多人觉得 SVPWM 比 SPWM 高级,其实不然。它们各有各的适用场景。
3.2.1 SPWM:简单可靠,但电压利用率低
SPWM 的原理是用一个高频三角波(载波)去和一个正弦波(调制波)比较。当正弦波高于三角波时,输出高电平;反之输出低电平。这样输出的 PWM 脉冲,其基波就是正弦波。
SPWM 的优点是实现简单,用模拟电路或者单片机定时器都能做。但它的缺点也很明显:电压利用率只有 78.5%。什么意思?就是你的直流母线电压是 300V,但通过 SPWM 调制后,电机能得到的最大线电压只有 235V 左右。剩下的电压去哪了?被谐波吃掉了。
3.2.2 SVPWM:电压利用率高,谐波小
SVPWM 是从电机磁链的角度出发的。它把三相逆变器的 8 种开关状态映射到空间矢量图上,通过合成相邻矢量的时间比例,来逼近任意角度的电压矢量。
SVPWM 的电压利用率可以达到 90.7%,比 SPWM 高了 15% 左右。这意味着同样的直流母线电压,SVPWM 能让电机跑得更快。而且 SVPWM 的谐波含量更低,电机运行更平稳。
我记得有一次给一个伺服驱动器做调试,客户要求电机在 3000rpm 下运行。用 SPWM 死活上不去,因为母线电压只有 310V。换成 SVPWM 后,轻松达到 3200rpm。这就是电压利用率的差距。
| 对比项 | SPWM | SVPWM |
|---|---|---|
| 电压利用率 | 78.5% | 90.7% |
| 谐波含量 | 较高 | 较低 |
| 实现复杂度 | 简单 | 中等 |
| 适用场景 | 低成本、低性能 | 高性能、伺服驱动 |
| 母线电压利用率 | 低 | 高 |
避坑指南: 我曾经在一个项目中,为了省成本用了 SPWM,结果电机在额定转速下转矩不够,导致系统频繁过载报警。后来换成 SVPWM,同样的硬件,问题解决了。所以,如果你的应用对转速和转矩有较高要求,别犹豫,直接上 SVPWM。
3.3 死区时间设置:一个不得不说的“坑”
死区时间,是 PWM 调制中一个看似微小、实则致命的问题。它指的是在同一个桥臂的上管关断和下管导通之间,插入的一段“同时关断”的时间。
为什么要加死区?因为功率管(MOSFET 或 IGBT)不是理想开关。关断需要时间,导通也需要时间。如果上管还没完全关断,下管就导通了,那就会发生“直通短路”——瞬间电流巨大,管子直接烧掉。
死区时间怎么设?我一般遵循这个原则:
- 死区时间 > 功率管的关断延迟时间 + 导通延迟时间
- 通常取 1.5 到 2 倍的安全裕量
举个例子,一个 MOSFET 的关断延迟是 100ns,导通延迟是 50ns,那死区时间至少设 150ns。我习惯设 300ns,留点余量。
死区时间的影响:
- 死区太大: 输出电压波形畸变,电机低速时转矩脉动大,甚至产生“死区效应”。
- 死区太小: 容易直通短路,烧毁功率管。
- 最佳值: 在保证安全的前提下,尽可能小。
死区效应是什么?说白了,就是死区时间内,电机绕组处于“悬空”状态,电流通过续流二极管续流。这会导致输出电压偏离理想值,产生低次谐波。电机低速运行时,你会感觉到明显的“顿挫感”。
我的调试技巧: 如果你发现电机在低速时抖动,先别急着调 PID。检查一下死区时间是不是设得太大了。我曾经有一个项目,电机在 50rpm 以下抖得厉害,查了半天,最后发现是死区时间设了 2μs,而实际只需要 500ns。改回来后,问题解决。
3.4 知识体系总览:一张图看懂 PWM 调制
下面这张图总结了本章的核心知识点。从 PWM 基本原理出发,延伸到 SPWM 和 SVPWM 的对比,再到死区时间的设置与影响。你可以把它当作一个快速参考。
3.5 实战中的常见问题与对策
最后,我总结几个我在项目中经常遇到的 PWM 相关问题,希望能帮你少走弯路。
- 问题1:电机噪音大 —— 检查 PWM 频率是否在可听范围内(低于 20kHz)。建议提高到 16kHz 以上。
- 问题2:电机低速抖动 —— 检查死区时间是否过大,或者 SPWM 的电压利用率不足。试试 SVPWM。
- 问题3:功率管过热 —— 检查死区时间是否过小,导致直通短路。或者 PWM 频率过高,开关损耗太大。
- 问题4:电机无法达到额定转速 —— 检查调制方式。如果是 SPWM,考虑换成 SVPWM 以提高电压利用率。
最后提醒一句: 死区时间的设置,一定要结合你用的功率管型号来定。不同厂家的 MOSFET 或 IGBT,开关特性差异很大。别偷懒,去 datasheet 里查一下关断延迟时间,再算一个合理的死区值。我曾经因为用了通用参数,结果一批板子烧了三分之一。从那以后,我再也不敢凭感觉设死区了。