第三节:死区补偿原理

死区补偿这个话题,说实话,我当年刚入行时也踩过不少坑。那时候调试一台伺服驱动器,电机在低速运行时总有一种「咯噔咯噔」的顿挫感,电流波形看着就像被狗啃过一样。后来才明白,这就是死区效应在作怪。

今天咱们就聊聊两种最实用的补偿方法:基于电流极性的补偿,和平均电压误差补偿。这两种方法我都实际用过,各有各的脾气。

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;  // 过零区域,不补偿
}

这里有个关键点——电流过零区域。我吃过这个亏。一开始没加阈值判断,结果电流在零附近来回跳变,补偿量也跟着来回翻转,反而引入了更大的谐波。

注意:电流极性检测一定要加滞环。我建议阈值取额定电流的2%~5%。太小了容易误判,太大了补偿效果打折扣。

这种方法的优点是实现简单,计算量小。缺点也很明显——对电流采样精度要求高。如果电流传感器有偏置,或者采样噪声大,补偿效果会大打折扣。

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轴电流还是有纹波。后来才意识到,补偿量也要做坐标变换。

小技巧:如果觉得坐标变换麻烦,也可以直接在SVPWM的占空比计算环节补偿。我个人习惯在电流环输出之后、SVPWM之前做补偿,这样更灵活。

3.4 两种方法的对比

对比项 电流极性法 平均电压误差法
实现复杂度
计算量 中等
对采样精度要求
过零区域处理 需要滞环 需要滞环
补偿效果(低速) 较好
补偿效果(高速) 一般

从表格能看出来,两种方法各有千秋。我个人的经验是:

  • 如果MCU资源紧张,用电流极性法就够了
  • 如果追求更好的动态性能,建议用平均电压误差法
  • 两种方法可以结合使用,先做平均电压补偿,再做电流极性微调

3.5 实际调试中的坑

讲几个我踩过的坑,希望对你有帮助。

第一个坑:电流采样偏置。 有一次调试,补偿效果总是不理想。查了半天,发现电流传感器有20mA的偏置。这个偏置在额定电流5A时不算什么,但在轻载时,直接导致极性判断错误。

第二个坑:死区时间不对称。 上下管的开关特性不一样,导致实际死区效应不是对称的。我建议用双脉冲测试实际测量一下死区时间,不要完全相信数据手册。

第三个坑:补偿量饱和。 当电压指令接近母线电压极限时,补偿量可能会导致过调制。这时候要加限幅处理,否则电流会失控。

核心要点:死区补偿不是万能的。它主要改善低速轻载时的电流波形。在高速重载时,死区效应占比很小,补偿效果不明显。不要指望死区补偿能解决所有电流畸变问题。

3.6 总结

死区补偿这件事,说白了就是和死区时间带来的电压误差做斗争。电流极性法简单粗暴,平均电压误差法更精细。选择哪种方法,取决于你的应用场景和硬件条件。

我建议初学者先从电流极性法入手,把基础逻辑跑通,再升级到平均电压误差法。一口吃不成胖子,调试也是一步一步来的。

下一节我们会聊更高级的补偿策略——基于观测器的自适应补偿。到时候会用到一些状态观测的知识,建议提前复习一下。