Saya mencoba menerapkan algoritma PID dasar pada Arduino Leonardo untuk mencampur air keran panas dan dingin menggunakan katup yang dikontrol servo. Tujuannya adalah menahan suhu sedekat mungkin dengan setpoint. Terutama penting adalah mencegah suhu output dari overshooting setpoint untuk melindungi pengguna dari luka bakar. Yang penting kedua adalah mendapatkan suhu di dekat setpoint secepat mungkin.
Untuk perubahan kecil dalam suhu, implementasi standar dari algoritma PID tampaknya berfungsi dengan baik. Tetapi saya tidak tahu bagaimana menghitung keterlambatan lama yang mungkin terjadi ketika menunggu air panas mencapai katup, karena penundaan ini jauh lebih lama daripada penundaan standar setelah mengubah posisi katup.
Jelas tergantung pada panjang saluran air panas dan waktu sejak penggunaan terakhir air panas, perlu beberapa puluh detik agar air panas mencapai katup, sehingga selama waktu ini, suhu air tetap cukup konstan pada suhu rendah. dan katup air panas segera terbuka 100%. Komponen integral mulai mengakumulasi nilai kesalahan besar.
Ketika air panas akhirnya mencapai katup, suhu yang terdeteksi naik dengan sangat cepat ke suhu air panas maks. Karena kesalahan integral yang besar, katup air panas ditahan pada 100% untuk waktu yang lama setelah suhu melebihi setpoint, karena menunggu nilai integral dikurangi menjadi level normal. Dengan demikian hasilnya adalah air bersuhu maksimum selama beberapa (puluhan) detik.
Saya tidak yakin bagaimana menjelaskan kemungkinan keterlambatan yang lama ini. Dalam kasus seperti itu, apakah lebih bijaksana untuk menetapkan batas atas (dan bawah) pada nilai kesalahan integral, untuk membatasi waktu respons maks? Ini tampaknya mengalahkan tujuan komponen integral, dan juga masih akan memaksakan beberapa kelambatan setelah mencapai setpoint.
Atau apakah ada cara yang lebih baik untuk menangani perubahan input cepat setelah penundaan yang lama?
Terima kasih atas sarannya!