MBD笔记:SVPWM技术(二)
三相电压源逆变器PWM技术
主要介绍三相电源逆变器PWM技术的基本原理和仿真建模:
1)2电平空间矢量调制(SVPWM)算法的工作原理、实现方法,给出采用Simulink模块、s函数方法搭建的仿真模型;
2)几种常用的正弦脉宽调制(SPWM)算法的工作原理,matlab建模方法.
逆变器是一个电力电子转换器,核心功能是把直流电(DC)变成交流电(AC),还能精准控制交流电的频率、幅值和相位,是电机驱动、光伏并网等场景的 “心脏” 部件.
三相电量的空间矢量表示
SVPWM控制策略:依据变流器空间电压(电流)矢量切换来控制变流器的一种新思路、策略,抛弃原来的SPWM算法,采用逆变器空间电压矢量的切换,以获得准圆形旋转磁场,在不高的开关频率条件下,使得交流电机获得较SPWM更好的控制性能.
SVPWM算法,是对应于交流电机中的 三相电压源逆变器功率器件的 一种特殊的 开关触发顺序和脉宽大小的组合,这种开关触发顺序和组合,将在定子线圈中产生三相互差120°电角度、失真较小的正弦波电流波形.
与直接SPWM相比,SVPWM优点:
1)SVPWM优化谐波程度较高,消除谐波效果要比SPWM好,实现容易,并且可以提高电压利用率;
2)SVPWM提高了电压源逆变器的直流电压利用率、电机的动态响应速度,同时减小了电机的转矩脉动等缺点;
3)SVPWM比较适合数字控制系统.
三相DC/AC逆变器、AC/DC变流器控制中,通常三相变量要分别描述. 如果能将三相3个标量用一个合成量表示,并保持信息完整性,则三相问题将简化为单相的问题.
假设三相3个标量\(x_a,x_b,x_c\),满足\(x_a+x_b+x_c=0\)(三相平衡系统的零序分量为零),那么可引入三相静止坐标系到复平面的变换公式:
其中,\(a = e^{j\frac{2}{3}\pi}, \quad a^2 = e^{-j\frac{2}{3}\pi}\)
注意:零序分量可参见MBD笔记:三相PMSM数学模型(一) 零序分量
式(1)将3个标量用一个复数\(\mathbf{X_{out}}\)表示,而它在复平面上是一个向量.
由欧拉公式:\(e^{j\theta} = \cos\theta + j\sin\theta\),可得:
所以,
3个标量(\(x_a,x_b,x_c\),位于3个互成120°角坐标轴上)到空间矢量($\mathbf{X}_{\mathrm{out}} $)的变换示意图:

(2)(3)联立\(x_a+x_b+x_c=0\):
本质上,这就是一个克拉克变换(参见MBD笔记:三相PMSM数学模型(一) Clark变换)
如果复数矢量 \(\mathbf{X}_{\mathrm{out}}\) 已知,则可以解出唯一解\(x_a,x_b,x_c\):
假设三相对称正弦相电压瞬时值:
其中,\(U_m\) 相电压幅值,\(\omega = 2πf\) 相电压角频率;三相电压\(u_a,u_b,u_c\)对应的空间矢量电压:
由(2)(3),可求出电压矢量\(\mathbf{U}_{\mathrm{out}}\)实部、虚部:
于是,由欧拉公式,可知:
因此,三相对称正弦相电压对应的空间电压矢量,其运动轨迹如下图所示:

\(\mathbf{U}_{\mathrm{out}}\)顶点运动轨迹是一个圆,且以角速度\(\omega\)逆时针旋转.
反过来,根据空间矢量变换的可逆性(本质是克拉克变换),如果\(\mathbf{U}_{\mathrm{out}}\)顶点运动轨迹是一个圆,那么原三相电压越趋近于三相对称正弦波. 三相对称正弦波电压供电,是理想供电方式,也是逆变器交流输出电压控制的追求目标.
这样,通过空间矢量变换,我们将逆变器的三相输出的3个标量的控制问题,转化为一个矢量的控制问题.
如下图,是一个典型的2电平三相电压源逆变器电路原理图:

