一、概述
SVPWM是由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽可能接近于理想的正弦波形。
如图是一个经典的三相逆变电路。在算法模拟中,逆变器是虚拟的模型。在真实工况中,该逆变器是真实的元器件。通过控制这六个开关的导通和切断,配合左边的直流电压源,该逆变器可以在右侧电机定子相上产生所需要的正弦电压。这六个开关的开关状态是离散的,所以该算法很适合离散的数字系统。
二、原理介绍
2.1 空间矢量
我们可以在三相绕组ABC的施加如下的相电压:
\[\begin{align} u_a&=U_mcos(\omega_e t)\\ u_b&=U_mcos(\omega_e t - \frac{2}{3}\pi)\\ u_c&=U_mcos(\omega_e t + \frac{2}{3}\pi) \end{align}\]他们的合成电压矢量可以表示为:
\[\begin{align} U_{out} &= u_a + u_b e^{j\frac{2}{3}\pi}+u_c e^{-j\frac{2}{3}\pi}\\ &= U_mcos(\omega_e t) + U_mcos(\omega_e t - \frac{2}{3}\pi)e^{j\frac{2}{3}\pi} + U_mcos(\omega_e t + \frac{2}{3}\pi)e^{-j\frac{2}{3}\pi}\\ &= \frac{3}{2}U_m e^{j\omega_e t} \end{align}\]式中的$e^{j\frac{2}{3}\pi}$表示ABC相绕组在空间上的分布差120°。可以看出合成后的空间矢量幅值为$\frac{3}{2}U_m$,因此为了符合等幅值变换,会在前面乘以个系数$\frac{2}{3}$。这个系数可以在Clark变换中加入。
如下图所示,定义开关量$s_a,s_b,s_c,s_a’,s_b’,s_c’$表示 6 个功率开关器件的开关状态。

当$s_a,s_b,s_c$为1时,表示逆变电路的上桥臂导通,下桥臂关断($s_a’,s_b’,s_c’$为0);反之,当$s_a,s_b,s_c$为0时,表示逆变电路的上桥臂关断,下桥臂导通。由于同一桥臂上下开关器件不能同时导通,则上述的逆变器三路逆变桥的开关组态一共有8种。对于不同的开关状态组合$s_{abc}$,可以得到 8个基本电压空间矢量,这样逆变器的8种开关模式就对应8个电压空间矢量。
SVPWM都假设电机拥有平衡的三相绕组,也就是三相的相电阻相等。当开关状态为:
\[S_a=1, S_b=0, S_c=0\]这三个开关函数可以用一个向量$(1 0 0)$来表示。此时可以根据串联分压定理得到:
\[\begin{align} U_{AN} &= 2U_{NB} = 2U_{NC}\\ U_{dc} &= U_{AN}+U_{NB} \end{align}\]由此,我们可以得出三个相电压为:
\[\begin{align} U_{AN} &= \frac{2}{3}U_{dc}\\ U_{BN} &=U_{CN} = -\frac{1}{3}U_{dc} \end{align}\]该向量可以表示为:
\[U_{out}=\frac{2}{3}(\frac{2}{3}U_{dc}-\frac{1}{3}U_{dc}e^{j\frac{2}{3}\pi}-\frac{1}{3}U_{dc}e^{-j\frac{2}{3}\pi} )= \frac{2}{3}U_{dc}\]其余七组向量也可以计算得出,如下表:
| $s_a$ | $s_b$ | $s_c$ | $U_{AN}$ | $U_{BN}$ | $U_{CN}$ | Vector | $U_{out}$ |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | $U_0$ | 0 |
| 1 | 0 | 0 | $\frac{2}{3}U_{dc}$ | $-\frac{1}{3}U_{dc}$ | $-\frac{1}{3}U_{dc}$ | $U_4$ | $\frac{2}{3}U_{dc}$ |
| 1 | 1 | 0 | $\frac{1}{3}U_{dc}$ | $\frac{1}{3}U_{dc}$ | $-\frac{2}{3}U_{dc}$ | $U_6$ | $\frac{2}{3}U_{dc}e^{j\frac{1}{3}\pi}$ |
| 0 | 1 | 0 | $-\frac{1}{3}U_{dc}$ | $\frac{2}{3}U_{dc}$ | $-\frac{1}{3}U_{dc}$ | $U_2$ | $\frac{2}{3}U_{dc}e^{j\frac{2}{3}\pi}$ |
| 0 | 1 | 1 | $-\frac{2}{3}U_{dc}$ | $\frac{1}{3}U_{dc}$ | $\frac{1}{3}U_{dc}$ | $U_3$ | $-\frac{2}{3}U_{dc}$ |
| 0 | 0 | 1 | $-\frac{1}{3}U_{dc}$ | $-\frac{1}{3}U_{dc}$ | $\frac{2}{3}U_{dc}$ | $U_1$ | $\frac{2}{3}U_{dc}e^{-j\frac{2}{3}\pi}$ |
| 1 | 0 | 1 | $\frac{1}{3}U_{dc}$ | $-\frac{2}{3}U_{dc}$ | $\frac{1}{3}U_{dc}$ | $U_5$ | $\frac{2}{3}U_{dc}e^{-j\frac{1}{3}\pi}$ |
| 1 | 1 | 1 | 0 | 0 | 0 | $U_7$ | 0 |
在8种组合电压空间矢量中,包括6个非零矢量以及2各零矢量。它们将复平面分成了六个扇区,如下图所示。

