ฉันกำลังพยายามใช้อัลกอริทึม PID พื้นฐานใน Arduino Leonardo เพื่อผสมน้ำประปาร้อนและเย็นโดยใช้วาล์วควบคุมแบบเซอร์โว เป้าหมายคือรักษาอุณหภูมิให้อยู่ใกล้กับจุดที่กำหนดมากที่สุด สิ่งสำคัญอย่างยิ่งคือการป้องกันไม่ให้อุณหภูมิเอาต์พุตเกินขนาดที่กำหนดไว้เพื่อป้องกันผู้ใช้จากการเบิร์น สิ่งที่สำคัญอันดับสองคือทำให้อุณหภูมิใกล้กับจุดที่กำหนดโดยเร็วที่สุด
สำหรับการเปลี่ยนแปลงอุณหภูมิเล็กน้อยการใช้งานมาตรฐานของอัลกอริทึม PIDดูเหมือนว่าจะใช้ได้ แต่ฉันไม่รู้ว่าจะอธิบายความล่าช้าที่อาจเกิดขึ้นได้เมื่อรอให้น้ำร้อนไปถึงวาล์วเนื่องจากความล่าช้าเหล่านี้นานกว่าความล่าช้ามาตรฐานมากหลังจากเปลี่ยนตำแหน่งวาล์ว
เห็นได้ชัดว่าขึ้นอยู่กับความยาวของเส้นน้ำร้อนและเวลาตั้งแต่การใช้น้ำร้อนครั้งสุดท้ายมันอาจใช้เวลาหลายสิบวินาทีสำหรับน้ำร้อนที่จะไปถึงวาล์วดังนั้นในช่วงเวลานี้อุณหภูมิของน้ำยังคงค่อนข้างคงที่ที่อุณหภูมิต่ำ และวาล์วน้ำร้อนจะเปิดเร็ว ๆ นี้ 100% ส่วนประกอบหนึ่งเริ่มสะสมค่าความผิดพลาดขนาดใหญ่
เมื่อน้ำร้อนถึงวาล์วในที่สุดอุณหภูมิที่ตรวจพบจะเพิ่มขึ้นอย่างรวดเร็วจนถึงอุณหภูมิน้ำร้อนสูงสุด เนื่องจากข้อผิดพลาดที่สำคัญขนาดใหญ่วาล์วน้ำร้อนจะถูกเก็บไว้ที่ 100% เป็นเวลานานหลังจากที่อุณหภูมิเกินกว่าที่กำหนดไว้เนื่องจากการรอคอยค่าหนึ่งจะลดลงสู่ระดับปกติ ดังนั้นผลลัพธ์คือน้ำอุณหภูมิสูงสุดเป็นเวลาหลายสิบ (สิบ) วินาที
ฉันไม่แน่ใจว่าจะคำนึงถึงความล่าช้าที่เป็นไปได้นี้นานแค่ไหน ในกรณีเช่นนี้จะเป็นการดีหรือไม่ที่จะกำหนดขอบเขตบน (และล่าง) บนค่าความผิดพลาดแบบอินทิกรัลเพื่อ จำกัด เวลาตอบสนองสูงสุด? นี้ดูเหมือนว่าจะพ่ายแพ้วัตถุประสงค์ของส่วนประกอบและยังจะยังคงกำหนดบางส่วนล่าช้าหลังจากถึง SetPoint
หรือมีวิธีที่ดีกว่าในการจัดการกับการเปลี่ยนแปลงอินพุทที่รวดเร็วหลังจากล่าช้าเป็นเวลานานหรือไม่?
ขอบคุณสำหรับคำแนะนำใด ๆ !