定义开关量\(s_a,s_b,s_c,s_a',s_b',s_c'\)(值为0或1)表示6个功率开关器件的开关状态.
1)当\(s_a,s_b\space or \space s_c=1\)时,对应逆变器上桥臂开关器件导通,下桥臂开关关断(即\(s_a',s_b'\space or \space s_c=0\));
2)当\(s_a,s_b\space or \space s_c=0\)时,对应逆变器上桥臂开关器件关断,下桥臂开关导通(即\(s_a',s_b'\space or \space s_c=1\));
对于\(x=a,b,c\)三相开关,
于是,相电压\(u_x=s_x\cdot U_{dc},x=a,b,c\)(\(U_{dc}\)是直流母线电压)
所以,空间电压矢量
其中,\(a=e^{j\frac{2}{3}\omega t}, a^2=e^{-j\frac{2}{3}\omega t}(or \space e^{j\frac{4}{3}\omega t})\)
注:加入系数\(2/3\)对应等幅值Clark变换,为了确保变换前后幅值不变.
将\(u_x=s_x\cdot U_{dc}\) 代入上式,
交流侧相电压\(V_{AN},V_{BN},V_{CN}与开关函数之间关系\):
下面,我们推导(11).
对于三相逆变器对中性点 N 的相电压,我们有以下假设:
- 三相负载星形连接,中性点为 N
- 三相平衡,即\(V_{AN}+V_{BN}+V_{CN}=0\)
- 开关函数 \(s_x\in \{0,1\}\)
以直流负母线为参考,各相端点电压:
中性点电压:
对中性点的相电压:
同理,可得,
验证三相平衡:
将8中开关状态组合代入(11),可得相电压\(V_{AN},V_{BN},V_{CN}\),线电压\(V_{ab},V_{bc},V_{ca}\),及\(\mathbf{U}_{\mathrm{out}}\)关系,如下表:
开关组合与电压的关系表
| \(S_a\) | \(S_b\) | \(S_c\) | \(V_{AN}\) | \(V_{BN}\) | \(V_{CN}\) | \(V_{ab}\) | \(V_{bc}\) | \(V_{ca}\) | \(U_{\mathrm{out}}\) |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) |
| 1 | 0 | 0 | \(\frac{2U_{\mathrm{dc}}}{3}\) | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(U_{\mathrm{dc}}\) | \(0\) | \(-U_{\mathrm{dc}}\) | \(\frac{2}{3}U_{\mathrm{dc}}\) |
| 0 | 1 | 0 | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(\frac{2U_{\mathrm{dc}}}{3}\) | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(-U_{\mathrm{dc}}\) | \(U_{\mathrm{dc}}\) | \(0\) | \(\frac{2}{3}U_{\mathrm{dc}}\mathrm{e}^{\mathrm{j}\frac{2\pi}{3}}\) |
| 1 | 1 | 0 | \(\frac{U_{\mathrm{dc}}}{3}\) | \(\frac{U_{\mathrm{dc}}}{3}\) | \(-\frac{2U_{\mathrm{dc}}}{3}\) | \(0\) | \(U_{\mathrm{dc}}\) | \(-U_{\mathrm{dc}}\) | \(\frac{2}{3}U_{\mathrm{dc}}\mathrm{e}^{\mathrm{j}\frac{\pi}{3}}\) |
| 0 | 0 | 1 | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(-\frac{U_{\mathrm{dc}}}{3}\) | \(\frac{2U_{\mathrm{dc}}}{3}\) | \(0\) | \(-U_{\mathrm{dc}}\) | \(U_{\mathrm{dc}}\) | \(\frac{2}{3}U_{\mathrm{dc}}\mathrm{e}^{\mathrm{j}\frac{4\pi}{3}}\) |
| 1 | 0 | 1 | \(\frac{U_{\mathrm{dc}}}{3}\) | \(-\frac{2U_{\mathrm{dc}}}{3}\) | \(\frac{U_{\mathrm{dc}}}{3}\) | \(U_{\mathrm{dc}}\) | \(-U_{\mathrm{dc}}\) | \(0\) | \(\frac{2}{3}U_{\mathrm{dc}}\mathrm{e}^{\mathrm{j}\frac{5\pi}{3}}\) |
| 0 | 1 | 1 | \(-\frac{2U_{\mathrm{dc}}}{3}\) | \(\frac{U_{\mathrm{dc}}}{3}\) | \(\frac{U_{\mathrm{dc}}}{3}\) | \(-U_{\mathrm{dc}}\) | \(0\) | \(U_{\mathrm{dc}}\) | \(\frac{2}{3}U_{\mathrm{dc}}\mathrm{e}^{\mathrm{j}\pi}\) |
| 1 | 1 | 1 | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) | \(0\) |
可看出,8种开关组合的电压空间中,有6个非零矢量\(\mathbf{U}_1(001),\mathbf{U}_2(010),\mathbf{U}_3(011),\mathbf{U}_4(100),\mathbf{U}_5(101),\mathbf{U}_6(110)\),2个零矢量 \(\mathbf{U}_0(000), \mathbf{U}_7(111)\).
这8个矢量,称为基本空间电压矢量. 将其映射至如下图所示复平面中,可得如下所示电压空间矢量图. 它们将复平面分成了6个区,称为扇区.

