SVPWM调制的simulink仿真

一、SVPWM的生成html

在FOC矢量控制中,Id、Iq 通过PID输出Vd、Vq。Vd、Vq通过反park变换成Vα、Vβ。再通过Vα、Vβ合成空间参考矢量Uref。那么怎么根据Vα、Vβ肯定Uref所在扇区,而后肯定所在扇区两个基础非零矢量的做用时间呢。web

1.一、传统的计算方法算法

把Uref转换为虚数形式Uref=Va+jVβ。那么其所在扇区 sector=floor(angle(Uref)/(pi/3))。那么其所在扇区的两个基础非零矢量的做用时间呢?推导下,假设已肯定在第一扇区。
在这里插入图片描述
在两相静止参考坐标系(α,β)中,令 Uref 和 U4 间的夹角是 θ,由正弦定理可得:
在这里插入图片描述
由于 U4 = 2*Udc / 3,因此能够获得各矢量的状态保持时间为
在这里插入图片描述
式中 m 为 SVPWM 调制系数(调制比)注意超过1就失真,m=sqrt(3)|Uref|/Udc。能够看出计算两个相邻基础向量的时间须要解三角函数,对单片机来讲计算有点费时间。原本一个核心的FOC算法要求在十几二十个微秒内执行完。那么下面介绍一种不须要解三角函数的方法。app

1.二、第二种方法ide

1.2.一、扇区的判断
在这里插入图片描述
由Vα、Vβ决定的空间电压矢量所处的扇区。假定合成的电压矢量落在第 I 扇区,可知其等价条件以下:
0° < arctan( Vβ/Vα ) < 60° 以上等价条件再结合矢量图几何关系分析,能够判断出合成电压矢量 Uref
落在第 I 扇区的充分必要条件为:Vα>0、Vβ>0且Vβ/Vα<sqrt(3)。同理可得:svg

在这里插入图片描述
若进一步分析以上的条件,有可看出参考电压矢量 Uref 所在的扇区彻底由 U β U_{\beta } 3 U α U β \sqrt{3}U_{\alpha }-U_{\beta} 3 U α U β -\sqrt{3}U_{\alpha }-U_{\beta} 三式决定,所以令:
{ U 1 = U β U 2 = 3 2 U α 1 2 U β U 3 = 3 2 U α 1 2 U β \begin{matrix} \left\{ \begin{aligned} &U_{1}=U_{\beta}\\ &U_{2}=\frac{\sqrt{3}}{2}U_{\alpha}-\frac{1}{2}U_{\beta}\\ &U_{3}=-\frac{\sqrt{3}}{2}U_{\alpha}-\frac{1}{2}U_{\beta}\\ \end{aligned} \right. \end{matrix}
再定义,若U1 > 0 ,则 A=1,不然 A=0;若U 2 > 0 ,则 B=1,不然 B=0;若U3 > 0,则 C=1,不然 C=0。
能够看出 A,B,C 之间共有八种组合,但由判断扇区的公式可知 A,B,C不会同时为 1 或同时为 0,因此实际的组合是六种,A,B,C 组合取不一样的值对应着不一样的扇区,而且是一一对应的,所以彻底能够由 A,B,C 的组合判断所在的扇区。为区别六种状态,令 N=4C+2B+A,则能够经过下表计算参考电压矢量 Uref 所在的扇区。函数

N 3 1 5 4 6 2
扇区号

因此只要简单的逻辑运算就能够肯定所在扇区,对于提升系统的响应速度和进行仿真都是颇有意义的。spa

1.2.二、占空比的计算3d

以 Uref 处在第Ⅰ扇区时进行分析,根据图 2-10 有:
在这里插入图片描述
上面的等式是Uref在Uα、Uβ坐标系上的投影,而后是U四、U6上的投影再投影到Uα、Uβ坐标系上。
通过整理后得出:
在这里插入图片描述
表中两个非零矢量做用时间的比例系数为 K = 3 T s / U d c \sqrt{3}T_{s}/U_{dc} ,注意Uref的幅值不能大于 U d c / 3 U_{dc}/\sqrt{3} 防止Uref在正六边形内切圆外面失真。
同理可求得Uref在其它扇区中各矢量的做用时间,结果如表2-4所示。code

扇区 时间
T 4 = K U 2 T 6 = K U 1 T_{4}=KU_{2}、T_{6}=KU_{1}
T 2 = K U 2 T 6 = K U 3 T_{2}=-KU_{2}、T_{6}=-KU_{3}
T 2 = K U 1 T 3 = K U 3 T_{2}=KU_{1}、T_{3}=KU_{3}
T 1 = K U 1 T 3 = K U 2 T_{1}=-KU_{1}、T_{3}=-KU_{2}
T 1 = K U 3 T 5 = K U 2 T_{1}=KU_{3}、T_{5}=KU_{2}
T 4 = K U 3 T 5 = K U 1 T_{4}=-KU_{3}、T_{5}=-KU_{1}

所在扇区的非零基础矢量做用时间已肯定了,那么怎么计算各相占空比呢。
在这里插入图片描述
上图为在第一扇区时各相占空比。
{ T a = T s T 4 T 6 / 4 T b = T a + 1 2 T 4 T c = T b + 1 2 T 6 \begin{matrix} \left\{ \begin{aligned} &T_{a}=(T_{s}-T_{4}-T_{6})/4\\ &T_{b}=T_{a}+\frac{1}{2}T_{4}\\ &T_{c}=T_{b}+\frac{1}{2}T_{6} \end{aligned} \right. \end{matrix}
在这里插入图片描述
上图为在第二扇区时各相占空比。
{ T b = T s T 2 T 6 / 4 T a = T b + 1 2 T 2 T c = T a + 1 2 T 6 \begin{matrix} \left\{ \begin{aligned} &T_{b}=(T_{s}-T_{2}-T_{6})/4\\ &T_{a}=T_{b}+\frac{1}{2}T_{2}\\ &T_{c}=T_{a}+\frac{1}{2}T_{6} \end{aligned} \right. \end{matrix}
上式中 T a T b T c T s T_{a}、T_{b}、T_{c}、T_{s} 表示A、B,C三相的占空比,和PWM周期。若是把上式写成一个通用的式子。
{ t a = T s T x T y / 4 t b = t a + 1 2 T x ) t c = t b + 1 2 T y ) \begin{matrix} \left\{ \begin{aligned} &t_{a}=(T_{s}-T_{x}-T_{y})/4\\ &t_{b}=(t_{a}+\frac{1}{2}T_{x})\\ &t_{c}=(t_{b}+\frac{1}{2}T_{y})\\ \end{aligned} \right. \end{matrix}
其中下标x大于y。ta、tb 和 tc分别是相应的比较器的值,而不一样扇区比较器的值分配如表下所示:

扇区 1 2 3 4 5 6
T a T_{a} t a t_{a} t b t_{b} t b t_{b} t c t_{c} t c t_{c} t a t_{a}
T b T_{b} t b t_{b} t a t_{a} t c t_{c} t b t_{b} t a t_{a} t c t_{c}
T c T_{c} t c t_{c} t c t_{c} t a t_{a} t a t_{a} t b t_{b} t b t_{b}

二、SVPWM的simulink仿真

下面根据第二种方法来仿真:

2.一、simulink仿真波形图
在这里插入图片描述
在这里插入图片描述

2.二、simulink仿真程序

程序中去掉了Udc,而后也限制了过调制失真。

function [Ta,Tb,Tc] = fcn(ua,ub,Ts,Udc)
%#codegen

Ta=500;
Tb=500;
Tc=500;

u1=ub;
u2=sqrt(3)/2*ua-1/2*ub;
u3=-sqrt(3)/2*ua-1/2*ub;

% 判断所在扇区
if(u1>0)
    a=1;
else 
    a=0;
end

if(u2>0)
    b=1;
else 
    b=0;
end

if(u3>0)
    c=1;
else 
    c=0;
end

Sector = 4*c + 2*b + a; 

% k=sqrt(3)*Ts/Udc;  %Uref的输入幅值要小于或等于Udc/sqrt(3),不然过调制合成空间矢量失真,若是要让Uref的输入的最大幅值能够和Udc相等,则用拼凑法,Uref放大了sqrt(3)
                     %倍,因此t1t2的值就也放大了sqrt(3)倍,则k要缩小sqrt(3)倍。而为了要去掉Udc,能够把Udc改为Ua的最大幅值。例如:32767  
                     
% k=sqrt(3)/sqrt(3)*Ts/Udc;   

k=Ts/32767; 
 
switch Sector 
    
    case 1       % 第二扇区
        t1=-k*u2;
        t2=-k*u3;
                   
        Tb = ((Ts)- t1 - t2)/4;      
        Ta = Tb + t1/2;     
        Tc = Ta + t2/2; 
       
    case 2       % 第六扇区
        t1=-k*u3;
        t2=-k*u1;
        
        Ta = ((Ts)- t1 - t2)/4;      
        Tc = Ta + t1/2;     
        Tb = Tc + t2/2;  
        
    case 3       % 第一扇区
        t1=k*u2;
        t2=k*u1;
               
        Ta = ((Ts)- t1 - t2)/4;      
        Tb = Ta + t1/2;     
        Tc = Tb + t2/2;  
        
    case 4       % 第四扇区
        t1=-k*u1;
        t2=-k*u2;
              
        Tc = ((Ts)- t1 - t2)/4;      
        Tb = Tc + t1/2;     
        Ta = Tb + t2/2;  
        
    case 5       % 第三扇区
        t1=k*u1;
        t2=k*u3;
                
        Tb = ((Ts)- t1 - t2)/4;      
        Tc = Tb + t1/2;     
        Ta = Tc + t2/2;  
        
    case 6       % 第五扇区
        t1=k*u3;
        t2=k*u2;
        
        Tc = ((Ts)- t1 - t2)/4;      
        Ta = Tc + t1/2;     
        Tb = Ta + t2/2;    

end
   Ta=2*Ta;
   Tb=2*Tb;
   Tc=2*Tc;
 
end