3. 死区补偿基础原理:基于电流极性的补偿方法、平均电压补偿法、脉冲宽度补偿法

死区补偿这个话题,说实话,我当年刚入行时也踩过不少坑。那时候做一款伺服驱动器,电机低速运行时噪音大得离谱,波形一塌糊涂。折腾了两周,最后发现是死区效应在作怪。嗯,从那以后我就把死区补偿这块啃得透透的。

今天咱们就来聊聊死区补偿的三种经典方法。每种方法都有它的脾气,选对了,事半功倍;选错了,调试到怀疑人生。

3.1 死区效应是怎么来的?

先说说死区时间。为了防止上下桥臂直通,我们在PWM信号里插入了一段"同时关断"的时间,这就是死区。典型值在几百纳秒到几微秒之间。

但问题来了——死区时间内,电流不是零。它通过续流二极管继续流动。这就导致实际输出电压和理想电压之间产生了偏差。你想想看,本来想让电机转得顺顺当当,结果每个开关周期都多了一个"小扰动",能不抖吗?

核心影响:

  • 输出电压基波幅值降低
  • 产生5、7、11次等低次谐波
  • 低速时转矩脉动明显
  • 严重时导致电流波形畸变

我在项目中遇到过一台设备,空载运行没问题,一带负载就嗡嗡响。用示波器一看,电流波形上全是毛刺。这就是典型的死区效应在作祟。

3.2 基于电流极性的补偿方法

这个方法最直观。说白了就是:根据电流的方向,决定要不要补偿、补偿多少。

原理其实很简单。当电流从桥臂流出(正方向)时,死区导致输出电压偏低;当电流流入桥臂(负方向)时,死区导致输出电压偏高。那我们反向补偿回去不就行了?

具体做法:

// 伪代码示例
if (current_direction == POSITIVE) {
    compensate_value = +Vdc * Tdead / Tpwm;
} else if (current_direction == NEGATIVE) {
    compensate_value = -Vdc * Tdead / Tpwm;
} else {
    // 过零点附近,不补偿或特殊处理
    compensate_value = 0;
}

看着简单吧?但坑就在这里。

避坑指南:

我曾经在过零点附近吃过亏。电流极性判断不准,补偿方向搞反了,结果越补越乱。后来我加了一个滞环比较器,在过零点附近设置一个死区区间(比如±0.1A),这个区间内不补偿或者线性过渡,问题才解决。

这个方法的好处是实时性好,计算量小。缺点是对电流采样精度要求高,尤其是过零点附近。你想想看,如果采样噪声大,极性判断频繁翻转,补偿值也跟着乱跳,那还不如不补。

3.3 平均电压补偿法

这个方法我比较喜欢用,因为它不依赖瞬时的电流极性判断,而是基于一个开关周期内的平均效果。

核心思想:在一个PWM周期内,死区造成的电压损失是确定的。我们把这个损失算出来,然后加到参考电压上。

平均电压损失的计算公式:

ΔV = sign(I) * Vdc * Tdead / Tpwm

其中sign(I)是电流的符号函数。但这里有个关键点——我们用的是平均电流,不是瞬时电流。这样抗噪能力就强多了。

实际实现时,我一般这样做:

  1. 采样一个PWM周期内的平均电流
  2. 判断电流极性
  3. 计算补偿电压ΔV
  4. 将ΔV叠加到d轴或q轴电压指令上

我的经验:

平均电压补偿法在电流环带宽不高的情况下效果很好。但如果你的电流环带宽很高(比如超过2kHz),建议改用脉冲宽度补偿法。为什么?因为平均法有滞后,带宽高了会引入相位延迟。

这个方法还有个变种——查表法。把不同电流幅值下的补偿量预先算好,存成一张表。运行时直接查表,省去实时计算。我在一个量产项目中就这么干的,效果稳定,代码也简洁。

3.4 脉冲宽度补偿法

这个方法最精细,也最考验功底。它不改变电压幅值,而是直接调整PWM的脉冲宽度。

原理:死区导致实际导通时间比理想时间短了Tdead。那我们就把PWM的占空比增加一个修正量,让实际导通时间回到理想值。

具体来说:

// 脉冲宽度补偿
if (current_direction == POSITIVE) {
    // 电流流出,需要增加导通时间
    pwm_duty_compensated = pwm_duty_reference + Tdead / Tpwm;
} else {
    // 电流流入,需要减少导通时间
    pwm_duty_compensated = pwm_duty_reference - Tdead / Tpwm;
}

你可能会问:这和电流极性法有什么区别?

区别大了。电流极性法补偿的是电压,脉冲宽度法补偿的是时间。在数字控制中,时间补偿更直接,因为PWM模块本身就是用定时器实现的。

三种方法对比:

方法 精度 实时性 实现难度 适用场景
电流极性法 中等 低速、轻载
平均电压法 较高 中等 中高速、通用
脉冲宽度法 高性能、宽速域

我个人习惯在量产项目中用脉冲宽度补偿法。虽然实现起来稍微复杂一点,但效果最稳定。尤其是电机在零速附近运行时,其他方法容易出问题,脉冲宽度法反而表现不错。

3.5 三种方法的本质联系

说了这么多,其实这三种方法本质上是相通的。它们都在做同一件事——补偿死区造成的电压损失。只是补偿的"位置"不同:

  • 电流极性法:在电压指令上补偿
  • 平均电压法:在电流环输出上补偿
  • 脉冲宽度法:在PWM生成上补偿

打个比方。电流极性法像是"事后补救"——发现电压不对了,赶紧补一点。平均电压法像是"按经验补偿"——知道大概会损失多少,提前补上。脉冲宽度法像是"源头治理"——直接从时间上修正,不让损失发生。

选型建议:

如果你刚开始做FOC,建议先从平均电压补偿法入手。实现简单,效果明显。等把基础打牢了,再尝试脉冲宽度补偿法。至于电流极性法,嗯,除非你的电流采样精度特别高,否则我不太推荐。

最后说一句。死区补偿不是万能的。它只能补偿死区造成的电压偏差,但无法消除死区引入的谐波。要真正抑制谐波,还得结合后面要讲的谐波抑制策略。不过那是后话了。

死区补偿方法知识体系 死区效应 电流极性补偿法 基于瞬时电流方向 平均电压补偿法 基于周期平均效果 脉冲宽度补偿法 直接调整PWM占空比 特点 • 实时性好,计算量小 • 过零点易误判 • 对采样精度要求高 • 适合低速轻载场景 特点 • 抗噪能力强 • 实现简单,代码量少 • 带宽高时有相位延迟 • 适合中高速通用场景 特点 • 精度最高 • 零速附近表现稳定 • 实现稍复杂 • 适合高性能宽速域 本质:补偿死区造成的电压损失,只是补偿位置不同 谐波抑制需结合后续策略,死区补偿是基础

本章小结:

死区补偿是FOC控制中绕不开的一环。三种方法各有千秋,没有绝对的好坏。关键是根据你的应用场景、硬件条件和性能要求来选。我个人建议:先跑起来用平均电压法,优化性能用脉冲宽度法。至于电流极性法,嗯,除非你特别有把握,否则慎用。

专注资料整理