4. SVPWM扇区判断与作用时间计算
好,咱们进入SVPWM最核心的计算环节。扇区判断、作用时间、过调制处理——这三个东西串起来,就是SVPWM的骨架。我个人习惯把这部分叫作“坐标到时间的翻译”。你想想看,给定一个电压矢量,你得先知道它在哪个扇区,然后算出两个相邻基本矢量各作用多久,最后还得保证时间不超一个开关周期。每一步都有坑,咱们一个一个来拆。
4.1 扇区判断算法
为什么要先判断扇区?因为SVPWM的六个基本矢量把空间分成了六个60°的扇区。你给一个目标电压矢量,它落在哪个扇区,就用哪两个相邻的基本矢量去合成。说白了,扇区判断就是给矢量“定位”。
判断方法有很多种。最直接的是用角度,但角度计算涉及反正切,在MCU里跑起来太慢。工程上常用的是三值逻辑判断法——只用Uα、Uβ的符号和大小关系,全是加减和比较,没有三角函数。
具体做法是这样的:定义三个中间变量:
B1 = Uβ
B2 = √3 * Uα - Uβ
B3 = -√3 * Uα - Uβ
然后看这三个变量的正负。每个变量取0或1(正为1,负为0),组合成一个三位二进制数。查表就能得到扇区号。我当年第一次在DSP上实现这个算法时,发现一个很隐蔽的问题——当Uα或Uβ接近零时,浮点比较会抖动。后来我加了一个小阈值做滞回处理,才彻底解决。
扇区与B1、B2、B3的对应关系如下:
| 扇区 | B1 (Uβ) | B2 (√3Uα - Uβ) | B3 (-√3Uα - Uβ) |
|---|---|---|---|
| I (0°~60°) | + | + | - |
| II (60°~120°) | + | - | - |
| III (120°~180°) | + | - | + |
| IV (180°~240°) | - | - | + |
| V (240°~300°) | - | + | + |
| VI (300°~360°) | - | + | - |
4.2 基本矢量作用时间计算
扇区判断完了,接下来算时间。每个扇区里,目标矢量由两个相邻的基本矢量合成。以扇区I为例,基本矢量是U1(100)和U2(110)。作用时间T1和T2由伏秒平衡方程导出:
T1 = (√3 * Ts / Udc) * (√3/2 * Uα - 1/2 * Uβ)
T2 = (√3 * Ts / Udc) * Uβ
其他扇区的时间公式,本质上是对Uα、Uβ做坐标旋转后再套用这个形式。我建议你直接记住一个通用公式——用三个中间变量X、Y、Z来统一表达:
X = (√3 * Ts / Udc) * Uβ
Y = (√3 * Ts / Udc) * (√3/2 * Uα + 1/2 * Uβ)
Z = (√3 * Ts / Udc) * (-√3/2 * Uα + 1/2 * Uβ)
然后根据扇区查表:
| 扇区 | T1 | T2 |
|---|---|---|
| I | Z | Y |
| II | Y | -X |
| III | -Z | X |
| IV | -X | Z |
| V | X | -Y |
| VI | -Y | -Z |
嗯,这里要注意:T1和T2算出来可能是负的。如果出现负值,说明扇区判断错了,或者电压矢量已经超出了线性调制范围。这时候就要进入过调制处理。
4.3 过调制处理
过调制,说白了就是目标电压矢量太长了,超出了六边形的内切圆。这时候T1+T2 > Ts,没法直接输出。怎么办?两种策略:
- 最小幅值误差法: 保持矢量方向不变,把幅值缩到六边形边界上。这是最常用的方法,谐波小,实现简单。
- 最小相位误差法: 保持幅值不变,调整相位。这种方法在过调制深度较大时有用,但实现复杂,我一般不用。
工程上最常用的是比例缩小法。当T1+T2 > Ts时,做如下处理:
T1_adj = T1 * Ts / (T1 + T2)
T2_adj = T2 * Ts / (T1 + T2)
T0 = Ts - T1_adj - T2_adj
这样T1_adj和T2_adj的总和刚好等于Ts,零矢量时间T0也自然出来了。我个人的经验是:过调制深度不要超过1.1倍,再往上谐波会急剧增加,电机噪声和损耗都受不了。
下面这张图总结了整个扇区判断、时间计算和过调制处理的流程:
核心要点回顾:
- 扇区判断用三值逻辑,避免三角函数,适合MCU实时计算
- 作用时间用X、Y、Z统一表达,查表即可,代码简洁
- 过调制时做比例缩小,保证T1+T2=Ts,方向不变
- 实际工程中,记得加滞回和限幅,防止边界抖动
好了,扇区判断和时间计算这部分就讲到这里。你把这些公式和流程理清楚,SVPWM的骨架就有了。下一块内容——死区补偿,才是真正考验工程经验的地方。咱们到时候细聊。