3. 基本矢量作用时间:T1和T2的计算
好,咱们接着聊。上一节我们把扇区判断搞定了,知道了当前参考电压矢量落在哪个扇区。但光知道扇区没用,你得告诉逆变器:在这个PWM周期里,两个相邻的非零矢量各导通多久,零矢量又导通多久。说白了,就是算T1和T2。
我个人习惯把这一步叫做“时间分配”。你想想看,我们有一个参考电压矢量Vref,它是由两个相邻的基本电压矢量合成的。比如在第一扇区,就是V1(100)和V2(110)来合成。那问题就变成了:在一个PWM周期Ts里,V1作用T1时间,V2作用T2时间,剩下的时间给零矢量V0和V7。这个分配比例,决定了合成矢量的方向和大小。
核心思想:伏秒平衡原理。在一个开关周期内,基本矢量作用的时间与其电压值的乘积之和,等于参考矢量与周期的乘积。
3.1 从几何关系推导T1和T2
这里我不喜欢直接甩公式,咱们从几何角度走一遍。以第一扇区为例,Vref在αβ坐标系下的分量是Vα和Vβ。V1(100)的方向是α轴,幅值是2/3·Vdc。V2(110)的方向是60度,幅值也是2/3·Vdc。
把Vref分解到V1和V2的方向上,利用正弦定理或者直接投影,就能得到T1和T2的表达式。我在项目中第一次手推这个公式时,还犯了个低级错误——把角度搞反了,结果电机转起来抖得厉害。后来我养成了一个习惯:每次算完,先检查T1+T2是否小于Ts,如果大于,那就进入过调制区了。
好,直接上结论。对于任意扇区,T1和T2的通用计算公式可以写成:
// 先定义一些中间变量
X = sqrt(3) * Vβ * Ts / Vdc
Y = (sqrt(3)/2 * Vβ + 3/2 * Vα) * Ts / Vdc
Z = (sqrt(3)/2 * Vβ - 3/2 * Vα) * Ts / Vdc
// 然后根据扇区查表
switch(Sector)
{
case 1: T1 = -Z; T2 = X; break;
case 2: T1 = Z; T2 = Y; break;
case 3: T1 = X; T2 = -Y; break;
case 4: T1 = -X; T2 = Z; break;
case 5: T1 = -Y; T2 = -Z; break;
case 6: T1 = Y; T2 = -X; break;
}
嗯,这里要注意:公式里的Vα和Vβ,是经过反Park变换后的值,也就是你上一章算出来的那个。千万别拿原始电流值往里套,我见过有人这么干过,结果算出来的T1、T2完全不对。
3.2 过调制处理:T1+T2 > Ts怎么办?
在实际系统中,Vref的幅值不能超过六边形的内切圆半径,否则T1+T2会大于Ts。这时候如果不做处理,逆变器输出波形会畸变,电流谐波增大,电机噪音也会变大。
我曾经在一个风机项目里遇到过这个问题。当时电机在高速区运行时,突然电流失控,查了半天发现是过调制没处理好。后来加了一段简单的限幅逻辑,问题就解决了。
避坑指南:当T1+T2 > Ts时,必须对T1和T2进行等比例缩放。我曾经直接截断T1和T2到最大值,结果导致电压矢量方向偏移,电机转矩脉动很大。正确的做法是:
if(T1 + T2 > Ts)
{
T1 = T1 * Ts / (T1 + T2);
T2 = T2 * Ts / (T1 + T2);
}
// 这样既保持了矢量方向不变,又保证了总时间不超过Ts
3.3 零矢量时间的分配
算完T1和T2,剩下的时间就是零矢量的作用时间:T0 = Ts - T1 - T2。零矢量有两个:V0(000)和V7(111)。怎么分配它们的时间,会影响开关损耗和电流纹波。
我个人习惯采用七段式SVPWM,也就是把零矢量时间平均分配给V0和V7,并且把它们放在矢量的首尾和中间。这样做的好处是:每个开关周期内,每个桥臂只开关一次,开关损耗最小。而且电流纹波也相对较小。
| 分配方式 | V0时间 | V7时间 | 特点 |
|---|---|---|---|
| 七段式(推荐) | T0/2 | T0/2 | 开关损耗小,谐波小 |
| 五段式 | T0 | 0 | 开关次数少,但谐波大 |
| 不对称分配 | 自定义 | 自定义 | 用于特定优化场景 |
小技巧:在低调制比(比如电机启动时)情况下,T1和T2都很小,T0很大。这时候七段式SVPWM的零矢量时间很长,电流纹波反而会变大。我一般会在调制比低于0.1时,切换到五段式,减少零矢量时间,改善电流波形。
3.4 本章知识体系图
下面这张图把T1、T2计算的整个流程串起来了,从输入到输出,每一步都很清楚。
3.5 实战中的几个坑
最后,我把自己踩过的几个坑列出来,你写代码的时候可以留意一下:
- 浮点数精度问题:在MCU里做SVPWM,如果直接用float算T1、T2,累积误差会导致电流波形有毛刺。我建议把所有中间变量都转成Q15或Q24格式的定点数,尤其是那些低成本的MCU。
- 扇区边界处理:当Vref正好落在扇区边界上时,T1或T2可能会算出负值。这时候要做限幅处理,把负值钳位到0。我曾经没做这个处理,结果电机在过扇区时电流突变,差点触发过流保护。
- 死区补偿:T1和T2算出来之后,还要考虑死区时间的影响。死区会导致实际输出电压比理论值偏低,尤其是在低速轻载时。我一般会在T1和T2上加上一个死区补偿量,具体补偿值跟电流方向有关。