Daftar Isi:

Pengontrol PID VHDL: 10 Langkah
Pengontrol PID VHDL: 10 Langkah

Video: Pengontrol PID VHDL: 10 Langkah

Video: Pengontrol PID VHDL: 10 Langkah
Video: Memahami PID Controller (seri PID Controller part1) 2024, November
Anonim
Pengontrol PID VHDL
Pengontrol PID VHDL
Pengontrol PID VHDL
Pengontrol PID VHDL

Proyek ini adalah tugas akhir saya untuk menyelesaikan gelar Sarjana Honours saya dari Cork Institute of Technology. Tutorial ini dibagi menjadi dua bagian yang pertama akan mencakup bagian utama kode PID yang merupakan tujuan utama dari proyek dan bagian kedua mencakup antarmuka kode yang diimplementasikan pada papan pengembangan Basys 3 dan kemudian dihubungkan ke bola pingpong alat levitasi. Rig teoretis dan dibangun ditunjukkan pada gambar terlampir.

Perlengkapan

Simulasi

Suite Desain Vivado

Implementasi (dalam tanda kurung adalah apa yang digunakan untuk proyek saya)

  • FPGA Board yang dapat memasukkan dan mengeluarkan sinyal Digital/Analog (Basys 3)
  • sebuah sistem yang dapat dikontrol dengan satu sumber umpan balik (Rig Levitasi Bola Ping Pong)

peralatan

  • Tabung polikarbonat
  • Kipas Angin 5V
  • Sensor Inframerah
  • Basis Cetak 3D (Tutorial ini mendokumentasikan konstruksi rig, sensor ditambahkan untuk memberikan umpan balik tetapi rig umumnya sama)
  • Resistor 1k
  • Papan tempat memotong roti dengan 5V dan GND Rail

Langkah 1: Teori Kontrol Dasar

Teori Kontrol Dasar
Teori Kontrol Dasar

Saya pikir menambahkan beberapa teori kontrol dasar akan memberi siapa saja yang ingin mencoba dan menerapkan kode ini sebagai dasar yang baik untuk memulai.

Diagram terlampir adalah tata letak pengontrol loop tunggal.

r- Apakah referensi. Ini menentukan di mana pengontrol diinginkan untuk pergi.

e-Apakah kesalahan. Ini adalah perbedaan antara nilai pada sensor Anda dan referensi Anda. misalnya e=r-(d+keluaran sensor).

K-Ini pengontrolnya. Kontroler dapat terdiri dari tiga istilah. Suku-suku tersebut adalah P, I dan D. Ketiga suku tersebut memiliki pengali yang disebut Kp, Ki dan Kd. Nilai-nilai ini menentukan respons pengontrol.

  • P-Proporsional. Kontroler P yang ketat akan memiliki output yang sebanding dengan kesalahan saat ini. Pengontrol P mudah diterapkan dan bekerja dengan cepat tetapi tidak akan pernah mencapai nilai yang Anda tetapkan (referensi).
  • I-Integral. Kontroler integral yang ketat akan meringkas kesalahan sebelumnya yang pada akhirnya akan mencapai referensi yang diinginkan. Kontroler ini umumnya terlalu lambat untuk diimplementasikan. Menambahkan suku P akan mengurangi waktu yang dibutuhkan untuk mencapai referensi. Waktu di mana input diambil sampelnya harus diperhitungkan, integral terintegrasi terhadap waktu.
  • D-Derivatif. Istilah Derivatif akan memiliki output yang tergantung pada tingkat perubahan kesalahan. Istilah ini umumnya digunakan dengan istilah P atau dengan istilah PI. Karena ini sebanding dengan laju perubahan kesalahan, maka kebisingan tunggal akan diperkuat kebisingannya yang dapat menyebabkan sistem menjadi tidak stabil. Waktu juga harus diperhitungkan karena istilah turunannya juga berkaitan dengan waktu.