SVPWM算法合成原理
SVPWM理论基础:在一个开关周期\(T_s\)内,通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等 —— 平均值等效原理.
如上图,在某个时刻,电压空间矢量\(\mathbf{U}_{out}\)旋转到某个区域,可由组成该区域的2个相邻的非零矢量和零矢量,在时间上的不同组合得到.
以扇区I为例,空间矢量合成示意图:

根据平均值等效原理,
其中,\(T_4,T_6,T_0\) 分别表示\(\mathbf{U}_4,\mathbf{U}_6\)、零矢量\(\mathbf{U}_0(\mathbf{U}_7)\)的作用时间,\(\mathbf{U}_{1}, \mathbf{U}_{2}\) 是电压空间矢量 \(\mathbf{U}_{out}\) 沿 \(\mathbf{U}_4,\mathbf{U}_6\)方向的分量.
要合成所需电压空间矢量,因为基本空间电压矢量已知,所以只需要求其作用时间\(T_4,T_6,T_0\)即可. 在上图\(\mathbf{U}_{out}T_4T_6\)组成的三角形中,应用正弦定理:
其中,\(\theta\) 合成矢量和主矢量的夹角.
可得,
又由合成空间矢量,
所以,
因为空间电压矢量的变换是Clark等幅值变换,所以\(|\mathbf{U}_{out}| = U_m\)
将(14), \(|\mathbf{U}_4(100)|=|\mathbf{U}_6(110)| = \frac{2}{3}U_{dc}, |\mathbf{U}_{out}| = U_m\)代入(15),得
如果记\(T_x,T_y\)分别为先作用基础矢量时长,后作用基础矢量时长,零矢量作用时长\(T_{zero}\),那么,
定义SVPWM调制比为
\[\tag{17} M=\frac{\sqrt 3U_m}{U_{dc}} \]
在SVPWM调制中,要使得合成矢量在线线性区域内调制(过程满足线性叠加关系,即输出电压矢量与基本矢量成线性关系),要满足\(|\mathbf{U}_{out}| = U_m \le 2U_{dc}/3\),即\(M_{max}=\frac{\sqrt 3U_m}{U_{dc}}=\frac{2}{3}=1.1547\)
为什么要满足\(|\mathbf{U}_{out}| = U_m \le 2U_{dc}/3\)?
因为6个非零矢量\(|\mathbf{U}_{1}|=|\mathbf{U}_{2}|=...=|\mathbf{U}_{6}|=\frac{2}{3}U_{dc}\),目标合成矢量\(|\mathbf{U}_{out}|\)是通过2个相邻非零矢量(基于时间)线性(插值)合成的,而时间不可能是负值,所以\(|\mathbf{U}_{out}|\)必须在电压空间矢量图六边形外接圆圆内.
基于软件模式合成
根据式(12)(16),
现在已知\(T_s,\mathbf{U}_x,\mathbf{U}_x\),已求出\(T_x,T_y,T_{zero}\),如何产生实际的脉宽调制波形呢?
目前,SVPWM的合成有2种方式:
1)基于软件模式的合成,即七段式SVPWM算法;
2)基于硬件模式的合成,即五段式SVPWM算法.
七段式SVPWM,基本矢量作用顺序分配原则:每次开关状态转换时,只改变其中一相的开关状态,且对零矢量在时间上平均分配,以使得产生的PWM对称,从而降低PWM的谐波分量.
注意:\(T_s\) 就是PWM波形周期,大小取决于PWM波频率,如16KHz PWM波形,那么\(T_s=62.5us\)
根据\(\mathbf{U}_\mathrm{out}\)所在不同位置(区域),我们能得到一个开关切换顺序对照关系,如下表:


