Bien sûr.
Jâai implĂ©mentĂ© un rĂ©gulateur type PID. Lâouverture de la vanne est la somme de 3 termes
- Proportionnel : Kp x Erreur
- Intégral : Ki x Erreur_Integration
- DĂ©rivation : Kd x Erreur_Variation
Ouverture_Vanne = Kp x Erreur + Ki x Erreur_Integration + Kd x Erreur_Variation
avec Ki = Kp / Ti et Kd =Kp x Td oĂč
- Ti : pĂ©riode dâintĂ©gration
- Td : période de dérivation
Les 3 termes sont des % dâouvertures de vanne.
Lâerreur est la diffĂ©rence entre la tempĂ©rature mesurĂ©e et la tempĂ©rature de consigne en °C. Le coefficient Kp sâexprime en % par °C. Avec un Kp=20%/°C, lors dâun changement de consigne de 17°C Ă 20°C, on a subitement une erreur de 3°C (je suppose que la prĂ©cĂ©dente consigne Ă©tait atteinte), le terme proportionnel Kp x Erreur vaudra 60%, donc la vanne augmentera de 60 points (si elle Ă©tait Ă 10%, elle passera Ă 70%). Au dĂ©but, jâavais mis 40%/°C, quand je passais de 17.5°C Ă 20°C de consigne, je faisais du pied au plancher et la vanne sâouvrait de 100% (=2.5*40)
Le scĂ©nario est exĂ©cutĂ© toutes les 5 minutes pour calculer lâouverture Ă appliquer sur la vanne en fonction de la tempĂ©rature (Je peux utiliser nâimporte quelle sonde de tempĂ©rature ). Donc, la vanne reçoit aussi une info toutes les 5 minutes. La pĂ©riode de base est de 5 minutes. En cas de changement, il faut adapter les coefficients Ti et Td (Une ouverture de 2% toutes les 5 minutes est Ă©quivalent Ă une ouverture de 4% toutes les 10 minutes)
Lâerreur dâintĂ©gration est le cumul des erreurs Ă chaque cycle de 5 minutes en °C.5min. Le coefficient Ki sâexprime en % par °C.5min. Supposons que la consigne passe de 19°C Ă 20°C et que la tempĂ©rature de la piĂšce atteingne la consigne en 50 minutes, câest-Ă -dire que la tempĂ©rature monte de 0.1°C toutes les 5 minutes. Lâerreur sera de 1.0°C, puis 0.9°C, puis 0.8°C, etc, 0.1°C, enfin 0°C, soit une erreur cumulĂ©e de 5.5°C au bout de 10 pĂ©riodes de 5 minutes. En rĂ©gime Ă©tabli, la tempĂ©rature mesurĂ©e Ă©gale la tempĂ©rature de consigne, lâerreur est nulle et constante, la variation dâerreur est aussi nulle, donc lâouverture de la vanne vaut directement le terme intĂ©gral Ki x Erreur_Integration. Pour maintenir la tempĂ©rature de consigne de 20°C, je considĂšre Ă la grosse que la vanne a besoin dâĂȘtre environ ouverte Ă 15-25%. Si câest 22%, alors 22% = Ki x 5.5 °C.5min, donc Ki vaudrait 4% par °C.5min. Dans mon cas, la chaudiĂšre rĂ©gule de son cĂŽtĂ© la tempĂ©rature de lâeau qui passe dans le radiateur en fonction de la tempĂ©rature extĂ©rieure, plus il fait froid dehors, plus la tempĂ©rature de lâeau sera chaude. Ainsi la vanne ne devrait pas avoir besoin de sâouvrir davantage pour maintenir la tempĂ©rature de consigne lorsquâil fait plus froid dehors. AprĂšs quelques essais jâai baissĂ© sa valeur Ă 1%/(°C.5min) pour avoir moins dâoscillations. La pĂ©riode Ti = Kp / Ki correspond Ă la pĂ©riode dâintĂ©gration soit un certain nombre de pĂ©riodes de 5 minutes.
La variation dâerreur est diffĂ©rence entre lâerreur actuelle et la prĂ©cĂ©dente (il y a 5 minutes). LâidĂ©e du terme dĂ©rivĂ© est de booster lâouverture de vanne lorsque la tempĂ©rature mesurĂ©e est loin de la consigne (On fonce si on est loin de la consigne et on ralenti si on est proche pour Ă©viter les oscillations). Cette partie nâest pas Ă©vidente Ă concevoir avec a des sondes limitĂ©es Ă des rĂ©solution de 0.1°C. Si je reprends lâexemple prĂ©cĂ©dent oĂč la tempĂ©rature monte de 0.1°C toutes les 5 minutes, alors la diffĂ©rence sera constante Ă 0.1°C/5min. En rĂ©gime stable, sa valeur nulle en thĂ©orie car il nây plus de variation. Dans la pratique, la tempĂ©rature mesurĂ©e tourne au mieux Ă +/-0.1°C autour de la tempĂ©rature de consigne. Donc la valeur de la variation dâerreur prend presque toujours seulement 3 valeurs +0.1°C/5min, -0.1°C/5min et 0.0°C/5min. Il est rare dâavoir une variation de 0.2°C ou plus en 5 minutes, câest Ă©norme. Il faut crĂ©er un courant dâair en ouvrant les fenĂȘtres, et dans ce cas, la vanne sâouvrirait davantage pour compenser. Sâil y a une variation de 0.1°C en 25 minutes, il nây aura pas dans le calcul une valeur de 0.02°C/5min mais plutĂŽt 4 fois 0.0°C/5min puis 1 fois 0.1°C/5min. Ainsi, Ă chaque fois que la tempĂ©rature fais du +/-0.1°C autour de la tempĂ©rature de consigne, le terme dĂ©rivĂ© ferait +/-X% sur lâouverture un peu inutilement je trouve puisque le terme intĂ©gral effectue dĂ©jĂ la correction et surtout en douceur.
De plus, il y a encore un autre problĂšme avec la dĂ©rivĂ©e lors du changement de consigne. Lorsque la consigne passe de 19°C Ă 20°C, lâerreur va passer de 0°C Ă 1°C puis Ă 0.9°C, 0.8°C, 0.7°C. La variation de lâerreur passe de 0°C/5min (temp de consigne atteinte) Ă 1°C/5min puis globalement constante Ă 0.1°C/5min par la suite. La vanne effectuera un aller-retour inutilement en 5 minutes. DâoĂč la nĂ©cessitĂ© de rajouter un filtrage sur le terme dĂ©rivĂ© pour limiter ce pic.
Vu tous les problĂšmes avec la partie dĂ©rivĂ©e, je reste en rĂ©gulation PIâŠ
EDIT : jâai publiĂ© mon code ici
Pour faire ce scénario, je me suis inspiré de cette page
http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/
Bug rencontrĂ© : il mâest arrivĂ© que des expressions ne soient pas calculĂ©es numĂ©riquement et les variables/tag deviennent des chaĂźnes de caractĂšres contenant les formules au lieu des rĂ©sultats de calcul. Puis aprĂšs itĂ©rations, ces chaĂźnes de caractĂšres ne font que sâallongerâŠ
Au final, la difficulté est de trouver les bonnes valeurs des coefficients du régulateur et faire mieux que le constructeur.