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.
sumber
Jawaban:
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.
Dari tulisan ini :
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.
sumber
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.
sumber
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:
sumber
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.
sumber
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.
sumber