Cara menerapkan Pengontrol suka PID seperti self tuning

15

Saya mencoba untuk menulis program pengontrol mikro untuk mengendalikan suhu dalam suatu sistem dengan karakteristik berikut:

  • output hanya bisa Hidup atau Mati, dengan frekuensi siklus tetap (~ 2-10 per jam)
  • Pabrik lambat merespons (perubahan suhu yang terukur membutuhkan waktu lama> 10 menit).
  • Pabrik kehilangan suhu berdasarkan kondisi lingkungan.
  • set-point dapat bervariasi dalam langkah besar berdasarkan permintaan pengguna.

Saya menulis pengontrol yang bertujuan untuk meminimalkan kesalahan, serta mematuhi laju siklus yang disediakan sebagai input.

Ini dapat dengan mudah dilakukan dengan pengontrol PI dan outputnya dikonversi ke siklus-tugas. Masalahnya adalah bahwa program perlu menyetel otomatis dan memilih Kp, konstanta Ki yang benar dan beradaptasi dengan berbagai kondisi lingkungan dan perubahan dalam kapasitas pemanasan. Karena itu, menyetel pengontrol PI terlebih dahulu tidak terlalu berguna.

Menggunakan PI atau PID sebenarnya bukan keharusan. Saya terbuka untuk menggunakan Fuzzy-Logic jika itu membantu, juga memiliki algoritma pembelajaran mesin pada chip yang memodelkan respons sistem dan kehilangan panas (perkiraan linier) yang menyarankan informasi tentang respons langkah yang diukur . Hanya tidak tahu apa yang harus dilakukan dengan informasi itu.

Beberapa posting menyarankan saya bisa menggunakan data pemodelan untuk menyetel PI online, serta manual lab-view yang menyarankan saya bisa menggunakan Fuzzy-Logic untuk menyetel PI.

Pertanyaan saya adalah, apa pendekatan terbaik untuk skenario semacam ini (misalnya PID, fuzzy-pid, convolution, dll) dan bagaimana saya akan menerapkannya dalam perangkat lunak / praktik.

Saya bukan EE sehingga input apa pun akan sangat dihargai.

MandoMando
sumber
1
Saya menulis jawaban tentang menggunakan algoritma simpleks untuk secara otomatis menyetel pengontrol PID ke Robotics SE yang mungkin menarik.
embedded.kyle
@ embedded.kyle bagus, saya mengerti simplex / terhebat. Bisakah Anda memberi tahu apa yang ia gunakan untuk x1, x2? Saya mengalami masalah dalam mengaitkannya dengan konstanta PID.
MandoMando
1
Sudah lama tapi saya percaya kami menggunakan sesuatu seperti x1 = P, x2 = I, x3 = D. x0, pusat gravitasi, adalah pengukuran stabilitas apa pun yang paling penting bagi Anda. Dalam aplikasi saya, kontrol motor, kami memiliki dua loop. X0 dari satu adalah kecepatan dan x0 untuk yang lain adalah arus. Lihat di sini untuk lebih lanjut.
embedded.kyle
@ embedded.kyle apakah Anda keberatan mengubah komentar Anda menjadi jawaban? tambahkan info tambahan jika Anda mau. -thx
MandoMando
Hadiah? Oh Boy! Dilakukan dan dilakukan.
embedded.kyle

Jawaban:

7

Saya tidak akan sampai menyebut PID sudah ketinggalan zaman. Tapi tentu ada ruang untuk perbaikan. Salah satu cara di mana saya memiliki loop kontrol PID auto-tuned adalah dengan menggunakan metode Nelder-Mead yang merupakan bentuk algoritma mendaki bukit simpleks . Ini memiliki keuntungan karena dapat menyatu dan berkumpul kembali pada parameter target yang bergerak seiring waktu.

Metode mendaki bukit metode Nelder-Mead

Dari tulisan ini :

Sebagai contoh dalam kasus kami parameter PID tuning {K P , K I , K D } simpleks adalah tetrahedron. Nelder – Mead menghasilkan posisi uji simpleks baru dengan mengekstrapolasi perilaku fungsi objektif yang diukur pada setiap titik uji yang diatur sebagai simpleks. Algoritme kemudian memilih untuk mengganti salah satu dari titik uji ini dengan titik uji baru dan dengan demikian teknik ini berkembang.

Aplikasi khusus saya adalah untuk kontrol motor. Kami memiliki dua loop, loop kontrol arus PID dan loop kontrol kecepatan PI. Kami mengatur simpul kami masing-masing ke P, I, dan D dan menjalankan statistik pada output loop. Kami kemudian menjalankan refleksi, ekspansi, kontraksi, dan pengurangan berulang-ulang sampai target kontrol kecepatan atau saat ini dihasilkan berada dalam beberapa standar deviasi.

Dengan produk kami, VP sangat peduli dengan bagaimana motor "terdengar". Dan ternyata, itu "terdengar" lebih baik ketika target saat ini melambung sedikit lebih dari yang optimal secara matematis. Jadi, penyetelan kami dilakukan "langsung" karena kami membiarkan algoritme mencari sementara motor berjalan sehingga persepsi pengguna tentang suara motor juga diperhitungkan. Setelah kami menemukan parameter yang kami sukai, mereka diberi kode-keras dan tidak diubah.

Ini mungkin tidak ideal untuk Anda karena Anda menyatakan, "menempatkan sistem dalam osilasi bahkan sebagai bagian dari penyetelan otomatis tidak dapat diterima oleh pengguna". Sistem kami pasti akan terombang-ambing dan melakukan hal-hal mengerikan lainnya ketika sedang menyetel otomatis.

Namun, Anda dapat menjalankan dua salinan pengontrol PID. Yang "hidup" dan benar-benar mengendalikan proses. Dan yang kedua yang secara konstan disetel sambil diberi input yang sama dengan controller "live". Ketika output dari pengontrol yang disetel otomatis menjadi "lebih baik" atau lebih stabil, Anda dapat menukar koefisien ke dalam pengontrol "langsung". Pengontrol kemudian akan melakukan koreksi pada proses sampai kinerja yang diinginkan tercapai. Ini akan mencegah osilasi yang dapat dirasakan oleh pengguna selama penyetelan otomatis. Tetapi jika input berubah secara drastis dan pengendali PID tidak lagi optimal, penyetelan otomatis dapat menukar koefisien baru saat tersedia.

tertanam.kyle
sumber
Metode NM memang membutuhkan untuk menjalankan titik liar pada fungsi tujuan (yaitu dunia nyata pengguna). Namun, saya percaya model kasar (space-state?) Dapat dibangun pada mikrokontroler itu sendiri berdasarkan pengukuran sensor. Ini kemudian akan menjalankan pengontrol PI 'bayangan' yang Anda usulkan saat ia mengoptimalkan. Saya tidak yakin ini over-kill karena dimungkinkan untuk menyetel PI ke pengaturan yang diketahui dan kemudian skala Kp dan Ki berdasarkan pembacaan sensor dan respons sistem. Apa pun itu, tuan yang baik hati.
MandoMando
@MandoMando Terima kasih banyak! Dan saya sangat suka istilah 'bayangan' pengontrol PI.
embedded.kyle
3

Kontroler PID berguna dalam situasi di mana perilaku sistem yang dikontrol dapat diperkirakan secara wajar sebagai jumlah dari stimulus kontrol, integral dari stimulus kontrol dan integral dari integral pertama. Beberapa sistem kontrol suhu dapat memenuhi kriteria seperti itu, jika ada objek yang dipanaskan secara seragam oleh stimulus, dan jika objek itu mentransfer panas secara seragam ke beberapa objek lain pada tingkat yang sebanding dengan perbedaan suhu di antara mereka. Misalnya, objek pertama mungkin merupakan elemen pemanas, dan objek kedua mungkin adalah udara yang bersirkulasi dalam suatu ruangan, jika ada sirkulasi udara yang cukup agar udara dianggap memiliki suhu seragam tunggal. Untuk model termal lebih rumit dari itu (misalnya yang mungkin melibatkan gradien termal dalam media padat),