如扇区Ⅰ,在时间\(T_s\)内,电压向量出现先后顺序\(0\to 4\to 6\to 7\to 7\to 6\to 4\to 0\)(\(\mathbf{U}_0,\mathbf{U}_4,\mathbf{U}_6,\mathbf{U}_7,\mathbf{U}_7,\mathbf{U}_6,\mathbf{U}_4,\mathbf{U}_0\)),三角波形及开关顺序见右边波形图即可.
基于硬件模式的合成
七段式SVPWM,PWM波形对称,谐波含量较小,但每个开关周期有6次开关切换. 为了减少开关次数,可以采用基于硬件模式的合成方式,即五段式SVPWM:每个扇区有一相开关器件的状态不变,使得每个开关周期只有3次开关切换,但会增大电流谐波含量.
\(\mathbf{U}_{\mathrm{out}}\) 所在的位置和开关切换顺序如下表:


SVPWM算法实现
要调制SVPWM信号,首先要知道参考电压矢量\(\mathbf{U}_{\mathrm{out}}\)所在扇区,然后用扇区所在相邻的基本电压矢量、零矢量来合成参考电压矢量.
参考电压矢量扇区判断
用\(u_α,u_β\)表示参考电压矢量\(\mathbf{U}_{\mathrm{out}}\)在α、β轴的分量,定义\(U_{ref1},U_{ref2},U_{ref3}\) 3个变量:
再定义3个三个布尔标志变量\(A,B,C\),分别表示目标矢量在三个方向上的投影正负,用于辅助判断\(\mathbf{U}_{\mathrm{out}}\)所在扇区. 这三个方向是 复平面上互差 60° 的三条分界线,分别对应 90° (Im 轴)、30° 和 150° 方向.
三个方向的具体定义:
| 变量 | 方向 | 角度 | 物理意义 |
|---|---|---|---|
| \(U_{\mathrm{ref1}} = u_\beta\) | Im 轴(虚轴) | \(90°\) / \(-90°\) | 上下半平面分界线 |
| \(U_{\mathrm{ref2}} = \frac{\sqrt{3}}{2}u_\alpha - \frac{1}{2}u_\beta\) | \(30°\) 方向 | \(30°\) / \(210°\) | 扇区 I/II 和 IV/V 的分界线 |
| \(U_{\mathrm{ref3}} = -\frac{\sqrt{3}}{2}u_\alpha - \frac{1}{2}u_\beta\) | \(150°\) 方向 | \(150°\) / \(330°\) | 扇区 II/III 和 V/VI 的分界线 |
有,
如果\(U_{ref1}>0\),则A=1,否则A=0;
如果\(U_{ref2}>0\),则B=1,否则B=0;
如果\(U_{ref3}>0\),则C=1,否则C=0;
令\(N=4C+2B+A\)(形如\(N=0bCBA\)),则可得目标矢量与扇区的关系:
| 扇区 | C | B | A | N=4C+2B+A |
|---|---|---|---|---|
| Ⅰ | 0 | 1 | 1 | 3 |
| Ⅱ | 0 | 0 | 1 | 1 |
| Ⅲ | 1 | 0 | 1 | 5 |
| Ⅳ | 1 | 0 | 0 | 4 |
| Ⅴ | 1 | 1 | 0 | 6 |
| Ⅵ | 0 | 1 | 0 | 2 |
如果\(\mathbf{U}_{\mathrm{out}}\)的角度(与主矢量,即α轴/\(\mathbf{U}_{\mathrm{4}}(100)\)夹角)确定,那么可根据下图划分扇区:

