3. 死区补偿原理:电压误差补偿法、电流极性检测法、平均电压补偿法
死区补偿这个话题,说实话,我当年刚入行时也踩过不少坑。那时候做一款伺服驱动器,电机低速运行时电流波形简直没法看,谐波大得吓人。后来才明白,罪魁祸首就是死区效应。今天咱们就把三种主流补偿方法掰开揉碎了讲清楚。
3.1 死区效应是怎么产生的?
先说说死区时间。为了防止上下桥臂直通,我们在PWM信号里插入了一段「空白期」—— 也就是死区时间。这段时间里,两个管子都关断,电流只能通过续流二极管走。
问题就出在这里。死区时间内,输出电压不再受控于PWM指令,而是由电流方向决定。正电流时,下管二极管续流,输出被拉到负母线;负电流时,上管二极管续流,输出被拉到正母线。说白了,实际输出电压和理想电压之间产生了偏差。
这个偏差有多大?我算过一笔账:死区时间5μs,开关频率10kHz,占空比误差能达到5%。在低速轻载工况下,这个误差足以让电流波形严重畸变。
核心结论:死区效应本质上是电压误差,误差大小 = 死区时间 × 母线电压 × 开关频率。误差方向取决于电流极性。
3.2 电压误差补偿法
这种方法最直观。既然我们知道死区造成了电压误差,那就反向补偿回去呗。
具体怎么做?先算出死区引起的平均电压误差:
ΔV = (T_dead / T_sw) × V_dc × sign(I_phase)
其中T_dead是死区时间,T_sw是开关周期,V_dc是母线电压。然后把这个误差加到电压指令上:
V_comp = V_ref + ΔV
嗯,这里要注意一个细节。补偿量不能无限大,得做限幅处理。我遇到过有人把补偿设得太大,结果电流过冲,电机反而抖得更厉害。
我的经验:补偿量建议限制在额定电压的5%以内。超过这个值,说明你的死区时间设置可能本身就有问题,先检查硬件设计。
电压误差补偿法的优点是实现简单,计算量小。缺点也很明显 —— 它依赖电流极性判断。而电流过零点附近,极性判断本身就容易出错。
3.3 电流极性检测法
这个方法的核心是:准确检测电流过零点,然后根据电流方向决定补偿策略。
你可能会问:「直接用电流传感器读数不就行了?」问题在于,电流传感器有噪声,过零点附近信噪比很差。我曾经用霍尔传感器做实验,过零点附近抖动有几十毫安,根本没法直接用来判断极性。
那怎么办?我常用的做法是加一个滞环比较器:
if (I_phase > I_threshold_positive)
polarity = POSITIVE;
else if (I_phase < I_threshold_negative)
polarity = NEGATIVE;
else
polarity = UNKNOWN; // 保持上次状态
阈值一般取额定电流的2%-5%。太小了容易误判,太大了补偿效果打折扣。
还有一种更高级的做法 —— 用观测器来估计电流极性。比如用滑模观测器或者龙伯格观测器,对电流进行滤波和预测。我在一个高精度位置控制项目里用过这种方法,效果确实比单纯滞环好,但代码量也翻了一倍。
避坑指南:我曾经在一个项目里直接用ADC采样值判断极性,结果低速时电流波形出现「台阶」现象。后来发现是采样时刻刚好落在开关噪声上。建议在PWM载波中点采样,避开开关动作时刻。
3.4 平均电压补偿法
这个方法思路不一样。它不关心电流极性,而是从统计角度出发,在一个PWM周期内平均补偿。
原理是这样的:死区效应造成的电压误差,在一个开关周期内的平均值是确定的。我们把这个平均值直接加到电压指令上,不管电流方向如何。
平均补偿量怎么算?
V_comp_avg = (T_dead / T_sw) × V_dc × 2 / π
为什么是2/π?这是对正弦电流在一个周期内取平均的结果。说白了,假设电流是理想正弦波,死区误差的平均效应就是这个系数。
这种方法的好处是 —— 不需要检测电流极性!实现起来特别简单。缺点也很明显:补偿是开环的,精度有限。在电流波形畸变严重时,补偿效果会打折扣。
| 补偿方法 | 精度 | 实现复杂度 | 适用场景 |
|---|---|---|---|
| 电压误差补偿法 | 中等 | 低 | 通用场合 |
| 电流极性检测法 | 高 | 中 | 高精度控制 |
| 平均电压补偿法 | 较低 | 极低 | 低成本方案 |
3.5 三种方法的对比与选择
说实话,没有一种方法是万能的。我个人的习惯是:
- 量产产品:用电压误差补偿法 + 滞环电流极性检测。性价比最高。
- 高端伺服:用观测器做电流极性检测,配合自适应补偿。效果好,但开发周期长。
- 成本敏感项目:直接用平均电压补偿法。虽然精度差点,但至少能把电流畸变压下去。
你想想看,死区补偿说到底就是个「精度 vs 复杂度」的权衡。我见过有人花三个月优化补偿算法,结果电流THD只改善了0.5%。也见过有人用最简单的平均补偿,配合硬件上选快恢复二极管,效果反而更好。
我的建议:先做仿真,看看你的系统对死区误差有多敏感。如果低速性能要求不高,平均补偿法就够了。如果要做零速满转矩输出,那必须上电流极性检测法。
3.6 本章知识体系
下面这张图总结了三种补偿方法的逻辑关系,我画了很久才理清楚:
这张图把三种方法的定位和子问题都列出来了。你可以对照自己的项目需求,找到最适合的那条路。
公众号:蓝海资料掘金营,微信deep3321