3、基本矢量作用时间:T1/T2计算原理、七段式SVPWM时序、过调制处理
这一节,我们正式进入SVPWM的核心——时间计算。说白了,就是搞清楚每个扇区里,两个基本矢量各待多久,零矢量又该插在哪。搞懂了这些,你写出来的PWM波才能让电机转得又稳又顺。
3.1 T1/T2的计算原理
先回忆一下,我们在第2章把参考电压矢量 Uref 分解到了某个扇区的两个相邻基本矢量上。现在要做的,就是算出这两个矢量的作用时间 T1 和 T2。
我个人习惯用「伏秒平衡」来理解这件事。在一个PWM周期 Ts 内,让基本矢量Ux作用T1时间,Uy作用T2时间,零矢量作用T0时间,它们产生的合成效果,应该和Uref一直作用Ts时间完全一样。公式长这样:
Uref * Ts = Ux * T1 + Uy * T2 + U0 * T0
把Uref往αβ轴上一投影,再结合基本矢量的幅值(2/3 * Udc),就能解出T1和T2。以第I扇区为例,Ux是U4(100),Uy是U6(110),算出来的结果是:
| 参数 | 表达式 |
|---|---|
| T1 | √3 * Ts * |Uref| / Udc * sin(π/3 - θ) |
| T2 | √3 * Ts * |Uref| / Udc * sin(θ) |
| T0 | Ts - T1 - T2 |
嗯,这里要注意,θ是Uref在当前扇区内的角度,范围是0到60度。实际工程里,我们不会直接算sin,太慢了。一般会先把Uα和Uβ算出来,然后用查表或者CORDIC算法搞定。
3.2 七段式SVPWM时序
算出了T1、T2、T0,接下来就是怎么把它们排成PWM波形。最常见的,就是七段式SVPWM。为什么叫七段?因为一个周期里,开关状态要切换7次。
七段式的核心思想是:每次切换只改变一个桥臂的开关状态。这样能最大程度减小开关损耗和电压尖峰。你想想看,如果一次变两个桥臂,那电流纹波得多大?
还是以第I扇区为例,它的七段式时序是这样的:
U0(000) → U4(100) → U6(110) → U7(111) → U6(110) → U4(100) → U0(000)
你看,从U0到U4,只变了A相;从U4到U6,只变了B相;从U6到U7,只变了C相。反过来也一样。整个波形是对称的,这样谐波含量也低。
每个矢量的作用时间分配如下:
| 矢量 | 作用时间 |
|---|---|
| U0(000) | T0/4 |
| U4(100) | T1/2 |
| U6(110) | T2/2 |
| U7(111) | T0/2 |
| U6(110) | T2/2 |
| U4(100) | T1/2 |
| U0(000) | T0/4 |
其他扇区的时序,逻辑完全一样,只是换成了对应的基本矢量。我建议你把这个表背下来,或者写死在代码里,调试的时候会省很多事。
3.3 过调制处理
算出来的T1+T2,如果大于Ts,会发生什么?
说白了,就是Uref太大了,超出了基本矢量能合成的范围。这时候,我们就进入了过调制区。如果不处理,电机就会失控,电流会爆增。
过调制处理,本质上是一种「取舍」策略。我常用的方法有两种:
- 比例缩小法(最小幅值误差): 保持T1和T2的比例不变,把它们等比例缩小,直到T1+T2 = Ts。这样Uref的方向不变,但幅值被削了。适合对相位精度要求高的场合。
- 保持最大矢量法(最小相位误差): 优先保证T1和T2中较大的那个不变,只缩小较小的那个。这样能尽量保持幅值,但相位会偏。适合对电压利用率要求高的场合。
实际工程里,我90%的情况都用比例缩小法。代码实现很简单:
if (T1 + T2 > Ts) {
float scale = Ts / (T1 + T2);
T1 = T1 * scale;
T2 = T2 * scale;
T0 = 0;
}
你看,就这几行代码,就能保证系统不炸。但要注意,过调制时T0=0,意味着零矢量没了,开关频率会变,谐波也会变差。所以,过调制只能作为短时应急手段,不能长期运行。
好了,T1/T2的计算、七段式时序、过调制处理,这三块拼起来,就是SVPWM的完整骨架。下面这张图,帮你把整个流程串起来:
这张图把整个流程串起来了:从输入Uα、Uβ开始,先判断扇区,再算T1/T2,然后判断是否过调制,最后生成七段式时序。每一步都环环相扣,缺一不可。