You are on page 1of 9

clc

clear all

L=
Ts =
R=
I = 10 ;
Vdc = 1200; C = 2000e-6;
f = 50 ;
ws = 2*pi*f;

%**** Vecteurs inicial


sa(1) = 0;sb(1) = 0;sc(1) = 0;
Vp(1) = 0;Vn(1) = 0;
i_alpha(1) = 0;i_beta(1) = 0;

%-------- Possibale switching


states = [-1 0 1 1 0 1 0 0 -1 0 -1 0 -1 1 0 1 1 1 0 -1 -1 -1 -1 -1 0 1 1 ;
-1 0 1 0 -1 1 0 1 0 1 0 0 -1 0 -1 -1 0 1 1 1 1 1 0 -1 -1 -1 -1 ;
-1 0 1 0 -1 0 -1 0 -1 1 0 1 0 1 0 -1 -1 -1 -1 -1 0 1 1 1 1 1 0];
for k = 1:n
t = k*Ts;

%--------generated of curent reference abc


ia_ref(k+1) = I*sin(ws*t);
ib_ref(k+1) = I*sin(ws*t-2*pi/3);
ic_ref(k+1) = I*sin(ws*t+2*pi/3);

% ------- alpha beta reference curent component


i_alpha_ref(k+1) = (2/3)*(ia_ref(k+1)-0.5*ib_ref(k+1)-0.5*ic_ref(k+1));
i_beta_ref(k+1) = (2/3)*((sqrt(3)/2)*ib_ref(k+1)-(sqrt(3)/2)*ic_ref(k+1));
% -------- alpha, beta components of the reference volatge vectors equation (16)
valpha_n_ref (k) = mn(k)*(2/sqrt(3))*sin((pi/3)-(teta(k)-(sec(k)-1)*(pi/3)) ;
vbeta_n_ref (k) = mn(k)*(2/sqrt(3))*sin(teta(k)-(sec(k)-1)*(pi/3)) ;

%--------- the complex notation of the reference voltage vector


vn_ref(k) = valpha_n_ref (k)+j*vbeta_n_ref (k);

% --------- the modulation index equation (17)


mn(k+1) = sqrt(3) *(abs(vn_ref(k)/v_dc(k));
% ---- selecting of Region value
if valpha_n_ref (k)<0.5*mn(k+1) & vbeta_n_ref (k)<0.5*mn(k+1) & valpha_n_ref
(k)+vbeta_n_ref(k)<0.5*mn(k+1)
reg(k+1) = 1;
elseif valpha_n_ref (k)<0.5*mn(k+1) & vbeta_n_ref (k)<0.5*mn(k+1) & valpha_n_ref
(k)+vbeta_n_ref(k)>0.5*mn(k+1)
reg(k+1) = 2;
elseif vbeta_n_ref (k)>0.5*mn(k+1)
reg(k+1) = 3;
elseif valpha_n_ref (k)>0.5*mn(k+1)
reg(k+1) = 4;
end

% voltage of the output inverter


valpha(k) = v_dc(k)*(2*sa(k)-sb(k)-sc(k))/6;
vbeta(k) = sqrt(3)*v_dc(k)*(sb(k)-sc(k))/6;

%alpha beta current


i_alpha(k+1) = (Ts/L)*(valpha(k)-R*i_alpha(k))+i_alpha(k);
i_beta(k+1) = (Ts/L)*(vbeta(k)-R*i_beta(k))+i_beta(k);

% transformation du current compents alpha beta to ABC


ia(k+1) = i_alpha(k+1);
ib(k+1) = -(1/2)*i_alpha(k+1)+(sqrt(3)/2)*i_beta(k+1);
ic(k+1) = -(1/2)*i_alpha(k+1)-(sqrt(3)/2)*i_beta(k+1);

% ---------------- alpha beta voltage reference


v_alpha_ref(k) = (L/Ts)*(i_alpha_ref(k+1)-i_alpha(k))+R*i_alpha(k);
v_beta_ref(k) = (L/Ts)*(i_beta_ref(k+1)-i_beta(k))+R*i_beta(k);

%-------- theta
teta(k+1) = atan(v_beta_ref(k)/v_alpha_ref(k));

%--------selcting sector number


if teta>=0 & teta < pi/3
sec(k+1) = 1;
elseif teta >= pi/3 & teta < 2*pi /3
sec(k+1) = 2;
elseif teta >= 2*pi/3 & teta < pi
sec(k+1) = 3;
elseif teta >= pi & teta < 4*pi /3
sec(k+1) = 4;
elseif teta >= 4*pi/3 & teta < 5*pi /3
sec(k+1) = 5;
elseif teta >= 4*pi/3 & teta < 2*pi
sec(k+1) = 6;
end
%-----------------------
if sa(k) == 1; sa1(k) = 1; sa2(k) = 1;sa3(k) = 0; sa4(k) = 0;
elseif sa(k) = 0; sa1(k) = 0; sa2(k) = 1;sa3(k) = 1; sa4(k) = 0;
elseif sa(k) = -1; sa1(k) = 0; sa2(k) = 0;sa3(k) = 1; sa4(k) = 1; end

if sb(k) == 1; sb1(k) = 1; sb2(k) = 1;sb3(k) = 0; sb4(k) = 0;


elseif sb(k) = 0; sb1(k) = 0; sb2(k) = 1;sb3(k) = 1; sb4(k) = 0;
elseif sb(k) = -1; sb1(k) = 0; sb2(k) = 0;sb3(k) = 1; sb4(k) = 1; end

if sc(k) == 1; sc1(k) = 1; sc2(k) = 1;sc3(k) = 0; sc4(k) = 0;


elseif sc(k) = 0; sc1(k) = 0; sc2(k) = 1;sc3(k) = 1; sc4(k) = 0;
elseif sc(k) = -1; sc1(k) = 0; sc2(k) = 0;sc3(k) = 1; sc4(k) = 1; end

%--- Neutral point current io (equation 7)


io(k+1) = -(sa1(k)+sa4(k))*ia(k+1)-(sb1(k)+sb4(k))*ib(k+1)-(sc1(k)+sc4(k))*ic(k+1);

%---- the capacitor voltages Vp, Vn equation 9


Vp(k+1) = Vp(k)+(Ts/(2*C))*io(k+1);
Vn(k+1) = Vn(k)-(Ts/(2*C))*io(k+1);

%selecting of three vectors based on sign beteween Vp and Vn


%---------------------Vp>Vn

if Vp(k+1)>=Vn(k+1)
%***************** first sector
if sec(k) == 1
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,3); sb_123(2) = states(2,3); sc_123(2) = states(3,3);
sa_123(3) = states(1,5); sb_123(3) = states(2,5); sc_123(3) = states(3,5);
end
if reg(k+1) == 2;
sa_123(1) = states(1,3); sb_123(1) = states(2,3); sc_123(1) = states(3,3);
sa_123(2) = states(1,5); sb_123(2) = states(2,5); sc_123(2) = states(3,5);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
if reg(k+1) == 3;
sa_123(1) = states(1,17); sb_123(1) = states(2,17); sc_123(1) = states(3,17);
sa_123(2) = states(1,5); sb_123(2) = states(2,5); sc_123(2) = states(3,5);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
if reg(k+1) == 4;
sa_123(1) = states(1,3); sb_123(1) = states(2,3); sc_123(1) = states(3,3);
sa_123(2) = states(1,15); sb_123(2) = states(2,15); sc_123(2) = states(3,15);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
%****************** Second sector
elseif sec(k) == 2
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,5); sb_123(2) = states(2,5); sc_123(2) = states(3,5);
sa_123(3) = states(1,7); sb_123(3) = states(2,7); sc_123(3) = states(3,7);
end
if reg(k+1) == 2;
sa_123(1) = states(1,5); sb_123(1) = states(2,5); sc_123(1) = states(3,5);
sa_123(2) = states(1,7); sb_123(2) = states(2,7); sc_123(2) = states(3,7);
sa_123(3) = states(1,18); sb_123(3) = states(2,18); sc_123(3) = states(3,18);
end
if reg(k+1) == 3;
sa_123(1) = states(1,7); sb_123(1) = states(2,7); sc_123(1) = states(3,7);
sa_123(2) = states(1,18); sb_123(2) = states(2,18); sc_123(2) = states(3,18);
sa_123(3) = states(1,19); sb_123(3) = states(2,19); sc_123(3) = states(3,19);
end
if reg(k+1) == 4;
sa_123(1) = states(1,5); sb_123(1) = states(2,5); sc_123(1) = states(3,5);
sa_123(2) = states(1,7); sb_123(2) = states(2,7); sc_123(2) = states(3,7);
sa_123(3) = states(1,18); sb_123(3) = states(2,18); sc_123(3) = states(3,18);
end
%**************** third sector
elseif sec(k) == 3
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,7); sb_123(2) = states(2,7); sc_123(2) = states(3,7);
sa_123(3) = states(1,9); sb_123(3) = states(2,9); sc_123(3) = states(3,9);
end
if reg(k+1) == 2;
sa_123(1) = states(1,7); sb_123(1) = states(2,7); sc_123(1) = states(3,7);
sa_123(2) = states(1,9); sb_123(2) = states(2,9); sc_123(2) = states(3,9);
sa_123(3) = states(1,10); sb_123(3) = states(2,10); sc_123(3) = states(3,10);
end
if reg(k+1) == 3;
sa_123(1) = states(1,9); sb_123(1) = states(2,9); sc_123(1) = states(3,9);
sa_123(2) = states(1,20); sb_123(2) = states(2,20); sc_123(2) = states(3,20);
sa_123(3) = states(1,21); sb_123(3) = states(2,21); sc_123(3) = states(3,21);
end
if reg(k+1) == 4;
sa_123(1) = states(1,7); sb_123(1) = states(2,7); sc_123(1) = states(3,7);
sa_123(2) = states(1,19); sb_123(2) = states(2,19); sc_123(2) = states(3,19);
sa_123(3) = states(1,20); sb_123(3) = states(2,20); sc_123(3) = states(3,20);
end
%************ fourth sector
elseif sec(k) == 4
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,9); sb_123(2) = states(2,9); sc_123(2) = states(3,9);
sa_123(3) = states(1,11); sb_123(3) = states(2,11); sc_123(3) = states(3,11);
end
if reg(k+1) == 2;
sa_123(1) = states(1,9); sb_123(1) = states(2,9); sc_123(1) = states(3,9);
sa_123(2) = states(1,11); sb_123(2) = states(2,11); sc_123(2) = states(3,11);
sa_123(3) = states(1,22); sb_123(3) = states(2,22); sc_123(3) = states(3,22);
end
if reg(k+1) == 3;
sa_123(1) = states(1,11); sb_123(1) = states(2,11); sc_123(1) = states(3,11);
sa_123(2) = states(1,22); sb_123(2) = states(2,22); sc_123(2) = states(3,22);
sa_123(3) = states(1,23); sb_123(3) = states(2,23); sc_123(3) = states(3,23);
end
if reg(k+1) == 4;
sa_123(1) = states(1,9); sb_123(1) = states(2,9); sc_123(1) = states(3,9);
sa_123(2) = states(1,21); sb_123(2) = states(2,21); sc_123(2) = states(3,21);
sa_123(3) = states(1,22); sb_123(3) = states(2,22); sc_123(3) = states(3,22);
end
%******** fifth sector
elseif sec(k) == 5
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,11); sb_123(2) = states(2,11); sc_123(2) = states(3,11);
sa_123(3) = states(1,13); sb_123(3) = states(2,13); sc_123(3) = states(3,13);
end
if reg(k+1) == 2;
sa_123(1) = states(1,11); sb_123(1) = states(2,11); sc_123(1) = states(3,11);
sa_123(2) = states(1,13); sb_123(2) = states(2,13); sc_123(2) = states(3,13);
sa_123(3) = states(1,24); sb_123(3) = states(2,24); sc_123(3) = states(3,24);
end
if reg(k+1) == 3;
sa_123(1) = states(1,13); sb_123(1) = states(2,13); sc_123(1) = states(3,13);
sa_123(2) = states(1,24); sb_123(2) = states(2,24); sc_123(2) = states(3,24);
sa_123(3) = states(1,25); sb_123(3) = states(2,25); sc_123(3) = states(3,25);
end
if reg(k+1) == 4;
sa_123(1) = states(1,11); sb_123(1) = states(2,11); sc_123(1) = states(3,11);
sa_123(2) = states(1,23); sb_123(2) = states(2,23); sc_123(2) = states(3,23);
sa_123(3) = states(1,24); sb_123(3) = states(2,24); sc_123(3) = states(3,24);
end
% ------------- sixth sctor
elseif sec(k) == 6
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,3); sb_123(2) = states(2,3); sc_123(2) = states(3,3);
sa_123(3) = states(1,13); sb_123(3) = states(2,13); sc_123(3) = states(3,13);
end
if reg(k+1) == 2;
sa_123(1) = states(1,3); sb_123(1) = states(2,3); sc_123(1) = states(3,3);
sa_123(2) = states(1,5); sb_123(2) = states(2,5); sc_123(2) = states(3,5);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
if reg(k+1) == 3;
sa_123(1) = states(1,3); sb_123(1) = states(2,3); sc_123(1) = states(3,3);
sa_123(2) = states(1,13); sb_123(2) = states(2,13); sc_123(2) = states(3,13);
sa_123(3) = states(1,26); sb_123(3) = states(2,26); sc_123(3) = states(3,26);
end
if reg(k+1) == 4;
sa_123(1) = states(1,3); sb_123(1) = states(2,3); sc_123(1) = states(3,3);
sa_123(2) = states(1,15); sb_123(2) = states(2,15); sc_123(2) = states(3,15);
sa_123(3) = states(1,26); sb_123(3) = states(2,26); sc_123(3) = states(3,26);
end
end
end

