Monodromy matrix coding not working

13 ビュー (過去 30 日間)
Mahes
Mahes 2021 年 7 月 13 日
% Initialization
clc,clear,cnt=1;
syms d a phia;
syms tau x0_1 x0_2 x0_3 x01 x0 x0_4;
x0=[x0_1;x0_2;x0_3;x0_4];
Vin=100;L1=200e-6;L2=200e-6;C=20e-6;R=57.6/2;T=10e-6;Ki=500;Kp=5;Kil=1/4;Kvc=5/240;mc=-0.3;
iL10=0;iL20=0;Vc0=0;Vp0=0;Vref1=5;a1=0;
A_on_on=[-1/R/C 0 0 0;0 0 0 0;0 0 0 0;Ki*Kvc 0 0 0];
A_on_off=[-1/R/C 0 1/C 0;0 0 0 0;-1/L2 0 0 0;Ki*Kvc 0 0 0];
A_off_on=[-1/R/C 1/C 0 0;-1/L1 0 0 0;0 0 0 0;Ki*Kvc 0 0 0];
A_off_off=[-1/R/C 1/C 1/C 0;-1/L1 0 0 0;-1/L2 0 0 0;Ki*Kvc 0 0 0];
Ba=[0 0 0 0;0 0 1/L1 0;0 0 1/L2 0;0 0 0 -Ki];Bb=Ba;Bc=Bb;Bd=Bc;
Ua=[0;0;Vin;Vref1*(1+a1*sin(4*pi*tau/T-4*pi*d))];
Ub=[0;0;Vin;Vref1];
Vin1=80:1:125;
hold on;
for ii=38:42
%*****************************************
Vin=Vin1(ii);
sim('Interleaved_close_loop_supervision_control_slope_compensation');
iL100=iL1n(end-2,2);
iL200=iL2n(end-2,2);
Vc00=Vc1(end-2,2);
int00=Int(end-2,2);
x00=[Vc00;iL100;iL200;int00];
%duty cycle calculation
duty=Dutycycle1(end-1,1)/T;
B1=Ba;U=Ua;
if duty<0.5
%%%%%%%%%%%%%%When d<0.5;
A1=A_on_off;A2=A_off_off;A3=A_off_on;A4=A_off_off;
phi1=expm(A1*d*T);phi2=expm(A2*0.5*(1-2*d)*T);
phi3=expm(A3*d*T);phi4=expm(A4*0.5*(1-2*d)*T);
I1=int(expm(A1*(d*T-tau))*B1*U,tau,0,d*T);
I2=int(expm(A2*(0.5*T-tau))*B1*U,tau,0.5*T,(0.5+d)*T);
I3=int(expm(A3*((0.5+d)*T-tau))*B1*U,tau,0.5*T,(0.5+d)*T);
I4=int(expm(A4*(T-tau))*B1*U,tau,(0.5+d)*T,T);
else if duty>0.5
%%%%%%%%%%%%%%%%%%%%%%When d>0.5
A1=A_on_on;A2=A_on_off;A3=A_on_on;A4=A_off_on;
phi1=expm(A1*0.5*(2*d-1)*T);phi2=expm(A2*(1-d)*T);
phi3=expm(A3*0.5*(2*d-1)*T);phi4=expm(A4*(1-d)*T);
I1=int(expm(A1*(0.5*(2*d-1)*T-tau))*B1*U,tau,0,0.5*(2*d-1)*T);
I2=int(expm(A2*(0.5*T-tau))*B1*U,tau,0.5*(2*d-1)*T,0.5*T);
I3=int(expm(A3*(d*T-tau))*B1*U,tau,0.5*T,d*T);
I4=int(expm(A4*(T-tau))*B1*U,tau,d*T,T);
else if duty==0.5
%%%%%%%%%%%%%%%%%%%%%%When d=0.5
%A1=A_on_off;A2=A_off_on;A3=A_on_off;A4=A_off_on;
end
end
end
%--------------------------------
x1=phi1*x0+I1;
x2=phi2*x1+I2;
x3=phi3*x2+I3;
x4=phi4*x3+I4;
x1=subs(x1,[d,x0_1,x0_2,x0_3,x0_4],[duty,Vc00,iL100,iL200,int00]);
x2=subs(x2,[d,x0_1,x0_2,x0_3,x0_4],[duty,Vc00,iL100,iL200,int00]);
x3=subs(x3,[d,x0_1,x0_2,x0_3,x0_4],[duty,Vc00,iL100,iL200,int00]);
x4=subs(x4,[d,x0_1,x0_2,x0_3,x0_4],[duty,Vc00,iL100,iL200,int00]);
phi1=subs(phi1,d,duty);phi2=subs(phi2,d,duty);
phi3=subs(phi3,d,duty);phi4=subs(phi4,d,duty);
if duty<0.5
%%%%%%%%%%%%%%%%%%%%%%When d<0.5;
spa=-Kp*Kvc*(x1(3)*R-x1(1))/R/C-Kil*Vin/L1+Ki*(Vref1-Kvc*x1(1));
spb=-Kp*Kvc*(x3(2)*R-x3(1))/R/C-Kil*Vin/L2+Ki(Vref1-Kvc*x3(1));
sa=mc/T;
S12=[1-Kp*Kvc*x1(2)/C/(spa+sa) -Kil*x1(2)/C/(spa+sa) 0 x1(2)/C/(spa+sa);
Kp*Kvc*x1(1)/L1/(spa+sa) 1+Kil*x1(1)/L1/(spa+sa) 0 -x1(1)/L1/(spa+sa);
0 0 1 0;
0 0 0 1];
S34=[1-Kp*Kvc*x3(3)/C/(spb+sa) 0 -Kil*x3(3)/C/(spb+sa) x3(3)/C/(spb+sa);
0 1 0 0;
Kp*Kvc*x3(1)/L2(spb+sa) 0 1+Kil*x3(1)/L2/(spb+sa)-x3(1)/L2/(spb+sa);
0 0 0 1;
M=phi2*S12*phi1*phi4*S34*phi3
eig(M);
else if duty>0.5
%%%%%%%%%%%%%%%%%%%5When d>0.5
spa=Kp*Kvc*x1(1)/R/C-Kil*Vin/L1+Ki*(Vref1-Kvc*x1(1));
spb=Kp*Kvc*x3(1)/R/C-Kil*Vin/L2+Ki*(Vref1-Kvc*x3(1));
sa=mc/T;
S12=[1-Kp*Kvc*x1(3)/C/(spb+sa) 0 -Kil*x1(3)/C/(spb+sa) x1(3)/C/(spb+sa);
0 1 0 0;
Kp*Kvc*x1(1)/L2/(spb+sa) 0 1+Kil*x1(1)/L2/(spb+sa)-x1(1)/L2/(spb+sa);
0 0 0 1];
S34=[1-Kp*Kvc*x3(2)/C/(spa+sa) -Kil*x3(2)/C/(spa+sa) 0 x3(2)/C/(spa+sa);
Kp*Kvc*x3(1)/L1/(spa+sa) 1+Kil*x3(1)/L1/(spa+sa) 0 -x3(1)/L1/(spa+sa);
0 0 1 0;
0 0 0 1;
M =phi2*S12*phi1*phi4*S34*phi3
eig(M);
else
if duty==0.5
%%%%%%%%%%%%%%%%%%%%When d=0.5
A1=A_on_off;A2=A_off_on;A3=A_on_off;A4=A_off_on;
end
end
end
plot(real(eig(M)),imag(eig(M)),'o','MarkerSize',10,'color','g');
end

回答 (0 件)

カテゴリ

Help Center および File ExchangeConversion Between Symbolic and Numeric についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by