4. 死区时间影响分析
死区时间,说白了就是上下桥臂同时关断的那一小段空白。我刚开始做电机驱动时,总觉得死区时间就那么几微秒,能有多大影响?后来在一次高速运转测试中,电机突然发出刺耳的啸叫,速度波形抖得像心电图——这才让我真正领教了死区的厉害。
4.1 死区效应原理
为什么要加死区?因为功率管不是理想开关。IGBT 或 MOSFET 从导通到关断需要时间,如果上下管切换时没有死区,就会出现直通短路——那一下就能把驱动板烧了。
死区的工作原理其实很简单:
- 理想情况:上管关断瞬间,下管立即导通
- 实际情况:上管关断需要时间,下管导通也需要时间
- 死区插入:在切换时,让上下管都关断一段时间(典型值 1-5 μs)
但问题来了——死区期间,电流不是凭空消失的。它会通过续流二极管继续流动。这时候,输出电压就不再是 PWM 指令值了,而是被二极管钳位到了母线电压或地。
核心结论:死区导致实际输出电压与指令电压之间出现偏差,这个偏差就是死区误差电压。误差电压的大小和方向,完全取决于电流的极性。
我记得有一次排查一个低速抖动问题,示波器抓出来的相电压波形,在过零点附近有明显的台阶——那就是死区效应的典型表现。
4.2 死区导致电流畸变
死区误差电压是怎么让电流变形的?我画个逻辑链你就明白了:
- 死区插入 → 实际输出电压偏离指令值
- 电压偏差 → 产生误差电压矢量
- 误差矢量 → 叠加到基波电压上,引入低次谐波
- 谐波注入 → 电流波形出现畸变,尤其是 5、7 次谐波
- 电流畸变 → 转矩脉动 → 速度震荡
你想想看,死区时间固定不变,但电流是正弦变化的。在电流过零点附近,误差电压的方向会突然翻转,这就造成了所谓的「电流钳位」现象——电流在过零时被「粘住」了,过不去。
经验数据:死区时间每增加 1 μs,在 10 kHz 开关频率下,等效误差电压约占母线电压的 1%。对于 300V 母线,就是 3V 的误差——这个量级在低速时足以让电流波形严重变形。
我曾经在一个项目中,客户反馈电机在 50 RPM 以下有「卡顿感」。我抓了相电流波形,发现过零点附近有明显的平坦区,持续时间刚好等于死区时间乘以开关周期——证据确凿。
4.3 死区补偿方法
既然死区躲不掉,那就得想办法补偿。我这些年用过的方法,归纳起来就三种:
| 补偿方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 平均电压补偿 | 根据电流极性,在指令电压上叠加一个补偿量 | 实现简单,计算量小 | 过零点附近补偿不准 |
| 脉冲宽度补偿 | 直接调整 PWM 占空比,抵消死区影响 | 精度高,响应快 | 需要精确的电流极性检测 |
| 电流预测补偿 | 根据电流变化趋势,提前调整补偿量 | 过零点性能好 | 算法复杂,依赖模型精度 |
我个人最常用的是平均电压补偿法,因为它够简单、够稳定。具体做法是这样的:
// 死区补偿 - 平均电压法
// T_dead: 死区时间 (s)
// T_sw: 开关周期 (s)
// V_dc: 母线电压 (V)
// i_phase: 相电流 (A)
float dead_time_compensation(float i_phase) {
// 计算死区误差电压
float V_err = (T_dead / T_sw) * V_dc;
// 根据电流极性决定补偿方向
if (i_phase > 0.0f) {
return +V_err; // 电流流出,补偿正向电压
} else if (i_phase < 0.0f) {
return -V_err; // 电流流入,补偿负向电压
} else {
return 0.0f; // 过零点附近,不补偿或特殊处理
}
}
注意:过零点附近的补偿是个坑。电流极性判断不准,补偿方向就会反,反而把电流波形搞得更差。我曾经在这个问题上吃过亏——补偿后的电流畸变更严重了。后来我加了一个滞环判断,电流绝对值小于某个阈值时,采用线性过渡补偿,问题才解决。
下面这张图总结了死区效应的完整链路和补偿策略:
最后说一个我踩过的坑。有一次我在一个项目里用了脉冲宽度补偿法,理论上精度更高。结果调试时发现,电流过零点附近补偿效果反而更差。查了两天才找到原因——电流采样有偏置,导致极性判断在过零附近来回跳变。后来我加了个低通滤波,把采样噪声压下去,补偿才正常工作。
嗯,死区补偿这件事,说白了就是「对症下药」。先搞清楚你的系统里死区影响有多大,再选合适的补偿方法。如果只是低速抖动,平均电压法就够了;如果要求全速域高性能,那就得上电流预测补偿。别一上来就搞最复杂的,容易把自己绕进去。