foc

死区补偿和管压降补偿

Posted on June 30, 2026

死区补偿说的人很多,文章一大把。但是 igbt 的导通压降补偿似乎没什么人提。

今天我就来一起说了。

电压误差的由来

变频器需要输出三相正弦波电流驱动电机平稳运行。要保证电流的正弦,首先需要保证电压的正弦。 除非用的是我前两天说的电流型控制器。

但是,功率器件有各种办法让电机看到的电压不遵循正弦波。最大的2个,就是死区和 IGBT 的导通压降。

死区时间

电压误差的第一大来源,就是死区时间。 为了防止上下2个管子同时打开,中间必须插入一个死区时间。类似十字路口的红绿灯,必须要插入一段4个路口都是红灯的时间来清空路口的车辆。

插入多少死区时间,完全取决于器件的关断速度。确保一个管子已经彻底关闭后,才打开另一个管子。在使用 IGBT 的时候,绝大多数场景下,死区时间都是高达 1us ~ 2us。

微秒?看起来很短啊!错错错,很长!在 20khz 的开关周期下,一个周期一共也就 50us。 这死区时间一下子就占了 4% 的占空比!

也就是说,软件给出的占空比指令,会被无端端的少掉 4个百分点。这不是损失 4%,是损失4个点。比如软件给出 10% 的占空比,结果实际硬件发的占空比只有 6% ! 这是产生了高达 40% 的误差了。

所以,这死区时间是必须得补,不补不行!否则占空比丢失非常严重,产生极大的误差。


1. 死区时间内的物理过程(以正电流为例)

假设 ( I > 0 )(电流从母线流向负载),桥臂工作在互补PWM模式:

  • 理想情况:上管导通 ($D \times T_s$ ),下管导通 ( $(1-D) \times T_s$ )。
  • 实际开关过程
    1. 上管关断:进入死区 ( $T_d$ )。
    2. 死区内:上管、下管都处于关断状态。由于电感电流不能突变,负载电流必须通过下桥臂的反并联二极管续流。
    3. 续流路径:电流从负载 → 下管二极管 → 直流母线负极(或中点)。
    4. 输出电压:在这个死区时间内,桥臂中点电压被钳位在 ( $-V_{dc}$ )(或0V,取决于母线拓扑,对于两电平逆变器,被钳位到负极母线,即 ( 0V ) 或 ( $-V_{dc}$ );对于正负母线,被钳位到 ( $\frac{-V_{dc}}{2}$ ) 或 ( $-V_{dc}$ ))。
    5. 结果:理想情况下,这段时间本应输出一个高电平(如果这是有效导通时间的一部分)或低电平,但由于死区强制插入,实际输出在一个短暂区间内被拉到了与理想指令相反的极性

2. 死区造成的电压误差表达式

由于死区导致输出在 ( T_d ) 时间内偏离了理想值,因此造成的 “有效占空比损失” 如下:

  • 当 ( $I > 0$ )(正电流)
    • 死区导致有效导通时间 缩短,相当于有效的占空比减少了 ( $\Delta D = \frac{T_d}{T_s}$ )。
    • 平均电压损失:( $V_{loss} = V_{dc} \times \frac{T_d}{T_s}$ )(或 ( $V_{dc}/2 \times \frac{T_d}{T_s}$ ) 取决于母线拓扑)。
  • 当 ( $I < 0$ )(负电流)
    • 电流方向相反,死区期间电流通过上桥臂的反并联二极管续流,将桥臂中点电压拉高。
    • 死区导致有效导通时间 增加,相当于有效的占空比增加了 ( $\Delta D = \frac{T_d}{T_s}$ )。
    • 平均电压增益:( $V_{gain} = V_{dc} \times \frac{T_d}{T_s}$ )。

统一写成矢量形式: [ $ \Delta V_{dead} = -\text{sign}(I) \times V_{dc} \times \frac{T_d}{T_s} $ ] (注意:这里的符号取决于电压参考方向,但幅值固定为 ( $V_{dc} \times T_d/T_s$ ))

