4、死区效应与补偿:死区时间设置、死区导致的电压畸变、硬件补偿与软件补偿方法

死区,说白了就是上下桥臂同时关断的那段“真空期”。

我刚开始做逆变器调试时,觉得死区不就是加个延时嘛,能有多大影响?结果第一次上电,电流波形一塌糊涂,电机嗡嗡响,效率还低得离谱。后来才明白——死区设置不当,整个SVPWM的精度全白费了。

4.1 死区时间怎么设?

死区时间的设置,核心就一句话:在保证不直通的前提下,尽量短。

我个人习惯按这个流程来定:

  1. 查功率管的开关参数——看数据手册里的 turn-on delay、rise time、turn-off delay、fall time。
  2. 算最小死区——通常取 (t_off_max - t_on_min) × 1.2~1.5 倍安全裕量。
  3. 实测验证——用示波器看桥臂中点电压,确认没有直通尖峰。

经验值参考: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电平。

我画个图帮你理解:

死区导致电压畸变机理 理想PWM 上管导通 上管导通 上管导通 实际PWM(含死区) 死区 死区 死区 桥臂中点电压(i > 0) 钳位 钳位 钳位 桥臂中点电压(i < 0) 拉高 拉高 拉高 关键结论: • 电流正方向:死区期间电压被钳位到地(丢失高电平脉冲)→ 实际电压 < 理想电压 • 电流负方向:死区期间电压被拉高到母线(丢失低电平脉冲)→ 实际电压 > 理想电压 • 这种非线性畸变在电流过零点附近最严重,导致零电流钳位现象

你看,死区导致的电压畸变是电流极性相关的。电流为正时,死区让你少发了电压;电流为负时,死区让你多发电压。这种非线性畸变,说白了就是给系统引入了一个“死区电压误差”。

这个误差有多大?我算给你看:

死区电压误差估算:

Δ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的占空比计算环节,根据电流方向提前修正占空比。

我常用的软件补偿流程:

  1. 采样三相电流,判断每相电流极性(正/负/过零点附近)。
  2. 计算补偿时间:T_comp = T_dead × sign(i)
  3. 修正占空比:D_corrected = D_ideal + T_comp / T_sw
  4. 过零点处理:电流过零点附近做平滑过渡,避免补偿突变。

代码实现大概长这样:

// 死区补偿函数
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波形就能从“勉强能用”变成“漂亮得很”。