%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % spwmnat2.m - Determines switching angles for bi-state. % SPWM ( natural sampling ) % Re: Fig 6-5 of Rashid % Plots Fourier spectrum. % Uses alf.m % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; global cglob cglob = zeros(1,5); angle = zeros(1,1); time = zeros(1,1); x = zeros(1,1024); y = zeros(1,1024); N=4; T=1/60; Tc=T/(2*N-1); % T - period of fundamental N - chops/half cycle % MI - modulation index Ac - amplitude of carrier MI=0.9; Ac=10; A=MI*Ac; if MI>1 | MI<0; disp( 'CAUTION: MI>1 or MI<0'); end m=8*Ac*N/T; w=2*pi/T; for i=1:511; x(i)=Ac; end for k=1:N td = (k-1)*Tc; x0 = Tc/2; cglob = [ m w A 2*Ac td ]; alfa = fzero( 'alf', x0 ); alfa = alfa + td; time = [ time; alfa ]; angle = [ angle; alfa*360/T ]; x0 = 0.75*Tc; cglob = [ -m w A -4*Ac td ]; alfa = fzero( 'alf', x0 ); alfa = alfa + td; time = [ time; alfa ]; angle = [ angle; alfa*360/T ]; end angle = [ angle; 180 ]; time = [ time; T/2 ]; t = linspace(0,T/2,512); k = length( time ); y = A*sin( w*t ); n=2; for i=1:512 if n > k-2, break, end if t(i) < time(n); x(i)=Ac; elseif t(i) >= time(n) & t(i) <= time(n+1); x(i)=-Ac; else; x(i)=Ac; n=n+2; end end for i=1:512; x(i+512)=-x(i); y(i+512)=-y(i); end alphas = angle' % Display alphas to screen disp('Hit any key to continue'); pause t=linspace(0,T,1024); clf; figure(1); subplot(211), plot(t',x',t',y'); title('SINUSOIDAL PWM WAVEFORM'); xlabel('TIME- s'); ylabel('OUTPUT WAVE FORM'); grid; fn = abs( fft(x) ); fnn = 100*fn/max(fn); subplot(212), plot( [0:100], fnn(1:101) ); title('FOURIER SPECTRUM OF SPWM WAVEFORM'); xlabel('HARMONIC NUMBER'); ylabel('PERCENT'); text(0.15, 0.65, ['MI = ',num2str(MI),' N = ', ... num2str(N)], 'sc');