3. 补偿和电流方向有关

看起来,死区时间的存在,丢了4个点的占空比。那直接在计算出来的占空比上+4个点可行否? 比如计算出来 10% 占空比的,就给硬件发 14% 占空比。

可以吗?

不可以。

因为,死区时间导致的电压误差,是随着电流方向不同而有 正4个点偏差和负4个点偏差的区别的。

结论非常清晰:死区造成的电压误差是一个“固定幅值”的方波脉冲,其极性完全由电流方向决定,与占空比 ( D ) 的大小无关。


IGBT 导通压降

IGBT 不同于 MOS。 MOS 在导通的时候表现为一个电阻。 但是 IGBT 在导通的时候更像一个二极管。流过电流的时候会有一个固定的电压损失。

而且这个电压损失是对抗电流方向的。于是在电流过零的时候,电流就会被钳位在 0。

因此,如果只补偿死区时间,不补偿 IGBT 导通压降,最终电流波形依然会有一个过零钳位。

更糟糕的是,IGBT 导通压降损失,和当前的占空比有关。而电机作为一个感性负载,他的电流是滞后电压的。于是在电流的上升期和下降期,所经历的占空比是非对称的。也就是说,电压损失是不同的。

这会导致,电流上升期和下降期,承受的电压误差是不同的。于是会导致波形非对称。

死区时间造成的电流畸变,通常只表现在过零钳位,电流的上升下降还是对称的。 但是 IGBT 导通压降导致的损失,电流都不对称了。

这会引入更严重的问题。

必须补偿。不能直接忽略。

那么, IGBT 的导通损失呢,和电流方向关吗?

一样有关!

死区时间导致的损失,补偿方向和电流方向有关,补偿大小和电流方向无关。

而 IGBT 的导通损失,补偿方向和电流方向有关,补偿大小和电流方向有关!

电流的方向不同,补偿量的计算也是不同的。

1. 完整的PWM周期损耗模型(以正电流为例)

在一个PWM周期 ( T_s ) 内,对于“正电流”(定义为从桥臂流向负载):

  • 上管IGBT导通期间(时间占比 = $( D )$ ):
    • 电流路径:母线正极 → 上管IGBT → 负载。
    • 压降来源:上管IGBT的 $( V_{CE(sat)} )$。
    • 导通损耗贡献:$( V_{CE(sat)} \times D)$。
  • 上管IGBT关断期间(时间占比 = $( 1-D )$ ):
    • 由于电感电流不能突变,电流必须维持流向负载,只能通过下桥臂的续流二极管形成续流回路。
    • 即使下管IGBT没有被触发导通,二极管也会正向导通。
    • 压降来源:下管二极管的 $( V_F )$(正向压降)。
    • 导通损耗贡献:$( V_F \times (1-D) )$。

因此,正电流情况下,PWM周期内的平均导通压降是: $ V_{loss, avg} = D \times V_{CE(sat)} + (1-D) \times V_F $


2. 对称地看“负电流”的情况

当平均电流为负(从负载流向母线)时:

  • 下管IGBT导通期间(时间占比 = $( 1-D )$):压降为 $( V_{CE(sat)} )$。
  • 下管IGBT关断期间(时间占比 = $( D )$):电流通过上桥臂续流二极管,压降为 $( V_F )$。

此时平均压降为:

\[V_{loss, avg} = (1-D) \times V_{CE(sat)} + D \times V_F\]

3. 补偿同样和电流方向有关

补偿的目的是抵消这个平均压降,因此补偿量必须是一个组合项

\[\Delta V_{comp} = \begin{cases} D \times V_{CE(sat)} + (1-D) \times V_F & \text{(正电流)} \\ (1-D) \times V_{CE(sat)} + D \times V_F & \text{(负电流)} \end{cases}\]

