[1 3 5 1 -10] payda = 1 3 5 1
Transkript
[1 3 5 1 -10] payda = 1 3 5 1
ELN3052 OTOMATİK KONTROL MATLAB ÖRNEKLERİ - 2 TRANSFER FONKSİYONU, BLOK ŞEMA VE SİSTEM BENZETİMİ UYGULAMALARI: Control System Toolbox içinde dinamik sistemlerin transfer fonksiyonlarını tanımlamak için tf, zpk komutları ve analizini yapmak için pole, zero, roots, pzmap, order, dcgain, damp, isstable, minreal komutları; blok şemalar ile verilen karmaşık sistemleri indirgemek için series, parallel, feedback komutları ve bir sistemin zaman cevabı benzetimini yapmak ve analiz etmek için step, impulse, lsim komutları kullanılmaktadır. 1) Transfer Fonksiyonlarının Tanımlanması ve Analizi: Matlab ortamında transfer fonksiyonu nesnelerini tanımlamak için tf ve zpk fonksiyonları kullanılır. Örneğin: • tf komutu ile transfer fonksiyonu tanımlama: 2( s + 1)( s 2 + 2s + 10) Örnek: Transfer fonksiyonu G ( s ) = 4 olan sistemin Matlab ortamında s + 3s 3 + 5s 2 + s − 10 tanımlanması ve analizi >> pay=2*conv([1 1],[1 2 10]) pay = 2 6 24 20 >> payda=[1 3 5 1 -10] payda = 1 3 5 1 -10 >> G=tf(pay,payda) Transfer function: 2 s^3 + 6 s^2 + 24 s + 20 ---------------------------s^4 + 3 s^3 + 5 s^2 + s - 10 şeklinde tanımlanabilir veya doğrudan >> G=tf(conv([2 2],[1 2 10]),[1 3 5 1 -10]) Transfer function: 2 s^3 + 6 s^2 + 24 s + 20 ---------------------------s^4 + 3 s^3 + 5 s^2 + s - 10 şeklinde de tanımlanabilir. • Transfer fonksiyonunun kutup ve sıfırları: >> z=zero(G) -1- z = -1.0000 + 3.0000i -1.0000 - 3.0000i -1.0000 >> p=pole(G) p = -2.0000 -1.0000 + 2.0000i -1.0000 - 2.0000i 1.0000 veya pay ve payda tanımlanmış ise: >> z=roots(pay) z = -1.0000 + 3.0000i -1.0000 - 3.0000i -1.0000 >> p=roots(payda) p = -2.0000 -1.0000 + 2.0000i -1.0000 - 2.0000i 1.0000 Veya: >> [p,z]=pzmap(G) % [p,z]=pzmap(pay,payda) aynı sonucu verir p = -2.0000 -1.0000 + 2.0000i -1.0000 - 2.0000i 1.0000 z = -1.0000 + 3.0000i -1.0000 - 3.0000i -1.0000 -2- >> pzmap(G) % s-düzleminde kutup ve sıfırları gösterir Pole-Zero Map 3 2 Imaginary Axis 1 0 -1 -2 -3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 Real Axis % s-düzleminde ζ >> grid doğrularını ve ωn eğrilerini gösterir Pole-Zero Map 3 0.56 0.44 0.32 0.2 0.1 0.7 2 2 1.5 0.84 Imaginary Axis 1 2.5 1 0.95 0.5 0 -1 0.5 System: G Pole : -1 - 2i 1 Damping: 0.447 Overshoot (%): 20.8 1.52.24 Frequency (rad/sec): 0.95 0.84 -2 2 0.7 -3 -2.5 0.56 -2 0.44 -1.5 0.32 -1 0.2 -0.5 0.1 2.5 0 0.5 1 Real Axis Şekildeki bir kutup veya sıfırın üzerine mouse ile tıklandığında şekilde görüldüğü gibi ilgili kutup veya sıfır hakkındaki sönüm oranı, doğal frekansı ve aşımı hakkında bilgi verir. -3- • Transfer fonksiyonunun kutup ve sıfırlarının sönüm oranları ve doğal frekansları: damp komutu bir sistemin kutup ve sıfırlarının sönüm oranları ve doğal frekansları hakkında bilgi almak için kullanılabilir. Örneğin: >> [Wn,xsi]=damp(G) % kutup ve sıfırlar hakkında bilgi verir Wn = 1.0000 2.0000 2.2361 2.2361 xsi = -1.0000 1.0000 0.4472 0.4472 >> [Wn,xsi,p]=damp(G) % ilave olarak kutupları da verir Wn = 1.0000 2.0000 2.2361 2.2361 xsi = -1.0000 1.0000 0.4472 0.4472 p = 1.0000 -2.0000 -1.0000 + 2.0000i -1.0000 - 2.0000i >> damp(G) % kutupları, sönüm oranlarını ve doğal frekansları verir Eigenvalue Damping Freq. (rad/s) 1.00e+000 -2.00e+000 -1.00e+000 + 2.00e+000i -1.00e+000 - 2.00e+000i -1.00e+000 1.00e+000 4.47e-001 4.47e-001 1.00e+000 2.00e+000 2.24e+000 2.24e+000 -4- Sistemin derecesini, dc kazancını ve kararlılık bilgisini doğrudan öğrenmek için order, dcgain ve isstable komutları kullanılabilir: >> order(G) % sistemin payda polinomunun derecesini verir ans = 4 >> dcgain(G) % sistemin dc kazancını verir (s=0 için G(0) değeri) ans = -2 >> isstable(G) % kararlı ise 1, kararsız ise 0 gönderir ans = 0 • zpk komutu ile transfer fonksiyonu tanımlama: Örnek: Transfer fonksiyonu G ( s ) = 10( s + 1)( s + 1 − j 2)(s + 1 + j 2) olan sistemin Matlab s( s + 2)( s + 4)(s + 2 − j 4)(s + 2 + j 4) ortamında tanımlanması ve analizi >> >> >> >> z=[-1 -1+2i -1-2i]; p=[0 -2 -4 -2+4i -2-4i]; k=10; G=zpk(z,p,k) Zero/pole/gain: 10 (s+1) (s^2 + 2s + 5) -----------------------------s (s+2) (s+4) (s^2 + 4s + 20) Özyapısal (karakteristik) denklem: >> D=poly(p) % verilen kutuplarla özyapısal denklemi hesaplar D = 1 10 >> p=roots(D) 52 152 160 0 % özyapısal denklemin köklerini hesaplar p = 0 -2.0000 + 4.0000i -2.0000 - 4.0000i -4.0000 -2.0000 Not: poly ve roots komutları birbirinin tersi işlem yapar. -5- • Dönüşüm Komutları: zp2tf, tf, tf2zp, zpk, residue Kutup-Sıfır-Kazanç gösteriminden Transfer Fonksiyonu gösterimine dönüşüm: tf, zp2tf >> >> >> >> z=[-1 -1+i -1-i]; p=[-2 -1+2i -1-2i -4i 4i]; k=10; G=zpk(z,p,k) % G isimli zpk nesnesi tanımlanıyor Zero/pole/gain: 10 (s+1) (s^2 + 2s + 2) --------------------------------(s+2) (s^2 + 2s + 5) (s^2 + 16) >> G1=tf(G) % herhangi bir nesneyi tf nesnesine çevirir Transfer function: 10 s^3 + 30 s^2 + 40 s + 20 ------------------------------------------s^5 + 4 s^4 + 25 s^3 + 74 s^2 + 144 s + 160 kutup-sıfır-kazanç gösteriminden pay-payda polinomlarını elde etmek: >> [pay,payda]=zp2tf(z,p,k) pay = 0 0 10 30 40 20 4 25 74 144 160 payda = 1 Transfer Fonksiyonu gösteriminden Kutup-Sıfır-Kazanç gösterimine dönüşüm: zpk, tf2zp >> G=tf(pay,payda) % G isimli tf nesnesi tanımlanıyor Transfer function: 10 s^3 + 30 s^2 + 40 s + 20 ------------------------------------------s^5 + 4 s^4 + 25 s^3 + 74 s^2 + 144 s + 160 >> G1=zpk(G) % herhangi bir nesneyi zpk nesnesine çevirir Zero/pole/gain: 10 (s+1) (s^2 + 2s + 2) --------------------------------(s+2) (s^2 + 2s + 5) (s^2 + 16) -6- pay-payda polinomlarından kutup-sıfır-kazanç gösterimini elde etmek: >> [z,p,k]=tf2zp(pay,payda) z = -1.0000 + 1.0000i -1.0000 - 1.0000i -1.0000 p = -0.0000 -0.0000 -2.0000 -1.0000 -1.0000 + 4.0000i - 4.0000i + 2.0000i - 2.0000i k = 10 Transfer Fonksiyonu ve Kısmi Kesir gösterimi arasındaki dönüşümler: residue pay ve payda polinomlarından kısmi kesir gösterimini elde etmek: >> pay=[3 12 8]; payda=[1 6 8 0]; >> [r,p,k]=residue(pay,payda) r = 1 1 1 p = -4 -2 0 k = [] kısmi kesir gösteriminden pay ve payda polinomlarını elde etmek: >> [pay,payda]=residue(r,p,k) pay = 3 12 8 6 8 payda = 1 0 -7- 2) Blok Şema İndirgeme İşlemleri: Matlab ortamında blok şema indirgeme işlemleri için series, parallel ve feedback komutları kullanılır. Seri bağlı blokların indirgenmesi: G ( s ) = G1 ( s )G2 ( s ) işlemi • Seri bağlı blokların indirgenmesinde series komutu veya çarpma ( * ) işlemi kullanılır. R(s ) >> >> >> >> C (s) G2 ( s ) G1 ( s) ≡ R(s ) G (s ) C (s) G1=tf(pay1,payda1); G2=tf(pay2,payda2); G=series(G1,G2) G=G1*G2 Örnek: G1 ( s ) = 10 s + 2 s + 10 2 , G2 ( s) = 5 s+5 Æ G ( s ) = G1 ( s )G2 ( s ) = 50 ( s + 5)( s + 2 s + 10) 2 >> G1=tf(10,[1 2 10]); >> G2=tf(5,[1 5]); >> G=series(G1,G2) komutları veya doğrudan tek bir satırda yazılan >> G=series(tf(10,[1 2 10]),tf(5,[1 5])) komutu aşağıdaki sonucu verir: Transfer function: 50 ----------------------s^3 + 7 s^2 + 20 s + 50 >> G=G1*G2 % series komutu yerine * işlemi de kullanılabilir Transfer function: 50 ----------------------s^3 + 7 s^2 + 20 s + 50 • Paralel bağlı blokların indirgenmesi: G ( s ) = G1 ( s ) ± G2 ( s ) işlemi Paralel bağlı blokların indirgenmesinde parallel komutu veya toplama/çıkarma işlemi kullanılır. R(s ) G1 ( s) G2 ( s ) + C (s) ≡ R(s ) G (s) C (s ) + -8- >> >> >> >> G1=tf(pay1,payda1); G2=tf(pay2,payda2); G=parallel(G1,G2) G=G1+G2 Çıkarma işlemi: G1 ( s) R(s ) + C (s) G (s) C (s ) – G2 ( s ) >> >> >> >> ≡ R(s ) G1=tf(pay1,payda1); G2=tf(pay2,payda2); G=parallel(G1,-G2) G=G1-G2 Örnek: G1 ( s ) = 10 s + 2 s + 10 2 , G2 ( s) = 5 s+5 Æ G ( s ) = G1 ( s ) m G2 ( s ) = ? >> G1=tf(10,[1 2 10]); >> G2=tf(5,[1 5]); >> G=parallel(G1,G2) komutları veya doğrudan tek bir satırda yazılan >> G=parallel(tf(10,[1 2 10]),tf(5,[1 5])) komutu aşağıdaki sonucu verir: Transfer function: 5 s^2 + 20 s + 100 ----------------------s^3 + 7 s^2 + 20 s + 50 >> G=G1+G2 % parallel komutu yerine + işlemi de kullanılabilir Transfer function: 5 s^2 + 20 s + 100 ----------------------s^3 + 7 s^2 + 20 s + 50 >> G=parallel(G1,-G2) Transfer function: -5 s^2 ----------------------s^3 + 7 s^2 + 20 s + 50 -9- >> G=G1-G2 % parallel komutu yerine - işlemi de kullanılabilir Transfer function: -5 s^2 ----------------------s^3 + 7 s^2 + 20 s + 50 • Geribesleme ile bağlı blokların indirgenmesi: Gk ( s ) = R(s ) + G ( s) işlemi 1 m G (s) H ( s) C (s ) G (s) R(s ) ≡ ± Gk (s ) C (s) H (s ) >> G=tf(gpay,gpayda); >> H=tf(hpay,hpayda); Negatif geribeslemeli kapalı-çevrim sistem transfer fonksiyonu için: >> Gk=feedback(G,H) >> Gk=feedback(G,H,-1) >> Gk=G/(1+G*H) Pozitif geribeslemeli kapalı-çevrim sistem transfer fonksiyonu için: >> Gk=feedback(G,-H) >> Gk=feedback(G,H,+1) >> Gk=G/(1-G*H) Örnek: G ( s) = 10 s + 2 s + 10 2 , H (s) = >> G=tf(10,[1 2 10]); >> H=tf(5,[1 5]); >> Gk=feedback(G,H) 5 s+5 Æ Gk ( s ) = G (s) =? 1 m G ( s) H ( s) % negatif geribeslemeli sistem komutları veya doğrudan tek bir satırda yazılan >> G=feedback(tf(10,[1 2 10]),tf(5,[1 5])) komutu aşağıdaki sonucu verir: Transfer function: 10 s + 50 -----------------------s^3 + 7 s^2 + 20 s + 100 >> Gk=feedback(G,H,-1) % negatif geribeslemeli sistem - 10 - Transfer function: 10 s + 50 -----------------------s^3 + 7 s^2 + 20 s + 100 >> Gk=G/(1+G*H) % negatif geribeslemeli sistem Transfer function: 10 s^3 + 70 s^2 + 200 s + 500 --------------------------------------------s^5 + 9 s^4 + 44 s^3 + 210 s^2 + 400 s + 1000 >> [p,z]=pzmap(Gk) % kapalı-çevrim sistemin kutup ve sıfırları p = -6.3348 -0.3326 -0.3326 -1.0000 -1.0000 + + - 3.9592i 3.9592i 3.0000i 3.0000i z = -5.0000 -1.0000 + 3.0000i -1.0000 - 3.0000i >> minreal(Gk) % eğer var ise kutup-sıfır silmesi yapar Transfer function: 10 s + 50 -----------------------s^3 + 7 s^2 + 20 s + 100 >> Gk=feedback(G,-H) % pozitif geribeslemeli sistem Transfer function: 10 s + 50 -----------------s^3 + 7 s^2 + 20 s >> Gk=feedback(G,H,+1) % pozitif geribeslemeli sistem Transfer function: 10 s + 50 -----------------s^3 + 7 s^2 + 20 s >> Gk=G/(1-G*H) % pozitif geribeslemeli sistem - 11 - Transfer function: 10 s^3 + 70 s^2 + 200 s + 500 -------------------------------------s^5 + 9 s^4 + 44 s^3 + 110 s^2 + 200 s >> [p,z]=pzmap(Gk) % kapalı-çevrim sistemin kutup ve sıfırları p = 0 -3.5000 -3.5000 -1.0000 -1.0000 z = + + - 2.7839i 2.7839i 3.0000i 3.0000i -5.0000 -1.0000 + 3.0000i -1.0000 - 3.0000i >> minreal(Gk) % eğer var ise kutup-sıfır silmesi yapar Transfer function: 10 s + 50 -----------------s^3 + 7 s^2 + 20 s Not: Birim geribeslemeli kapalı-çevrim sistemin transfer fonksiyonunu hesaplamak için H yerine 1 yazılır. Karmaşık Blok Şemaların İndirgenmesi: Örnek 1: Aşağıda blok şeması verilen sistemi indirgeyerek kapalı-çevrim transfer fonksiyonunu bulunuz. Gk 1 R(s ) + 4 – G1 + G2 – 2 ( s + 1)( s + 8) 1 s C (s) G3 0.2 H Çözüm: >> G1=tf(2,conv([1 1],[1 8])) Transfer function: 2 ------------s^2 + 9 s + 8 >> Gk1=feedback(G1,0.2) - 12 - Transfer function: 2 --------------s^2 + 9 s + 8.4 >> G=series(Gk1,tf(4,[1 0])) Transfer function: 8 ------------------s^3 + 9 s^2 + 8.4 s >> Gk=feedback(G,1) Transfer function: 8 ----------------------s^3 + 9 s^2 + 8.4 s + 8 Örnek 2: Aşağıda blok şeması verilen sistemi indirgeyerek kapalı-çevrim transfer fonksiyonunu bulunuz ve kapalı-çevrim sistemin s-düzleminde kutup-sıfır gösterimini çiziniz. R(s ) + – G1 ( s) G2 ( s ) 1 s2 50 s +1 s 2 s 2 + – H (s ) G3 ( s ) C (s ) + – Çözüm: >> >> >> >> >> G1=tf(1,[1 0 0]); G2=tf(50,[1 1]); G3=tf([1 0],1); H=tf(2,[1 0]); Gk1=feedback(G2,H) Transfer function: 50 s ------------s^2 + s + 100 >> Gp=parallel(G3,-2) Transfer function: s - 2 >> Gs=series(Gk1,Gp) Transfer function: 50 s^2 - 100 s -------------s^2 + s + 100 - 13 - >> G=series(G1,Gs) Transfer function: 50 s^2 - 100 s ------------------s^4 + s^3 + 100 s^2 >> Gk=feedback(G,1) Transfer function: 50 s^2 - 100 s --------------------------s^4 + s^3 + 150 s^2 - 100 s Eğer ‘s’ kompleks değişkeni tf nesnesi olarak tanımlanırsa series komutu yerine s’li ifadeler ile diğer tf nesneleri çarpılabilir. >> Gk1=feedback(tf(50,[1 1]),tf(2,[1 0])) Transfer function: 50 s ------------s^2 + s + 100 >> s=tf(‘s’) % s kompleks değişkeni tf nesnesi olarak tanımlanıyor Transfer function: s >> G=(1/s^2)*Gk1*(s-2) % ve diğer tf nesneleri ile çarpılıyor Transfer function: 50 s^2 - 100 s ------------------s^4 + s^3 + 100 s^2 >> Gk=feedback(G,1) Transfer function: 50 s^2 - 100 s --------------------------s^4 + s^3 + 150 s^2 - 100 s >> [pk,zk]=pzmap(Gk) % kapalı-çevrim sistemin kutup ve sıfırları pk = 0 -0.8309 +12.2642i -0.8309 -12.2642i 0.6618 zk = 0 2 - 14 - >> pzmap(Gk) % s-düzleminde kutup ve sıfırları gösterir Pole-Zero Map 15 10 Imaginary Axis 5 0 -5 -10 -15 -1 -0.5 0 0.5 1 1.5 2 Real Axis >> minreal(Gk) % eğer var ise kutup-sıfır silmesi yapar Transfer function: 50 s - 100 ----------------------s^3 + s^2 + 150 s - 100 Örnek 3: Aşağıda blok şeması verilen sistemi indirgeyerek kapalı-çevrim transfer fonksiyonunu bulunuz ve kapalı-çevrim sistemin s-düzleminde kutup-sıfır gösterimini çiziniz. R(s ) 4 + – – 1 s +1 s s +2 2 4s + 2 ( s + 1) 2 + – 1 s2 C (s ) 50 s2 + 2 s 3 + 14 Çözüm: >> >> >> >> >> >> >> >> >> >> >> G1=tf(1,[1 1]); G2=tf([1 0],[1 0 2]); G12=series(G1,G2); H1=tf([4 2],[1 2 1]); Gk1=feedback(G12,H1); G3=tf(1,[1 0 0]); Gk2=feedback(G3,50); Gk12=series(Gk1,Gk2); H=tf([1 0 2],[1 0 0 14]); G=feedback(Gk12,H); Gk=series(4*G) - 15 - Transfer function: 4 s^6 + 8 s^5 + 4 s^4 + 56 s^3 + 112 s^2 + 56 s ----------------------------------------------------------------------------------------------------s^10 + 3 s^9 + 55 s^8 + 175 s^7 + 300 s^6 + 1323 s^5 + 2656 s^4 + 3715 s^3 + 7732 s^2 + 5602 s + 1400 veya series komutu yerine * işlemi kullanıldığında sadece feedback komutu kullanılabilir: >> >> >> >> >> >> >> >> G1=tf(1,[1 1]); G2=tf([1 0],[1 0 2]); H1=tf([4 2],[1 2 1]); Gk1=feedback(G1*G2,H1); G3=tf(1,[1 0 0]); Gk2=feedback(G3,50); H=tf([1 0 2],[1 0 0 14]); Gk=4*feedback(Gk1*Gk2,H) Transfer function: 4 s^6 + 8 s^5 + 4 s^4 + 56 s^3 + 112 s^2 + 56 s ----------------------------------------------------------------------------------------------------s^10 + 3 s^9 + 55 s^8 + 175 s^7 + 300 s^6 + 1323 s^5 + 2656 s^4 + 3715 s^3 + 7732 s^2 + 5602 s + 1400 >> [p,z]=pzmap(Gk) % Kapalı-çevrim sistemin kutup ve sıfırlarını listeler p = -0.0002 -0.0002 1.2052 1.2052 -2.4202 -2.3077 0.1223 0.1223 -0.4635 -0.4635 + + - 7.0710i 7.0710i 2.0883i 2.0883i + + - 1.8367i 1.8367i 0.1993i 0.1993i z = 0 1.2051 + 2.0872i 1.2051 - 2.0872i -2.4101 -1.0000 -1.0000 >> minreal(Gk) % eğer var ise kutup-sıfır silmesi yapar Transfer function: 4 s^6 + 8 s^5 + 4 s^4 + 56 s^3 + 112 s^2 + 56 s ----------------------------------------------------------------------------------------------------s^10 + 3 s^9 + 55 s^8 + 175 s^7 + 300 s^6 + 1323 s^5 + 2656 s^4 + 3715 s^3 + 7732 s^2 + 5602 s + 1400 Burada birbirine çok yakın fakat aynı olmayan kutup ve sıfırlar olduğu için minreal fonksiyonu ile kutup-sıfır sadeleşmesi yapılamamıştır. Fakat minreal fonksiyonunda bir tolerans değeri ile kutup-sıfır sadeleşmesi yapmak mümkündür. Önce sadeleştirmek istediğimiz kutup ve sıfırları s-düzleminde görelim: - 16 - >> pzmap(Gk) % Kapalı-çevrim sistemin kutuplarını ve sıfırlarını çizer Pole-Zero Map 8 6 4 Imaginary Axis 2 0 -2 -4 -6 -8 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 Real Axis Burada 0.01 tolerans değeri ile birbirine çok yakın olan kutup ve sıfırlar sadeleştirilebilir. >> Gks=minreal(Gk,0.01) % 0.01 tolerans ile kutup-sıfır silmesi yapar Transfer function: 4 s^3 + 8 s^2 + 4 s -------------------------------------------------------------------------------s^7 + 2.99 s^6 + 54.99 s^5 + 160.5 s^4 + 257.5 s^3 + 550.1 s^2 + 398.3 s + 99.51 >> pzmap(Gks) % Sadeleştirilmiş kapalı-çevrim sistemin kutupları ve sıfırları Pole-Zero Map 8 6 4 Imaginary Axis 2 0 -2 -4 -6 -8 -2.5 -2 -1.5 -1 -0.5 0 0.5 Real Axis - 17 - >> [ps,zs]=pzmap(Gks) % sadeleşme yapıldıktan sonraki kutup ve sıfırlar ps = -0.0002 -0.0002 -2.3077 0.1223 0.1223 -0.4635 -0.4635 + 7.0710i - 7.0710i + + - 1.8367i 1.8367i 0.1993i 0.1993i zs = 0 -1.0000 -1.0000 Örnek 4: Aşağıda blok şeması verilen sistemi indirgeyerek kapalı-çevrim transfer fonksiyonunu bulunuz ve kapalı-çevrim sistemin s-düzleminde kutup-sıfır gösterimini çiziniz. Çözüm: g 6 ve g 7 arasındaki ayrılma noktası g 7 ’nin sağına alındığında g 9 yerine g 9 g 7 gelir >> >> >> >> >> g1=tf(1,[0.01,1]); g2=tf([0.17,1],[0.085,0]); g3=g1; g4=tf([0.15,1],[0.051,0]); g5=tf(70,[0.0067,1]); g6=tf(0.21,[0.15,1]); g7=tf(130,[1,0]); g8=0.212; g9=tf(0.1,[0.01,1]); g97=g9/g7; g10=0.0044*g1; gk1=feedback(g6*g7,g8) % üstteki çevrim indirgeniyor Transfer function: 27.3 -------------------0.15 s^2 + s + 5.788 >> gk2=feedback(g4*g5*gk1,g97) % ortadaki çevrim indirgeniyor Transfer function: 372.6 s^2 + 3.975e004 s + 248430 -------------------------------------------------------------6.663e-005 s^5 + 0.01705 s^4 + 1.108 s^3 + 35.94 s^2 + 229.5 s >> Gk=g1*feedback(g2*g3*gk2,g10) % alttaki çevrim indirgeniyor - 18 - Transfer function: 0.6335 s^4 + 134.6 s^3 + 7950 s^2 + 8.447e004 s + 248430 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------5.664e-012 s^9 + 3.149e-009 s^8 + 6.989e-007 s^7 + 8.045e-005 s^6 + 0.00521 s^5 + 0.1944 s^4 + 4.232 s^3 + 54.48 s^2 + 371.7 s + 1093 >> Gkz=zpk(Gk) % tf nesnesi zpk nesnesine dönüştürülüyor Zero/pole/gain: 111852502194.9078 (s+100)^2 (s+6.667) (s+5.882) ------------------------------------------------------------------------------------(s+180.9) (s+100)^2 (s+84.12) (s+48.21) (s^2 + 15.16s + 74.33) (s^2 + 27.57s + 354) >> pzmap(Gkz) % kapalı-çevrim sistemin kutupları ve sıfırları Pole-Zero Map 15 10 Imaginary Axis 5 0 -5 -10 -15 -200 -180 -160 -140 -120 -100 -80 -60 -40 -20 0 Real Axis >> Gkzm=minreal(Gkz) % kutup-sıfır sadeşleşmesi yapılıyor Zero/pole/gain: 111852502194.9078 (s+6.667) (s+5.882) --------------------------------------------------------------------------(s+180.9) (s+84.12) (s+48.21) (s^2 + 15.16s + 74.33) (s^2 + 27.57s + 354) >> pzmap(Gkzm) % indirgenmiş kapalı-çevrim sistemin kutupları ve sıfırları Pole-Zero Map 15 10 Imaginary Axis 5 0 -5 -10 -15 -200 -180 -160 -140 -120 -100 Real Axis -80 -60 -40 -20 0 - 19 - 3) Transfer Fonksiyonu Modellerinin Benzetimi: Bir sisteme uygulanan belirli bir giriş işareti için zaman cevabı benzetimini yapmak için step, impulse ve lsim komutları kullanılır. • >> >> >> >> step komutu: Bir sistemin birim basamak cevabını hesaplar ve çizer. step(pay,payda) step(pay,payda,t) [y,t]=step(G) [y,t]=step(G,t) Birim Basamak Cevabı 1.4 1.2 2 s + 25 Örnek1: G ( s ) = 2 s + 4 s + 25 Örnek2: G ( s ) = >> >> >> >> >> >> >> 0.8 0.6 0.4 0.2 0 0 0.5 1 1.5 2 2.5 3 zaman (sec) 50( s + 2) ( s + 5)( s + 1 − j 5)( s + 1 + j 5) G=zpk([-2],[-5 -1+5i -1-5i],50) t=0:0.01:10; % zaman vektörü step(G,t) xlabel('zaman') ylabel('genlik') title('Birim Basamak Cevabı') grid Örnek3: G ( s ) = genlik G=tf([2 25],[1 4 25]) step(G) xlabel('zaman') ylabel('genlik') title('Birim Basamak Cevabı') grid Birim Basamak Cevabı 2 1.5 genlik >> >> >> >> >> >> 1 1 0.5 0 2( s − 2) ( s + 1)( s + 2)( s + 3) 0 2 4 6 8 10 8 10 zaman (sec) Birim Basamak Cevabı 0.1 0 G=zpk([2],[-1 -2 -3],2) t=0:0.01:10; % zaman vektörü step(G,t) xlabel('zaman') ylabel('genlik') title('Birim Basamak Cevabı') grid -0.1 -0.2 genlik >> >> >> >> >> >> >> -0.3 -0.4 -0.5 -0.6 -0.7 2( s 2 + 2 s + 9) G ( s ) = Örnek4: ( s + 2)( s 2 + 9) 2 4 6 zaman (sec) Birim Basamak Cevabı 1.4 G=tf(2*[1 2 9],conv([1 2],[1 0 9]))1.2 1 t=0:0.01:12; % zaman vektörü step(G,t) 0.8 xlabel('zaman') 0.6 ylabel('genlik') 0.4 title('Birim Basamak Cevabı') 0.2 grid genlik >> >> >> >> >> >> >> 0 0 0 2 4 6 zaman (sec) 8 10 - 20 - 12 • >> >> >> >> impulse komutu: Bir sistemin birim ani darbe (dirac) cevabını hesaplar ve çizer. impulse(pay,payda) impulse(pay,payda,t) [y,t]=impulse(G) [y,t]=impulse(G,t) Örnek1: G ( s ) = Birim Ani Darbe Cevabı 4 2 s + 25 s + 4 s + 25 3 2 >> >> >> >> >> >> G=tf([2 25],[1 4 25]) impulse(G) xlabel('zaman') ylabel('genlik') title('Birim Ani Darbe Cevabı') grid genlik 2 1 0 -1 0 0.5 1 1.5 2 2.5 3 zaman (sec) 50( s + 2) Örnek2: G ( s ) = ( s + 5)( s + 1 − j 5)( s + 1 + j 5) Birim Ani Darbe Cevabı 6 4 G=zpk([-2],[-5 -1+5i -1-5i],50) t=0:0.01:10; % zaman vektörü impulse(G,t) xlabel('zaman') ylabel('genlik') title('Birim Ani Darbe Cevabı') grid Örnek3: G ( s ) = 2 genlik >> >> >> >> >> >> >> 0 -2 -4 0 2 4 6 8 10 8 10 zaman (sec) 2( s − 2) ( s + 1)( s + 2)( s + 3) Birim Ani Darbe Cevabı 0.3 0.2 G=zpk([2],[-1 -2 -3],2) t=0:0.01:10; % zaman vektörü impulse(G,t) xlabel('zaman') ylabel('genlik') title('Birim Ani Darbe Cevabı') grid 0.1 genlik >> >> >> >> >> >> >> 0 -0.1 -0.2 -0.3 -0.4 2( s + 2 s + 9) Örnek4: G ( s ) = ( s + 2)( s 2 + 9) 2 2 4 6 zaman (sec) Birim Ani Darbe Cevabı 2 G=tf(2*[1 2 9],conv([1 2],[1 0 9]))1.5 1 t=0:0.01:12; % zaman vektörü impulse(G,t) 0.5 xlabel('zaman') 0 ylabel('genlik') -0.5 title('Birim Ani Darbe Cevabı') -1 grid genlik >> >> >> >> >> >> >> 0 -1.5 0 2 4 6 8 10 zaman (sec) - 21 - 12 • step komutunun değişik kullanımları: 1⎫ −1 ⎧ >> step(G) ⇒ c(t ) = L ⎨G ( s) ⋅ ⎬ Æ birim basamak cevabını verir ise s⎭ ⎩ 1⎫ −1 ⎧ >> step(s*G) ⇒ c(t ) = L ⎨[sG ( s)] ⋅ ⎬ Æ birim ani darbe (dirac) cevabını verir s⎭ ⎩ −1 ⎧ ⎡ G ( s ) ⎤ 1 ⎫ >> step(G/s) ⇒ c(t ) = L ⎨⎢ ⎥ ⋅ ⎬ Æ birim rampa cevabını verir ⎩⎣ s ⎦ s ⎭ −1 ⎧ ⎡ G ( s ) ⎤ 1 ⎫ >> step(G/s^2) ⇒ c(t ) = L ⎨⎢ 2 ⎥ ⋅ ⎬ Æ birim parabol cevabını verir ⎩⎣ s ⎦ s ⎭ 1⎫ −1 ⎧ − Ts >> step(G*exp(-T*s)) ⇒ c(t ) = L ⎨ G ( s )e ⋅ ⎬ Æ u (t − T ) giriş cevabını verir s⎭ ⎩ −1 ⎧ ⎡ G ( s ) − Ts ⎤ 1 ⎫ e ⎥ ⋅ ⎬ Æ t u (t − T ) giriş cevabını verir >> step(exp(-T*s)*G/s) ⇒ c(t ) = L ⎨⎢ ⎦ s⎭ ⎩⎣ s [ ] Not: Bunun için s ve G birer tf nesnesi olarak tanımlanmalıdır. Örnek: Transfer fonksiyonu G ( s ) = 2 s + 25 olan sistemin yukarıdaki giriş işaretlerine s + 4s + 25 2 verdiği cevabı step komutunu kullanarak hesaplayalım ve çizelim. >> G=tf([2 25],[1 4 25]); % G fonksiyonu tf nesnesi olarak tanımlanıyor >> s=tf('s'); % s değişkeni tf nesnesi olarak tanımlanıyor % birim ani darbe (dirac) cevabı: >> step(s*G), grid >> title('Birim Ani Darbe Giriş Cevabı') >> xlabel('zaman'), ylabel('genlik') Birim Ani Darbe Giriş Cevabı 3.5 3 2.5 genlik 2 1.5 1 0.5 0 -0.5 -1 0 0.5 1 1.5 2 2.5 3 zaman (sec) % birim rampa giriş cevabı: >> >> >> >> figure, t=0:0.01:3; step(G/s,t) hold on, plot(t,t,'k'), grid title('Birim Rampa Giriş Cevabı') xlabel('zaman'), ylabel('genlik') - 22 - Birim Rampa Giriş Cevabı 3 2.5 genlik 2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 3 zaman (sec) % birim parabol giriş cevabı: >> >> >> >> figure, t=0:0.01:3; step(G/s^2,t) hold on, plot(t,0.5*t.^2,'k'), grid title('Birim Parabol Giriş Cevabı') xlabel('zaman'), ylabel('genlik') Birim Parabol Giriş Cevabı 4.5 4 3.5 genlik 3 2.5 2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 3 zaman (sec) % (2+t)u(t) figure, t=0:0.01:4; step(2*G+G/s,t); hold on, plot(t,2+t,'k'), grid title('(2+t)u(t) Giriş Cevabı') xlabel('zaman'), ylabel('genlik') (2+t)u(t) Giriş Cevabı 6 5 4 genlik >> >> >> >> giriş cevabı: 3 2 1 0 0 0.5 1 1.5 2 2.5 3 3.5 4 zaman (sec) - 23 - % u(t)+tu(t-4) G(s) = >> >> >> >> >> giriş cevabı: ⎧⎡ G ( s ) − 4 s ⎤ 1 ⎫ 2 s + 25 1⎫ ⎧ ⇒ c(t ) = L−1 ⎨[G ( s )] ⋅ ⎬ + L−1 ⎨⎢ e ⎥⋅ ⎬=? s + 4 s + 25 s⎭ s ⎩ ⎣ ⎦ s⎭ ⎩ 2 figure, t=0:0.01:7; c1=step(G,t); c2=step(exp(-4*s)*G/s,t); plot(t,c1+c2), grid title('u(t)+t.u(t-4) Giriş Cevabı') xlabel('zaman (saniye)'), ylabel('genlik') u(t)+t.u(t-4) Giriş Cevabı 4 3.5 3 genlik 2.5 2 1.5 1 0.5 0 0 1 2 3 4 zaman (saniye) % u(t)+u(t-3)-2u(t-6) G(s) = 6 7 giriş cevabı: [ ] [ ] 2 s + 25 1⎫ 1⎫ 1⎫ ⎧ ⎧ ⎧ ⇒ c(t ) = L−1 ⎨[G ( s)] ⋅ ⎬ + L−1 ⎨ G ( s )e − 3 s ⋅ ⎬ − L−1 ⎨ 2G ( s)e − 6 s ⋅ ⎬ = ? s + 4 s + 25 s⎭ s⎭ s⎭ ⎩ ⎩ ⎩ 2 figure, t=0:0.01:10; c1=step(G,t); c2=step(G*exp(-3*s),t); c3=step(2*G*exp(-6*s),t); plot(t,c1+c2-c3), grid title('u(t)+u(t-3)-2.u(t-6) Giriş Cevabı') xlabel('zaman (saniye)'), ylabel('genlik') u(t)+u(t-3)-2.u(t-6) Giriş Cevabı 2.5 2 1.5 genlik >> >> >> >> >> >> 5 1 0.5 0 -0.5 -1 0 1 2 3 4 5 6 zaman (saniye) 7 8 9 10 - 24 - • >> >> >> >> • lsim komutu: Bir sistemin herhangi bir giriş işaretine verdiği cevabı hesaplar ve çizer. lsim(pay,payda,u,t) y=lsim(pay,payda,u,t) y=lsim(G,u,t) [y,t]=lsim(G,u,t) gensig komutu: lsim komutu ile birlikte kullanılabilen birim genlikli periyodik işaret üretir. >> [u,t]=gensig(tip,T) >> [u,t]=gensig(tip,T,tson,Ts) tip: 'square' 'sin' 'pulse' T tson Ts : : : : : : kare dalga işareti sinüsoidal işaret periyodik dirac dizisi işaretin periyodu işaretin son zaman değeri işaretin örnekleme periyodu Periyodik giriş işareti üretmenin değişik yolları vardır. Örneğin: >> >> >> >> t=0:0.01:20; u=sin(w*t); u=cos(w*t); u=square(w*t); % zaman vektörü olmak üzere % periyodu 2*pi/w olan sinüs işareti üretir % periyodu 2*pi/w olan kosinüs işareti üretir % periyodu 2*pi/w olan ±1 genlikli kare dalga üretir Örnek: Transfer fonksiyonu G ( s ) = 2 s + 25 olan sistemin kare dalga giriş işaretine verdiği s + 4s + 25 2 cevabı lsim komutunu kullanarak hesaplayalım ve çizelim. G=tf([2 25],[1 4 25]); [u,t]=gensig('square',10,20,0.01); lsim(G,u,t), grid xlabel('zaman'), ylabel('genlik') title('Kare dalga giriş cevabı') Kare dalga giriş cevabı 1.4 1.2 1 0.8 0.6 genlik >> >> >> >> >> 0.4 0.2 0 -0.2 -0.4 0 2 4 6 8 10 12 14 16 18 20 zaman (sec) - 25 - Aşağıdaki program kodu periyodik kare dalga işareti üretir. Burada pozitif ve negatif genlik değerleri veya darbe-boşluk oranı istenilen şekilde seçilebilir. Ts=0.01; tson=30; t=0:Ts:tson; % örnekleme periyodu ve zaman vektörü N=length(t); u=zeros(1,N); % zaman vektörünün örnek sayısı ve giriş işareti T=10; n=T/Ts; % işaretin periyodu ve bir periyodun örnek sayısı 4 for k=1:N 3 if rem(k,n)<n/2 2 u(k)=2; 1 else 0 u(k)=-2; end -1 end -2 genlik >> >> >> >> -3 Aşağıdaki satırlar ile yandaki şekil elde edilir: -4 0 5 10 15 zaman (saniye) 20 25 30 >> plot(t,u), xlabel('zaman (saniye)'); ylabel('genlik'), grid >> axis([0 30 -4 4]) % şeklin yatay ve düşey eksenlerinin sınırları belirlenir Elde edilen simetrik periyodik kare dalga işareti aynı sistemin benzetiminde lsim komutu ile birlikte kullanılırsa aşağıdaki şekildeki sonuç elde edilir. >> >> >> >> >> >> G=tf([2 25],[1 4 25]); y=lsim(G,u,t); hold on, plot(t,y,'r') xlabel('zaman (saniye)'), ylabel('genlik') title('Sistemin kare dalga giriş cevabı') legend('giriş işareti','çıkış işareti') Sistemin kare dalga giriş cevabı 4 giriş işareti çıkış işareti 3 2 genlik 1 0 -1 -2 -3 -4 0 5 10 15 zaman (saniye) 20 25 30 Bu sayfadaki kodları bir fonksiyon halinde aşağıdaki gibi yazabiliriz: - 26 - function [y,t]=benzetim(sistem,tson,Ts,genlik) t=0:Ts:tson; % kullanılan zaman vektörü N=length(t); u=zeros(1,N); % zaman vektörünün örnek sayısı ve giriş işareti % işaretin periyodu ve bir periyodun örnek sayısı T=10; n=T/Ts; for k=1:N if rem(k,n)<n/2 u(k)=genlik; else u(k)=-genlik; end end y=lsim(sistem,u,t); plot(t,u,'b'), hold on, plot(t,y,'r'), grid xlabel('zaman (saniye)'), ylabel('genlik') title('Sistemin kare dalga giriş cevabı') legend('giriş işareti','çıkış işareti') Yazılan benzetim isimli fonksiyonun 4 giriş 2 çıkış değişkeni vardır. Yukarıdaki fonksiyonun ismi benzetim.m olarak kaydedildikten sonra matlab komut penceresinde yazılan aşağıdaki satırlar yardımıyla bir fonksiyon olarak kullanılabilir. >> G=tf([2 25],[1 4 25]); >> Ts=0.01; tson=30; g=5; >> [y,t]=benzetim(G,tson,Ts,g); veya bu 3 satır aşağıdaki gibi tek bir satırda da yazılabilir: >> [y,t]=benzetim(tf([2 25],[1 4 25]),30,0.01,5); Bu satır yardımıyla hem sistemin giriş ve çıkış işareti çizilmektedir, hem de sistemin çıkış işareti ve kullanılan zaman vektörü sırasıyla y ve t değişkenlerine atanmaktadır. Sistemin kare dalga giriş cevabı 8 giriş işareti çıkış işareti 6 4 genlik 2 0 -2 -4 -6 -8 0 5 10 15 zaman (saniye) 20 25 30 - 27 -