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 的符号,查表得到扇区号:

B0B1B2扇区
>0>0<0I
>0<0<0II
>0<0>0III
<0<0>0IV
<0>0>0V
<0>0<0VI

嗯,这里要注意:实际代码里我一般用查表法,而不是每次都算符号判断。把 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 次,但谐波会大一些。

对比项七段式五段式
开关次数/周期64
谐波含量低高
开关损耗高低
适用场景对谐波敏感对效率敏感

我个人习惯在低速时用七段式,因为低速时开关损耗不是主要矛盾,谐波小更重要;高速时切到五段式,减少开关损耗,让逆变器凉快一点。

3.6 SVPWM 整体流程

下面这张图把整个 SVPWM 的流程串起来了,从目标电压到最终的 PWM 波形:

SVPWM 实现流程图 目标电压 Vα, Vβ 扇区判断 计算 T1, T2, T0 过调制判断与修正 七段式/五段式 矢量排序 生成 PWM 比较值 根据 B0/B1/B2 符号 查表得到扇区号 T1+T2 > Ts 时 等比例缩小

你看,整个流程其实很清晰。从目标电压到扇区判断,再到时间计算和矢量排序,最后生成 PWM 比较值。每一步都有明确的数学公式,代码实现起来并不复杂。

关键点总结:

  • 6 个基本矢量把空间分成 6 个扇区
  • 用相邻矢量和零矢量合成任意目标矢量
  • 扇区判断用 B0/B1/B2 的符号查表
  • 作用时间计算注意过调制处理
  • 七段式谐波小,五段式开关损耗低