Robotika

Blog komunitas Robot Universitas Gunadarma

System Control PID


Sistem PID control

Didalam suatu sistem kontrol kita mengenal adanya beberapa macam aksi kontrol, diantaranya yaitu aksi kontrol proporsional, aksi kontrol integral dan aksi kontrol derivative . Masing-masing aksi kontrol ini mempunyai keunggulan-keunggulan tertentu, dimana aksi kontrol proporsional mempunyai keunggulan risetime yang cepat, aksi kontrol integral mempunyai keunggulan untuk memperkecil error , dan aksi kontrol derivative mempunyai keunggulan untuk memperkecil derror atau meredam overshot/undershot. Untuk itu agar kita dapat menghasilkan output dengan risetime yang tinggi dan error yang kecil kita dapat menggabungkan ketiga aksi kontrol ini menjadi aksi kontrol PID, dan pada penulisan ini sistem kendali yang digunakan adalah sistem kendali PID digital. Dalam kasus robot maze kita dapat menggunakan kendali PID untuk menjalankan robot agar lebih halus dalam menyelesaikan lorong.

Dalam kasus ini missal sensor ping kita namakan ping1, ping2, ping3, ping4, ping5, dari posisi tersebut dapat kita jadikan perbandingan sebagai berikut:

Pingki = ping1 + ping2+ ping3

Pingka = ping3+ ping4+ping5

PV = Pingka – Pingki (nilai kesalahan)

Max_MV = 100 (maximum nilai kesalahan)

Min_MV = -100 (minimum nilai kesalahan)

SP = 0 (nilai awal kesalahan)

Error = SP – PV (nilai kondisi ketika error)

Last_error = nilai untuk kondisi error yang terakhir terjadi.

Var_Kp = nilai untuk konstanta proporsional

Var_Ki = nilai untuk konstanta integral

Var_Kd = nilai untuk konstanta derivatif

MAXSpeed = 255 (nilai untuk kecepatan maximum)

MINSpeed = 0 (nilai untuk kecepatan minimum)

intervalPWM = (MAXSpeed – MINSpeed) / 5;

MAXPWM = MAXSpeed ;

MINPWM = MINSpeed;

Error = SP – PV;

P = (var_Kp * error) / 10;

 

I = I + error;

I = (I * var_Ki) / 10;

 

rate = error – last_error;

D = (rate * var_Kd) / 10;

 

last_error = error;

 

MV = P + I + D;

 

if (MV == 0) {

lpwm = MAXPWM;

rpwm = MAXPWM;

}

else if (MV > 0) { // alihkan ke kiri

rpwm = MAXPWM – ((intervalPWM – 20) * MV);

lpwm = (MAXPWM – (intervalPWM * MV) – 20);

 

 

if (lpwm < MINPWM) lpwm = MINPWM;

if (lpwm > MAXPWM) lpwm = MAXPWM;

if (rpwm < MINPWM) rpwm = MINPWM;

if (rpwm > MAXPWM) rpwm = MAXPWM;

}

else if (MV < 0) { // alihkan ke kanan

lpwm = MAXPWM + ( ( intervalPWM – 20 ) * MV);

rpwm = MAXPWM + ( ( intervalPWM * MV ) – 20 );

 

if (lpwm < MINPWM) lpwm = MINPWM;

if (lpwm > MAXPWM) lpwm = MAXPWM;

if (rpwm < MINPWM) rpwm = MINPWM;

if (rpwm > MAXPWM) rpwm = MAXPWM;

 

}

if (MV>Max _MV) { //belokan kanan siku

BlokKanan(); // belok kanan patah

lpwm = MAXPWM; //

rpwm = MINPWM; //

}

else if(MV<Min_MV) { //belokan kiri siku

BlokKiri(); // belok kiri patah

lpwm = MAXPWM; //

rpwm = MAXPWM; //

Pada dasarnya sistem PID merupakan system yang kompleks, system yang bekerja berdasarkan nilai yang memiliki range yang terbatas dan konstan. Sehingga untuk aplikasinya system PID sangat cocok untuk robot yang memiliki arena yang terbatas seperti arena yang menggunakan garis atau lorong untuk penyelesaian masalahnya . Sistem PID seperti ini sering digunakan untuk algoritma Line Follower, robot maze, system kendali ketinggian untuk robot terbang yang memerlukan penanganan system dengan risetime yang tinggi dan nilai error yang kecil, tetapi sayangnya system ini kurang bagus untuk arena yang luas.



5 Responses to “System Control PID”

  1. cHireN Says:

    wuih,,,,
    programnya cukup rumit,,,,

    apalagi saya paling males berhubungan sama program

    kakak gimana sih supaya saya bisa suka dengan dunia programming
    soalnya,,,
    saya kuliah kan bergelut di dunia programming
    tapi jujur aja saya paling ga suka program….

    jadi pusing
    mohon bantuannya kakak
    terimakasih,,

    c u….@bengkel robotika

    @cHiren
    Hayo semangat, pusing dan capek akan terbayarkan oleh hasil yang di capai. Jangan patah semangat … coba, coba, coba dan terus belajar.

  2. AHMAD IDANNUL FURQON Says:

    kak. punya pertanyaan saya. saya niwbi nih 😛
    kompilernya pakai code vision AVR ya?

    saya masih bingung baca kode diatas. kalau variable di bahasa C bukannya mesti deklarasi datatype. misal

    bool bVariable = false;

    terus misal code yang saya ambil punya kakak diatas.

    Pingki = ping1 + ping2+ ping3;
    Pingka = ping3+ ping4+ping5;
    PV = Pingka – Pingki;// (nilai kesalahan)

    Ping disini type datanya apa. Juga untuk lainnya, saya bingung aja, type datanya dapat dari mana. Apa memang dari sananya? dari perkomponen? harus hafal satu persatu? 😀

    btw, kalau programmin C di micon. tidak pakai pointer ya, spt.

    int* piVariabel;

  3. sn27 Says:

    boleh diberikan cth yg lebih jelas????
    misalnya di aplikasi line follower,,tq

  4. Rezza Primasta Says:

    Kak saya masih bingung dengan program MAINnya. Program yang kakak publis di atas kan untuk penyesuaian PWM motor kanan dan kiri dengan posisi robot. ak minta penjelasan di program main-nya pada program eksekusi.

    @reza,

    silahkan lihat di forum community Gunadarma

    http://community.gunadarma.ac.id/forums/display_topic/id_3035/Belajar-encoder/

  5. lilik Says:

    mas…..tolong bantu saya untuk penggunaan sistem kontrol PID pada pengontrolan tekanan untuk model boiler……bisa jelaskan cara kerjanya kah…..rangkaian PWM berfungsi untuk apa ya????
    makasih sebelumnya…..

Leave a Reply

Security Code: