이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며, 추후사용을위하여보관할수있다. 컴퓨터예제 7-1 보드선도를그리기위한 MATLAB 프로그램은다음과같다. 보드선도를그리기위한데이터 를행렬변수에담기위해서 [mag,phase]=bode(sys(k),w); 의명령이사용된다. 위와같이하면, mag와 phase의변수에각각크기와위상의값이저장된다. 이때, 보드선도그림은그리지않는다. 또한, w의변수에주파수값을넣어서 bode 명령어를사용하면계산을위한주파수값을지정할수있다. MATLAB program----------------------------------------------------- N=1001; w=logspace(-1,2,n); sys(1)=tf(100*[1],[1 1 0]); sys(2)=tf(100*[0.1 1],[1 1 0]); sys(3)=tf(100*[0.2 1],[1 1 0]); sys(4)=tf(100*[0.05 1],[1 1 0]); for k=1:4 [mag,phase]=bode(sys(k),w); for i=1:n mag_bode(i)=20*log10(mag(i)); phase_bode(i)=phase(i); subplot(2,1,1) semilogx(w, mag_bode,'-b','linewidth',3); axis([.1 100-40 60]) set(gca,'ytick',[-60-40 -20 0 20 40 60]) ylabel('magnitude (db)') subplot(2,1,2)
semilogx(w, phase_bode,'-b','linewidth',3); axis([.1 100-180 -90]) set(gca,'ytick',[-180-150 -120-90]) ylabel('phase (degree)') [gm,pm]=margin(sys(k)) hold off ----------------------------------------------------- 계단응답을그리기위한 MATLAB 프로그램은다음과같다. 아래에서폐루프시스템을구하기위하여 h=feedback(k*tf([1],[1 1 0]),1) 의명령어가사용되었다. 즉, 위의명령어는그림 7-1 의시스템에서 1 Ds () = KGs, () =, Hs () = 1 ss ( + 1) 인경우의폐루프시스템을구해준다. MATLAB Program K=100 h=feedback(k*tf([1],[1 1 0]),1) [y1,t1]=step(h,10); h=feedback(k*tf([0.1 1],[1 1 0]),1) [y2,t2]=step(h,10); plot(t1,y1,'-k',t2,y2,'-b','linewidth',3); axis([0 10 0 2]) xlabel('time(sec)'); ylabel('output') grid;
컴퓨터예제 7-2 진상제어기를설계하기위한 MATLAB 프로그램은다음과같다. 아래의프로그램에서제어기 를포함한시스템의전달함수를구하기위해서 sys(2)=tf(100*[t 1],conv([alpha*T 1],[1 1 0])); 의명령어가사용되었다. 위의명령어에서 conv 는두개의다항식을곱해서얻어지는다항 식을구하는명령어이다. 즉, conv([alpha*t 1],[1 1 0]) 2 은 ( α Ts + 1)( s + s) 의다항식을계산하는명령어이다. 진상제어기를설계하기위해서 α = 0.13 를정한후, ω max 에서진상제어기의크기값을 계산하면, 0.5 20log 1/ α = 9dB 이다. 개루프전달함수 DsGs () () 의크기보드선도 가 9dB 의값을갖는주파수를찾기위하여보드선도그림을이용하면정확한값을찾 기가어렵다. 따라서, 10 ( ) [w' mag_bode' phase_bode']; 의명령어에서 ; 을제거한후실행하면주파수, 크기, 위상값을화면에보여준다. 데이터 개수 N 을크게하면, 비교적정확한값을찾을수있으며, 이와같이하여 ω max = 16.7( rad / sec) 을찾을수있다. MATLAB program----------------------------------------------------- N=1001; w=logspace(-1,2,n); T=0.17; alpha=0.13; atan((1-alpha)/(2*sqrt(alpha)))*180/pi 10*log10(1/alpha) sys(1)=tf(100*[1],[1 1 0]); sys(2)=tf(100*[t 1],conv([alpha*T 1],[1 1 0])); for k=1:2 [mag,phase]=bode(sys(k),w); for i=1:n mag_bode(i)=20*log10(mag(i));
phase_bode(i)=phase(i); [w' mag_bode' phase_bode']; subplot(2,1,1) semilogx(w, mag_bode,'-b','linewidth',3); axis([.1 100-40 60]) set(gca,'ytick',[-60-40 -20 0 20 40 60]) ylabel('magnitude (db)') subplot(2,1,2) semilogx(w, phase_bode,'-b','linewidth',3); axis([.1 100-180 -90]) set(gca,'ytick',[-180-150 -120-90]) ylabel('phase (degree)') [Gm,Pm,Wcg,Wcp]=margin(sys(k)) hold off ----------------------------------------------------- 계단응답을그리기위한 MATLAB 프로그램은다음과같다. MATLAB Program K=100 T=0.17; alpha=0.13; h=feedback(tf(k*[t 1],conv([alpha*T 1],[1 1 0])),1) [y2,t2]=step(h,10); plot(t2,y2,'-b','linewidth',3); axis([0 10 0 2]) xlabel('time(sec)'); ylabel('output') grid;
컴퓨터예제 7-3 이예제에서는두단으로구성된진상제어기를설계한다. 먼저, 진상제어기를한개설계한후, 이제어기를제어대상시스템에포함하여진상제어기를한개추가한다. MATLAB 프로그램은다음과같다. MATLAB Program num=10; den=conv([0.2 1],[1 1 0]) % Original system w=logspace(-1,2,200); figure(1) margin(tf(num,den)) % Design the first lead controller phimax=55; alpha=(1-sin(pi*phimax/180))/(1+sin(pi*phimax/180)) 10*log10(1/alpha) [w' 20*log10(mag) phase ] wmax=4.73; T=1/(wmax*sqrt(alpha)) num1=[t 1]; den1=[t*alpha 1]; num=conv(num1,num); den=conv(den1,den); figure(2) margin(tf(num,den)) u=linspace(1,1,200); t=linspace(0,5,200); [y]=lsim(feedback(tf(num,den),1),u,t); figure(3) plot(t,y); grid on % Design the second lead controller phimax=32; alpha=(1-sin(pi*phimax/180))/(1+sin(pi*phimax/180)) 10*log10(1/alpha)
[w' 20*log10(mag) phase ] wmax=6.73; T=1/(wmax*sqrt(alpha)) num1=[t 1]; den1=[t*alpha 1]; num=conv(num1,num); den=conv(den1,den); figure(4) margin(tf(num,den)) u=linspace(1,1,200); t=linspace(0,5,200); [y]=lsim(feedback(tf(num,den),1),u,t); figure(5) plot(t,y); grid on
컴퓨터예제 7-4 보드선도를그리기위한 MATLAB 프로그램은다음과같다. MATLAB Program N=1001; w=logspace(-2,2,n); K=10; sys(1)=tf(5*k,[1 6 5]); Ti=1/0.6; sys(2)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); Ti=1/3; sys(3)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); for k=1:3 [mag,phase]=bode(sys(k),w); for i=1:n mag_bode(i)=20*log10(mag(i)); phase_bode(i)=phase(i); [w' mag_bode' phase_bode']; subplot(2,1,1) semilogx(w, mag_bode,'-b','linewidth',3); axis([.01 100-40 60]) set(gca,'ytick',[-60-40 -20 0 20 40 60]) ylabel('magnitude (db)') subplot(2,1,2) semilogx(w, phase_bode,'-b','linewidth',3); axis([.01 100-180 0]) set(gca,'ytick',[-180-135 -90-45 0]) ylabel('phase (degree)') [Gm,Pm,Wcg,Wcp]=margin(sys(k)) hold off 계단응답을그리기위한 MATLAB 프로그램은다음과같다.
MATLAB Program t=0:0.001:10; sys(1)=tf(5*k,[1 6 5]); K=10; Ti=1/0.6; sys(2)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); Ti=1/3; sys(3)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); h=feedback(sys(1),1) [y1]=step(h,t); h=feedback(sys(2),1) [y2]=step(h,t); h=feedback(sys(3),1) [y3]=step(h,t); plot(t,y1,'-k',t,y2,'-b',t,y3,'--b','linewidth',3); axis([0 5 0 2]) xlabel('time(sec)'); ylabel('output') grid;
컴퓨터예제 7-5 이예제에서는지상제어기를설계한다. MATLAB 프로그램은다음과같다. MATLAB Program num=100; den=conv([1 1],[0.2 1]); w=logspace(0,3,200); figure(1) margin(num,den) [w' 20*log10(mag) phase ] alpha=10^(18.8/20) T=10/6.75 num1=[t 1]; den1=[t*alpha 1]; num=conv(num1,num); den=conv(den1,den); figure(2) margin(tf(num,den)) u=linspace(1,1,200); t=linspace(0,5,200); [y]=lsim(num,[0 0 num]+den,u,t); figure(3) plot(t,y); grid on
컴퓨터예제 7-6 보드선도를그리기위한 MATLAB 프로그램은다음과같다. MATLAB Program N=1001; w=logspace(-1,2,n); K=10; Ti=1/0.6; sys(1)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); Ti=1/0.6;Td=1/10; sys(2)=tf(5*k*conv([td 1],[Ti 1]),conv([Ti 0],[1 6 5])); for k=1:2 [mag,phase]=bode(sys(k),w); for i=1:n mag_bode(i)=20*log10(mag(i)); phase_bode(i)=phase(i); [w' mag_bode' phase_bode']; subplot(2,1,1) semilogx(w, mag_bode,'-b','linewidth',3); axis([.1 100-40 40]) set(gca,'ytick',[-60-40 -20 0 20 40 60]) ylabel('magnitude (db)') subplot(2,1,2) semilogx(w, phase_bode,'-b','linewidth',3); axis([.1 100-180 0]) set(gca,'ytick',[-180-135 -90-45 0]) ylabel('phase (degree)') [Gm,Pm,Wcg,Wcp]=margin(sys(k)) hold off 계단응답을그리기위한 MATLAB 프로그램은다음과같다. MATLAB Program
t=0:0.001:10; K=10; Ti=1/0.6; sys(1)=tf(5*k*[ti 1],conv([Ti 0],[1 6 5])); Ti=1/0.6;Td=0.1; sys(2)=tf(5*k*conv([td 1],[Ti 1]),conv([Ti 0],[1 6 5])); h=feedback(sys(1),1) [y1]=step(h,t); h=feedback(sys(2),1) [y2]=step(h,t); plot(t,y1,'--k',t,y2,'-b','linewidth',3); axis([0 5 0 2]) xlabel('time(sec)'); ylabel('output') grid;
컴퓨터예제 7-7 진상제어기와지상제어기를함께설계하기위한 MATLAB 프로그램은다음과같다. MATLAB Program num=100; den=conv([1 1],[0.2 1]); w=logspace(0,3,200); figure(1) margin(num,den) [w' 20*log10(mag) phase ] alpha=10^(18.8/20) T=10/6.75 num1=[t 1]; den1=[t*alpha 1]; num=conv(num1,num); den=conv(den1,den); figure(2) margin(tf(num,den)) u=linspace(1,1,200); t=linspace(0,10,200); [y]=lsim(feedback(tf(num,den),1),u,t); figure(3) plot(t,y); grid on % Design lead controller phimax=35; alpha=(1-sin(pi*phimax/180))/(1+sin(pi*phimax/180)) 10*log10(1/alpha) [w' 20*log10(mag) phase ] wmax=10; T=1/(wmax*sqrt(alpha)) num1=[t 1]; den1=[t*alpha 1]; num=conv(num1,num); den=conv(den1,den); figure(4)
margin(tf(num,den)) u=linspace(1,1,200); t=linspace(0,10,200); [y]=lsim(feedback(tf(num,den),1),u,t); figure(5) plot(t,y); grid on