Plancha-CMS: test de rampes de températures
Le projet Plancha-CMS avance bien:
- Le circuit de puissance est prêt et opérationnel (voir cet article)
- Le générateur PWM basse fréquence fonctionne (voir cet article)
- Il est possible de lire un thermocouple avec un MAX31855 sous MicroPython.
Premières rampes en température
C'est donc le moment de faire monter la plancha en température jusqu'à 150°C a différents régime PWM tout en relevant la température toutes les secondes.
J'ai choisis 150°C pour ne pas prendre trop de risques en cas de problèmes (c'est juste 50°C de plus que l'eau bouillante).
Le but est de se familiariser avec les différentes caractéristiques de la plancha avant d'envisager une régulation PID de la température.
Rampe jusqu'à 150°C, période PWM de 1.5sec, cycle utile de 15% |
Il sera intéressant de vérifier:
- Si la rampe de température (en montée) est linéaire, donc pouvant être "raisonnablement" réduite à une droite.
- Détecter et répertorier les éventuels dépassements de température (l'Overshoot) lorsque la chauffe est coupée une fois la température souhaitée atteinte.
- Le temps de chauffe nécessaire pour atteindre la température souhaitée.
Dans le graphique ci-dessus, il faut 3 minutes pour atteindre 150°C à 10% de cycle utile (avec un période PWM de 1.5 sec).
Cet article reprend de nombreux autres graphiques, tests et conclusions mais avant, nous allons voir comment récupérer les informations.
Code de test MicroPython
Voici le code source de test_ramp.py utilisé le le Raspberry-Pico:
from lfpwm import LowFreqPWM from max31855 import MAX31855 from machine import Pin, SPI from os import uname import time CUTOFF_TEMP = 150 # Cut PWM when temperature (°c) is reached # User LED on Pico heater = None if uname().sysname == 'rp2': # RaspberryPi Pico print( 'Attaching Heater to Pin GP13' ) heater = Pin(13) print( 'Attaching SPI to SPI(0) : GP5=CSn, GP4=Miso, GP6=Sck, GP7=Mosi') cs = Pin(5, Pin.OUT, value=True ) # SPI CSn spi = SPI(0, baudrate=5000000, polarity=0, phase=0) else: raise Exception( 'Oups! plateform %s not supported' % uname().sysname ) # Setup pwm pwm = LowFreqPWM( pin=heater, period=1.5, ton_ms=9, toff_ms=10 ) # period=1.5s, needs 9ms to get activated, 10ms to get it off tmc = MAX31855( spi=spi, cs_pin= cs ) print( 'Ready!' ) print( '-----------------------------------' ) print( 'Start a temperature ramp test with:' ) print( ' test_ramp.start_ramp( 10 )' ) print( 'to test a ramp at 10% pwm.' ) print( 'The test ends at CUTOFF_TEMP = %s °C' % CUTOFF_TEMP ) print( 'Press CTRL-C or test_ramp.stop() to ' ) print( 'premature ends the test.' ) print( '-----------------------------------' ) def stop(): global pwm pwm.duty_ratio( 0 ) def start_ramp( ratio, cuttoff_temp=CUTOFF_TEMP ): # from 0 to 100% global pwm global tmc print( "elapsed (sec)", ",", "ratio (%%)", ",", "temp (°c)" ) start = time.time() pwm.duty_ratio( ratio ) try: while True: elapsed = time.time() - start # In seconds temp = tmc.temperature() print( elapsed, ",", ratio, ",", temp ) # CutOff temperature reached? if (temp!=None) and (temp >= cuttoff_temp): ratio = 0 pwm.duty_ratio( ratio ) time.sleep(1) except: print('Stopping...') stop() raise
Et voici comment utiliser le script dans une session REPL.
>>> import test_ramp as t >>> t.start_ramp( 20 ) # 20% duty cycle up to 150°C (default)
elapsed (sec) , ratio (%%) , temp (°c)
0 , 20 , 25.25
1 , 20 , 25.25
2 , 20 , 25.25
3 , 20 , 25.5
4 , 20 , 26.0
5 , 20 , 26.5
6 , 20 , 27.25
7 , 20 , 28.25
8 , 20 , 29.25
9 , 20 , 30.5
10 , 20 , 31.5
11 , 20 , 32.75
>>> t.start_ramp( 45, 250 ) # 45% duty cycle up to 250°C
L'information retournée "6 , 20 , 27.25" correspond à:
- 6: le temps écoulé depuis le lancement du script (en seconde)
- 20: le cycle utile actuellement appliqué (passe à 0) lorsque la T° est atteinte pour arrêter de chauffer.
- 27.25: la température relevée à l'aide du thermocouple
Une fois les données nécessaires collectées, le texte peut être copiés/collés directement dans une feuille de calcul pour le transformer en graphique.
Autres rampes à 150° à différents cycles utiles
Voici toute une série d'autres mesures jusqu'à 150°C à différents cycles utiles.
Pour tous les cycles utiles testés, la courbe de montée en température peut être réduite à une droite sans vraiment introduire de grosses erreurs.
Il est donc possible de déduire la rampe : coefficient de ces droites. Simple exercice de math ;-)
Cela représente le nombre de degrés d'augmentation à chaque seconde lorsque le cycle PWM donné est appliqué.
Notes:
- Cela ne vaut que pour les caractéristiques de ma plancha
- Cela concernen la gamme 0 à 150°C
Qu'apprenons nous?
Qu'a 75% de cycle utile, la plancha augmente de 4.14°C à chaque seconde.
Que plus le cycle utile est élevé et plus le dépasse au dessus de la température de consigne est important! (ex: 8.83% de dépasse à 50% de cycle utile).
En régulation de température, il faudra donc que la fréquence PWM diminue fortement lorsque l'on approche la température de consigne.
Une ligne apparaît en rouge: celle des 5% de cycle utile!
Voyez le point suivant pour comprendre pourquoi!
Attention au piège! Etude aux limites
Il ne faut jamais faire une généralité d'un (ou plusieurs) cas particulier.
En me demandant jusqu'où il était possible de descendre dans le cycle utile, l'étude du chauffage à 5% à réservé une petite surprise (repris en rouge dans le tableau ci-dessus)
Rampe jusqu'à 150°C, période PWM de 1.5sec, cycle utile de 5% |
En y regardant de plus prêt, on constate que pour 5% de cycle utile, nous sommes loin d'une droite!!!
C'est normal, à 5% de cycle utile, la plaque à l'opportunité de se refroidir par convection naturelle suffisamment rapidement. Ce phénomène de convection est suffisamment important pour compenser la chauffe à 5%.
Par ailleurs, la courbe laisse a penser qu'il sera difficile d'atteindre, voire dépasser, la température de 200°C.
Est-ce grave?
Je dirais NON et voici pourquoi:
En cours de chauffe, le circuit de régulation ne tentera pas de réaliser un cycle de chauffe complet à 5% (mais bien au dessus). Ce faible régime ne sera utilisé que lorsque la température approchera la température de consigne.
Un défaut de performance (ou de linéarité) aura moins d'impact dans cette phase de régulation puisque l'on approche déjà de la température finale.
Si l'écart se creuse avec la consigne (suite à la mauvaise régulation à 5%) alors le régulateur finira par ré-augmenter le cycle PWM pour compenser la perte et reviendra dans une zone de cycle utile "plus linéaire".
A 8% de cycle utile, la courbe revient déjà plus vers une droite (tendance plus "linéaire") comme le démontre la capture ci-dessous.
Rampe jusqu'à 150°C, période PWM de 1.5sec, cycle utile de 8% |
Remarque:
Mon petit doigt me dit qu'il faudra aussi vérifier le fonctionnement au dessus de 150°C
Relation entre cycle utile et °/Sec ???
En reprenant le tableau récapitulatif des rampes (voir ci-dessous), j'en viens à me demander s'il pourrait exister une relation mathématique entre le pourcentage de cycle utile et la ramp (en °/sec, prévision d'augmentation de température chaque seconde écoulée).
J'ai donc placé dans un graphique la correspondance entre la colonne "PWM ratio" et la colonne "Ramp"... en excluant la ligne à 5% (déjà démontré qu'elle n'aura pas beaucoup d'impact).
Relation Cycle-utile vs Rampe-de-T° |
Whoaw! Quelle surprise!
A l'exception du PWM à 20%, il y a une parfaite relation linéaire entre le cycle PWM et et la valeur de la Ramp.
Il est donc possible de déduire la valeur de la rampe correspondant au cycle PWM... mais aussi de déterminer le cycle PWM pouvant répondre à une augmentation de température souhaitée (en °/sec).
Cela peut s'avérer intéressant puisque qu'un cycle de reflow impose aussi des contraintes de chauffe (ex: la refusion ne peut pas dépasser 3°C/s max).
Grâce au graphique ci-dessus, nous savons qu'il faudra limiter le cycle utile à 55%.
Reste à élucider le point rouge... celui du 20%.
Le cas du 20%
Je triche un peu parce que je connais déjà la réponse :-)
Il se fait que ce point est issu de mon premier test haute température pour atteindre 250°C avec un cycle utile de 20%.
En examinant ce graphique, la réponse devient évidente car, encore une fois, nous n'avons pas une droite parfaite c'est un peu courbé!
Rampe jusqu'à 250°C, période PWM de 1.5sec, cycle utile de 20% |
Encore une fois, c'est un problème de convection. Nous sommes à un température élevée et a un cycle utile relativement faible (20%) en regard de l'énergie calorifique.
La température élevée entraîne une meilleure convection naturel (l'air est entraîné par la chaleur). Par conséquent, les 20% de cycle utile peine à contrebalancer cette convection.
Alors quoi !!!! On balance la relation cycle utile et °/Sec ???
Mon sentiment est que la convection naturelle devient plus performante à partir d'une certaine température (puisque la chaleur échauffe l'air qui est entraîné plus rapidement vers le haut).
Il serait possible de chercher à utiliser une fonction du second degré pour décrire les courbes de chauffe.... mais cela serait un peu fastidieux!
Pourquoi ne pas considérer une découpe en deux droites de régression:
- Une droite pour 0 à 150°C
- Une droite pour 150° à 250°C
Pour confirmer cela, il faudrait considérer la courbe à 20% entre 0 et 150°C pour voir si elle revient dans le rang... si le fameux point rouge revient sur la droite "cycle utile et °/Sec".
Relation Cycle-utile vs Rampe-de-T° entre 0 et 150°C |
Il faudra pousuivre l'investigation pour produire le même graphique pour une température entre 150°C et 250°C afin de voir si une relation linéaire convient.
La formule magique
Sur base du tableau récapitulatif de correspondance Cycle-utile vs Rampe-de-T°
Tableau corrigé pour T° entre 0°C et 150°C |
Entre 0 et 150°C, nous pouvons décrire la relation comme suit:
Ramp (°C/s) = ((5.625-0.266)/(100-8)) * (pwm-8) + 0.266
Ramp (°C/s) = 0.05825 * (PWM-8) + 0.266
Pour un signal PWM = 75% cela donne Ramp = 0.05825 * (75-8) + 0.266
Ce qui donne une Ramp = 4.168 °/sec (au lieu des 4.143 relevé... parfaitement acceptable)
Ne tombez pas dans un piège!
Si ce projet vous intéresse vous devez garder ceci à l'esprit
J'ai la chance incroyable d'avoir une relation de linéarité entre le cycle PWM et la rampe de température.
Ce ne sera peut être pas votre cas! Vous pourriez avoir une relation du second degré.
Cependant, je penses que les choix suivants y sont pour quelque-chose:
- J'ai opté pour un fer repasser de 1500W à 2000W.
Surpuissant par rapport au besoin et capable de contrebalancer une inertie thermique. - La semelle est réduite au stricte minimum nécessaire (moins de métal = moins d'intertie thermique).
- J'ai évité les pertes calorifique par contact avec les strucures environnantes (éviter les pertes dans les structures de support).
La relation linéaire sur laquelle je peux compter, n'existerait probablement pas pour une plaque chauffante de cuisinière.
Écrire un commentaire