Tôi đang cố gắng thực hiện một thuật toán PID cơ bản trên Arduino Leonardo để trộn nước máy nóng và lạnh bằng các van điều khiển bằng servo. Mục tiêu là giữ nhiệt độ càng gần điểm đặt càng tốt. Đặc biệt quan trọng là ngăn nhiệt độ đầu ra vượt quá điểm đặt để bảo vệ người dùng khỏi bị bỏng. Điều quan trọng thứ hai là lấy nhiệt độ gần điểm đặt càng nhanh càng tốt.
Đối với những thay đổi nhỏ về nhiệt độ, việc triển khai chuẩn của thuật toán PID dường như hoạt động tốt. Nhưng tôi không biết làm thế nào để giải thích cho sự chậm trễ kéo dài có thể xảy ra khi chờ nước nóng đến van, vì những độ trễ này dài hơn nhiều so với độ trễ tiêu chuẩn sau khi thay đổi vị trí van.
Rõ ràng tùy thuộc vào độ dài của dòng nước nóng và thời gian kể từ lần sử dụng nước nóng cuối cùng, có thể mất nhiều chục giây để nước nóng đến được van, vì vậy trong thời gian này, nhiệt độ nước vẫn khá ổn định ở nhiệt độ thấp và van nước nóng sẽ sớm mở 100%. Thành phần tích phân bắt đầu tích lũy một giá trị lỗi lớn.
Khi nước nóng cuối cùng đạt đến van, nhiệt độ được phát hiện tăng rất nhanh đến nhiệt độ nước nóng tối đa. Do sai số tích phân lớn, van nước nóng được giữ ở mức 100% trong một thời gian dài sau khi nhiệt độ vượt quá điểm đặt, do chờ giá trị tích phân giảm xuống mức bình thường. Do đó, kết quả là nước có nhiệt độ tối đa trong vài (vài chục) giây.
Tôi không chắc làm thế nào để giải thích cho sự chậm trễ có thể này . Trong trường hợp như vậy, sẽ là khôn ngoan khi đặt giới hạn trên (và dưới) trên giá trị lỗi tích phân, để giới hạn thời gian phản hồi tối đa? Điều này dường như đánh bại mục đích của thành phần không thể thiếu, và vẫn sẽ áp đặt một số độ trễ sau khi đạt đến điểm đặt.
Hoặc có cách nào tốt hơn để xử lý các thay đổi đầu vào nhanh sau một thời gian trễ dài?
Cảm ơn vì lời khuyên!