Kontrol PID Posisi & Kecepatan
Pada Tahap 5 ini, teman-teman akan dapat membuat hal-hal berikut ini:
- Rangkaian Proteus.
- Rangkaian Proteus di sini sama seperti Tahap 1.
- Program Arduino.
- Program Arduino di sini sama seperti Tahap 2.
- Program LabVIEW.
- Program LabVIEW Kontrol PID untuk Posisi Motor DC.
- Program LabVIEW Kontrol PID untuk Kecepatan Motor DC.
Untuk membuat hal-hal di atas, berikut ini langkah-langkahnya:
1. Siapkan rangkaian Proteus seperti rangkaian di Tahap 1. Teman-teman bisa mengunduh file rangkaian Proteus tersebut di sini: file_Proteus
2. Siapkan program Arduino seperti program di Tahap 2. Teman-teman bisa mengunduh file program Arduino tersebut di sini: file_Arduino_2
3. Berikutnya, untuk program LabVIEW, untuk mempercepat pembuatan, kita akan mulai dari program LabVIEW pada Tahap 4. Ada 2 program LabVIEW di Tahap 4, yaitu program Kontrol Posisi dan Kontrol Kecepatan. Teman-teman dapat mengunduh file program Kontrol Posisi dan Kontrol Kecepatan, berturut-turut di link ini:
4. Save As program LabVIEW Tahap 4 tersebut berturut-turut dengan nama Kontrol PID Posisi dan Kontrol PID Kecepatan, sesuai dengan program LabVIEW yang akan dibuat. Program Kontrol PID Posisi akan mengontrol posisi poros motor DC dengan PID, dan program Kontrol PID Kecepatan akan mengontrol kecepatan motor DC dengan PID. Berikut ini uraian langkah pembuatan masing-masing program.
Program LabVIEW Kontrol PID Posisi poros motor DC
1. Buka program Kontrol PID Posisi.
2. Sebelum menambahkan program Kontrol PID, kita perlu mengetahui apa itu Kontrol PID. Gambar berikut ini menunjukkan diagram Kontrol PID.
3. Sama seperti Kontrol Closed Loop di Tahap 4, Kontrol PID juga menghitung nilai error sebagai selisih antara Setpoint input dengan nilai Output yang diukur oleh Sensor, dan secara kontinyu meminimalkan nilai error tersebut. Perbedaannya dengan Kontrol Closed Loop di Tahap 4, Kontrol PID menerapkan koreksi yang lebih akurat dan responsif ke fungsi kontrol. Ada 3 fungsi kontrol sesuai singkatan namanya, yaitu Proportional (P), Integral (I) dan Derivatif (D). P difungsikan untuk meminimalkan nilai error saat ini. I difungsikan untuk meminimalkan nilai error sebelumnya. D difungsikan untuk meminimalkan kemungkinan nilai error mendatang, yang didasarkan pada laju perubahan tiap waktu. Kontrol Closed Loop di Tahap 4 hanya menerapkan fungsi P saja. Dengan fungsi P saja, akan membuat selalu ada error (lihat grafik Kontrol Closed Loop Kecepatan). Error ini sering disebut sebagai steady state error, karena fungsi P hanya bisa bekerja apabila ada error. Dengan menambahkan fungsi I, steady state error ini dapat dihilangkan. Osilasi juga dapat dikurangi dengan pengaturan kombinasi fungsi P, I dan D yang tepat.
4. Implementasi Kontrol PID pada program LabVIEW dapat dilakukan dengan menempatkan icon PID di Block Diagram, yang diambil dari Palet Functions, di kategori Control & Simulation, di kategori PID.
5. Icon atau fungsi PID ini akan menggantikan fungsi selisih (Subtract) dan fungsi pembatasan output PWM (In Range and Coerce). Untuk itu hapus icon Subtract dan icon In Range and Coerce beserta angka-angka inputnya (255 dan -255).
6. Berikutnya, tempatkan icon PID. Hubungkan kaki input setpoint dengan icon Dial Setpoint, dan kaki input process variable dengan output icon Decimal String to Number. Untuk kaki input PID gains, buat agar pengaturan bisa dilakukan di Front Panel, untuk itu, klik kanan pada kaki input PID gains, pilih Create, pilih Control. Begitu juga untuk kaki output range, klik kanan kaki ini, pilih Create, pilih Control. Kemudian untuk kaki input dt(s), isi dengan nilai Constant, dengan cara meng-klik kanan kaki ini, pilih Create, pilih Constant, isi nilainya = 0.05. Mengapa 0.05 second? Karena disesuaikan dengan waktu tunda di While Loop, yang nilainya juga 50 milidetik. Terakhir, hubungkan kaki output PID dengan icon Slide PWM, icon Grafik PWM dan kedua nilai PWM yang dikirimkan ke Arduino melalui VISA Write.
7. Berikutnya, agar setiap kali tombol Run di LabVIEW ditekan, untuk keperluan pengujian, diinginkan pengaturan berikut ini:
- Nilai Dial Setpoint = 150 (mengambil nilai tengah antara 0-360)
- Nilai PWM mula-mula 0
- Grafik Encoder mula-mula bersih
- Grafik PWM mula-mula bersih
- Data di port Serial mula-mula bersih
- Nilai Error ditampilkan
Untuk membuat keenam pengaturan di atas, maka ikuti langkah berikut ini:
8. Untuk pengaturan pertama, klik kanan icon Setpoint, pilih Create, pilih Local Variable, dan tempatkan icon Local Variable Setpoint di luar While Loop. Klik kanan kaki input Local Variable Setpoint, pilih Create, pilih Constant, isi dengan 150.
9. Untuk pengaturan kedua, klik kanan icon PWM, pilih Create, pilih Local Variable, dan tempatkan icon Local Variable PWM di luar While Loop. Klik kanan kaki input Local Variable PWM, pilih Create, pilih Constant (default nilai = 0).
10. Untuk pengaturan ketiga, klik kanan icon Grafik Encoder, pilih Create, pilih Property Node, pilih History Data (item yang paling bawah), dan tempatkan icon History Grafik Encoder ini di luar While Loop. Agar icon History Grafik Encoder ini bisa dibersihkan, harus diisi dengan 0. Untuk itu klik kanan icon ini, pilih Change All to Write. Kemudian di kaki input icon ini, klik kanan, pilih Create, pilih Constant, maka kaki input akan terisi dengan Array Constant bernilai 0.
11. Untuk pengaturan keempat, klik kanan icon Grafik PWM, pilih Create, pilih Property Node, pilih History Data (item yang paling bawah), dan tempatkan icon History Grafik PWM ini di luar While Loop. Agar icon History Grafik PWM ini bisa dibersihkan, harus diisi 0. Untuk itu klik kanan icon ini, pilih Change All to Write. Kemudian di kaki input icon ini, klik kanan, pilih Create, pilih Constant, maka kaki input akan terisi dengan Array Constant bernilai 0.
12. Untuk pengaturan kelima, sisipkan icon VISA Flush I/O Buffer setelah VISA Configure Serial Port seperti gambar berikut. Ambil icon VISA Flush I/O Buffer, dari Palet Functions, di kategori Instrument I/O, di kategori Serial.
13. Untuk pengaturan keenam, ambil icon Subtract, hubungkan input pertama dengan output Setpoint, dan input kedua dengan output Decimal String to Number. Klik kanan pada output icon Subtract, pilih Create, pilih Indicator. Beri nama Error.
14. Setelah keenam pengaturan di atas selesai dibuat, jalankan simulasi Proteus, dan kemudian jalankan program LabVIEW (jangan lupa untuk memilih Port COM dulu, baru menjalankan program LabVIEW). Berikut ini tampilan Motor Encoder di Proteus, dan tampilan program LabVIEW dengan nilai default untuk PID gains dan output range (Default: Kc = 1, Ti = 0,01 min, Td = 0 min, out High = 100, out Low = -100).
15. Tampak pada gambar di atas, grafik output PID menunjukkan respon grafik yang berosilasi, dikarenakan nilai proportional gain (Kc) yang terlalu kecil. Berikut ini tampilan grafik respon dengan Kc = 10, tampak bahwa osilasi semakin kecil.
Catatan: setiap kali menjalankan simulasi pengujian berikutnya, mula-mula Stop program LabVIEW, baru kemudian Stop Proteus. Setelah itu, jalankan lagi keduanya, dimulai dari Proteus, diikuti dengan program labVIEW.
16. Berikut ini tampilan grafik respon dengan Kc = 100, tampak bahwa osilasi menjadi semakin kecil.
17. Berikut ini tampilan grafik respon dengan Kc = 1000, tampak beberapa osilasi mengecil dan kadang sedikit membesar.
18. Dari pengamatan grafik respon untuk Kc = 100, kemudian dinaikkan menjadi 1000, ternyata tidak banyak mengurangi osilasi, bahkan sedikit menambah osilasi, maka dari sini diketahui bahwa nilai Kc = 100 sudah cukup memadai untuk mengurangi osilasi. Untuk lebih memperkecil osilasi, dapat dilakukan dengan memperkecil batas output PWM-nya. Dengan output High = 100 dan output Low = -100, terlihat bahwa grafik PWM juga menampilkan pulsa dengan nilai rentang yang cukup tinggi, yaitu antara -100 s/d 100, yang mengakibatkan grafik respon PID menjadi tidak halus pergerakannya. Untuk itu perlu memperkecil nilai batas output High dengan output Low, agar grafik respon menjadi lebih halus. grafik respon dengan Kc = 100, dan batas output High = 10, dan batas output Low = -10, tampak bahwa respon PID semakin halus, osilasi sangat kecil, hanya saja waktu yang dibutuhkan untuk output mencapai Setpoint menjadi semakin lama (dari yang semula 2 detik menjadi 5 detik).
19. Agar waktu yang dibutuhkan tidak terlalu lama, namun osilasi juga kecil, maka diambil nilai tengah. Berikut ini grafik respon dengan Kc = 100, batas output High = 50, dan batas output Low = -50, tampak bahwa respon cukup halus, dan waktu untuk mencapai Setpoint juga menjadi lebih cepat (dari yang semula 5 detik menjadi 2,5 detik).
20. Berikutnya, agar grafik respon menjadi semakin baik, perlu dilakukan pengaturan pada parameter yang lain. Berikut ini grafik respon ketika nilai waktu integral dikecilkan dari semula 0,010 menjadi 0,005 menit (semakin kecil, semakin singkat waktu yang dibutuhkan untuk mengatasi error integral), dengan nilai Kc = 100, output High = 50, output Low = -50. Tampak bahwa waktu untuk mencapai Setpoint menjadi lebih cepat (dari yang semula 2,5 detik menjadi 2 detik).
21. Berikut ini grafik respon ketika nilai waktu integral lebih diperkecil, dari semula 0,005 menjadi 0,001 menit dengan nilai Kc = 100, output High = 50, output Low = -50. Tampak bahwa waktu untuk mencapai Setpoint menjadi lebih cepat (dari yang semula 2 detik menjadi 1,5 detik), namun mengakibatkan lonjakan (overshoot) dengan osilasi teredam (mengecil).
22. Untuk mengatasi overshoot tersebut, perlu penambahan fungsi Derivatif. Berikut ini grafik respon ketika nilai waktu derivatif (Td) = 0,01 menit, dengan nilai Kc = 100, Ti=0,001 menit, output High = 50, output Low = -50. Tampak tidak ada overshoot, hanya saja waktu untuk mencapai Setpoint menjadi lebih lama (dari yang semula 1,5 detik menjadi 3 detik).
23. Berikut ini grafik respon ketika nilai waktu derivatif (Td) = 0,005 menit, dengan nilai Kc = 100, Ti=0,001 menit, output High = 50, output Low = -50. Tampak tidak ada overshoot, dan waktu untuk mencapai Setpoint menjadi lebih cepat (dari 3 detik menjadi 2 detik).
24. Berikut ini grafik respon ketika nilai waktu derivatif (Td) = 0,001 menit, dengan nilai Kc = 100, Ti=0,001 menit, output High = 50, output Low = -50. Tampak ada sedikit overshoot, dan waktu untuk mencapai Setpoint menjadi lebih cepat (dari 2 detik menjadi 1,5 detik). Dibandingkan dengan grafik sebelumnya, dengan semua parameter sama, kecuali nilai Td = 0, maka grafik dengan Td = 0,001 menit ini menghasilkan respon yang sama, dengan overshoot yang lebih kecil.
25. Untuk menghilangkan overshoot, namun diinginkan waktu mencapai Setpoint juga singkat, maka ambil nilai tengah-tengah, yaitu dengan membuat waktu derivatif (Td) = 0,003 menit. Berikut ini grafik respon ketika nilai waktu derivatif (Td) = 0,003 menit, dengan nilai Kc = 100, Ti=0,001 menit, output High = 50, output Low = -50. Tampak tidak ada overshoot, dan waktu untuk mencapai Setpoint cukup cepat (1,5 detik).
26. Ada 4 istilah yang sering disebut ketika membahas mengenai kualitas respon, yaitu Rise Time, Peak Time, Settling Time dan Overshoot. Rise time adalah waktu yang diperlukan untuk respon mencapai nilai mulai dari 10% hingga 90% nilai akhirnya. Peak Time adalah waktu yang diperlukan untuk mencapai nilai puncak/maksimum. Settling Time adalah waktu yang diperlukan untuk osilasi menjadi teredam/mengecil hingga +5%. Overshoot adalah rasio tingginya lonjakan terhadap nilai akhirnya. Gambar berikut menunjukkan keempat istilah tersebut. (Keterangan: PV = Process Variable).
28. Teman-teman dapat mengunduh program LabVIEW Kontrol PID Posisi ini di link ini: file_LabVIEW_5a
29. Sampai di sini pembuatan program LabVIEW untuk Kontrol PID Posisi Poros Motor DC selesai.
Program LabVIEW Kontrol PID Kecepatan motor DC
1. Buka program Kontrol PID Kecepatan.
2. Implementasi Kontrol PID pada program LabVIEW dapat dilakukan dengan menempatkan icon PID di Block Diagram, menggantikan fungsi pembandingan (Subtract) dan pembatasan output (In Range and Coerce). Karena Subtract masih diperlukan untuk menampilkan nilai Error, maka hapus icon In Range and Coerce beserta dengan kedua inputnya.
3. Ambil icon PID dari Palet Functions, di kategori Control & Simulation, di kategori PID. Hubungkan input setpoint dengan icon Setpoint, input process variable dengan output Multiply, input PID gains dengan Create Control, input output range dengan Create Control, input dt(s) dengan Create Constant, yang diisi 0.05, dan output PID dengan icon Slide PWM, seperti gambar berikut.
4. Tampilkan nilai Error, yang merupakan selisih antara Setpoint dengan output kecepatan, yang dibuat dengan cara meng-klik kanan output Subtract, pilih Create, pilih Indicator. Beri nama Error.
- Nilai Setpoint = 80 (mengambil nilai tengah antara 0-165)
- Nilai PWM mula-mula 0
- Grafik Encoder mula-mula bersih
- Grafik PWM mula-mula bersih
- Data di port Serial mula-mula bersih (VISA Flush)
Berikut ini tampilan program untuk kelima pengaturan tersebut:
6. Di Front Panel, agar grafik respon PID terlihat jelas, buat agar sumbu Y bernilai tetap, dengan nilai minimum = 0 dan maksimum = 100, serta hilangkan centang pada Autoscale Y.
7. Jalankan simulasi Proteus, dan kemudian jalankan program LabVIEW (jangan lupa untuk memilih Port COM dulu, baru menjalankan program LabVIEW). Berikut ini tampilan Kontrol PID Kecepatan dengan nilai default untuk PID gains dan output range (Default: Kc = 1, Ti = 0,01 min, Td = 0 min, out High = 100, out Low = -100).
Catatan: setiap kali menjalankan simulasi pengujian berikutnya, mula-mula Stop program LabVIEW, baru kemudian Stop Proteus. Setelah itu, jalankan lagi keduanya, dimulai dari Proteus, diikuti dengan program labVIEW.
8. Dari grafik di atas, tampak grafik respon cukup stabil (tidak berosilasi), hanya saja nilai responnya tidak mencapai Setpoint. Hal ini disebabkan output PWM tidak cukup memadai. Untuk itu, ada 2 kemungkinan solusi, yaitu dengan memperbesar nilai Kc (Proportional gains), atau memperbesar batas output PWM. Solusi pertama adalah memperbesar nilai Kc (Proportional gains). Berikut ini tampilan Kontrol PID Kecepatan dengan nilai Kc yang diubah, dari 1 menjadi 10.
9. Ternyata solusi pertama tidak bisa mengatasi masalah, output PID masih belum bisa mencapai Setpoint. Bahkan dengan memperbesar nilai Kc hingga 1000, ternyata output PID masih belum bisa mencapai Setpoint. Beralih ke solusi kedua, yang dilakukan dengan memperbesar batas output PWM. Berikut ini tampilan Kontrol PID Kecepatan dengan nilai PID gains menggunakan nilai default, dan nilai batas output PWM diubah, dari yang semula output High = 100 dan Low = -100, diubah menjadi High = 255 dan Low = -255.
10. Tampak pada grafik respon di atas, ternyata dengan membuat batas output High menjadi 255 dan output Low menjadi -255, dengan nilai PID gains berisi nilai default, output PID dapat mencapai Setpoint. Dari grafik diatas diperoleh kualitas respon: Rise Time = 1,5 detik, Peak Time = 3 detik, Settling Time = 3 detik dan Overshoot = 0%. Berikut ini secara berturut-turut ditunjukkan pengaruh pengaturan nilai PID gains terhadap kualitas respon.
11. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,001 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 0,4 detik, Peak Time = 0,8 detik, Settling Time = 10 detik dan Overshoot = 35%.
12. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,001 menit, Td = 0,01 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 0,5 detik, Peak Time = 1 detik, Settling Time = 6 detik dan Overshoot = 25%.
13. Berikut ini grafik respon ketika nilai Kc = 10, Ti=0,01 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1 detik, Peak Time = 2,5 detik, Settling Time = 4 detik dan Overshoot = 20%.
14. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,01 menit, Td = 0,01 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1,4 detik, Peak Time = 3 detik, Settling Time = 5 detik dan Overshoot = 15%.
15. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,005 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 0,6 detik, Peak Time = 1,8 detik, Settling Time = 3 detik dan Overshoot = 15%.
16. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,006 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1 detik, Peak Time = 1,8 detik, Settling Time = 3 detik dan Overshoot =15 %.
17. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,06 menit, Td = 0,001 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1 detik, Peak Time = 1,8 detik, Settling Time = 3 detik dan Overshoot =15 %.
18. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,007 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1 detik, Peak Time = 2 detik, Settling Time = 3 detik dan Overshoot =7,5%.
19. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,008 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1 detik, Peak Time = 2 detik, Settling Time = 3 detik dan Overshoot = 5%.
20. Berikut ini grafik respon ketika nilai Kc = 1, Ti=0,009 menit, Td = 0 menit, output High = 255, dan output Low = -255. Diperoleh kualitas respon: Rise Time = 1,2 detik, Peak Time = 2,5 detik, Settling Time = 3 detik dan Overshoot = 0%.
21. Teman-teman dapat mengunduh program LabVIEW Kontrol PID Kecepatan ini di link ini: file_LabVIEW_5b
22. Untuk lebih jelas mengenai pembuatan Tahap 5 ini dan hasilnya, teman-teman dapat melihat video youtube berikut ini:
23. Sampai di sini pembuatan program LabVIEW untuk Kontrol PID Kecepatan Motor DC selesai.
24. File-file program yang telah dihasilkan di Tahap 5 ini dapat diunduh di link berikut ini:
izin bertanya kak, saya sudah coba untuk penerapannya itu langsung,bukan di simulasi, tetapi grafik di labview untuk plot 1 nya tidak bergerak/tidak berosilasi kak, ada solusi?
BalasHapusSebelumnya terimakasih sudah mengunjungi blog saya ini. Untuk penggunaan hardware secara langsung, saya juga membuat blognya, silahkan mengunjungi blog saya ini di sini: Kontrol suhu, semoga bermanfaat. Apabila masih bingung, siahkan ditanyakan lagi, seppp, tetap semangat
Hapus