U- Ini adalah sinyal kontrol. Sinyal ini merupakan input ke rig. Dalam kasus proyek ini, u adalah input sinyal PWM ke kipas untuk mengubah kecepatan.

G- Ini adalah sistem yang sedang dikendalikan. Sistem ini dapat dimodelkan secara matematis dalam Domain S atau Z. Sistem dapat ke urutan ke-n tetapi untuk seseorang yang memulai dengan kontrol, sistem urutan pertama mungkin harus diasumsikan karena ini jauh lebih mudah untuk dihitung. Ini adalah kebanyakan informasi tentang sistem pemodelan dapat ditemukan secara online. Tergantung pada waktu pengambilan sampel sensor, model sistemnya diskrit atau kontinu. Ini memiliki efek drastis pada pengontrol sehingga penelitian terhadap keduanya disarankan.

d- Ini adalah gangguan yang ditambahkan ke sistem. Gangguan adalah kekuatan luar yang tidak diperhitungkan oleh model sistem. Contoh mudahnya adalah drone yang ingin Anda layangkan pada jarak 5 meter, hembusan angin datang dan menjatuhkan drone 1 meter, pengontrol akan memposisikan ulang drone setelah gangguan terjadi. Ini dikenal sebagai gangguan karena angin tidak dapat diulang sehingga tidak dapat dimodelkan.

Untuk menyetel pengontrol ada terlalu banyak aturan untuk disebutkan tetapi beberapa aturan bagus yang saya mulai adalah Cohen Coon dan Zieger Nichols.

Pemodelan suatu sistem umumnya merupakan bagian terpenting tanpa model yang akurat maka pengontrol yang telah dirancang tidak akan memberikan respon yang diinginkan.

Harus ada informasi yang cukup di sini untuk memahami bagaimana pengontrol bekerja bersama dengan beberapa penelitian individu dan kode di bawah pengontrol dengan kombinasi dari tiga istilah dapat diimplementasikan.

Langkah 2: Menulis Kode PID

Menulis Kode PID
Menulis Kode PID

Prinsip dasar kode yang ditemukan di tautan berikut ini diambil dan dimodifikasi karena kode ini tidak berfungsi tetapi memiliki banyak prinsip yang benar yang memberikan titik awal yang baik. PID Asli Kode memiliki beberapa kesalahan seperti

  • Operasi Berkelanjutan - pengontrol bersifat diskrit secara warisan sehingga pengontrol harus diatur untuk hanya menghitung semua 3 istilah ketika input baru tersedia. Solusi untuk simulasi ini adalah untuk memeriksa apakah input telah berubah sejak terakhir kali. ini hanya berfungsi untuk mensimulasikan kode yang berfungsi dengan benar.
  • Waktu Sampel tidak berpengaruh pada integral dan suku turunan - Kontroler juga tidak mempertimbangkan waktu pengambilan sampel, sehingga nilai yang disebut pembagi untuk waktu ditambahkan untuk memastikan suku integral dan turunan beroperasi di atas yang benar selang.
  • Kesalahan hanya bisa positif - saat menghitung kesalahan ada juga masalah karena kesalahan tidak pernah bisa berarti negatif ketika sinyal umpan balik telah melampaui nilai referensi bahwa pengontrol akan terus menaikkan output ketika seharusnya dikurangi.
  • Nilai gain untuk 3 istilah adalah bilangan bulat - dalam pengalaman saya, saya selalu menemukan bahwa nilai untuk 3 istilah di controller selalu menjadi angka floating point karena Basys 3 tidak memiliki angka floating point nilai harus diberikan nilai pembilang dan a nilai penyebut yang akan berfungsi sebagai solusi untuk mengatasi masalah ini.

Kode terlampir di bawah ini adalah bagian utama dari kode dan testbench untuk mensimulasikan kode. Folder zip berisi kode dan testbench yang sudah ada di Vivado sehingga bisa dibuka untuk menghemat waktu. ada juga tes simulasi kode yang menunjukkan keluaran pelacakan referensi ini membuktikan bahwa kode berfungsi sebagaimana dimaksud.

Langkah 3: Cara Memodifikasi untuk Sistem Anda

Pertama tidak semua sistem adalah sama yang harus menganalisis input dan output dari sistem. Dalam kasus saya, output rig saya yang memberi saya nilai untuk posisi adalah sinyal analog dan input dari sistem adalah sinyal PWM. Artinya diperlukan konversi ADC. Untungnya Basys 3 memiliki built in ADC jadi ini tidak masalah output dari sensor IR harus diperkecil ke 0V-1V karena ini adalah jangkauan maksimum ADC onboard. Ini dilakukan dengan menggunakan rangkaian pembagi tegangan yang terbuat dari resistor 1k yang dipasang sebagai resistor 3k secara seri dengan resistor 1k. Sinyal analog sekarang berada dalam jangkauan ADC. Input PWM ke kipas dapat langsung digerakkan oleh output dari port PMOD pada Basys 3.

Langkah 4: Mengambil Keuntungan dari I/O pada Basys 3

Ada sejumlah I/O pada Basys 3 yang memungkinkan debugging lebih mudah ketika kode sedang berjalan. I/O diatur sebagai berikut.

  • Seven Segment Display - Ini digunakan untuk menunjukkan nilai referensi dan nilai pada ADC dalam volt. Dua digit pertama dari tampilan tujuh segmen menunjukkan dua digit setelah tempat desimal dari nilai ADC karena nilainya antara 0-1V. Digit tiga dan empat pada tampilan tujuh segmen menunjukkan nilai referensi dalam volt, ini juga menunjukkan dua digit pertama setelah tempat desimal karena kisarannya juga antara 0-1V.
  • 16 LED - LED digunakan untuk menunjukkan nilai output untuk memastikan bahwa output jenuh dan output berubah dengan benar.

Langkah 5: Kebisingan pada Output Sensor IR

Ada noise pada output sensor untuk memperbaiki masalah ini, blok rata-rata ditempatkan karena ini sudah cukup dan membutuhkan sedikit pekerjaan untuk diselesaikan.

Langkah 6: Tata Letak Kode Keseluruhan

Tata Letak Kode Keseluruhan
Tata Letak Kode Keseluruhan

Ada satu bagian kode yang belum dibicarakan. Kode ini adalah pembagi jam yang disebut pemicu. sedikit kode ini memicu kode ADC untuk mengambil sampel. kode ADC membutuhkan maksimal 2us untuk diselesaikan sehingga input saat ini dan input sebelumnya dirata-rata. 1us setelah ini, rata-rata pengontrol menghitung suku P, I dan D. seluruh tata letak kode dan antarmuka ditampilkan dalam diagram koneksi darurat.

Langkah 7: Pengujian

Pengujian
Pengujian

Kode dikerahkan di Basys 3 dan respons berikut direkam. referensi berubah antara 2 nilai. yang merupakan kasus dalam kode proyek yang telah selesai terlampir. Video terlampir menunjukkan respons ini secara real-time. Osilasi meluruh lebih cepat di bagian atas tabung karena pengontrol dirancang untuk wilayah ini tetapi pengontrol tidak bekerja dengan baik di bagian bawah tabung karena sistemnya non-linear.

Langkah 8: Modifikasi untuk Meningkatkan Proyek

Proyek ini bekerja sebagaimana dimaksud tetapi ada beberapa modifikasi yang akan saya buat jika proyek dapat diperpanjang.

  • Terapkan filter digital untuk sepenuhnya mengurangi kebisingan
  • mengatur kode ADC, kode Rata-rata dan kode Integrasi untuk memicu secara berurutan.
  • gunakan sensor yang berbeda untuk umpan balik karena respons non-linier dari sensor ini menyebabkan berbagai masalah dengan proyek ini tetapi itu lebih pada sisi kontrol bukan sisi pengkodean.

Langkah 9: Kerja Ekstra