Saya akan menyarankan bahwa pendekatan yang baik mungkin untuk memiliki controller, ketika pemanas menyala, terus menerus memperkirakan seberapa panas perangkat yang diatur akan mendapatkan jika output dimatikan segera, dan suhu yang akhirnya akan mendingin jika pemanas dinyalakan segera setelah diizinkan setelah itu. Juga perkirakan nilai-nilai apa yang akan terjadi jika pemanas dibiarkan selama satu detik, dua detik, tiga detik, dll. Matikan pemanas ketika nilai-nilai itu sebaik yang akan didapat. Kemudian begitu pemanas dimatikan, mulailah melakukan perhitungan yang serupa, tetapi bertukar peran hidup / mati, panas / dingin, dll., Untuk memutuskan kapan harus menghidupkan kembali. Bergantung pada perilaku termal sistem, mungkin perlu menggunakan strategi lihat-depan 'min / max' untuk melihat satu atau dua langkah ke depan.

supercat
sumber
1

Mampu mengubah keadaan kontrol (hidup atau mati) 2-10 kali per jam tidak cocok untuk kontrol siklus tugas. Output dari loop PI akan menjadi sinyal kontrol yang bervariasi dalam besarnya sebagai fungsi dari kesalahan, dan pabrik Anda dapat (secara realistis) hanya menerima input biner (mati atau hidup), karena 'frekuensi' dari kontrol siklus kerja yang dapat diterima adalah sebagian kecil dari hertz.

Anda mungkin ingin menyederhanakan berbagai hal dan menggunakan kontrol histeris:

  • sistem akan hidup ketika suhu melewati batas bawah
  • sistem mati ketika suhu melewati batas atas
  • ada jarak yang cukup antara batas atas dan bawah untuk mencegah terpentalnya output kontrol
Adam Lawrence
sumber
ide untuk mengambil output PI katakan: 60% dan konversikan ke waktu = 60% dari siklus -> 0,6 x 30 menit -> 18 menit dan 12 menit selama siklus 30 menit. pengontrol bang-bang yang Anda sarankan tidak menjamin mempertahankan laju siklus yang diperlukan (katakanlah nyala, tidak lebih dari n kali per jam) dan menjaga kesalahan rendah pada saat yang sama. mungkin perlu bagi sistem untuk melakukan overshoot sementara untuk periode waktu untuk menyeimbangkan kerugian selama off-time.
MandoMando
1

Suatu tipikal (walaupun diakui cara sederhana dalam melakukan ini) disebut penjadwalan gain. Ini adalah pendekatan klasik untuk kontrol non-linear ketika Anda memiliki variabel yang dapat diamati (atau variabel) yang diubah oleh sistem Anda (parameter penjadwalan). Dalam sistem Anda, variabel yang kemungkinan besar adalah suhu. Idenya adalah bahwa Anda membuat daftar keuntungan pengontrol pada nilai yang berbeda dari parameter penjadwalan (suhu) dan sebagai perubahan parameter penjadwalan Anda menggunakan keuntungan tersebut di pengontrol Anda (baik itu PI, PID, umpan balik negara atau apa pun). Jika ini terdengar sangat sederhana, itu karena itu. Namun itu berfungsi dan digunakan dalam beberapa sistem yang sangat rumit.

Jika Anda ingin menjadi mewah, Anda bisa menerapkan algoritma pembelajaran mesin untuk menghasilkan matriks keuntungan Anda. Ini akan menghasilkan pengontrol yang berkembang dan belajar yang tampaknya Anda gambarkan. Namun, itu bisa berlebihan jika sistem dapat sepenuhnya ditandai.

Sunting: Maaf, saya salah membaca sedikit. Anda mencoba mengendalikan suhu sehingga "kondisi lingkungan" yang Anda bicarakan akan menjadi parameter penjadwalan Anda.

Mat
sumber
0

Anda bisa menjadi pengontrol penuh Recursive Least Squares, cf Astrom dan Wittenmark , Adaptive Control, tapi saya tidak tahu apakah mikrokontroler akan memiliki cukup semangat untuk melakukan ini.

Scott Seidman
sumber