3、三相逆变器拓扑:6个开关管的8种开关状态,基本电压矢量

好,咱们进入正题。SVPWM 这东西,说白了就是控制六个开关管,让电机转起来。你想想看,六个开关管,每个只有“开”和“关”两种状态,那总共能组合出多少种状态?没错,23 = 8 种。这 8 种状态,就是 SVPWM 的根基。

我刚开始学 FOC 的时候,总觉得这 8 种状态很抽象。后来在调试一个 2kW 的伺服驱动器时,有一次 IGBT 模块炸了,我拿着示波器去量驱动波形,才真正把这张拓扑图和实际波形对应起来。嗯,纸上得来终觉浅啊。

3.1 三相逆变器拓扑结构

先看这张经典的拓扑图。左边是直流母线,电压是 Vdc。右边是三相输出,分别接电机的 U、V、W 三相。中间是六个开关管,我习惯叫它们 Q1~Q6。

  • 上桥臂:Q1、Q3、Q5
  • 下桥臂:Q2、Q4、Q6

这里有个铁律:同一相的上下桥臂不能同时导通。为什么?因为一旦同时导通,直流母线就直接短路了,电流会瞬间飙升,管子必炸。我在实验室亲眼见过一次,那声音,跟放鞭炮似的。

⚠️ 死区时间:实际驱动时,上下管切换必须插入死区时间(通常几百纳秒到几微秒)。我曾经因为死区设得太短,导致上管还没完全关断,下管就开了,结果就是——换管子。

为了方便分析,我们给每个开关管定义一个开关函数。比如 U 相,上管导通、下管关断,我们就记作 Su = 1;反之,上管关断、下管导通,记作 Su = 0。V 相和 W 相同理。

这样,三个开关函数 (Su, Sv, Sw) 就能唯一确定逆变器的状态。

3.2 8种开关状态

三个二进制位,能表示 0~7 这 8 个数。对应到逆变器,就是 8 种开关状态。我习惯把它们列成一张表,一目了然。

状态编号 Su Sv Sw 矢量符号 说明
0 0 0 0 V0 (000) 零矢量,下桥臂全通
1 0 0 1 V1 (001) 有效矢量
2 0 1 0 V2 (010) 有效矢量
3 0 1 1 V3 (011) 有效矢量
4 1 0 0 V4 (100) 有效矢量
5 1 0 1 V5 (101) 有效矢量
6 1 1 0 V6 (110) 有效矢量
7 1 1 1 V7 (111) 零矢量,上桥臂全通

注意看,状态 0 和状态 7 都是零矢量。区别在于:V0 是下桥臂三个管子全通,电机三相直接短路到地;V7 是上桥臂全通,三相短路到母线正极。这两种状态都不会在电机上产生电压差,所以叫“零矢量”。

💡 我的习惯:在代码里,我通常用 0~7 的整数来表示开关状态,而不是用二进制字符串。这样在查表或做扇区判断时,效率更高。

3.3 基本电压矢量

这 8 种状态,对应到电机端子上,会产生什么样的电压呢?我们需要把开关状态映射到 α-β 坐标系上。

假设电机是星形连接,中性点电压为 Vn。那么 U 相端电压 Vu 就是:

V_u = S_u * V_dc - V_n
V_v = S_v * V_dc - V_n
V_w = S_w * V_dc - V_n

经过 Clark 变换(这个后面章节会细讲),我们可以得到每个状态对应的 α-β 轴电压分量。结果就是下面这张经典的矢量图。

核心结论:6 个有效矢量 (V1~V6) 在空间上互差 60°,幅值均为 (2/3)Vdc。2 个零矢量 (V0, V7) 位于原点。

下面这张 SVG 图,把 8 个矢量的空间分布画出来了。我建议你盯着它看几分钟,把每个矢量的位置和对应的开关状态记熟。这是 SVPWM 的“地图”,后面所有扇区判断、作用时间计算,都离不开它。

基本电压矢量空间分布图 α β V₁ (001) V₂ (010) V₃ (011) V₄ (100) V₅ (101) V₆ (110) V₀/V₇ 扇区Ⅰ 扇区Ⅱ 扇区Ⅲ 扇区Ⅳ 扇区Ⅴ 扇区Ⅵ 说明:6个有效矢量将平面分为6个扇区,每个扇区60°。 零矢量 V₀(000) 和 V₇(111) 位于原点,幅值为0。

你看这张图,6 个有效矢量把整个平面分成了 6 个扇区,每个扇区 60°。这就是 SVPWM 的核心思想:用相邻的两个有效矢量,加上零矢量,来合成任意方向、任意大小的目标电压矢量。

举个例子,如果我想合成一个位于扇区Ⅰ的矢量,那就用 V4 (100) 和 V6 (110) 这两个相邻矢量,再配合零矢量 V0 或 V7,通过控制它们的作用时间比例,就能“拼”出目标矢量。

关键点:有效矢量的幅值是 (2/3)Vdc,所以 SVPWM 能合成的最大不失真电压矢量幅值,就是内切圆的半径,也就是 (2/3)Vdc * cos(30°) = Vdc / √3 ≈ 0.577Vdc。这个值比 SPWM 的 0.5Vdc 高了约 15.5%,这就是 SVPWM 母线电压利用率更高的原因。

3.4 从开关状态到实际波形

理论讲完了,咱们看看实际波形长什么样。我拿一个简单的例子:假设我们想让电机输出一个在扇区Ⅰ的电压矢量。

在一个 PWM 周期内,开关管的导通顺序可能是这样的:

  1. 先打 V0 (000):下桥臂全通,电机三相短路。
  2. 然后打 V4 (100):U 相上管通,V、W 下管通。
  3. 再打 V6 (110):U、V 上管通,W 下管通。
  4. 最后打 V7 (111):上桥臂全通,电机三相短路到母线正极。
  5. 然后反向回去:V6 → V4 → V0。

这种“中心对称”的序列,能有效降低谐波。我早期做项目时,为了省事,用过非对称序列,结果电流波形明显变差,电机噪音也大了不少。后来老老实实改回对称序列,问题就解决了。

💡 避坑指南:我曾经在切换扇区时,忘记更新比较寄存器的值,导致 PWM 波形出现毛刺。调试了整整一个下午才发现。建议你在代码里加一个扇区切换的断言检查,能省很多事。