www.gusucode.com > svpwm的simulink的仿真模型matlab源码程序 > svpwm的simulink的仿真模型matlab源码程序/Chap2/svpwm_model/SVPWM_sfun/svpwm.m

    %u(1)为参考电压的幅值;u(2)为参考电压的角度;u(3)为PWM的采样周期;
%Ta相当于书中的T4,Tb相当于书中的T6

	function [sf]=svpwm(u)
    %===初始化====
    sa=0;
    sb=0;
    sc=0;
    ts=0.0002;
    vdc=700; 
    peak_phase_max = vdc/sqrt(3);
	x=u(2);   
	y=u(3);
	mag=(u(1)/peak_phase_max) * ts;
    
	%===扇区I====
	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

	%===扇区II====
	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
    
	%===扇区III====

	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

	%%===扇区IV====

	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
	
	% %===扇区V====

	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

	%%===扇区VI====

	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