第2章:三相逆变器拓扑——从电路到开关状态

做SVPWM,你首先得搞清楚你手里控制的是什么。说白了,就是那个三相全桥逆变器。我见过不少新手,算法写得飞起,一上电就炸管子,为什么?就是对拓扑结构理解不够深。

这一章,我们就把逆变器的底裤扒干净。从电路结构到开关状态,再到那个让人头疼的死区时间,一个一个说清楚。

2.1 三相全桥逆变器结构

先看电路。三相全桥逆变器,说白了就是三个半桥拼在一起。每个半桥有两个开关管,上管和下管。总共六个开关管,这就是我们常说的“六脉神剑”。

我习惯把电路分成三部分来看:

  • 直流母线:提供稳定的直流电压,一般叫Vdc。母线电容是储能和滤波用的,这个电容选型很关键,我后面会讲。
  • 三相全桥:六个开关管(IGBT或MOSFET),每相一个桥臂。上管导通时,该相输出接正母线;下管导通时,接负母线。
  • 负载:通常是三相电机,星形或三角形接法。电机绕组就是我们的感性负载。

你想想看,六个开关管,每个只有两种状态:导通或关断。那总共就有2的6次方,64种状态。但实际能用的,只有8种。为什么?因为同一桥臂的上下管不能同时导通,否则就是直通短路,瞬间炸管。这个我后面会细说。

核心要点:三相全桥逆变器的本质,就是把直流电变成交流电。通过控制六个开关管的通断,在电机绕组上合成出我们想要的电压矢量。

下面这张图,是我自己画的逆变器拓扑结构,你看一眼就明白了。

三相全桥逆变器拓扑结构 直流母线 Vdc P N Q1 Q4 A Q3 Q6 B Q5 Q2 C 三相电机负载

2.2 开关状态定义

好,电路看完了。现在我们来定义开关状态。每个桥臂,我们用一个二进制位来表示:1表示上管导通、下管关断;0表示上管关断、下管导通。

那三相的状态,就可以用一个三位二进制数来表示:[Sa, Sb, Sc]。比如 [1, 0, 0],就是A相上管通,B相和C相下管通。

这8种状态,我列个表给你看:

状态编号 Sa Sb Sc 电压矢量 说明
0 0 0 0 V0 (000) 零矢量,所有下管导通
1 1 0 0 V1 (100) 有效矢量
2 1 1 0 V2 (110) 有效矢量
3 0 1 0 V3 (010) 有效矢量
4 0 1 1 V4 (011) 有效矢量
5 0 0 1 V5 (001) 有效矢量
6 1 0 1 V6 (101) 有效矢量
7 1 1 1 V7 (111) 零矢量,所有上管导通

这里有个关键点:V0和V7都是零矢量。它们产生的线电压为零,但相电压不为零。为什么?因为电机绕组是浮地的,上下管全通时,电机三相端子被短接到同一电位,绕组上没有电压差。

我的经验:在实际项目中,我习惯用V0和V7交替插入来调节占空比。这样能减少开关次数,降低损耗。但要注意,V0和V7的插入位置会影响电流纹波,这个后面讲SVPWM实现时会细说。

2.3 死区时间概念

嗯,这里要重点讲一下。死区时间,是每个做逆变器的人必须面对的坑。

什么叫死区时间?就是同一桥臂上下管切换时,故意插入的一段“两个管子都关断”的时间。为什么要这么做?因为开关管不是理想的,关断需要时间。如果上管还没完全关断,下管就导通了,那就是直通短路。

我曾经在一个项目里吃过这个亏。当时为了追求效率,把死区时间设得很短,结果一上电,IGBT就炸了。后来查原因,就是死区不够,上下管瞬间直通。

死区时间的影响,我总结了几点:

  • 电压损失:死区时间内,电流通过续流二极管续流,输出电压会偏离理想值。这个偏差和电流方向有关。
  • 电流畸变:死区效应会导致电流波形出现“平顶”现象,尤其在过零点附近。
  • 转矩脉动:对于电机控制,死区会引起额外的转矩脉动,影响控制精度。

那死区时间设多少合适?这个没有固定值,取决于你的开关管型号和驱动电路。我一般按以下步骤来定:

  1. 查开关管数据手册,找到关断延迟时间(t_doff)和下降时间(t_f)。
  2. 死区时间至少取 (t_doff + t_f) 的1.5倍。
  3. 留点余量,再加个0.5~1微秒。
  4. 上电实测,用示波器看上下管驱动波形,确保没有重叠。

警告:死区时间不是越大越好。死区太大,电压损失严重,电流畸变明显,电机噪音大、效率低。我见过有人设了10微秒的死区,结果电机嗡嗡响,根本转不起来。死区时间要在安全和性能之间找平衡。

下面这张图,展示了死区时间在驱动波形中的位置:

死区时间示意图 上管驱动 下管驱动 死区时间 死区时间 死区时间 上下管驱动信号之间必须插入死区时间,防止直通短路

最后,我再说一个实际调试中的技巧。死区补偿,是消除死区影响的关键手段。基本思路是:根据电流方向,在PWM占空比上叠加一个补偿量。电流流出桥臂时,死区导致电压损失,需要增加占空比;电流流入桥臂时,死区导致电压增加,需要减小占空比。

这个补偿量怎么算?说白了就是:

// 死区补偿伪代码
if (电流方向 == 流出桥臂) {
    PWM占空比 += 死区时间 / PWM周期;
} else {
    PWM占空比 -= 死区时间 / PWM周期;
}

当然,实际实现要比这个复杂。电流过零点附近,方向判断不准,补偿反而会引入畸变。我一般会在过零点附近做线性过渡,或者干脆不补偿。这个后面讲SVPWM实现时,我会给出完整的代码。

好了,这一章的内容就到这里。三相逆变器的拓扑、开关状态、死区时间,这三个概念是SVPWM的基础。你把这些搞清楚了,后面学SVPWM算法就会轻松很多。