% ***** MATLAB Code Starts Here ***** %
%DSGN_421_BODE_03_MAT
%
Kv_spec = 1/.05;
PM_spec = 60;
wx_spec = 3;
PO_spec = 10;
%
ngp = 100; dgp = [1 500 105 0];
nhp = 50*[1 0]; dhp = [1 50];
[np,dp] = feedback(ngp,dgp,2*nhp,dhp,-1);
olp = roots(dp); olz = roots(np);
%
Kvp = np(length(np)) / dp(length(dp)-1);
%
[nclp,dclp] = cloop(np,dp,-1);
clpp = roots(dclp);
%
w = logspace(-3,3,601);
[magp,php] = bode(np,dp,w);
[GMp,PMp,wphip,wxp] = margin(np,dp);
Tdp = (PMp*pi/180)/wxp;
%
figure(1),clf,semilogx(w,20*log10(magp),w,php),grid,xlabel(
'Frequency (r/s)'),... ylabel('Magnitude (db) & Phase (deg)'),title('Uncompensated System''s Frequency Response'),... hold on,semilogx([min(w) max(w)],[0 0],'r--',[min(w) max(w)],[-180 -180],'r--'),hold off%
t1 = 0:.01:25;
ysp = step(nclp,dclp,t1);
yrp = step(nclp,[dclp 0],t1);
POp = 100*(max(ysp)-1);
Tsp = timesetl(t1,ysp);
Trp = timerise(t1,ysp);
%
figure(2),clf,plot(t1,ysp),grid,xlabel(
'Time (s)'),ylabel('Amplitude'),... title('Uncompensated System''s Closed-Loop Step Response')%
figure(3),clf,plot(t1,yrp,[0 25],[0 25],
'k--'),grid,xlabel('Time (s)'),ylabel('Amplitude'),... title('Uncompensated System''s Closed-Loop Ramp Response')%
Kc = Kv_spec / Kvp;
Kvk = Kc*Kvp;
[GMk,PMk,wphik,wxk] = margin(Kc*np,dp);
Tdk = (PMk*pi/180)/wxk;
%
figure(4),clf,semilogx(w,20*log10(Kc*magp),w,20*log10(magp),
'r--',w,php),grid,xlabel('Frequency (r/s)'),... ylabel('Magnitude (db) & Phase (deg)'),title('Gain-Compensated System''s Frequency Response')%
[nclk,dclk] = cloop(Kc*np,dp,-1);
%
ysk = step(nclk,dclk,t1);
yrk = step(nclk,[dclk 0],t1);
POk = 100*(max(ysk)-1);
Tsk = timesetl(t1,ysk);
Trk = timerise(t1,ysk);
%
figure(5),clf,plot(t1,ysk,t1,ysp),grid,xlabel(
'Time (s)'),ylabel('Amplitude'),... title('Gain-Compensated System''s Closed-Loop Step Response')%
figure(6),clf,plot(t1,yrk,t1,yrp,[0 25],[0 25],
'k--'),grid,xlabel('Time (s)'),ylabel('Amplitude'),... title('Gain-Compensated System''s Closed-Loop Ramp Response'),text(12,7.5,'Uncompensated')%
wx_comp = wx_spec;
[i1,i2] = min(abs(w-wx_comp));
%
PMk1 = 180 + php(i2);
phimax = PM_spec + 12 - PMk1;
alfa_d = (1 - sin(phimax*pi/180)) / (1 + sin(phimax*pi/180));
%
zcd = wx_comp * sqrt(alfa_d); ncd = Kc * [1/zcd 1];
pcd = zcd / alfa_d; dcd = [1/pcd 1];
%
[nf1,df1] = series(ncd,dcd,np,dp);
[ncl1,dcl1] = cloop(nf1,df1,-1);
clp1 = roots(dcl1);
Kv1 = nf1(length(nf1)) / df1(length(df1)-1);
%
[magf1,phf1] = bode(nf1,df1,w);
[GM1,PM1,wphi1,wx1] = margin(nf1,df1);
Td1 = (PM1*pi/180)/wx1;
%
ysf1 = step(ncl1,dcl1,t1);
yrf1 = step(ncl1,[dcl1 0],t1);
PO1 = 100*(max(ysf1)-1);
Ts1 = timesetl(t1,ysf1);
Tr1 = timerise(t1,ysf1);
%
figure(7),clf,semilogx(w,20*log10(magf1),w,20*log10(Kc*magp),
'r--',w,phf1,w,php,'r--'),grid,xlabel('Frequency (r/s)'),... ylabel('Magnitude (db) & Phase (deg)'),...title(
'Lead-Compensated System''s Frequency Response')%
figure(8),clf,plot(t1,ysf1,t1,ysk,t1,ysp),grid,xlabel(
'Time (s)'),ylabel('Amplitude'),...title(
'Lead-Compensated System''s Closed-Loop Step Response')%
figure(9),clf,plot(t1,yrf1,t1,yrp,[0 25],[0 25],
'k--'),grid,xlabel('Time (s)'),ylabel('Amplitude'),...title(
'Lead-Compensated System''s Closed-Loop Ramp Response'),text(12,7.5,'Uncompensated')%
alfa_g = magf1(i2);
%
zcg = wx_comp / 10; ncg = [1/zcg 1];
pcg = zcg / alfa_g; dcg = [1/pcg 1];
%
[nf,df] = series(ncg,dcg,nf1,df1);
[ncl,dcl] = cloop(nf,df,-1);
clp = roots(dcl);
Kv = nf(length(nf)) / df(length(df)-1);
%
[magf,phf] = bode(nf,df,w);
[GM,PM,wphi,wx] = margin(nf,df);
Td = (PM*pi/180)/wx;
%
ysf = step(ncl,dcl,t1);
t2 = 0:0.02:25;
yrf = step(ncl,[dcl 0],t2);
PO = 100*(max(ysf)-1);
Ts = timesetl(t1,ysf);
Tr = timerise(t1,ysf);
%
figure(10),clf,semilogx(w,20*log10(magf),w,20*log10(magf1),
'r--',w,phf,w,phf1,'r--'),grid,xlabel('Frequency (r/s)'),...ylabel(
'Magnitude (db) & Phase (deg)'),... title('Lead-Lag-Compensated System''s Frequency Response')%
figure(11),clf,plot(t1,ysf,t1,ysk,t1,ysp),grid,xlabel(
'Time (s)'),ylabel('Amplitude'),... title('Lead-Lag-Compensated System''s Closed-Loop Step Response')%
figure(12),clf,plot(t2,yrf,t1,yrp,[0 25],[0 25],
'k--'),grid,xlabel('Time (s)'),ylabel('Amplitude'),... title('Lead-Lag-Compensated System''s Closed-Loop Ramp Response'),text(12,7.5,'Uncompensated')% % ***** MATLAB Code Stops Here *****
Click the
icon to return to the Dr. Beale's home page