第三节:死区补偿原理
死区补偿这个话题,说实话,我当年刚入行时也踩过不少坑。那时候调试一台伺服驱动器,电机在低速运行时总有一种「咯噔咯噔」的顿挫感,电流波形看着就像被狗啃过一样。后来才明白,这就是死区效应在作怪。
今天咱们就聊聊两种最实用的补偿方法:基于电流极性的补偿,和平均电压误差补偿。这两种方法我都实际用过,各有各的脾气。
3.1 死区效应是怎么来的?
先简单回顾一下。为了防止上下桥臂直通,我们在PWM信号里插入了死区时间。这个死区时间,说白了就是让上下管都关断的那一小段空白。
但问题来了——死区时间内,电流不是凭空消失的。它会通过续流二极管继续流。这就导致实际输出电压和理想PWM指令电压之间产生了偏差。你想想看,本来想让电机转10°,结果实际只转了9.5°,误差就这么累积起来了。
我在项目中遇到过一台设备,低速运行时振动特别大。用示波器抓电流波形,发现每个基波周期都有明显的畸变。一算,死区时间3μs,开关频率10kHz,死区占比3%。这个比例在低速时影响特别明显。
3.2 基于电流极性的补偿方法
这是最直观的思路。既然死区效应和电流方向有关,那我们就根据电流极性来补偿。
具体怎么做呢?
当电流为正时(从桥臂流向负载),死区时间内电流通过下管续流二极管。这时候实际输出电压比指令电压低了大约一个Vdc的死区时间占比。反过来,电流为负时,实际电压比指令电压高了。
补偿策略就是:
- 电流为正:在PWM指令上增加一个补偿量
- 电流为负:在PWM指令上减去一个补偿量
补偿量的大小怎么定?我一般这样算:
// 死区补偿量计算
float V_dead = Vdc * T_dead * f_sw;
// Vdc: 母线电压
// T_dead: 死区时间
// f_sw: 开关频率
// 电流极性判断
if (I_phase > I_threshold) {
V_comp = +V_dead;
} else if (I_phase < -I_threshold) {
V_comp = -V_dead;
} else {
V_comp = 0; // 过零区域,不补偿
}
这里有个关键点——电流过零区域。我吃过这个亏。一开始没加阈值判断,结果电流在零附近来回跳变,补偿量也跟着来回翻转,反而引入了更大的谐波。
这种方法的优点是实现简单,计算量小。缺点也很明显——对电流采样精度要求高。如果电流传感器有偏置,或者采样噪声大,补偿效果会大打折扣。
3.3 平均电压误差补偿法
这个方法比电流极性法更「聪明」一些。它不直接看瞬时电流,而是从平均效果出发。
核心思想是这样的:死区效应造成的电压误差,其实可以看作一个固定的电压偏差。这个偏差的大小和方向,取决于死区时间、开关频率和电流方向。
平均电压误差的表达式:
ΔV_avg = sign(I) * Vdc * T_dead * f_sw
嗯,看起来和前面差不多对吧?但区别在于实现方式。
平均电压误差补偿法不是直接修改PWM占空比,而是把补偿量叠加到电压指令上。也就是说,在电流环的输出上直接加上或减去这个补偿值。
我习惯这样实现:
// 三相电流采样
float Ia, Ib, Ic;
// 计算每相补偿电压
float V_comp_a = sign(Ia) * V_dead;
float V_comp_b = sign(Ib) * V_dead;
float V_comp_c = sign(Ic) * V_dead;
// 叠加到电压指令
Vd_ref_comp = Vd_ref + V_comp_d; // d轴补偿
Vq_ref_comp = Vq_ref + V_comp_q; // q轴补偿
这里要注意,补偿量需要从三相坐标系变换到dq坐标系。我刚开始做的时候直接在三相上补偿,结果发现dq轴电流还是有纹波。后来才意识到,补偿量也要做坐标变换。
3.4 两种方法的对比
| 对比项 | 电流极性法 | 平均电压误差法 |
|---|---|---|
| 实现复杂度 | 低 | 中 |
| 计算量 | 小 | 中等 |
| 对采样精度要求 | 高 | 中 |
| 过零区域处理 | 需要滞环 | 需要滞环 |
| 补偿效果(低速) | 好 | 较好 |
| 补偿效果(高速) | 一般 | 好 |
从表格能看出来,两种方法各有千秋。我个人的经验是:
- 如果MCU资源紧张,用电流极性法就够了
- 如果追求更好的动态性能,建议用平均电压误差法
- 两种方法可以结合使用,先做平均电压补偿,再做电流极性微调
3.5 实际调试中的坑
讲几个我踩过的坑,希望对你有帮助。
第一个坑:电流采样偏置。 有一次调试,补偿效果总是不理想。查了半天,发现电流传感器有20mA的偏置。这个偏置在额定电流5A时不算什么,但在轻载时,直接导致极性判断错误。
第二个坑:死区时间不对称。 上下管的开关特性不一样,导致实际死区效应不是对称的。我建议用双脉冲测试实际测量一下死区时间,不要完全相信数据手册。
第三个坑:补偿量饱和。 当电压指令接近母线电压极限时,补偿量可能会导致过调制。这时候要加限幅处理,否则电流会失控。
3.6 总结
死区补偿这件事,说白了就是和死区时间带来的电压误差做斗争。电流极性法简单粗暴,平均电压误差法更精细。选择哪种方法,取决于你的应用场景和硬件条件。
我建议初学者先从电流极性法入手,把基础逻辑跑通,再升级到平均电压误差法。一口吃不成胖子,调试也是一步一步来的。
下一节我们会聊更高级的补偿策略——基于观测器的自适应补偿。到时候会用到一些状态观测的知识,建议提前复习一下。