例如,\(\mathbf{U}_{\mathrm{out}}\)角度为\(π/2\)时,则位于扇区Ⅱ.
非零矢量、零矢量作用时间计算

由上图,可知,
可以解出:
同理,可得出其他扇区各矢量作用时间.
| 扇区 | 角度范围(与主矢量) | 相邻矢量 | Tx | Ty |
|---|---|---|---|---|
| I | \(0° \sim 60°\) | \(\mathbf{U}_4\) (100), \(\mathbf{U}_6\) (110) | \(T_4 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(\frac{\sqrt{3}}{2}U_\alpha - \frac{1}{2}U_\beta\right)\) | \(T_6 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}U_\beta\) |
| II | \(60° \sim 120°\) | \(\mathbf{U}_6\) (110), \(\mathbf{U}_2\) (010) | \(T_6 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) | \(T_2 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(-\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) |
| III | \(120° \sim 180°\) | \(\mathbf{U}_2\) (010), \(\mathbf{U}_3\) (011) | \(T_2 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}U_\beta\) | \(T_3 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(-\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) |
| IV | \(180° \sim 240°\) | \(\mathbf{U}_3\) (011), \(\mathbf{U}_1\) (001) | \(T_3 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(-\frac{\sqrt{3}}{2}U_\alpha - \frac{1}{2}U_\beta\right)\) | \(T_1 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}U_\beta\) |
| V | \(240° \sim 300°\) | \(\mathbf{U}_1\) (001), \(\mathbf{U}_5\) (101) | \(T_1 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(-\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) | \(T_5 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) |
| VI | \(300° \sim 360°\) | \(\mathbf{U}_5\) (101), \(\mathbf{U}_4\) (100) | \(T_5 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) | \(T_4 = \frac{\sqrt{3}T_s}{U_{\mathrm{dc}}}\left(-\frac{\sqrt{3}}{2}U_\alpha + \frac{1}{2}U_\beta\right)\) |
为了简化扇区判断计算量,我们提取公共因子\(K=\frac{\sqrt 3T_s}{U_{dc}}\)
定义:
那么,各扇区\(T_x,T_y\)用X,Y,Z表示:
| 扇区 | N编号 | 电角度范围 | C B A | Tx(先导通) | Ty(后导通) | 有效矢量 \((T_x, T_y)\) |
|---|---|---|---|---|---|---|
| I | 3 | \(0° \sim 60°\) | 011 | \(-Z\) | \(X\) | \((\mathbf{U}_4, \mathbf{U}_6)\) |
| II | 1 | \(60° \sim 120°\) | 001 | \(Z\) | \(Y\) | \((\mathbf{U}_6, \mathbf{U}_2)\) |
| III | 5 | \(120° \sim 180°\) | 101 | \(X\) | \(-Y\) | \((\mathbf{U}_2, \mathbf{U}_3)\) |
| IV | 4 | \(180° \sim 240°\) | 100 | \(-X\) | \(Z\) | \((\mathbf{U}_3, \mathbf{U}_1)\) |
| V | 6 | \(240° \sim 300°\) | 110 | \(-Y\) | \(-Z\) | \((\mathbf{U}_1, \mathbf{U}_5)\) |
| VI | 2 | \(300° \sim 360°\) | 010 | \(Y\) | \(-X\) | \((\mathbf{U}_5, \mathbf{U}_4)\) |
零矢量作用时间:
其中,\(T_s\)是一个PWM开关周期,即PWM频率.
如果算出来\(T_x+T_y>T_s\),则需要进行过调制处理:
扇区矢量切换点的确定
扇区矢量切换点,我更愿意称之为 PWM 周期内三相桥臂的开关切换时刻,这是一个时间概念,而非空间概念. 当然,我们并不会在程序上通过某种中断,来改变PWM状态,进而改变三相桥臂的开关状态,而是事先计算好中心对称PWM占空比(PWM频率固定,如16KHz,20KHz),在程序运行时,PWM自动切换状态.
先定义:
其中,必然满足\(T_a<T_b<T_c\).
七段式SVPWM中,一个PWM周期\(T_s\)被分割成7段(7个状态):
\(T_a,T_b,T_c\) 分别表示一个PWM周期内,
- \(T_a\):前后零矢量000/111单段时长;
- \(T_b=T_a+T_x/2\):第一个矢量结束的分界点;
- \(T_c=T_b+T_y/2\):第二个矢量结束的分界点.
我们以扇区Ⅰ开关切换顺序、三相波形图为例,

注意:图中并没有画出首尾\(U_0(000)\),其作用时长应该与\(U_7(111)\)相同,即 \(T_0=T_7=\frac{1}{2}(T_s-T_x-T_y)\).
完整的七段开关状态时序:
因为我们有三相,每相都是输出中心对称PWM波形,因此,我们只需要设置3个值\(T_{cm1},T_{cm2},T_{cm3}\),分别对应每一相开关切换时间点即可. 每个\(T_{cm1},T_{cm2},T_{cm3}\),都对应PWM模块的比较寄存器CCRx. 如此,每一相都在一个PWM周期内翻转2次.
例如,以MCU STM32F407的TIM1(输出三相中心对称互补PWM)为例,
1)对于A相,设当前时间t,有
当\(t < T_{cm1}\)时,对应\(CNT < CCR1\),PWM输出低电平;
当\(t > T_{cm1}\)时,对应\(CNT > CCR1\),PWM输出高电平;
也就是说,不过CNT增加到CCR1,还是减少到CCR1,都会产生1次PWM波形翻转.
2)对于B相、C相,同样地,\(T_{cm2},T_{cm3}\)会产生类似的PWM翻转效果.
于是,我们只需要根据状态切换点\(T_{cm1},T_{cm2},T_{cm3}\),换算出对应PWM比较寄存器的值,就能在一个PWM周期内,让每一相产生1次翻转效果,从而实现三相7段式SVPWM.
如何求\(T_{cm1},T_{cm2},T_{cm3}\)呢?
我们总结如下表:
开关状态时间切换点\(T_{cm1},T_{cm2},T_{cm3}\)
| \(N\) | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| \(T_{\mathrm{cm1}}\) | \(T_b\) | \(T_a\) | \(T_a\) | \(T_c\) | \(T_c\) | \(T_b\) |
| \(T_{\mathrm{cm2}}\) | \(T_a\) | \(T_c\) | \(T_b\) | \(T_b\) | \(T_a\) | \(T_c\) |
| \(T_{\mathrm{cm3}}\) | \(T_c\) | \(T_b\) | \(T_c\) | \(T_a\) | \(T_b\) | \(T_a\) |
计算出\(T_a,T_b,T_c\)后,我们根据扇区查表,就能得\(T_{cm1},T_{cm2},T_{cm3}\),进而得到每一相PWM占空比(比较寄存器).
SVPWM建模、仿真
基于Simulink仿真建模
建立七段式SVPWM仿真模块图,验证SVPWM.
参数设置:\(u_α=200cos 100πt, u_β=200sin100πt\),PWM开关周期\(T_{pwm}=0.0002s\),直流侧电压\(U_{dc}=700V\),仿真算法采用变步长ode23tb算法,最大仿真步长(Max Step Size)设置为0.000 01,仿真时长0.05(停止时间),其余变量保持初值不变.
- SVPWM仿真模型