Selama musim panas saya menulis kode untuk pengontrol kaskade dan menerapkan modifikasi yang saya rekomendasikan untuk pengontrol PID loop tunggal.

Modifikasi dilakukan pada pengontrol PID biasa

· Template filter FIR yang diimplementasikan, koefisien harus diubah untuk mencapai frekuensi cut-off yang diinginkan. Implementasi saat ini adalah filter cemara 5-tap.

· Waktu kode telah diatur sehingga filter akan menyebarkan sampel baru melalui dan ketika output siap, istilah integral akan dipicu yang berarti kode dapat dimodifikasi untuk bekerja pada interval waktu yang berbeda dengan sedikit usaha untuk mengubah kode.

· Perulangan for utama yang menggerakkan program juga telah dikurangi karena perulangan for ini memakan waktu 7 siklus sebelumnya ini memperlambat kecepatan operasi maksimum Pengendali tetapi dengan mengurangi perulangan for t 4 menyatakan ini berarti bahwa blok kode utama dapat beroperasi dalam 4 siklus clock.

Pengujian

Kontroler ini diuji dan dilakukan sebagaimana dimaksud. Saya tidak mengambil gambar bukti ini karena bagian dari proyek ini hanya untuk menjaga pikiran tetap aktif. Kode untuk pengujian serta testbench akan tersedia di sini sehingga Anda dapat menguji program sebelum implementasi.

Mengapa menggunakan pengontrol kaskade

Kontroler kaskade mengontrol dua bagian sistem. Dalam hal ini pengontrol kaskade akan memiliki loop luar yang merupakan pengontrol yang memiliki umpan balik dari sensor IR. Loop bagian dalam memiliki umpan balik berupa waktu antara pulsa dari tachometer yang menentukan kecepatan putaran kipas. Dengan menerapkan kontrol, respon yang lebih baik dapat dicapai dari sistem.

Bagaimana cara kerja pengontrol kaskade?

Loop luar pengontrol akan mengumpankan nilai waktu antara pule ke pengontrol loop dalam. Kontroler ini kemudian akan menambah atau mengurangi siklus kerja untuk mencapai waktu yang diinginkan antara pulsa.

Implementasi modifikasi pada rig

Sayangnya, saya tidak dapat menerapkan modifikasi ini di rig karena saya tidak memiliki akses ke sana. Saya menguji pengontrol loop tunggal yang direvisi yang berfungsi sebagaimana dimaksud. Saya belum menguji pengontrol kaskade. Saya yakin pengontrol akan berfungsi tetapi mungkin memerlukan sedikit modifikasi agar berfungsi sebagaimana dimaksud.

Pengujian

Saya tidak dapat menguji pengontrol karena sulit untuk mensimulasikan dua sumber input. Satu-satunya masalah yang dapat saya lihat dengan pengontrol kaskade adalah ketika loop luar mencoba meningkatkan setpoint yang dipasok ke loop dalam bahwa titik setel yang lebih besar sebenarnya adalah RPS yang lebih rendah untuk kipas tetapi ini dapat diperbaiki dengan mudah. ambil titik setel dari nilai maksimal sinyal setpoint (4095 - setpoint - tacho_result).

Langkah 10: Kesimpulan

Secara keseluruhan proyek berfungsi seperti yang saya maksudkan ketika proyek dimulai, jadi saya senang dengan hasilnya. Terima kasih telah meluangkan waktu untuk membaca upaya saya mengembangkan pengontrol PID di VHDL. Jika ada yang mencoba menerapkan beberapa variasi ini pada sistem dan memerlukan bantuan untuk memahami kode, hubungi saya, saya akan merespons secepatnya. Siapa pun yang mencoba pekerjaan ekstra yang telah diselesaikan tetapi tidak dilaksanakan, silakan hubungi saya untuk bantuan apa pun. Saya akan sangat menghargai jika siapa pun yang menerapkannya memberi tahu saya bagaimana kelanjutannya.

Direkomendasikan: