4、死区效应与补偿:死区时间设置、死区导致的电压畸变、硬件补偿与软件补偿方法
死区,说白了就是上下桥臂同时关断的那段“真空期”。
我刚开始做逆变器调试时,觉得死区不就是加个延时嘛,能有多大影响?结果第一次上电,电流波形一塌糊涂,电机嗡嗡响,效率还低得离谱。后来才明白——死区设置不当,整个SVPWM的精度全白费了。
4.1 死区时间怎么设?
死区时间的设置,核心就一句话:在保证不直通的前提下,尽量短。
我个人习惯按这个流程来定:
- 查功率管的开关参数——看数据手册里的 turn-on delay、rise time、turn-off delay、fall time。
- 算最小死区——通常取 (t_off_max - t_on_min) × 1.2~1.5 倍安全裕量。
- 实测验证——用示波器看桥臂中点电压,确认没有直通尖峰。
经验值参考:IGBT模块(15-20kHz开关频率)死区通常设在1.5μs~3μs;SiC MOSFET可以压到100ns~300ns。我做过一个SiC项目,死区设到150ns,效率直接提了0.8%。
| 功率器件类型 | 典型开关频率 | 推荐死区范围 | 我踩过的坑 |
|---|---|---|---|
| IGBT模块(600V/1200V) | 8~20 kHz | 1.5 μs ~ 3.0 μs | 设太短导致炸管,设太长波形畸变 |
| MOSFET(低压48V以下) | 20~100 kHz | 200 ns ~ 500 ns | 寄生参数影响比死区还大 |
| SiC MOSFET | 50~200 kHz | 100 ns ~ 300 ns | 驱动回路寄生电感是关键 |
| GaN HEMT | 200 kHz~1 MHz | 20 ns ~ 80 ns | 死区必须精确到纳秒级 |
注意:死区不是越大越安全。死区过大,不仅波形畸变更严重,还会导致桥臂中点电压偏离理想值,轻则电流谐波增大,重则电机转矩脉动、系统振荡。我曾经在一个风电变流器项目里,死区从3μs改到2μs,电流THD从8%降到了4.5%。
4.2 死区导致的电压畸变
死区为什么会引起电压畸变?说白了就是——死区期间,电流通过续流二极管续流,桥臂中点电压被“钳位”到了母线或地,而不是你想要的PWM电平。
我画个图帮你理解:
你看,死区导致的电压畸变是电流极性相关的。电流为正时,死区让你少发了电压;电流为负时,死区让你多发电压。这种非线性畸变,说白了就是给系统引入了一个“死区电压误差”。
这个误差有多大?我算给你看:
死区电压误差估算:
ΔV_dead = (T_dead × V_dc) / T_sw
举个例子:死区2μs,母线电压600V,开关周期50μs(20kHz)
ΔV_dead = (2 × 10⁻⁶ × 600) / (50 × 10⁻⁶) = 24V
也就是说,每个开关周期你白白损失/多发了24V的电压!
4.3 硬件补偿方法
硬件补偿,说白了就是通过电路手段把死区造成的电压误差“补回去”。
我见过几种做法:
- 电流极性检测 + 脉冲修正:用高速比较器检测电流方向,然后通过逻辑电路在死区前后插入/删除窄脉冲。优点是响应快,缺点是电流过零点附近容易误判。
- 自适应死区调节:根据负载电流大小动态调整死区时间。轻载时死区自动缩短,重载时适当加长。我在一个伺服驱动器上用过,效果不错。
- 专用死区补偿芯片:比如IR2136这类集成驱动芯片,内部自带死区补偿逻辑。省事,但灵活性差。
硬件补偿的坑:我曾经在一个项目里用比较器检测电流极性,结果PCB布局不好,噪声导致过零点反复翻转,补偿逻辑乱跳,电流波形反而更差了。后来加了滞回比较器才解决。记住——硬件补偿对噪声非常敏感,PCB布局和滤波一定要做好。
4.4 软件补偿方法
软件补偿,是目前工程中最常用的方法。说白了就是——在SVPWM的占空比计算环节,根据电流方向提前修正占空比。
我常用的软件补偿流程:
- 采样三相电流,判断每相电流极性(正/负/过零点附近)。
- 计算补偿时间:T_comp = T_dead × sign(i)
- 修正占空比:D_corrected = D_ideal + T_comp / T_sw
- 过零点处理:电流过零点附近做平滑过渡,避免补偿突变。
代码实现大概长这样:
// 死区补偿函数
void deadtime_compensation(float *duty_a, float *duty_b, float *duty_c,
float i_a, float i_b, float i_c,
float t_dead, float t_sw) {
float comp_val = t_dead / t_sw; // 补偿量
// 对每相进行补偿
*duty_a += (i_a > I_THRESHOLD) ? comp_val : (i_a < -I_THRESHOLD) ? -comp_val : 0;
*duty_b += (i_b > I_THRESHOLD) ? comp_val : (i_b < -I_THRESHOLD) ? -comp_val : 0;
*duty_c += (i_c > I_THRESHOLD) ? comp_val : (i_c < -I_THRESHOLD) ? -comp_val : 0;
// 限幅保护
*duty_a = clamp(*duty_a, 0.0f, 1.0f);
*duty_b = clamp(*duty_b, 0.0f, 1.0f);
*duty_c = clamp(*duty_c, 0.0f, 1.0f);
}
我的经验:I_THRESHOLD这个阈值很关键。设太大,补偿不充分;设太小,过零点附近会抖动。我一般取额定电流的2%~5%,然后根据实测波形微调。另外,补偿量最好做低通滤波,避免单次采样噪声导致补偿突变。
4.5 硬件补偿 vs 软件补偿,怎么选?
| 对比项 | 硬件补偿 | 软件补偿 |
|---|---|---|
| 响应速度 | 纳秒级,实时性好 | 受PWM周期限制,有1~2个周期延迟 |
| 灵活性 | 差,改参数要换电阻/逻辑 | 好,改代码就行 |
| 抗噪声能力 | 对PCB布局敏感 | 可通过数字滤波处理 |
| 成本 | 增加比较器/逻辑芯片 | 几乎零成本(MCU算力足够) |
| 过零点处理 | 容易误判 | 可做平滑过渡算法 |
| 适用场景 | 高频开关、对延迟敏感 | 绝大多数工业应用 |
我个人建议:除非你的开关频率超过100kHz且对实时性要求极高,否则优先用软件补偿。软件补偿调试方便,迭代成本低,效果也足够好。
避坑指南:我曾经在一个项目里只做了软件补偿,结果发现低速时电机还是有明显的转矩脉动。后来查了半天,发现是电流采样偏置没校准,导致电流极性判断错误,补偿方向反了。所以——做死区补偿之前,先把电流采样校准做好,否则补偿就是帮倒忙。
嗯,死区补偿这块,说白了就是“缺多少补多少”。但难点在于——电流极性判断要准,补偿量要合适,过零点要平滑。把这些细节做到位,你的SVPWM波形就能从“勉强能用”变成“漂亮得很”。