\(U_α, U_β\)配置:

扇区N的判断:

中间变量X、Y、Z的计算:

T1(Tx)、T2(Ty)的计算(参照公式(21)对应的表格):

Repeating Sequence(锯齿波生成器):
主要用于生成锯齿波,模拟PWM生成机制. 它相当于载波,而tcm1,2,3 相当于PWM内部比较寄存器CCR1,2,3,当tcm1,2,3 > 对应比较寄存器时,对应的相输出高电平;< 对应比较寄存器时,对应的相输出低电平.
锯齿波的配置,要根据生成的PWM波形特点来设置(中心对称、频率/周期Ts).

切换时间点\(T_{cm1}, T_{cm2}, T_{cm3}\)的计算:

- 仿真结果
由于旋转时,扇区交替顺序:Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,对应N值交替顺序:3,1,5,4,6,2. 这与仿真结果示波器N相同:

SVPWM得到的调制波(Tcm123)呈现马鞍形,有利于提高直流电压利用率,有效抑制谐波:

基于s函数的仿真建模
- SVPWM仿真模型1
基于纯Simulink模型进行仿真建模的过程繁琐,不利于检查模型正确性,而有另一种方法:基于s函数仿真建模. 这种方法更加灵活,实现的效果与Simulink方法完全一致.
基于 s 函量立方法的仿真模型:
使用matlab function,由\(V_α, V_β, U_{dc}, T_s\) 计算得到\(T_{cm}123\). 后半部由Tcm123调制出SVWPM波形过程还是复用之前模型.

