3. SVPWM 基本原理:从空间矢量到七段式实现
好,咱们进入 SVPWM 的核心部分。说实话,我刚接触 SVPWM 时,觉得这东西挺玄乎的——什么空间矢量、扇区判断、作用时间计算,一堆数学公式。但后来我发现,只要把它的物理意义搞明白,剩下的就是套公式而已。
SVPWM 的全称是 Space Vector Pulse Width Modulation,空间矢量脉宽调制。它和传统的 SPWM(正弦脉宽调制)最大的区别在于:SPWM 追求的是三相电压分别正弦,而 SVPWM 追求的是合成的电压矢量在空间里画一个圆。你想想看,电机要的是旋转磁场,画圆才是正道。
3.1 空间矢量的定义
先说说什么是空间矢量。三相逆变器有六个开关管,上桥臂和下桥臂互补导通。我们把三个上桥臂的开关状态记作 (Sa, Sb, Sc),1 表示上管导通,0 表示下管导通。
那么一共有多少种状态?2³ = 8 种。其中 6 种是非零矢量,2 种是零矢量(000 和 111)。这 6 个非零矢量在空间里把 360° 分成了 6 个扇区,每个扇区 60°。
核心概念:电压空间矢量 V = (2/3) × (Va + Vb × e^(j2π/3) + Vc × e^(j4π/3))
这个公式就是 Clarke 变换的矢量形式,把三相静止坐标系映射到两相静止坐标系(αβ 坐标系)。
我在项目中遇到过一个问题:刚开始用 SVPWM 时,我直接用三相电压的瞬时值去算矢量,结果发现波形不对。后来才意识到,这里的 Va、Vb、Vc 是相电压,不是线电压。这个坑我踩过,你们别踩。
3.2 电压空间矢量的合成
6 个基本矢量只能指向 6 个固定的方向,但我们要的是任意方向的矢量。怎么办?用相邻的两个基本矢量去合成。
比如,目标矢量 Vref 落在扇区 I(0°~60°),那就用 V1(100)和 V2(110)来合成。再加上零矢量 V0(000)或 V7(111)来凑时间。这就是所谓的「伏秒平衡」原理:
Vref × Ts = V1 × T1 + V2 × T2 + V0 × T0
其中 Ts 是 PWM 周期,T1、T2、T0 分别是 V1、V2、V0 的作用时间。说白了,就是在一个周期里,让三个矢量的平均效果等于目标矢量。
我的习惯:在调试时,我会先确认 Vref 的幅值不超过六边形内切圆。如果超过了,就进入过调制区,波形会失真。一般控制在直流母线电压的 0.577 倍以内(即 1/√3)。
3.3 扇区判断
要合成矢量,首先得知道目标矢量落在哪个扇区。扇区判断的方法有很多,我常用的是基于 αβ 分量的判断法。
设 Vα、Vβ 是目标矢量在 αβ 坐标系下的分量。定义三个中间变量:
B0 = Vβ
B1 = (√3/2) × Vα - (1/2) × Vβ
B2 = -(√3/2) × Vα - (1/2) × Vβ
然后根据 B0、B1、B2 的符号,查表得到扇区号:
| B0 | B1 | B2 | 扇区 |
|---|---|---|---|
| >0 | >0 | <0 | I |
| >0 | <0 | <0 | II |
| >0 | <0 | >0 | III |
| <0 | <0 | >0 | IV |
| <0 | >0 | >0 | V |
| <0 | >0 | <0 | VI |
嗯,这里要注意:实际代码里我一般用查表法,而不是每次都算符号判断。把 B0、B1、B2 的符号组合成一个 3 位的数,直接查表,效率高很多。
3.4 基本矢量作用时间计算
知道扇区后,就该算 T1 和 T2 了。不同扇区的计算公式略有不同,但本质是一样的。以扇区 I 为例:
T1 = (√3 × Ts / Vdc) × ( (√3/2) × Vα - (1/2) × Vβ )
T2 = (√3 × Ts / Vdc) × Vβ
其中 Vdc 是直流母线电压。如果 T1 + T2 > Ts,说明进入了过调制区,需要等比例缩小:
T1' = T1 × Ts / (T1 + T2)
T2' = T2 × Ts / (T1 + T2)
T0 = 0
否则,零矢量作用时间 T0 = Ts - T1 - T2。
我曾经踩过的坑:在定点 DSP 上实现时,注意数值溢出。√3 约等于 1.732,乘来乘去很容易超过 16 位整数的范围。我一般先把所有系数放大到 Q15 或 Q12 格式,算完再缩回来。
3.5 七段式与五段式 SVPWM
有了 T1、T2、T0,接下来就是怎么安排这些矢量的顺序。常见的有两种:七段式和五段式。
七段式 SVPWM:每个周期内,矢量顺序为 V0 → V1 → V2 → V7 → V2 → V1 → V0。零矢量 V0 和 V7 各占一半时间。这样做的优点是谐波小,但开关次数多——每个周期每个桥臂开关两次,共 6 次开关动作。
五段式 SVPWM:只用一个零矢量,比如 V0 → V1 → V2 → V2 → V1 → V0。开关次数减少到每个周期 4 次,但谐波会大一些。
| 对比项 | 七段式 | 五段式 |
|---|---|---|
| 开关次数/周期 | 6 | 4 |
| 谐波含量 | 低 | 高 |
| 开关损耗 | 高 | 低 |
| 适用场景 | 对谐波敏感 | 对效率敏感 |
我个人习惯在低速时用七段式,因为低速时开关损耗不是主要矛盾,谐波小更重要;高速时切到五段式,减少开关损耗,让逆变器凉快一点。
3.6 SVPWM 整体流程
下面这张图把整个 SVPWM 的流程串起来了,从目标电压到最终的 PWM 波形:
你看,整个流程其实很清晰。从目标电压到扇区判断,再到时间计算和矢量排序,最后生成 PWM 比较值。每一步都有明确的数学公式,代码实现起来并不复杂。
关键点总结:
- 6 个基本矢量把空间分成 6 个扇区
- 用相邻矢量和零矢量合成任意目标矢量
- 扇区判断用 B0/B1/B2 的符号查表
- 作用时间计算注意过调制处理
- 七段式谐波小,五段式开关损耗低