Bode Plot Design Example #3

MATLAB Code



%      ***** 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