SVPWM s函数内容:
function [Tcm1, Tcm2, Tcm3, sector] = fcn(Valpha, Vbeta,Udc,Tpwm)
%初始化
sector = 0;
Tcm1 = 0;
Tcm2 = 0;
Tcm3 = 0;
% 参数描述
% 公式(18)
Vref1 = Vbeta;
Vref2 = (sqrt(3) * Valpha - Vbeta) / 2;
Vref3 = (-sqrt(3) * Valpha - Vbeta) / 2;
% 扇区计算
if (Vref1 > 0)
sector = 1;
end
if (Vref2 > 0)
sector = sector + 2;
end
if (Vref3 > 0)
sector = sector + 4;
end
% XYZ计算
% 式(21)
X = sqrt(3) * Vbeta * Tpwm / Udc;
Y = Tpwm/Udc * (3/2 * Valpha + sqrt(3)/2*Vbeta);
Z = Tpwm/Udc * (-3/2 * Valpha + sqrt(3)/2*Vbeta);
% 占空比计算
switch(sector)
case 1
T1 = Z; T2 = Y;
case 2
T1 = Y; T2 = -X;
case 3
T1 = -Z; T2 = X;
case 4
T1 = -X; T2 = Z;
case 5
T1 = X; T2 = -Y;
otherwise
T1 = -Y; T2 = -Z;
end
% 过调制处理
if T1 + T2 > Tpwm
T1 = T1/(T1+T2);
T2 = T2/(T1+T2);
end
ta = (Tpwm - (T1 + T2)) / 4.0;
tb = ta + T1/2;
tc = tb + T2/2;
% 计算Tcm123
switch(sector)
case 1
Tcm1 = tb;
Tcm2 = ta;
Tcm3 = tc;
case 2
Tcm1 = ta;
Tcm2 = tb;
Tcm3 = tc;
case 3
Tcm1 = ta;
Tcm2 = tb;
Tcm3 = tc;
case 4
Tcm1 = tc;
Tcm2 = tb;
Tcm3 = ta;
case 5
Tcm1 = tc;
Tcm2 = ta;
Tcm3 = tb;
case 6
Tcm1 = tb;
Tcm2 = tc;
Tcm3 = ta;
end
end
- 仿真结果
扇区计算结果:

切换时间点Tcm123计算结果:

Ua,Ub,Uc计算结果:

- s函数仿真模型2
我们还可以用另一种基于s函数的方法,对整个模型进一步简化,能直接输出PWM波形(Ua,Ub,Uc):

注意:需要新建全局变量Vdc=700,在模型属性> 回调> InitFcn* 中初始化.
这里的Cartesian to Polar模块,将笛卡尔坐标转化为极坐标,即求出\((U_α, U_β)\)对应电压幅值、电角度\((U_m,θ)\).
由sa,sb,sc计算出Ua, Ub, Uc的模型(Fcn模块):

MATLAB Fcn内容:
主要作用是根据电压幅值、电角度、PWM采样周期,求出ta, tb(即文中tx, ty),进而求出sa, sb, sc(三相开关状态).
% u(1): 参考电压幅值
% u(2): 参考电压的角度
% u(3): PWM的采样周期
% ta相当于文中tx, tb相当于文中ty
function sf = svpwm(u)
% 初始化
sa = 0;
sb = 0;
sc = 0;
ts = 0.0002;
vdc = u(4);
peak_phase_max = vdc / sqrt(3);
x = u(2);
y = u(3);
mag = (u(1)/peak_phase_max) * ts;
% 扇区Ⅰ
if (x > 0) && (x < pi/3)
ta = mag * sin(pi/3 - x);
tb = mag * sin(x);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 1 1 1 1 1 0];
v2 = [0 0 1 1 1 0 0];
v3 = [0 0 0 1 0 0 0];
for j = 1:7
if (y < t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
% 扇区Ⅱ
if (x >= pi/3) && (x < 2 * pi/3)
adv = x - pi/3;
tb = mag * sin(pi/3 - adv);
ta = mag * sin(adv);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 0 1 1 1 0 0];
v2 = [0 1 1 1 1 1 0];
v3 = [0 0 0 1 0 0 0];
for j = 1:7
if (y < t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
% 扇区Ⅲ
if (x >= 2*pi/3) && (x < pi)
adv = x - 2 * pi/3;
ta = mag * sin(pi/3 - adv);
tb = mag * sin(adv);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 0 0 1 0 0 0];
v2 = [0 1 1 1 1 1 0];
v3 = [0 0 1 1 1 0 0];
for j = 1:7
if (y<t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
% 扇区Ⅳ
if (x >= -pi) && (x < -2*pi/3)
adv = x + pi;
tb = mag * sin(pi/3 - adv);
ta = mag * sin(adv);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 0 0 1 0 0 0];
v2 = [0 0 1 1 1 0 0];
v3 = [0 1 1 1 1 1 0];
for j = 1:7
if (y<t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
% 扇区Ⅴ
if (x >= -2*pi/3) && (x < -pi/3)
adv = x + 2 * pi/3;
ta = mag * sin(pi/3 - adv);
tb = mag * sin(adv);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 0 1 1 1 0 0];
v2 = [0 0 0 1 0 0 0];
v3 = [0 1 1 1 1 1 0];
for j = 1:7
if (y<t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
% 扇区Ⅵ
if (x >= -pi/3) && (x < 0)
adv = x + pi/3;
tb = mag * sin(pi/3 - adv);
ta = mag * sin(adv);
t0 = (ts - ta - tb);
t1 = [t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4];
t1 = cumsum(t1); % 累加和数组
v1 = [0 1 1 1 1 1 0];
v2 = [0 0 0 1 0 0 0];
v3 = [0 0 1 1 1 0 0];
for j = 1:7
if (y<t1(j))
break
end
end
sa = v1(j);
sb = v2(j);
sc = v3(j);
end
sf = [sa,sb,sc];
end

浙公网安备 33010602011771号