ยุบรวม block , หา Close Loop Transfer function, Pole Zero, Root locus, Nyquist, Bode diagram และทดสอบระบบด้วยอินพุต โดย Matlab

Sim

Matlab ได้เตรียมเครื่องมือเอาไว้อย่างมากมายสำหรับงานด้าน Control Systems เราจะเริ่มด้วยการศึกษาพื้นฐานคำสั่งที่จำเป็นสำหรับการออกแบบและวิเคราะห์ระบบควบคุมแบบปิด โดยเริ่มที่คอนโทรลบล๊อกไดอะแกรมดังแสดง

การสร้าง Close Loop Transfer Function ของระบบข้างต้น มีขั้นตอนดังนี้

จะเริ่มจาการสร้าง Transfer Function ย่อย ทั้ง 4 บล๊อก แล้วยุบรวมบล๊อกเข้าด้วยกันตามลำดับ จะได้ Close Loop Transfer Function ในรูปแบบมาตรฐาน โดยมีคำสั่งดังนี้

clc,clear;
num1=[1];
den1=[1 1];

num2=[1];
den2=[1 1 1];

num3=[1];
den3=[1 2];

numh=[1];
denh=[1 1];

[num4,den4]=parallel(num1,den1,num2,den2);
[numg,deng]=series(num4,den4,num3,den3);

[num,den]=feedback(numg,deng,numh,denh,-1);
sys=tf(num,den);

ทำการหาค่ารากของสมการคุณลักณะเฉพาะ และหาค่าโพล และซีโร่ ของระบบ และตรวจสอบว่าระบบมีเสถียรภาพหรือไม่ โดยใช้คำสั่งดังนี้

[z,p,k]=tf2zp(num,den);
s=zpk(z,p,k,-1);

[r,p1,k1]=residue(num,den);
s1=residue(r,p1,k1);

ii=find(real(p)>0);
n1=length(ii);
if(n1>0)
    disp(['System is unstable, with ' int2str(n1) 'unstable poles']);
else 
    disp('Syatem is stable');
end

ทำการแสดง Nyquist Plot โดยคำสั่ง

figure(1)
nyquist(num,den);
grid;

ทำการแสดง Bode Plot โดยคำสั่ง

w=logspace(-2,3,100);
figure(2)
bode(num,den,w);
grid;

ทำการแสดง Root Locus โดยคำสั่ง

figure(3)
rlocus(num,den);
grid;

ทำการแสดงตำแหน่ง Pole-Zero ของระบบ โดยคำสั่ง

figure(4)
pzmap(num,den);
grid;

ทำการทดสอบระบบด้วย อินพุตแบบต่าง โดยคำสั่ง

figure(5)
step(num,den);

figure(6)
impulse(num,den);

figure(7)
t = 0:0.01:10;
u = log(t+1);
lsim(num,den,u,t)

figure(8)
[u,t] = gensig('square',1,10,0.1);
lsim(num,den,u,t)

นอกจากการใช้ Matlab command แล้ว การทดสอบหาผลตอบสนองของระบบต่ออินพุตรูปแบบต่างๆ ยังสามารถใช้ โปรแกรม Simulink ซึ่งจะให้ผลเช่นเดียวกัน

นอกจากตัวอย่างที่ผ่านมาแล้ว หากเรามี Open Loop Transfer Function ดังนี้

\(G(s)=\frac{1}{s(s+3)(s^{2}+2s+2)}\)

(1)

และต้องการเปลี่ยน (1) จะสร้างเป็น Close Loop Transfer Function ดังรูป

สามารถใช้คำสั่งดังนี้

clc,clear;
num1=[1];
den1=[1 0];

num2=[1];
den2=[1 3];

num3=[1];
den3=[1 2 2];

[num4,den4]=series(num1,den1,num2,den2);
[numg,deng]=series(num3,den3,num4,den4);
[num,den]=cloop(numg,deng,-1);
sys1=tf(num,den)

[z,p,k]=tf2zp(num,den);

sys2=zpk(z,p,k,-1);

[r,p1,k2]=residue(num,den);

figure(1)
subplot(2,3,1);
step(num,den);
grid

subplot(2,3,2);
impulse(num,den)
grid

subplot(2,3,3);
t = 0:0.01:10;
u = sin(t);
lsim(num,den,u,t)
grid

subplot(2,3,4);
t = 0:0.01:10;
u = log(t+1);
lsim(num,den,u,t)
grid

subplot(2,3,5);
t = 0:0.01:10;
u = exp(-0.05*t);
lsim(num,den,u,t)
grid

subplot(2,3,6);
[u,t] = gensig('square',1,10,0.1);
lsim(num,den,u,t)
grid


figure(2)
subplot(2,2,1);
pzmap(num,den)
grid

subplot(2,2,2);
rlocus(num,den);
grid

subplot(2,2,3);
nyquist(num,den)
grid

subplot(2,2,4);
bode(num,den)
grid

ii=find(real(p)>0);
n1=length(ii)
if(n1>0)
    disp(['System is unstable, with ' int2str(n1) 'unstable poles']);
else 
    disp('Syatem is stable');
end

สามารถดาวน์โหลด Matlab file ได้ที่นี้