3. PWM调制技术:单极性/双极性PWM、SVPWM原理与实现、PWM频率选择与分辨率、死区效应与补偿策略
各位同学,咱们今天聊聊PWM调制。说实话,搞电机驱动这么多年,PWM是我觉得最基础也最容易被忽视的一环。很多人上来就调PID,结果电机嗡嗡响、发热严重,查了半天发现是PWM配置出了问题。嗯,咱们今天就把它彻底讲透。
3.1 单极性PWM与双极性PWM
先说说最基础的两种调制方式。单极性PWM,说白了就是输出电压只在正半周或负半周内变化。比如H桥的上管一直导通,下管做PWM开关,电流方向始终不变。我早期做直流有刷电机驱动时,用的就是这种方案,简单、开关损耗小。
双极性PWM呢?四个管子全在高速开关,输出电压在+V和-V之间来回跳。你想想看,这开关损耗肯定比单极性大,但好处是电流纹波小、响应快。我在做伺服驱动器时,位置环要求高带宽,就不得不选双极性。
关键区别一句话总结:
- 单极性:一个周期内电压极性不变,开关次数少,效率高
- 双极性:电压极性来回翻转,纹波小,但损耗大
3.2 SVPWM原理与实现
接下来是重头戏——SVPWM。很多人觉得SVPWM很玄乎,其实它就是「用空间电压矢量去逼近一个旋转的参考矢量」。我当年第一次看到这个理论时,也觉得头大,后来在项目里手撸了一遍代码,才真正理解。
SVPWM的核心思想:把三相逆变器的8种开关状态映射到αβ坐标系,形成6个非零矢量和2个零矢量。然后通过相邻两个非零矢量的时间组合,去合成任意方向和大小的电压矢量。
我个人习惯的SVPWM实现步骤:
- 判断参考矢量所在的扇区
- 计算相邻两个矢量的作用时间T1、T2
- 计算零矢量的分配时间T0
- 生成三相对称的PWM占空比
这里贴一段我常用的SVPWM核心代码,注意看扇区判断那部分,我曾经在这里踩过坑——浮点数比较精度问题导致扇区误判,电机在过零点附近抖动。
// SVPWM扇区判断与时间计算
void svpwm_calc(float Valpha, float Vbeta, float Vdc) {
float V1, V2, V3;
uint8_t sector;
V1 = Vbeta;
V2 = 0.866f * Valpha - 0.5f * Vbeta;
V3 = -0.866f * Valpha - 0.5f * Vbeta;
// 扇区判断(注意浮点比较的容差)
sector = 0;
if (V1 > 0.0001f) sector |= 0x01;
if (V2 > 0.0001f) sector |= 0x02;
if (V3 > 0.0001f) sector |= 0x04;
// 根据扇区查表计算T1、T2
// ... 后续计算占空比
}
3.3 PWM频率选择与分辨率
PWM频率怎么选?这个问题我每次做新项目都要纠结一下。频率高了,电流纹波小,但开关损耗大;频率低了,损耗小,但电机可能发出刺耳的啸叫。
我一般遵循这几个原则:
- 人耳可听范围20Hz-20kHz,所以要么低于20Hz(很少用),要么高于20kHz
- 对于伺服电机,常用8kHz-16kHz,兼顾损耗和响应
- 对于大功率电机,频率要低一些,比如4kHz-8kHz,否则IGBT发热受不了
再说分辨率。PWM分辨率取决于定时器的计数位数和时钟频率。举个例子,一个16位定时器,时钟100MHz,那么PWM频率最低可以做到100MHz/65536 ≈ 1.5kHz。但如果你要20kHz的PWM,分辨率就只有100MHz/20kHz = 5000个计数点,约12.3位有效分辨率。
注意:分辨率不够会导致低速时电流控制精度差,电机出现「步进感」。我曾经在一个项目中,PWM分辨率只有10位,电机在10rpm以下时抖动明显,后来把PWM频率从20kHz降到10kHz,分辨率提升到11位,问题才解决。
3.4 死区效应与补偿策略
死区,这是每个做电机驱动的人都绕不开的痛。为了防止上下桥臂直通,必须在开关切换时插入一段「同时关断」的时间,这就是死区。
死区带来的问题很明显:输出电压失真、电流波形畸变、低速时转矩脉动增大。我见过一个项目,死区设了3μs,结果电机在轻载时电流波形像锯齿一样,谐波含量高得吓人。
常用的死区补偿策略有几种:
| 补偿方法 | 原理 | 适用场景 |
|---|---|---|
| 电流极性检测法 | 根据电流方向修正占空比 | 中高速运行 |
| 电压反馈补偿法 | 采样实际输出电压,闭环修正 | 对精度要求高的场合 |
| 预测补偿法 | 根据电机模型预测死区影响 | 低速、零速附近 |
我个人最常用的是电流极性检测法,实现简单,效果也还行。但要注意,电流过零点附近极性判断容易出错,这时候需要加滞环或者用预测补偿来过渡。
避坑指南:我曾经在死区补偿上犯过一个低级错误——补偿量算对了,但符号搞反了。结果补偿完比不补偿还差,电流畸变更严重。后来加了个使能开关,先观察补偿效果再决定是否启用,稳妥多了。
3.5 知识体系总览
下面这张图是我自己整理的PWM调制技术知识结构,方便大家对照学习:
好了,PWM调制这部分就讲到这里。内容不少,但都是干货。大家在实际项目中遇到PWM相关的问题,欢迎随时交流。记住一句话:PWM是电机驱动的地基,地基不牢,后面再好的算法也白搭。
公众号:蓝海资料掘金营,微信deep3321