Monday, May 7, 2012

Desain Kontrol dengan "Optimal Control" Part II


Kali ini penulis akan memberikan contoh bagaimana menerapkan kontrol dengan metode ini. Penulis akan mengambil model dari tutorial sebelumnya ("Desain Kontrol dengan Pole Placement (Part I)") yaitu DC motor model.




Pada MATLAB,

>> A=[-10 14330; -2.7558 -407.6923];
>> B=[0; 19.2308];
>> C=[1 0];
>> D=0;
>> ssplant = ss(A,B,C,D);

Untuk melakukan check apakah sistem mempunyai "controllability" dan "observability" lakukan seperti pada tutorial sebelumnya ("Desain Kontrol dengan Pole Placement (Part I)" dan "Desain Kontrol dengan Observer").

Untuk desain awal penulis akan men-set matrik Q dan R sebagai identity matrik. Perhatikan dimensi matrik, ingat matrik Q dan R adalah simetri matrik dengan Q sesuai dengan jumlah state vektor x, dan R sesuai dengan jumlah input u.

>> Q=diag([1 1])
>> R=1

Untuk sementara dan untuk menghindari error penulis akan men-set matrik C pada plant untuk memilih semua state vektor sebagai output, yaitu dengan perintah berikut,

>> ssplant.c = eye(2)

akan menghasilkan matrik [1 0; 0 1].

Kemudian hitung regulator gain K pada diagram diatas dengan,

>> [K,P,E] = lqr(A,B,Q,R)

Setelah didapat regulator gain K maka kita bisa membentuk sistem plus feedback K.

>> csys = feedback(ssplant, -K, +1);

Sekarang kita akan melihat pole - pole dari sistem keseluruhan apakah sesuai dengan kriteria desain yang kita, kriteria desain yang kita butuhkan adalah settling time < 0.05 dan biasanya damping ratio 0.7.

>> plot_poles(csys, 0.05, 0.7)

Plot_poles adalah program tersendiri, anda bisa mendownload program ini pada akhir tutorial.


Garis biru vertikal adalah settling time yang kita set, semua pole harus berada pada sisi kiri dari garis ini untuk memenuhi settling time < 0.05. Dua garis biru diagonal adalah damping ratio yang kita set 0.7, semua pole harus berada disebelah kiri garis ini. Pole ditandai dengan lingkaran kecil pada gambar.

Pada grafik diatas dapat kita lihat semua pole sudah memenuhi desain yang kita inginkan (karena berada disebelah kiri). Namun kita akan coba untuk menurunkan overshot dengan menurunkan salah satu elemen Q matrik sebesar 0.1.

>> Q=diag([0.1 1])

Dan ulangi prosedur diatas untuk mendapat grafik lokasi pole. Akan didapat pole seperti berikut.


Prosedure untuk mentunning matrik Q dan R biasanya adalah sebagai berikut.

1. Set Q dan R ke Identity matrik.
2. Lihat hasil performannya (dengan melihat pada pole - pole)
3. Jika tidak sesuai set elemen pada masing - masing matrik Q dan R. 
Diagonal elemen matrik Q sesuai dengan state vektor yang ingin diubah. Misal kita ingin mempercepat respon yang berkaitan dengan state vektor w yaitu kecepatan putar motor, maka elemen matrik Q yang kita ubah adalah elemen pertama, elemen pertama dikalikan 10 menjadi [10 0; 0 1].
Diagonal elemen matrik R berkaitan dengan input output pada sistem. Misal kita mempunyai dua input pada sistem yaitu tegangan dan torsi, jika input tegangan kita rasa kurang berpengaruh pada sistem maka kita bisa menurunkan elemen matrik R sebagai berikut [0.1 0; 0 1].
Biasanya kita menaikkan dan menurunkan dengan faktor 10 untuk melihat efek setelah perubahan.
4. Ulangi langkah diatas sampai didapat hasil yang dinginkan.

Sekarang kita sudah mendapat regulator gain yang kita inginkan maka kita ingin melihat intial respon dari sistem.

>> t = 0: 0.0001: 0.05;
>> u = 0*t;
>> x0 = [0 1]; % Give Initial current = 1A
>> lsim(A-B*K, B, C, D, u, t, x0)


Sekarang kita akan mensimulasi dengan referensi input seperti pada tutorial sebelumnya ("Desain Kontrol dengan Observer").

>> t=0:0.001:1; % from 0 to 1 second
>> u=62.8*ones(size(t)); % input w=62.8 rad/s

>> Nbar = rscale(A,B,C,D,K)
>> lsim(A-B*K, B*Nbar, C, D, u, t)


Sekian dari tutorial semoga bermanfaat ^^. Jangan lupa disebarkan ke teman - teman anda.

No comments:

Post a Comment