%---------------------Vp < Vn
if Vp(k+1)<Vn(k+1)
%***************** first sector
if sec(k) == 1
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,4); sb_123(2) = states(2,4); sc_123(2) = states(3,4);
sa_123(3) = states(1,6); sb_123(3) = states(2,6); sc_123(3) = states(3,6);
end
if reg(k+1) == 2;
sa_123(1) = states(1,4); sb_123(1) = states(2,4); sc_123(1) = states(3,4);
sa_123(2) = states(1,6); sb_123(2) = states(2,6); sc_123(2) = states(3,6);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
if reg(k+1) == 3;
sa_123(1) = states(1,6); sb_123(1) = states(2,6); sc_123(1) = states(3,6);
sa_123(2) = states(1,16); sb_123(2) = states(2,16); sc_123(2) = states(3,16);
sa_123(3) = states(1,17); sb_123(3) = states(2,17); sc_123(3) = states(3,17);
end
if reg(k+1) == 4;
sa_123(1) = states(1,4); sb_123(1) = states(2,4); sc_123(1) = states(3,4);
sa_123(2) = states(1,15); sb_123(2) = states(2,15); sc_123(2) = states(3,15);
sa_123(3) = states(1,16); sb_123(3) = states(2,16); sc_123(3) = states(3,16);
end
%****************** Second sector
elseif sec(k) == 2
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,6); sb_123(2) = states(2,6); sc_123(2) = states(3,6);
sa_123(3) = states(1,8); sb_123(3) = states(2,8); sc_123(3) = states(3,8);
end
if reg(k+1) == 2;
sa_123(1) = states(1,6); sb_123(1) = states(2,6); sc_123(1) = states(3,6);
sa_123(2) = states(1,8); sb_123(2) = states(2,8); sc_123(2) = states(3,8);
sa_123(3) = states(1,18); sb_123(3) = states(2,18); sc_123(3) = states(3,18);
end
if reg(k+1) == 3;
sa_123(1) = states(1,8); sb_123(1) = states(2,8); sc_123(1) = states(3,8);
sa_123(2) = states(1,18); sb_123(2) = states(2,18); sc_123(2) = states(3,18);
sa_123(3) = states(1,19); sb_123(3) = states(2,19); sc_123(3) = states(3,19);
end
if reg(k+1) == 4;
sa_123(1) = states(1,6); sb_123(1) = states(2,6); sc_123(1) = states(3,6);
sa_123(2) = states(1,17); sb_123(2) = states(2,17); sc_123(2) = states(3,17);
sa_123(3) = states(1,18); sb_123(3) = states(2,18); sc_123(3) = states(3,18);
end
%**************** third sector
elseif sec(k) == 3
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,8); sb_123(2) = states(2,8); sc_123(2) = states(3,8);
sa_123(3) = states(1,10); sb_123(3) = states(2,10); sc_123(3) = states(3,10);
end
if reg(k+1) == 2;
sa_123(1) = states(1,8); sb_123(1) = states(2,8); sc_123(1) = states(3,8);
sa_123(2) = states(1,10); sb_123(2) = states(2,10); sc_123(2) = states(3,10);
sa_123(3) = states(1,20); sb_123(3) = states(2,20); sc_123(3) = states(3,20);
end
if reg(k+1) == 3;
sa_123(1) = states(1,10); sb_123(1) = states(2,10); sc_123(1) = states(3,10);
sa_123(2) = states(1,20); sb_123(2) = states(2,20); sc_123(2) = states(3,20);
sa_123(3) = states(1,21); sb_123(3) = states(2,21); sc_123(3) = states(3,21);
end
if reg(k+1) == 4;
sa_123(1) = states(1,8); sb_123(1) = states(2,8); sc_123(1) = states(3,8);
sa_123(2) = states(1,19); sb_123(2) = states(2,19); sc_123(2) = states(3,19);
sa_123(3) = states(1,20); sb_123(3) = states(2,20); sc_123(3) = states(3,20);
end
%************ fourth sector
elseif sec(k) == 4
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,10); sb_123(2) = states(2,10); sc_123(2) = states(3,10);
sa_123(3) = states(1,12); sb_123(3) = states(2,12); sc_123(3) = states(3,12);
end
if reg(k+1) == 2;
sa_123(1) = states(1,10); sb_123(1) = states(2,10); sc_123(1) = states(3,10);
sa_123(2) = states(1,12); sb_123(2) = states(2,12); sc_123(2) = states(3,12);
sa_123(3) = states(1,22); sb_123(3) = states(2,22); sc_123(3) = states(3,22);
end
if reg(k+1) == 3;
sa_123(1) = states(1,12); sb_123(1) = states(2,12); sc_123(1) = states(3,12);
sa_123(2) = states(1,22); sb_123(2) = states(2,22); sc_123(2) = states(3,22);
sa_123(3) = states(1,23); sb_123(3) = states(2,23); sc_123(3) = states(3,23);
end
if reg(k+1) == 4;
sa_123(1) = states(1,10); sb_123(1) = states(2,10); sc_123(1) = states(3,10);
sa_123(2) = states(1,21); sb_123(2) = states(2,21); sc_123(2) = states(3,21);
sa_123(3) = states(1,22); sb_123(3) = states(2,22); sc_123(3) = states(3,22);
end
%******** fifth sector
elseif sec(k) == 5
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,12); sb_123(2) = states(2,12); sc_123(2) = states(3,12);
sa_123(3) = states(1,14); sb_123(3) = states(2,14); sc_123(3) = states(3,14);
end
if reg(k+1) == 2;
sa_123(1) = states(1,12); sb_123(1) = states(2,12); sc_123(1) = states(3,12);
sa_123(2) = states(1,14); sb_123(2) = states(2,14); sc_123(2) = states(3,14);
sa_123(3) = states(1,24); sb_123(3) = states(2,24); sc_123(3) = states(3,24);
end
if reg(k+1) == 3;
sa_123(1) = states(1,14); sb_123(1) = states(2,14); sc_123(1) = states(3,14);
sa_123(2) = states(1,24); sb_123(2) = states(2,24); sc_123(2) = states(3,24);
sa_123(3) = states(1,25); sb_123(3) = states(2,25); sc_123(3) = states(3,25);
end
if reg(k+1) == 4;
sa_123(1) = states(1,12); sb_123(1) = states(2,12); sc_123(1) = states(3,12);
sa_123(2) = states(1,23); sb_123(2) = states(2,23); sc_123(2) = states(3,23);
sa_123(3) = states(1,24); sb_123(3) = states(2,24); sc_123(3) = states(3,24);
end
% ------------- sixth sctor
elseif sec(k) == 6
if reg(k+1) == 1;
sa_123(1) = states(1,1); sb_123(1) = states(2,1); sc_123(1) = states(3,1);
sa_123(2) = states(1,4); sb_123(2) = states(2,4); sc_123(2) = states(3,4);
sa_123(3) = states(1,14); sb_123(3) = states(2,14); sc_123(3) = states(3,14);
end
if reg(k+1) == 2;
sa_123(1) = states(1,4); sb_123(1) = states(2,4); sc_123(1) = states(3,4);
sa_123(2) = states(1,14); sb_123(2) = states(2,14); sc_123(2) = states(3,14);
sa_123(3) = states(1,26); sb_123(3) = states(2,26); sc_123(3) = states(3,26);
end
if reg(k+1) == 3;
sa_123(1) = states(1,4); sb_123(1) = states(2,4); sc_123(1) = states(3,4);
sa_123(2) = states(1,15); sb_123(2) = states(2,15); sc_123(2) = states(3,15);
sa_123(3) = states(1,26); sb_123(3) = states(2,26); sc_123(3) = states(3,26);
end
if reg(k+1) == 4;
sa_123(1) = states(1,14); sb_123(1) = states(2,14); sc_123(1) = states(3,14);
sa_123(2) = states(1,25); sb_123(2) = states(2,25); sc_123(2) = states(3,25);
sa_123(3) = states(1,26); sb_123(3) = states(2,26); sc_123(3) = states(3,26);
end
end
end

g_opt = inf;
for j = 1:3

% voltage of the output inverter


v_alpha_pre(j) = v_dc(k)*(2*sa_123(j)-sb_123(j)-sc_123(j))/6;
v_beta_pre(j) = sqrt(3)*v_dc(k)*(sb_123(j)-sc_123(j))/6;

g = abs(v_alpha_ref(k+1)-v_alpha_pre(j))+abs(v_beta_ref(k+1)-v_beta_pre(j));

if g<g_opt
g_opt = g;
j_opt = j;
end
end

% optimale switching states applied in next simpling time


sa(k+1) = sa_123(j_opt);
sb(k+1) = sb_123(j_opt);
sc(k+1) = sc_123(j_opt);
end

You might also like