[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 -

Benzer belgeler