关键:无论是正电流还是负电流,IGBT和二极管的压降都会在同一个PWM周期内先后出现。不能只补偿 IGBT 那一半,必须把二极管的续流压降也补上。


电流方向的获取

前面我们已经知道了,补偿量的计算了。死区时间电压损失 和 igbt 导通压降,这两个计算后,合并获得了一个补偿量。 然后,这个补偿量,根据电流的方向,叠加在原来计算的占空比上就可以了。

问题是,电流的方向如何获取呢?

ADC 直接获取?

这是最显而易见的,但是基本上也是不能用的。因为 ADC 存在 零点漂移与小电流采样不可信。

  1. ADC不能采集双向电流。因此 ADC 需要使用带偏置的运放,将采样结果抬高 $\frac{VCC}{2}$ 。 以 $3.3V$ 供电的单片机为例,运放对 0A 电流会输出 $1.65V$。这个电压经过 ADC 采样后,几乎很难变成 2048。
  2. 在小电流(或过零点附近)时,电流引起的电压变化极小。此时,运放的温漂、电阻的精度误差、电源噪声,其量级可能远远超过真实的电流信号。软件根本分不清采出来的是“真电流”还是“噪声”。

如何破局 ?

  1. 对电流采样,首先进行 DQ 变换,将他们变到 DQ 坐标系。 这步骤,实际上早就做了。这个是电流环必备的一部分。
  2. 接下来要增加一个操作,就是对 Iq Id 进行滤波。这大概也是 电流环的一部分。
  3. 对滤波后的 Iq Id , 进行逆向 DQ 变换。重新变成 Ia Ib Ic。
  4. 使用这个 Ia Ib Ic 进行补偿。

为何要多此一举呢?

因为 DQ 变换的时候,会用到一个角度:D轴角度。 这个角度是一个机械角度,他有机械惯性,天然的变化缓慢,没有高频成分。

ADC 采样的噪音,DQ 变化后,会变成 Iq Id 上的波动,经过 滤波后,Iq Id 是非常干净的一条直线,几乎只有直流分量。

因此,经过逆DQ后的 Ia Ib Ic,就非常干净,只包含干净的基波信号。

顺带一提,在 Iq Id 上进行滤波,不会在 Ia Ib Ic 上引入相位延迟!

这个是直接对采样到的 Ia Ib Ic 进行滤波所做不到的!

有了这个干净的 三相电流,剩下的事情就好办了,补偿算法如下:

  1. 根据电压环给出的指令,进行 SVPWM 调制运算,生成归一化的 Ta Tb Tc。
  2. 根据硬件配置,得出归一化的 $T_{dead-time-drop}$。计算方式很简单,$T_{dead-time-drop}=0.000002s*1000000Hz$,
  3. 根据每相电流的大小, 结合温度补偿,通过 查表或者 IGBT 的物理模型公式,计算得出 $V_{ce} 和 V_{f}$
  4. 根据归一化的 Ta Tb Tc 计算每相的 $U_{igbt-drop}$ 并结合母校电压进行归一化。$T_{igbt-drop}=\frac{U_{igbt-drop}}{U_{dc}}$ 计算的时候需要参考电流方向,每相独立计算。最终获得 $ T_{igbt-drop-a}, T_{igbt-drop-b}, T_{igbt-drop-c} $

  5. 根据电流方向,在 Ta Tb Tc 上叠加 $T_{dead-time-drop}+T_{igbt-drop}$ 例如 $Ta += sign(Ia)*(T_{dead-time-drop}+T_{igbt-drop-a})$
  6. 将 Ta Tb Tc 钳位到 $[0,1]$ 范围。(如果是2电阻采样,需要 钳位到 $[0,0.95]$ 避免下管导通时间不足没有时间采样。)
  7. 将 Ta Tb Tc 乘上 TIM1->ARR 配置到 TIM1->CC1,CC2,CC3
Comments