• 大小: 6KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: SVPWM  

资源简介

利用MATLAB M文件编写的SVPWM发波程序,很容易理解原理

资源截图

代码片段和文件信息

function y=svpwm(ualfaubetaudct)
     %ualfa:alfa轴电压幅值;ubeta:beta轴电压幅值;Udc:变流器输出直流电压,Ts:开关频率。
Tssaple=1/6400;                    %开关频率为6400Hz;
%udc=600;
ualfa1=1.732*ualfa/udc;     %非零矢量为幅值设为Udc/sqrt(3);
ubeta1=1.732*ubeta/udc;     %非零矢量为幅值设为Udc/sqrt(3);
thta1=atan2(ubetaualfa);   %求解空间电压矢量的相角;
if((thta1>=0)&&(thta1<(pi/3)))           %2-5扇区归算至第一扇区,并计算出电压矢量所在扇区
    N=1;
    thta=thta1;
else if((thta1>=(pi/3))&&(thta1<(2*pi/3)))
    N=2;
    thta=thta1-pi/3;
else if((thta1>=(2*pi/3))&&(thta1    N=3;
    thta=thta1-2*pi/3;
else if (thta1<=(-2*pi/3))
    N=4;
    thta=thta1+pi;
else if((thta1>=(-2*pi/3))&&(thta1<-pi/3))
    N=5;
    thta=thta1+2*pi/3;
else
    N=6;
    thta=thta1+pi/3;
    end 
    end
    end
    end
end
us=sqrt(ualfa^2+ubeta^2);                    %求解电压矢量的幅值;
m=1.732*us/udc;                              %m为调制度;
t1=m*Tssaple*(cos(thta)-(sin(thta)/1.732));  % 矢量1(100)作用时间;
t2=2*m*Tssaple*sin(thta)/1.732;              % 矢量2(110)作用时间;
if((t1+t2)>Tssaple)                          %如果求出非零矢量作用时间之和大于开关频率时间,则等比例缩短;
    t1=t1*Tssaple/(t1+t2);
    t2=t2*Tssaple/(t1+t2);
end
t0=Tssaple-t1-t2;
switch N        
    case 1    %第1扇区                       %矢量顺序000-100-110-111-110-100-000
        if(t            y=[0 1 0 1 0 1];                 % 发送矢量000 三相桥开关函数:上桥臂导通为1,下桥臂导通为0  y=[a+a-b+b-c+c-]          
        else if(t<(t0/4+t1/2))          
            y=[1 0 0 1 0 1];                 % 发送矢量100            
        else if(t<(t0/4+t1/2+t2/2))     
            y=[1 0 1 0 0 1];                 % 发送矢量110            
        else if(t<(3*t0/4+t1/2+t2/2))    
            y=[1 0 1 0 1 0];                 % 发送矢量111           
        else if(t<(3*t0/4+t1/2+t2))     
            y=[1 0 1 0 0 1];                 % 发送矢量110        
        else if(t<(3*t0/4+t1+t2))       
            y=[1 0 0 1 0 1];                 % 发送矢量100            
            else
            y=[0 1 0 1 0 1];                 % 发送矢量000
            end
            end
            end
            end
            end
        end
    case 2    %第2扇区                   %矢量顺序000-010-110-111-110-010-000         
        if(t             y=[0 1 0 1 0 1];                     
        else if(t<(t0/4+t2/2))          % 发送矢量010
            y=[0 1 1 0 0 1]; 
        else if(t<(t0/4+t1/2+t2/2))     % 发送矢量110
            y=[1 0 1 0 0 1];
        else if(t<(3*t0/4+t1/2+t2/2))   % 发送矢量111
            y=[1 0 1 0 1 0];
        else if(t<(3*t0/4+t1+t2/2))      % 发送矢量110
            y=[1 0 1 0 0 1];
        else if(t<(3*t0/4+t1+t2))        % 发送矢量010
            y=[0 1 1 0 0 1];
            else                         % 发送矢量000
            y=[0 1 0 1 0 1];                    
              end
            end
            end
            end
            end
        end 
            
    case 3   %第3扇区                %矢量发送顺序000-010-011-111-011

评论

共有 条评论