2、SVPWM原理(上):三相逆变器拓扑、基本电压矢量、扇区判断、矢量作用时间计算
好,咱们正式开始啃SVPWM这块硬骨头。
说实话,SVPWM是FOC里最绕、但也最核心的一环。我当年刚接触的时候,看着那一堆矢量图和扇区判断,头都大了。但后来我发现,只要把三相逆变器拓扑搞明白,后面那些扇区、时间计算,其实都是顺理成章的事。
这一节,咱们先搞定SVPWM的上半部分。说白了,就是搞清楚:逆变器能输出什么?怎么判断当前该用哪个矢量?每个矢量用多久?
2.1 三相逆变器拓扑:从直流到交流的桥梁
先看最基础的东西——三相逆变器。你想想看,电机要转起来,需要的是三相正弦交流电。但我们手头只有直流母线电压(比如电池或者整流出来的直流电)。怎么把直流变成交流?
答案就是靠六个开关管。我习惯把它们分成三组:上桥臂和下桥臂。每一相(U、V、W)都有一个上管和一个下管。
关键约束:同一相的上、下管绝对不能同时导通!否则就是直通短路,管子瞬间烧掉。我在项目里见过新手调试时,死区时间没设好,结果一上电就冒烟了……嗯,这个教训很深刻。
所以,每一相只有两种合法状态:
- 上管导通、下管关断:该相输出接到直流母线的正极(Vdc/2)
- 上管关断、下管导通:该相输出接到直流母线的负极(-Vdc/2)
三个桥臂,每个桥臂2种状态,一共就是2³ = 8种组合。这就是SVPWM的起点。
2.2 基本电压矢量:八个开关状态
这8种组合,对应着8个基本电压矢量。其中6个是非零矢量(有效矢量),2个是零矢量(上管全开或下管全开)。
我习惯用二进制来表示:(U, V, W),1代表上管通,0代表下管通。比如(100)就是U相上管通,V和W相下管通。
| 开关状态 (U,V,W) | 矢量编号 | 空间位置 | 说明 |
|---|---|---|---|
| (000) | V0 | 原点 | 零矢量,下管全通 |
| (100) | V1 | 0° | 有效矢量 |
| (110) | V2 | 60° | 有效矢量 |
| (010) | V3 | 120° | 有效矢量 |
| (011) | V4 | 180° | 有效矢量 |
| (001) | V5 | 240° | 有效矢量 |
| (101) | V6 | 300° | 有效矢量 |
| (111) | V7 | 原点 | 零矢量,上管全通 |
这6个有效矢量,在空间上把360°分成了6个扇区,每个扇区60°。零矢量在原点,用来调节电压幅值。
我的小技巧:记不住矢量顺序?你只需要记住V1是(100),然后顺时针转,每次只改变一个bit。比如V1(100) → V2(110) → V3(010)……这样就不会搞混了。
2.3 扇区判断:目标电压在哪个区?
现在问题来了:我们想要输出的目标电压矢量(由FOC的电流环算出来的),它落在哪个扇区?
判断扇区,说白了就是看目标电压的α-β分量落在哪个60°区间里。我见过有人用查表法,也有人用角度直接判断。但我个人推荐用三值逻辑判断法,计算量小,适合单片机跑。
具体做法是这样的:
- 先算出三个中间变量:
B1 = Uβ
B2 = (√3/2)*Uα - 0.5*Uβ
B3 = -(√3/2)*Uα - 0.5*Uβ - 然后根据这三个值的正负,得到一个扇区号:
N = 4*sign(B3) + 2*sign(B2) + sign(B1)
其中sign(x) = 1 if x > 0 else 0 - 最后查一个简单的映射表:
N = 1 → 扇区II
N = 2 → 扇区VI
N = 3 → 扇区I
N = 4 → 扇区IV
N = 5 → 扇区III
N = 6 → 扇区V
嗯,这里要注意:不同资料里扇区编号可能不一样。我习惯按逆时针从0°开始编号,扇区I是0°~60°。你只要保持一致就行。
避坑指南:我曾经在扇区判断上栽过跟头。当时用的是角度法,结果在扇区边界(0°、60°、120°等)附近,由于浮点精度问题,判断会来回跳变,导致输出抖动。后来换成三值逻辑法,用定点数算,问题就解决了。
2.4 矢量作用时间计算:伏秒平衡
知道目标矢量在哪个扇区之后,下一步就是算时间。SVPWM的核心思想是伏秒平衡——用相邻的两个有效矢量和零矢量,合成出任意方向和大小的目标矢量。
假设目标矢量在扇区I(0°~60°),相邻的有效矢量是V1(100)和V2(110)。那么:
Vref * Ts = V1 * T1 + V2 * T2 + V0 * T0
其中Ts是PWM周期,T1、T2、T0分别是V1、V2、V0的作用时间。
经过坐标变换和投影计算,可以得到:
// 扇区I的时间计算公式
T1 = (√3 * Ts / Vdc) * ( (√3/2)*Uα - 0.5*Uβ )
T2 = (√3 * Ts / Vdc) * Uβ
T0 = Ts - T1 - T2
其他扇区的公式类似,只是Uα和Uβ的系数不同。我一般会把这6个扇区的系数做成一个查找表,运行时直接查,省得每次算三角函数。
重要提醒:如果T1 + T2 > Ts,说明目标电压已经超出了逆变器能输出的最大范围(过调制区)。这时候需要对T1和T2进行等比例缩小处理,保证T1 + T2 = Ts。这就是过调制处理,咱们后面会专门讲。
算完T1、T2、T0之后,还要把它们分配给三相的PWM比较值。这里有个小细节:为了减少开关损耗和电流纹波,我习惯把零矢量V0和V7各用一半时间,也就是T0/2分配给V0,T0/2分配给V7。这样开关切换次数最少。
好了,这一节的内容就到这儿。咱们把三相逆变器拓扑、8个基本矢量、扇区判断、时间计算都捋了一遍。下一节,我会接着讲怎么把这些时间值转换成实际的PWM占空比,以及七段式和五段式SVPWM的区别。
到时候见。