虽然simulink里自带了两电平SVPWM模块,但是为了熟悉一下SVPWM算法原理,还是决定自己搭建一个。
两电平的 S V P W M SVPWM SVPWM算法按以下3个步骤来实现:
- 判断参考电压矢量 U r e f U_{ref} Uref所在的扇区,以得到需要作用的两个相邻矢量
- 计算这两个相邻矢量的作用时间。
- 计算空间电压矢量的切换点,产生PWM脉冲。
一、判断扇区
比较常见的方法是通过分析 U α U_\alpha Uα和 U β U_\beta Uβ的大小关系来判断扇区。方法如下:
- 如果 U β > 0 U_\beta>0 Uβ>0,则使A = 1,否则A = 0;
- 如果 3 U α − U β > 0 \sqrt3U_\alpha-U_\beta>0 3Uα−Uβ>0,则使B = 1,否则B = 0;
- 如果 3 U α + U β > 0 \sqrt3U_\alpha+U_\beta>0 3Uα+Uβ>0,则使C = 0,否则C = 1;
- 扇区号 N = A + 2 B + 4 C N = A + 2B + 4C N=A+2B+4C。
这个方法实现比较简单,但是不太容易理解,其扇区编号规则不是逆时针1~6的编号方法,而是以逆时针3、1、5、4、6、2的顺序编号,如下图中红色编号。
编号规则很重要,采用不同的编号规则,后面计算的各矢量作用时间也要作出相应的改变。
对于我这个有强迫症的人来说,一定要按照1~6的顺序编号才舒服。因此,我决定采用一个比较笨的办法,用参考矢量的角度 θ \theta θ的来判断其所在扇区。仿真模型如下图。
根据输入的 U α U_\alpha Uα和 U β U_\beta Uβ值,获取参考适量的角度 θ \theta θ。
θ = a r c t a n ( U β / U α ) \theta = arctan(U_\beta/U_\alpha) θ=arctan(Uβ/Uα)
计算得到的 θ \theta θ角范围是 [ − π 2 , π 2 ] [-\frac \pi2,\frac \pi2] [−2π,2π],其中第一象限计算结果与第三象限相同,第二象限计算结果与第四象限相同。因此为了区分所在象限,所以要对 θ \theta θ进行修正。
当 U α > 0 U_\alpha>0 Uα>0时, θ \theta θ角范围是 [ − π 2 , π 2 ] [-\frac \pi2,\frac \pi2] [−2π,2π];
当 U α < 0 U_\alpha<0 Uα<0时,将计算得到的 θ \theta θ角加上 π \pi π,将其范围修正为 [ π 2 , 3 π 2 ] [\frac \pi2,\frac {3\pi}2] [2π,23π];
计算到这一步, θ \theta θ在一、二、三象限都是正值,但是在第四象限是负值,因此当 θ < 0 \theta<0 θ<0时,加上 2 π 2\pi 2π。此时,不论参考矢量落在哪个象限,都能得到 θ \theta θ角在 [ 0 , 2 π ] [0,2\pi] [0,2π]范围内的值。
每一个扇区的角度是 π 3 \frac \pi3 3π,因此将所得到的 θ \theta θ角除以 π 3 \frac \pi3 3π,得到的结果向上取整,便可以得到矢量所在扇区。
该方法的扇区编号顺序如上图中所示 I 、 I I 、 I I I 、 I V 、 V 、 V I I、II、III、IV、V、VI I、II、III、IV、V、VI。
二、计算这两个相邻矢量的作用时间。
得到了矢量所在扇区,就可以利用该扇区两端的矢量对其进行合成。通过合理分配两个零矢量(000和111)可以使每一次矢量切换只有一相的功率器件动作,能够减少开关损耗。在这里采用七段式SVPWM调制。以第一扇区为例,在第一扇区的矢量要以 U 0 、 U 1 、 U 2 、 U 7 、 U 7 、 U 2