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.