第2章:三相逆变器拓扑——从电路到开关状态
做SVPWM,你首先得搞清楚你手里控制的是什么。说白了,就是那个三相全桥逆变器。我见过不少新手,算法写得飞起,一上电就炸管子,为什么?就是对拓扑结构理解不够深。
这一章,我们就把逆变器的底裤扒干净。从电路结构到开关状态,再到那个让人头疼的死区时间,一个一个说清楚。
2.1 三相全桥逆变器结构
先看电路。三相全桥逆变器,说白了就是三个半桥拼在一起。每个半桥有两个开关管,上管和下管。总共六个开关管,这就是我们常说的“六脉神剑”。
我习惯把电路分成三部分来看:
- 直流母线:提供稳定的直流电压,一般叫Vdc。母线电容是储能和滤波用的,这个电容选型很关键,我后面会讲。
- 三相全桥:六个开关管(IGBT或MOSFET),每相一个桥臂。上管导通时,该相输出接正母线;下管导通时,接负母线。
- 负载:通常是三相电机,星形或三角形接法。电机绕组就是我们的感性负载。
你想想看,六个开关管,每个只有两种状态:导通或关断。那总共就有2的6次方,64种状态。但实际能用的,只有8种。为什么?因为同一桥臂的上下管不能同时导通,否则就是直通短路,瞬间炸管。这个我后面会细说。
核心要点:三相全桥逆变器的本质,就是把直流电变成交流电。通过控制六个开关管的通断,在电机绕组上合成出我们想要的电压矢量。
下面这张图,是我自己画的逆变器拓扑结构,你看一眼就明白了。
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就炸了。后来查原因,就是死区不够,上下管瞬间直通。
死区时间的影响,我总结了几点:
- 电压损失:死区时间内,电流通过续流二极管续流,输出电压会偏离理想值。这个偏差和电流方向有关。
- 电流畸变:死区效应会导致电流波形出现“平顶”现象,尤其在过零点附近。
- 转矩脉动:对于电机控制,死区会引起额外的转矩脉动,影响控制精度。
那死区时间设多少合适?这个没有固定值,取决于你的开关管型号和驱动电路。我一般按以下步骤来定:
- 查开关管数据手册,找到关断延迟时间(t_doff)和下降时间(t_f)。
- 死区时间至少取 (t_doff + t_f) 的1.5倍。
- 留点余量,再加个0.5~1微秒。
- 上电实测,用示波器看上下管驱动波形,确保没有重叠。
警告:死区时间不是越大越好。死区太大,电压损失严重,电流畸变明显,电机噪音大、效率低。我见过有人设了10微秒的死区,结果电机嗡嗡响,根本转不起来。死区时间要在安全和性能之间找平衡。
下面这张图,展示了死区时间在驱动波形中的位置:
最后,我再说一个实际调试中的技巧。死区补偿,是消除死区影响的关键手段。基本思路是:根据电流方向,在PWM占空比上叠加一个补偿量。电流流出桥臂时,死区导致电压损失,需要增加占空比;电流流入桥臂时,死区导致电压增加,需要减小占空比。
这个补偿量怎么算?说白了就是:
// 死区补偿伪代码
if (电流方向 == 流出桥臂) {
PWM占空比 += 死区时间 / PWM周期;
} else {
PWM占空比 -= 死区时间 / PWM周期;
}
当然,实际实现要比这个复杂。电流过零点附近,方向判断不准,补偿反而会引入畸变。我一般会在过零点附近做线性过渡,或者干脆不补偿。这个后面讲SVPWM实现时,我会给出完整的代码。
好了,这一章的内容就到这里。三相逆变器的拓扑、开关状态、死区时间,这三个概念是SVPWM的基础。你把这些搞清楚了,后面学SVPWM算法就会轻松很多。