二、三相逆变器基础:半桥拓扑、开关状态与电压矢量

好,咱们正式开始聊SVPWM。在深入算法之前,得先把它的“物理基础”搞清楚——也就是三相逆变器。你想想看,没有这个硬件平台,再好的算法也只是纸上谈兵。

我个人习惯把三相逆变器看成是三个“半桥”的组合。搞懂了半桥,整个逆变器就通了。

2.1 半桥拓扑:最基本的功率单元

一个半桥,说白了就是两个开关管(比如MOSFET或IGBT)串联起来,中间拉出一个输出端。上管导通时,输出端接直流母线正极;下管导通时,输出端接地。

这里有个关键点:上下管绝对不能同时导通。我在项目中遇到过新手写代码,死区时间没加够,结果上管还没完全关断,下管就开了——瞬间直通短路,管子直接冒烟。嗯,那味道,记忆犹新。

⚠️ 避坑指南: 我曾经因为死区时间设置过短,烧过一块驱动板。建议死区时间至少设置为开关管上升/下降时间的3-5倍,并且用硬件逻辑互锁做双重保护。

半桥的输出电压只有两种状态:

  • 上管导通、下管关断 → 输出为 VDC(高电平)
  • 上管关断、下管导通 → 输出为 0V(低电平)

你可能会问:那能不能两个都关断?可以,这叫“高阻态”,但正常PWM调制时我们不用这个状态。

2.2 三相逆变器:三个半桥的组合

把三个半桥拼在一起,共用直流母线,就构成了三相逆变器。三个输出端分别接电机的U、V、W三相绕组。

每个半桥独立控制,所以三相逆变器一共有 2³ = 8 种开关状态。这8个状态,就是SVPWM的“原材料”。

状态编号 U相 (A相) V相 (B相) W相 (C相) 二进制编码
0 0 (下管通) 0 0 000
1 1 (上管通) 0 0 100
2 1 1 0 110
3 0 1 0 010
4 0 1 1 011
5 0 0 1 001
6 1 0 1 101
7 1 1 1 111

注意看,状态0(000)和状态7(111)比较特殊——它们三个桥臂要么全低,要么全高。这时候电机三相绕组被短接,没有电压差,所以叫“零矢量”。

2.3 电压矢量:从开关状态到空间向量

好了,现在我们有8个开关状态。但怎么把它们变成电机能用的电压呢?

这里要用到Clark变换的思想。把三相电压(U、V、W)投影到α-β两相静止坐标系上。每个开关状态对应一个固定的电压矢量。

我直接给你结果:6个非零矢量把360°空间均匀分成6个扇区,每个扇区60°。两个零矢量在原点。

💡 核心结论: 6个非零矢量的幅值都是 (2/3)·VDC,方向依次相差60°。零矢量幅值为0。

你想想看,这6个矢量就像6个“路标”,把整个电压平面划分成6个三角形区域。我们要合成的任意电压矢量,一定落在某个三角形里。

举个例子:假设我们要合成一个指向30°方向的电压矢量。它落在扇区I(0°~60°)里。那我们就用扇区I边上的两个矢量(100和110)来“拼凑”它。

怎么拼?这就是SVPWM的核心——伏秒平衡原理。说白了就是:

目标矢量 × 开关周期 = 矢量A × 作用时间A + 矢量B × 作用时间B + 零矢量 × 剩余时间

嗯,这里要注意:零矢量(000或111)的作用时间就是周期减去两个非零矢量的时间。零矢量不产生有效电压,但用来调节占空比。

2.4 实战中的小细节

我在调试第一版SVPWM程序时,发现电机转起来噪声特别大。查了半天,原来是扇区判断的边界条件写错了——角度刚好在0°和360°交界处时,程序跳到了错误的扇区。

🔧 经验之谈: 扇区判断时,建议用“大于等于”和“小于”的组合,避免边界重叠。比如扇区I定义为 [0°, 60°),扇区II为 [60°, 120°),以此类推。

另外,零矢量的选择也有讲究。我个人习惯在扇区切换时交替使用000和111,这样可以减少开关次数,降低开关损耗。你想想看,如果一直用000,那每次切换非零矢量时,三个桥臂可能都要动作,损耗就上去了。

好了,这一章的内容就这些。三相逆变器的8个开关状态和6个电压矢量,是SVPWM的基石。下一章我们正式进入SVPWM的实现细节——扇区判断和时间计算。