2.2 合成原理
SVPWM算法的理论基础是平均值等效原理,即在一个开关周期$T_s$内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。以扇区I为例,如下图所示。
根据平衡等效原则,可以得到:
再进一步,我们有:
\[\begin{align} &U_{out}=\frac{T_4}{T_s}U_4+\frac{T_6}{T_s}U_6+\frac{T_0}{T_s}U_0\\ &U_{first}=\frac{T_4}{T_s}U_4\\ &U_{second}=\frac{T_6}{T_s}U_6 \end{align}\]观察图中,我们不难得出:
\[\frac{|U_{out}|}{\sin(\frac{2}{3}\pi)}=\frac{|U_{first}|}{\sin(\frac{\pi}{3}-\theta)}=\frac{|U_{second}|}{\sin(\theta)}\]将 \(|U_4|=\frac{2}{3}U_{dc},|U_6|=\frac{2}{3}U_{dc},U_{out}=U_m\)代入计算得出:
\[\begin{align} &T_4 = \sqrt{3}\frac{U_m}{U_{dc}}T_s\sin(\frac{\pi}{3}-\theta)\\ &T_6 = \sqrt{3}\frac{U_m}{U_{dc}}T_s\sin(\theta)\\ &T_0 = \frac{1}{2}(T_s-T_4-T_6) \end{align}\]三、算法实现
3.1 扇区判断
SVPWM算法首先需要知道要合成的参考电压向量$U_{out}$落在了哪个扇区。然后算法就可以根据该扇区相邻的两个非零向量和两个零向量来合成该参考电压向量。
我们可以将$U_{out}$分解在电机定子的$\alpha-\beta$坐标系上(Clark变换)。对应在两个坐标轴上的电压量是$U_\alpha$和$U_\beta$。 令:
\[\begin{align} &U_{ref1} = U_{\beta}\\ &U_{ref2} = -\frac{1}{2}U_{\beta}+\frac{\sqrt{3}}{2}U_{\alpha}\\ &U_{ref3} = -\frac{1}{2}U_{\beta}-\frac{\sqrt{3}}{2}U_{\alpha} \end{align}\]如图所示,当$U_{ref1}>0,U_{ref2}>0,U_{ref3}<0$时,处在扇区I。

