SVPWM算法实现

clc;clear;close;


%%SVPWM算法
%%%判断扇区的
%%%r模拟假设(2/3)Udc
r=20;
Udc=30;

Ts=62.5%%单位微妙
r=r*cos(pi/6);%%%电压矢量圆环半径
k=720;
for i=0:k
    angle=(i*pi)/180;
    Uta=r*cos(angle);
    Utb=r*sin(angle);

    U0=Uta;
    U1=Utb;
    U2=(sqrt(3)*Uta-Utb)/2;
    U3=-((sqrt(3)*Uta+Utb)/2);
    %%%I区的判断
    if (U1>=0 && U2>=0 && U3<0)
       A=1;
       B=1;
       C=0;
    end
   
    %%%二区的判断N=1
    if U1>0&&U2<0&&U3<=0
       C=0; 
       B=0;
       A=1; 
    end
    

    %%%三区的判断N=5
    if U1>=0&&U2<0&&U3>0
       C=1;
       B=0;
       A=1;
    end

    %%%四区的判断N=4
    if U1<0&&U2<=0&&U3>0
        C=1;
        B=0;
        A=0;
    end

    %%%五区的判断N=6
    if U1<0&&U2>0&&U3>=0
        C=1;
        B=1;
        A=0;
    end
    
    

    %%%六区的判断N=2
    if U1<=0&&U2>0&&U3<0
       C=0;
       B=1;
       A=0;
    end

    N=4*C+2*B+A;

    if N==3
        Section=1;
    elseif N==5
       Section=3;
    elseif N==6 
        Section=5;
    elseif N==2
        Section=6;
    elseif N==1
        Section=2;
    elseif N==4
        Section=4;
    end

    U1=Utb;
    U2=(sqrt(3)*Uta-Utb)/2;
    U3=-(sqrt(3)*Uta+Utb)/2;
    K=(sqrt(3)*Ts)/Udc;

    if Section==1
    %%%1区的
    T4=K*U2;
    T6=K*U1;
    T0=((1/2)*(Ts-T4-T6));
    T7=T0;
    elseif Section==2
    %%%2区的
    T2=-K*U2;
    T6=-K*U3;
    T0=((1/2)*(Ts-T2-T6));
    T7=T0;
    elseif Section==3
    %%%3区的
    T2=K*U1;
    T3=K*U3;
    T0=((1/2)*(Ts-T2-T3));
    T7=T0;
    elseif Section==4
    %%%4区的
    T1=-K*U1;
    T3=-K*U2;
    T0=((1/2)*(Ts-T1-T3));
    T7=T0;
    elseif Section==5
    %%%5区
    T1=K*U3;
    T5=K*U2;
    T0=((1/2)*(Ts-T1-T5));
    T7=T0;
    elseif Section==6
    %%%6区
    T5=-K*U1;
    T4=-K*U3;
    T0=((1/2)*(Ts-T4-T5));
    T7=T0;
    end

    if Section==1
       Tx=T4;
       Ty=T6;
    elseif Section==2
       Tx=T2;
       Ty=T6;
    elseif Section==3
       Tx=T2;
       Ty=T3;
    elseif Section==4
       Tx=T1;
       Ty=T3;
    elseif Section==5
       Tx=T1;
       Ty=T5;
    elseif Section==6
       Tx=T4;
       Ty=T5;
    end

    Ta=(Ts-Tx-Ty)/4;
    Tb=Ta+Tx/2;
    Tc=Tb+Ty/2;


    if Section==1
       Pwm1(i+1)=Ta;
       Pwm2(i+1)=Tb;
       Pwm3(i+1)=Tc;
    elseif Section==2
       Pwm1(i+1)=Tb;
       Pwm2(i+1)=Ta;
       Pwm3(i+1)=Tc;
    elseif Section==3
       Pwm1(i+1)=Tc;
       Pwm2(i+1)=Ta;
       Pwm3(i+1)=Tb;
    elseif Section==4
       Pwm1(i+1)=Tc;
       Pwm2(i+1)=Tb;
       Pwm3(i+1)=Ta;
    elseif Section==5
       Pwm1(i+1)=Tb;
       Pwm2(i+1)=Tc;
       Pwm3(i+1)=Ta;
    elseif Section==6
       Pwm1(i+1)=Ta;
       Pwm2(i+1)=Tc;
       Pwm3(i+1)=Tb;
    end
end
hold on
plot(0:k,Pwm1,'r');
plot(0:k,Pwm2,'b');
plot(0:k,Pwm3,'y');

SVPWM算法实现_第1张图片

 

你可能感兴趣的:(算法学习,机器人学习)