Professional Documents
Culture Documents
Matlab Simulink Onur
Matlab Simulink Onur
MATLAB/SIMULINK’E
BAŞLANGIÇ
Hazırlayan:
YUSUF ONUR KOÇBERBER
Yokocbeber(at)etu‐edu‐tr
01.01.2008 v1.
25.02.2009 v2.
İçindekiler
Matlab’a Başlangıç .................................................................................................................................. 3
Vektörler .............................................................................................................................................. 4
Matrisler .............................................................................................................................................. 6
Çizgeler ................................................................................................................................................ 9
Polinomlar ......................................................................................................................................... 12
Transfer Fonksiyonu ve Durum Uzayı Gösterimi ............................................................................... 14
Analiz ................................................................................................................................................. 17
Simulink ................................................................................................................................................. 20
2
Matlab’a Başlangıç
langıç
Yeni M‐File Simulink Workspace Çalışma Klasörü
Command Window
Komut Geçmişi
Kılavuz boyunca sık kullanılacak Matlab elemanları yukarıda işaretlenmiştir. Çalışma klasörü olarak
belirtilen “Current Directory” aksi belirtilmedikçe yapılan tüm çalışmaların kaydedildiği klasördür.
Birbirine bağlı m‐dosyaları çalıştırılacaksa tüm dosyaların bu klasörde olması gerekmektedir aksi
takdirde m‐dosyası içinde dosyanın bilgisayardaki konumu tam olarak belirtilmelidir.
Çalışmalar sırasında yararlı bir kaç komut:
• clc: Command window’u temizlemektedir.
• whos: Workspace’deki değişkenlerle ilgili bilgileri göstermektedir (özellikle iki değişkenin
boyutu uyuşmadığında kontrol etmek amacıyla kullanılır)
• clear Değişkenİsmi: İlgili değişkeni workspace’den siler.
• help Fonksiyonİsmi: İlgili fonksiyon hakkında özet bir yardım gösterir.
• syms Değişkenİsmi: ilgili değeri değişken yapar (türev , integral gibi sembollerin kullanıldığı
işlemler için).
3
Vektörler
Vektörler 1xn boyutlu matrislerdir. Bir vektör tanımlamak için:
“Command Window” ’a
>> a = [1 2 3 4 5 6 9 8 7] komutunu giriniz. Böylece aşağıdaki sonuç elde edilir.
Görüldüğü üzere a değeri “Workspace” penceresinde yerini almıştır. Bu pencereden işlemler
sırasında kullanılan tüm parametreler ve onlarla ilgili çeşitli bilgiler (boyutu, en büyük değeri , en
küçük değeri , boyu vs.) görülebilir.
Benzer şekilde 0 ile 100 arasında eşit dağılmış 5 elemanlı bir vektör yaratmak için
>> a=0:20:100
Sonuç:
a =
0 20 40 60 80 100
a=0:20:100 gösterimi 0’dan başlayarak 100’e kadar her adımda bir sonraki elemana 20 eklemektedir.
a vektörünün ilk elemanına ulaşmak istenildiğinde a(1) komutu kullanılmaktadır.
>> a(1)
ans =
Not: Çoğu programlama dillerinin aksine MATLAB dizilerin ilk elemanını 0 değil 1 olarak
indekslemektedir. Bu sebepten dolayı ilk elemana ulaşmak için a(1) komutu kullanılmıştır.
4
Çarpım
A vektörünü ile birlikte ikinci bir b vektörü yaratalım.
>> b= a - 5
b =
-5 15 35 55 75 95
A ile b vektörünü çarpıp c adlı yeni bir matrise atamak istiyoruz. Bu durumda “c= a * b “ komutunu
kullanırsak;
>> c= a * b
Yukarıdaki hata ile karşılaşılır. Bunun nedeni “*” işleci matris çarpımı yapmaktadır yani iki tane 1xn
boyutundaki matrisi çarpmak mümkün değildir. Burada vektör çarpımı yapılması gerekmektedir.
Vektör Çarpımı işleci “ .* “ şeklindedir.
>> c= a .* b
c =
Görüldüğü üzere a ve b vektörlerinde konum itibariyle karşılıklı elemanlar birbirleriyle çarpılmıştır.
Not: Benzer şekilde kuvvet işleçi de (^) vektör işlemleri için .^ şeklinde kullanılmalıdır.
5
Matrisler
Matrisin tanımlanması:
Matrisler tanımlanırken değişik yollar bulunmaktadır. En genel yol yeni bir satır için “;”
kullanılmasıdır.
>> a=[1 2 ; 3 4]
a =
1 2
3 4
Bir başka yol ise:
>> b = [ 1 2
3 4 ]
b =
1 2
3 4
Matris değerleri girilirken workspace’deki değer isimleri veya sanal sayılar kullanılabilir. Sanal sayılar
için “i” veya “j” kullanılabilir.
Not: Eğer i veya j değişkenine daha önce başka değer atamışsanız bu değişkeni sqrt(‐1)’e eşitlemeniz
yeterlidir.
Matrisin Transpozu
Daha önceden tanımlanan b matrisinin transpozunu almak için ;
>> b'
ans =
1 3
2 4
6
Matrisin Tersi
Daha önceden tanımlanan b matrisinin tersini almak için ;
>> inv(b)
ans =
-2.0000 1.0000
1.5000 -0.5000
Matrisin Özdeğeri
Daha önceden tanımlanan b matrisinin özdeğerlerini bulmak için ;
>> eig(b)
ans =
-0.3723
5.3723
Vektör veya matris tanımlarken, kolaylık amacıyla tüm elemanları 0 tanımlamak için “zeros” , tüm
elemanları 1 tanımlamak için ” ones” , tüm elemanları rastgele sayılardan oluşturmak için “rand”
fonkisyonu kullanılabilir.
ans =
Dizilere uygulanan fonkisyonlar
• length(a): a dizisinin eleman sayısı yani uzunluğu
• size(a): a dizisinin boyutu
• sum(a): a matrisinin sütun başına eleman toplamı (eğer sadece sütün veya satır matrisiyse
tüm elemanların toplamını verir)
• kd(n): kd dizisinin n. eleman değeri
• A(n,:): A matrisinin sadece n. satırı
• A(:,n): A matrisinin sadece n. sütunu
7
• A‘: A matrisinin transpozu yani devriği
• det(A): A matrisinin determinantı
• inv(A) : A matrisinin tersi
• diag(A): A matrisinin ana diagonel (çapraz) elemanları
• [v,d]=eig(A): A matrisinin özvektörleri ve özdeğerleri
• Elemanter işlemler: Eleman eleman işlem demektir ve . (nokta) işleci kullanılır:
Çarpma: .* , Bölme: ./ , Üs alma: .^
8
Çizgeler
Matlab’daki en önemli fonksiyonlardan biri “plot” fonksiyonudur.
Plot(x,y) şeklinde belirtilen bu komutta x değerleri çizgenin yatay eksenine, y değerleri çizgenin düşey
eksenine çizilecektir. Örneğin;
>> t=0:0.1:5 şeklinde zaman değerlerimizi belirleyelim,
>> y=sin(2*pi*t)
>>plot (t,y)
Bu noktadan sonraki komutları m dosyasına yazmak daha yararlı olacaktır çünkü bir çok komutu
arkaya tek satırlık komut penceresine yazmak zaman kaybettirmektedir.
Yeni bir m dosyası açmak için File>New>M‐File
Gelen editörün içine yeni değerleri tanımlayınız :
t=0:0.1:10;
y= 2.^(10-t);
plot (t,y,'r:')
title ('çizge 1')
xlabel (' x ekseni')
ylabel ('y ekseni')
Dosyayı kaydedip Debug>Run dosyaismi veya kısayol olarak F5 tuşuna basınız .
9
Örnekte görüldüğü üzere plot fonksiyonuna eklenen ‘r:’ terimi grafiği kırmızı ve noktalı yapmıştır.
Başka renkler için “g ,b,c,m,y,k,w” gibi belirteçleri , değişik şekiller için “. , o , x, ^, + , * ‐. , ‐‐“
belirteçleri deneyebilirsiniz. Örneğin “ g ‐‐ “ grafiği yeşil ve çizgili “ b*” mavi ve yıldızlı
göstermektedir.
Xlabel ve Ylabel fonksiyonları ile x ve y eksenine ‘eksen ismi’ formatında istenilen isimler verilebilir.
Aynı m‐dosyasının en sonuna “ axis tight” komutunu ekleyip m dosyasını tekrar çalıştırınız.
Görüldüğü üzere grafiğin eksenleri çizdirilen fonksiyonun minimum ve maksimum değerlerine göre
ayarlanmıştır. “Axis” komutu grafiklerin daha anlaşılır olması için önemli bir araçtır ve her zaman
plot’tan sonra kullanılır. Bu komutun bir diğer kullanımı ise “ axis([xmin, xmax, ymin, ymax]) “
şeklindedir. Bu sayede görmek istediğimiz grafiğin eksenlerinin en küçük ve en büyük değerleri
ayarlanabilir.
Birden Çok Grafiği Yönetmek
Birden fazla grafiği (aynı x‐ekseni baz olmak üzere) üst üste çizmek için;
Örneğin: x,y1,y2,….yn için;
1.yol: plot(x,y1,x,y2,..x,yn)
2.yol: plot(x,y1), hold on, plot(x,y2,..x,yn)
• Çoklu grafiği etiketlemek için:
1.yol: Grafik üzerinde metin ekleme yapılır.
2.yol: legend(‘1.grafikmetin’,’2.grafikmetin’….) fonksiyonu kullanılır.
• Birden fazla grafiği farklı pencerelerde (aynı veya farklı x‐ekseni baz olmak üzere) çizmek için
subplot(m,n,p)
fonksiyonu kullanılır. Bu fonksiyon matris düzeninde çizim alanı açar ve grafikler yine plot
fonksiyonu ile çizilir.
10
Örnek: Hold on komutu ile grafiklerin üst üste çizilmesi
t = 0:0.01:1;
x= 0:0.1:10;
y = x.^(t);
plot(t,y,'b:')
hold on
z = sin(2*pi*t);
plot(t,z,'r+')
w = y.*z;
plot(t,w,'g--')
legend('x^{t}','sin(2*\pi*t)','x^{t}sin(2*\pi*t)')
axis tight
grid on
Örnek: Aynı grafiklerin subplot komutu ile ayrı ayrı pencerelerde çizilmesi;
subplot (3,1,1)
t = 0:0.01:1;
x= 0:0.1:10;
y = x.^(t);
plot(t,y,'b:')
title ('x^{t}')
legend('x^{t}')
grid on
subplot (3,1,2)
z = sin(2*pi*t);
plot(t,z,'r+')
legend ('sin(2*\pi*t)')
title ('sin(2*\pi*t)')
grid on
11
subplot (3,1,3)
w = y.*z;
plot(t,w,'g--')
legend('x^{t}sin(2*\pi*t)')
title ('x^{t}sin(2*\pi*t)')
grid on
Polinomlar
Matlab polinomları bir vektör ile tanımlar. Örnek olarak ;
3s4+6s3‐3s2+10s+1
Polinomu aşağıdaki vektör ile tanımlanır.
>> A=[ 3 6 -3 10 1]
A =
3 6 -3 10 1
Eğer arada eksik katsayılar varsa bu katsayılar 0 ile gösterilir. Örnek olarak;
7s4+10
>> A=[7 0 0 0 10]
A =
7 0 0 0 10
12
Polinomun değerini bulmak için “polyval” fonksiyonu kullanılabilir. Örneğin a=[7 0 0 0 10]
polinomunun s=3’teki değerini bulmak için ;
ans =
577
Aynı yöntemi kullanarak polinom çizdirilebilir.
Örnek:
t=-5:0.1:3
A=[1 2 -10 -7 4]
plot(t,polyval(A,t))
200
150
100
50
-50
-5 -4 -3 -2 -1 0 1 2 3
Görüldüğü üzere grafik y=0 eksenini 4 kere kesmektedir. Köklerin tam yeri “roots” komutu ile tespit
edilebilir.
ans =
-4.0000
2.6180
-1.0000
0.3820
13
Transfer Fonksiyonu ve Durum Uzayı Gösterimi
Transfer fonksiyonunu belirtmek için öncelikle pay ve paydayı tanımlamak gerekmektedir. Bunun için
>> num=[1]
num =
den =
1 14 56 160
>> tf(num,den)
Transfer function:
-------------------------
Aynı şekilde bu transfer fonksiyonun durum uzayı gösterimlerinden biri aşağıdaki gibidir.
y=
Bu gösterimi Matlab’a aktarmak için ss(a,b,c,d) şeklinde bir gösterim kullanılmalıdır.
a =
0 1 0
0 0 1
>> c=[1 0 0 ]
>> d=[0]
a,b,c,d matrisleri tanımlandıktan sonra “ss” komutu ile gösterim tamamlanır.
14
>> ss(a,b,c,d)
a =
x1 x2 x3
x1 0 1 0
x2 0 0 1
b =
u1
x1 0
x2 1
x3 -14
c =
x1 x2 x3
y1 1 0 0
d =
u1
y1 0
Transfer fonksiyonundan durum uzayı gösterimi veya durum uzayı gösteriminden transfer fonksiyonu
elde edilebilir. Daha önceki örnekte transfer fonksiyonu “num “ ve “den” isimleri ile tanımlanmıştı.
Durum uzayı gösterimini A,B,C,D matrislerine aktarmak için ;
>> [A,B,C,D]=tf2ss(num,den)
A =
1 0 0
0 1 0
B =
C =
0 0 1
D =
15
Aynı şekilde durum uzayı gösteriminden transfer fonksiyonu çıkarılabilir. Bunun için ss2tf komutu
kullanılır. Yukarıdaki örneklerde kullandığımız a,b,c,d matrislerini kullanırsak;
>> [pay,payda]=ss2tf(a,b,c,d)
pay =
payda =
16
Analiz
Elde edilen gösterimleri analiz etmek için
• Bode çizgesi
• Adım cevabı
• Dürtü cevabı
• Kutuplar ve sıfırlar
bulunabilir.
Daha önceden elde ettiğimiz pay ve payda değişkenlerini “ sistemin_transfer_fonksiyonu ” isimli bir
değişkene atayalım.
>> sistemin_transfer_fonksiyonu=tf(num,den)
Transfer function:
-------------------------
Bode çizgesi için;
>>bode(sistemin_transfer_fonksiyonu)
Bode Diagram
-40
-60
Magnitude (dB)
-80
-100
-120
0
-90
Phase (deg)
-180
-270
-1 0 1 2
10 10 10 10
Frequency (rad/sec)
Grafikte istenilen noktalara tıklanarak ilgili değerler alınabilir.
17
Adım cevabı için ;
>>step(sistemin_transfer_fonksiyonu)
-3
x 10 Step Response
8
5
Amplitude
0
0 0.5 1 1.5 2 2.5 3
Time (sec)
Yüzde aşım , yükselme zamanı,tepe değeri gibi değerler grafikte ilgili yerlere tıklanarak ölçülebilir
fakat 2007 ve sonrası sürümlerde stepinfo komutu bulunmaktadır.
>> stepinfo(sistemin_transfer_fonksiyonu)
ans =
RiseTime: 0.4526
SettlingTime: 2.0948
SettlingMin: 0.0060
SettlingMax: 0.0072
Overshoot: 14.7300
Undershoot: 0
Peak: 0.0072
PeakTime: 1.0067
18
Dürtü cevabı için;
>> impulse(sistemin_transfer_fonksiyonu)
-3
x 10 Impulse Response
14
12
10
6
Amplitude
-2
-4
0 0.5 1 1.5 2 2.5 3 3.5
Time (sec)
Sistemin kutupları pole komutu ile bulunur.
>> pole(sistemin_transfer_fonksiyonu)
ans =
-10.0000
-2.0000 + 3.4641i
-2.0000 - 3.4641i
Sistemin sıfırları tzero komutu ile bulunur.
>> tzero(sistemin_transfer_fonksiyonu)
ans =
Bu örnekte sistemin sıfırı olmadığından boş matris çıkmıştır.
19
Simulink
Simulink modelleme ve benzetim için geliştirilmiş grafiksel ara yüze sahip bir Matlab
uzantısıdır.Simulinkte sistemler ekran üzerine blok diyagramlar halinde çizilmektedir.Transfer
fonksiyonu blokları, toplayıcılar gibi blokların dışında osiloskop , fonksiyon üreteci gibi sanal
giriş/çıkış cihazları da bulunmaktadır. Simulink , Matlab içinde çalışan bir program olduğundan iki
program arasında rahatlıkla veri transferi yapılabilir.
Bu kılavuzda her bloğun tek tek tanıtılmasından ziyade örnekler üzerinden gidilecektir.
Programın başlatılması;
Matlab içerisinde command window’a simulink yazılmalıdır.
>>simulink
Simulink Library Browser penceresinden bloklar sürükle bırak şeklinde açılan boş model sayfasına
eklenmelidir.
20
Örnek 1:
Öncelikle
• Simulink>sources kütüphanesinden “step” bloğunu
• Simulink>continuous kütüphanesinden “derivative” bloğunu
• Simulink>math Operations kütüphanesinden “add” ve “gain” bloğunu
• Simulink>commonly used blocks kütüphanesinden “scope” bloğunu tasarım ekranına
ekleyiniz.
Blokların girişlerinden farenin tuşuna basılı tutarak sonraki bloğun girişine gittiğiniz takdirde
bloklar bağlanır fakat kısa yol olarak ilk bloğu seçtikten sonra ctrl tuşuna basılı tutarak hedef blok
üzerine tıklandığı takdirde bloklar kendiliğinden bağlanır.
Scope bloğu üzerine iki tıklayarak, parameters sekmesinden,
Scope Parametreleri
3 farklı veriyi aynı anda gözlemek amacıyla, “number of axes” alanını 3 yapınız.
Bloklar bağlanıldığında aşağıdaki şekildeki gibi bir görüntü oluşması gerekmektedir.
21
Simülasyon ayarlarını yapmak için , Simulation > Configuration Parameters penceresini açınız.
Sistemi sabit adım ile çözmek için gelen pencereden, “Solver options‐Type” seçeneğini “Fixed‐Step”
olarak seçiniz. “Fixed‐step size” olarak sırasıyla ”1” , “0.01” ve “auto” değerleri kullanılacaktır.
Şekilde görülen “Simulation Stop Time” alanına benzetimin kaç saniye süreceği girilmelidir.
Simülasyon süresini 2 olarak girdikten sonra şekilde görülen “start simulation” tuşuna tıklayarak veya
kısayol olarak “ctrl+t” ile benzetimi başlatınız.
22
Örnek 2:
Öncelikle
• Simulink>sources kütüphanesinden “step” bloğunu
• Simulink>continuous kütüphanesinden “transfer fcn” bloğunu
• Simulink>commonly used blocks kütüphanesinden “scope” bloğunu tasarım ekranına
ekleyiniz.
Adım cevabı bulunacak transfer fonksiyonu aşağıdaki gibidir
Transfer Fcn bloğunun değerlerini değiştirmek için üzerine iki tıklayınız , “numerator coefficient” ve
“denominator coefficient” alanları ile sırasıyla pay ve paydanın değerleri vektör şeklinde
tanımlanmaktadır.
23
Scope bloğuna iki kere tıklayarak sonucu görüntüleyiniz. Sonucun tam olarak görüntülenmesi için
şekilde görülen autoscale butonuna tıklayınız.
Örnek 3: PID ve Subsystem Oluşturma
Öncelikle şekilde görülen blok şemayı kurunuz.
Kazançların değerlerini P terimi için Kp, I terimi için Ki ve D terimi için Kd şeklinde değiştirildiğine
dikkat ediniz.
Daha sonra şema üzerindeki tüm elemanları seçtikten sonra sağ tıklayıp “create subsystem”
seçeneğini seçiniz.
24
Subsystem haline dönüşen blok üzerine tekrar sağ tıklayarak “mask subsystem” seçeneğini seçiniz.
Gelen pencerenin “Parameters” sekmesinden Add butonu ile yeni parametreler ekleyiniz. “Variable”
alanına daha önce ismi değiştirilen blokların ismini girmeniz gerekmektedir. Aksi takdirde ilgili bloğun
değerine dışarıdan erişilemeyecektir.
Add Butonu
Elde edilen “subsystem” adlı bloğun ismini “PID” olarak değiştiriniz ve aşağıdaki blok şemayı kurunuz.
25
PID bloğuna tıkladığınızda Kp , Kd ve Ki değerlerini girebildiğinizi göreceksiniz.Farklı Kp, Kd, Ki
değerleri ile bu terimlerin sisteme etkisini gözleyebilirsiniz.
Scope bloğundan çıkan grafiğin yükselme zamanı, yüzde aşımı gibi değerleri “zoom to y‐axis”
yakınlaştırma butonları ile ölçebileceğiniz gibi grafiğin değerlerini Matlab’ın “workspace” bölümüne
göndererek daha önce anlatılan stepinfo komutunu kullanabilirsiniz.
Scope Parametreleri Yakınlaştırma butonları
Grafik verisini “workspace” alanına aktarmak için şekilde gösterildiği gibi “scope parameters”
butonuna tıklayıp “data history” sekmesini seçmek gerekmektedir.”Save data to workspace”
seçeneği işaretlenerek gönderilecek olan verinin “workspace”de hangi değişken ismi ile
tanımlanacağını belirtmek gerekir bu isim varsayılan şekilde “ScopeData” olarak belirlenmiştir.
Format kısmından “Array” seçilerek değişkenin nx2’lik bir matris şeklinde belirtilmesi sağlanmalıdır.
Bu değişkenin n uzunluğundaki satır kısmı benzetim uzunluğu ile doğru orantılıdır. 1.kolonu zaman
değerleri yani x ekseni, 2.kolonu ise bu zaman karşılığında alınan değerleri belirtmektedir yani y
eksenidir. Stepinfo(Y ekseni,X ekseni) şeklinde kullandığından doğru sonuç almak için aşağıdaki
şekilde kullanılmalıdır.
26
>> stepinfo(ScopeData(:,2),ScopeData(:,1))
ans =
RiseTime: 0.6484
SettlingTime: 3.1281
SettlingMin: 0.9185
SettlingMax: 1.0682
Overshoot: 6.8172
Undershoot: 0
Peak: 1.0682
PeakTime: 1.5505
Örnek 4:
Aşağıdaki blok şemayı kurunuz.
Daha önceki örnekte olduğu gibi “scope parameters” penceresine gidilerek “axes” alanı 3
yapılmalıdır. Bu sayede scope penceresi 3’e bölünecektir. Eğer grafikleri üst üste çizdirmek
istiyorsanız “mux” elemanını kullanabilirsiniz.
Tellerin üzerine çift tıklayarak isimlendirebilirsiniz, bu sayede “scope” ekranındaki grafikleri tespit
etmek daha kolay olmaktadır.
“Simulation time” alanını 20 yaparak benzetimi başlatınız. Görüldüğü üzere scope ekranı 3 farklı
pencereye bölünmüş ve hepsinin başlığı bulunmaktadır.
27
28