同理,可得如下表:
| $U_{ref1}$ | $U_{ref2}$ | $U_{ref3}$ | 扇区 |
|---|---|---|---|
| $>0$ | $>0$ | $>0$ | 不存在 |
| $>0$ | $>0$ | $<0$ | I |
| $>0$ | $<0$ | $>0$ | III |
| $>0$ | $<0$ | $<0$ | II |
| $<0$ | $>0$ | $>0$ | V |
| $<0$ | $>0$ | $<0$ | VI |
| $<0$ | $<0$ | $>0$ | IV |
| $<0$ | $<0$ | $<0$ | 不存在 |
3.2 矢量作用时间计算
仍然假设$U_{out}$落在第一扇区,可求得:
\[\begin{align} &U_{\alpha}=\frac{T_4}{T_s}|U_4|+\frac{T_6}{T_s}|U_6|\cos(\frac{\pi}{3})\\ &U_{\beta}=\frac{T_6}{T_s}|U_6|\sin(\frac{\pi}{3}) \end{align}\]通过简单计算后可得到:
\[\begin{align} &T_4=\frac{\sqrt{3}T_s}{2U_{dc}}(\sqrt{3}U_\alpha-U_\beta)\\ &T_6=\frac{\sqrt{3}T_s}{U_{dc}}(U_\beta) \end{align}\]同理可得其他扇区的作用时间为:
| 扇区 | $T_{first}$ | $T_{second}$ |
|---|---|---|
| I | $T_4=\frac{\sqrt{3}T_s}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)$ | $T_6=\frac{\sqrt{3}T_s}{U_{dc}}(U_\beta)$ |
| II | $T_2=\frac{\sqrt{3}T_s}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)$ | $T_6=\frac{\sqrt{3}T_s}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)$ |
| III | $T_2=\frac{\sqrt{3}T_s}{U_{dc}}(U_\beta)$ | $T_3=\frac{\sqrt{3}T_s}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)$ |
| IV | $T_1=\frac{\sqrt{3}T_s}{U_{dc}}(-U_\beta)$ | $T_3=\frac{\sqrt{3}T_s}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)$ |
| V | $T_1=\frac{\sqrt{3}T_s}{U_{dc}}(-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)$ | $T_5=\frac{\sqrt{3}T_s}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta)$ |
| VI | $T_4=\frac{\sqrt{3}T_s}{U_{dc}}(\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta)$ | $T_5=\frac{\sqrt{3}T_s}{U_{dc}}(-U_\beta)$ |
$T_{first}$代表每个扇区第一个非零矢量的持续时间,$T_{second}$代表每个扇区第二个非零矢量的持续时间。
对于电机控制来说,常见的,我们使用上下计数的三角形载波(Up-Down-Count)来确定PWM的切换点。 我们首先定义三个变量:
\[\begin{align} &T_a = \frac{T_s-T_{first}-T_{second}}{4}\\ &T_b = T_a+\frac{T_{first}}{2}\\ &T_c = T_b+\frac{T_{second}}{2} \end{align}\]由图可知,这三个变量代表了abc三相开关切换的时间点。
对于不同的扇区,切换的时间点$T_{cm}$可以表示为:
| 扇区 | I | II | III | IV | V | VI |
| $T_{cm1}$ | $T_a$ | $T_b$ | $T_c$ | $T_c$ | $T_b$ | $T_a$ |
| $T_{cm2}$ | $T_b$ | $T_a$ | $T_a$ | $T_b$ | $T_c$ | $T_c$ |
| $T_{cm3}$ | $T_c$ | $T_c$ | $T_b$ | $T_a$ | $T_a$ | $T_b$ |
四、优化计算
通过上述的推导,我们可以发现SVPWM的计算过程比较复杂。因此,我们可以通过优化其计算过程,减少对控制芯片算力的需求。 通过对下表的计算可以看出(为简化计算,忽略部分相同系数),扇区I和IV,扇区II和V,扇区III和VI所对应的切换时间计算公式$T_{cm}$是相同的。
| 扇区 | $T_{a}$ | $T_{b}$ | $T_{c}$ |
| I | $-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{3}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ |
| II | $-U_\beta$ | $-\sqrt{3}U_\alpha$ | $U_\beta$ |
| III | $\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{3}{2}U_\beta$ | $-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ |
| IV | $\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{3}{2}U_\beta$ | $-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ |
| V | $U_\beta$ | $-\sqrt{3}U_\alpha$ | $-U_\beta$ |
| VI | $-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{3}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ |
| 扇区 | $T_{cm1}$ | $T_{cm2}$ | $T_{cm3}$ |
| I | $-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{3}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ |
| II | $-\sqrt{3}U_\alpha$ | $-U_\beta$ | $U_\beta$ |
| III | $-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{3}{2}U_\beta$ |
| IV | $-\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{3}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ |
| V | $-\sqrt{3}U_\alpha$ | $-U_\beta$ | $U_\beta$ |
| VI | $-\frac{\sqrt{3}}{2}U_\alpha+\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha-\frac{1}{2}U_\beta$ | $\frac{\sqrt{3}}{2}U_\alpha+\frac{3}{2}U_\beta$ |
同样的,我们可以对扇区判断做简化,令三个临时变量:
\[\begin{align} &tmp_1 = U_\beta \\ &tmp_2 = \frac{1}{2}U_\beta +\frac{\sqrt{3}}{2}U_\alpha\\ &tmp_3 = tmp_2-tmp_1 \end{align}\]通过下述代码,实现对切换时间的赋值。其中N和扇区的关系是一一对应。
N=3;
N=(tmp2>0)?(N-1):N;
N=(tmp3>0)?(N-1):N;
N=(tmp1<0)?(7-N):N;
if(N==1||N==4)
{
Tcm1 = tmp2;
Tcm2 = tmp1 - tmp3;
Tcm3 =-tmp2;
}
else if(N==2||N==5)
{
Tcm1 = tmp3 + tmp2;
Tcm2 = tmp1;
Tcm3 =-tmp1;
}
else
{
Tcm1 = tmp3;
Tcm2 =-tmp3;
Tcm3 =-tmp1-tmp2;
}注:此种扇区判断的方式得出的$T_{cm}$符号与前述方法相反。