Table des matières:

Contrôleur de température PID : 7 étapes
Contrôleur de température PID : 7 étapes

Vidéo: Contrôleur de température PID : 7 étapes

Vidéo: Contrôleur de température PID : 7 étapes
Vidéo: contrôleur de température PID DIY pour le cintrage des éclisses 2024, Novembre
Anonim
Contrôleur de température PID
Contrôleur de température PID

Mon ami construit une extrudeuse de plastique pour le recyclage du plastique (https://preciousplastic.com). Il doit contrôler la température d'extrusion. Pour cela, il utilise une bande chauffante de buse. Dans cette buse, il y a un thermocouple et un bloc chauffant qui nous permettent de mesurer la température et enfin d'atteindre la température souhaitée (faire une boucle de rétroaction).

Quand j'ai entendu qu'il avait besoin de plusieurs contrôleurs PID pour contrôler toutes ces bandes chauffantes de buse, cela m'a immédiatement donné l'envie d'essayer de fabriquer les nôtres.

Étape 1: Outils et matériel

Outils

  • fer à souder, fil à souder et flux
  • pince à épiler
  • fraiseuse (la gravure chimique est également possible pour le prototypage PCB) (vous pouvez également commander le PCB avec mon fichier eagle)
  • thermomètre (pour l'étalonnage)
  • arduino (tout type) ou un programmeur AVR
  • Câble USB série TTL-232 FTDI
  • découpeuse laser (facultatif)
  • multimètre (ohmmètre et voltmètre)

Matériel

  • Plaque de cuivre simple face en bakélite (60*35 mm minimum) (j'ai ruiné ma scie en achetant celle en fibre de verre donc attention: bakélite)
  • Microcontrôleur Attiny45
  • Régulateur de tension LM2940IMP-5
  • amplificateur opérationnel AD8605
  • Transistor NDS356AP
  • un tas de résistances et de condensateurs (j'ai le livre adafruit SMT 0603)
  • Transformateur 230V-9V AC-DC
  • 1N4004 diodes
  • relais statique
  • vernis à ongles (facultatif)

Étape 2: graver le PCB

Graver le PCB
Graver le PCB
Graver le PCB
Graver le PCB
Graver le PCB
Graver le PCB

J'ai utilisé ma CNC Proxxon MF70 transformée et un embout conique pour fraiser le PCB. Je pense que n'importe quel embout de gravure fonctionnerait. Le fichier Gcode a été généré directement par eagle et le plugin pcb-gcode. Seuls trois passages ont été effectués pour assurer une bonne séparation des routes mais sans passer des heures à fraiser tout le cuivre. Lorsque le PCB est sorti de la machine CNC, j'ai nettoyé les routes avec un cutter et les ai testées avec un multimètre.

Paramètres: avance 150 mm/min, profondeur 0,2 mm, vitesse de rotation 20'000 t/min

Étape 3: souder les composants

Souder les composants
Souder les composants

Avec la pince à épiler et le fer à souder, placez les composants aux bons endroits et soudez-le à l'aide de flux (ça aide) et en commençant par les plus petits composants. Encore une fois, vérifiez avec un multimètre que vous n'avez pas de courts-circuits ou d'éléments non connectés.

Vous pouvez choisir le gain de l'amplificateur en choisissant la résistance que vous voulez (gain=(R3+R4)/R4). J'ai pris 1M et 2,7k, donc dans mon cas, le gain est égal à environ 371. Je ne peux pas connaître la valeur exacte car j'utilise une résistance de tolérance de 5%.

Mon thermocouple est de type J. Cela signifie qu'il donne 0,05 mV pour chaque degré. Avec le gain de 371, j'obtiens 18,5mV par degré de la sortie de l'amplificateur (0,05*371). Je veux mesurer environ 200°C donc la sortie de l'amplificateur devrait être d'environ 3,7V (0,0185*200). Le résultat ne doit pas dépasser 5V car j'utilise la tension de référence 5V (externe).

L'image correspond à la première version (ne fonctionne pas) que j'ai faite mais le principe est le même. Dans cette première version, j'ai utilisé un relais et l'ai mis en plein milieu du tableau. Dès que je commutais en haute tension, j'avais des pics qui faisaient redémarrer le contrôleur.

Étape 4: programmer le microcontrôleur

Programmer le microcontrôleur
Programmer le microcontrôleur

En utilisant un arduino comme dans ces instructables: https://www.instructables.com/id/How-to-Program-a… vous pouvez charger le code.

J'ai utilisé un bibelot pro avec un câble FTDI-USB pour programmer l'Attiny 45 mais cette méthode est équivalente. J'ai ensuite branché les broches PB1 et GDN directement dans le RX et GND du câble FTDI-USB pour recevoir les données série et pouvoir déboguer.

Vous devez mettre tous les paramètres à zéro (P=0, I=0, D=0, K=0) dans le sketch arduino. Ils seront réglés lors de l'étape de réglage.

Si vous ne voyez pas de fumée ou d'odeur de brûlé, vous pouvez passer à l'étape suivante !

Étape 5: Assemblage et étalonnage

Assemblage et étalonnage
Assemblage et étalonnage
Assemblage et étalonnage
Assemblage et étalonnage

Attention: Ne branchez jamais l'alimentation et le 5V du programmateur en même temps ! Sinon, vous verrez la fumée dont je parlais à l'étape précédente. Si vous n'êtes pas sûr de pouvoir respecter cela, vous pouvez simplement retirer la broche 5v du programmateur. Je l'ai laissé car c'était plus pratique pour moi de programmer le contrôleur sans alimentation et de tester le contrôleur sans que le radiateur ne chauffe comme un fou devant mon visage.

Vous pouvez maintenant brancher le thermocouple sur l'amplificateur et voir si vous mesurez quelque chose (respectez la polarité). Si votre système de chauffage est à température ambiante, vous devez mesurer zéro. Le chauffer à la main devrait déjà conduire à quelques petites valeurs.

Comment lire ces valeurs ? Branchez simplement les broches PB1 et GDN directement dans les connecteurs RX et GND du câble FTDI-USB et ouvrez le moniteur série arduino.

Lorsque le contrôleur démarre, il envoie la valeur rouge par le thermomètre interne de la puce. C'est ainsi que je compense la température (sans utiliser de puce dédiée). Cela signifie que si la température change pendant l'opération, elle ne sera pas prise en compte. Cette valeur est très différente d'une puce à l'autre donc elle doit être saisie manuellement dans la définition REFTEMPERATURE au début du croquis.

Avant de connecter le relais statique, vérifiez que la tension de sortie est dans la plage prise en charge par votre relais (3V à 25V dans mon cas, le circuit génère environ 11V). (respecter la polarité)

Ces valeurs ne sont pas des températures en degrés ou en degrés Fahrenheit mais le résultat de la conversion analogique-numérique donc elles varient entre 0 et 1024. J'utilise la tension de référence 5V donc lorsque la sortie de l'amplificateur est proche de 5V, le résultat de la conversion est proche de 1024.

Étape 6: Réglage PID

Réglage PID
Réglage PID

Je dois mentionner que je ne suis pas un expert en contrôle, j'ai donc trouvé des paramètres qui fonctionnent pour moi mais je ne garantis pas que cela fonctionne pour tout le monde.

Tout d'abord, je dois expliquer ce que fait le programme. J'ai mis en place une sorte de logiciel PWM: un compteur est incrémenté à chaque itération jusqu'à atteindre 20'000 (auquel cas il est remis à 0). Un délai ralentit la boucle jusqu'à une milliseconde. Les plus exigeants d'entre nous remarqueront que la période de contrôle est d'environ 20 secondes. Chaque boucle commence par une comparaison entre le compteur et un seuil. Si le compteur est inférieur au seuil, je désactive le relais. S'il est plus gros, je l'allume. Je règle donc la puissance en réglant le seuil. Le calcul du seuil a lieu toutes les secondes.

Qu'est-ce qu'un contrôleur PID ?

Lorsque vous souhaitez contrôler un processus, vous disposez de la valeur que vous mesurez (analogData), de la valeur que vous souhaitez atteindre (tempCommand) et d'un moyen de modifier l'état de ce processus (seuil). Dans mon cas c'est fait avec le seuil ("seuil" en français mais beaucoup plus facile à écrire et à prononcer (prononcez "sey")) qui détermine combien de temps l'interrupteur sera allumé et éteint (le duty cycle) donc la quantité d'énergie mettre dans le système.

Tout le monde s'accorde à dire que si vous êtes loin du point que vous souhaitez atteindre, vous pouvez faire une grosse correction et si vous êtes proche, une petite correction s'impose. Cela signifie que la correction est fonction de l'erreur (error=analogData-tempComand). Oui mais combien ? Disons que nous multiplions l'erreur par un facteur (P). Il s'agit d'un contrôleur proportionnel. Mécaniquement, un ressort effectue une correction proportionnelle car la force du ressort est proportionnelle à la compression du ressort.

Vous savez probablement que les suspensions de votre voiture se composent d'un ressort et d'un amortisseur (amortisseur). Le rôle de cet amortisseur est d'éviter que votre voiture ne rebondisse comme un trampoline. C'est précisément ce que fait le terme dérivé. En tant qu'amortisseur, il génère une réaction proportionnelle à la variation de l'erreur. Si l'erreur évolue rapidement, la correction est réduite. Il réduit les oscillations et les dépassements.

Le terme intégrateur est ici pour éviter l'erreur permanente (il intègre l'erreur). Concrètement, c'est un compteur qui s'incrémente ou se décrémente si l'erreur est positive ou négative. Ensuite, la correction est augmentée ou diminuée en fonction de ce compteur. Il n'a pas d'équivalence mécanique (ou vous avez une idée ?). Peut-être y a-t-il un effet similaire lorsque vous amenez votre voiture au service et que le mécanicien constate que les amortisseurs sont systématiquement trop faibles et décide d'ajouter un peu plus de précharge.

Tout cela se résume dans la formule: correction=P*e(t)+I*(de(t)/dt)+D*intégrale(e(t)dt), P, I et D étant trois paramètres qui ont à régler.

Dans ma version, j'ai ajouté un quatrième terme qui est la commande "a priori" (feed forward) nécessaire pour maintenir une certaine température. J'ai choisi une commande proportionnelle à la température (c'est une bonne approximation des pertes thermiques. C'est vrai si l'on néglige les pertes radiatives (T^4)). Avec ce terme, l'intégrateur s'allège.

Comment trouver ces paramètres ?

J'ai essayé une méthode conventionnelle que vous pouvez trouver en cherchant sur Google "contrôleur de température de réglage pid", mais j'ai eu du mal à l'appliquer et j'ai fini avec ma propre méthode.

Ma méthode

Mettez d'abord P, I, D à zéro et mettez "K" et "tempCommand" à de petites valeurs (par exemple K=1 et tempCommand=100). Allumez le système et attendez, attendez, attendez… jusqu'à ce que la température se stabilise. A ce stade vous savez qu'avec un seuil de 1*100=100, la température tend vers X. Vous savez donc qu'avec une commande de 100/20000=5% vous pouvez atteindre X. Mais le but est d'atteindre 100 car il s'agit de "tempCommand". En utilisant une proportion, vous pouvez calculer K pour atteindre 100 (tempCommand). Par précaution j'ai utilisé une valeur plus petite que celle calculée. En effet, il est plus facile de chauffer que de refroidir. Alors finalement

Kfinal=K*tempCommand*0.9/X

Maintenant, lorsque vous démarrez le contrôleur, il devrait naturellement tendre vers la température souhaitée, mais c'est un processus vraiment lent car vous ne compensez que les pertes de chaleur. Si l'on veut passer d'une température à une autre, il faut ajouter une quantité d'énergie thermique dans le système. P détermine à quelle vitesse vous mettez l'énergie dans le système. Réglez P sur une petite valeur (par exemple P=10). Essayez un démarrage (presque) à froid. Si vous n'avez pas un gros dépassement, essayez avec le double (P=20) si maintenant vous en avez un, essayez quelque chose entre les deux. Si vous avez 5% de dépassement, c'est bien.

Augmentez maintenant D jusqu'à ce que vous n'ayez plus de dépassement. (toujours des essais, je sais que ce n'est pas de la science) (j'ai pris D=100)

Ajoutez ensuite I=P^2/(4*D) (Il est basé sur la méthode Ziegler-Nicholts, cela devrait garantir la stabilité) (pour moi I=1)

Pourquoi toutes ces épreuves, pourquoi pas la science ?

Je sais je sais! Il existe une théorie énorme et vous pouvez calculer la fonction de transfert et la transformée en Z et blablabla. Je voulais générer un saut unitaire puis enregistrer pendant 10 minutes la réaction et écrire la fonction de transfert et puis quoi ? Je ne veux pas faire de calcul avec 200 termes. Donc si quelqu'un a une idée, je serais heureux d'apprendre comment le faire correctement.

J'ai aussi pensé à mes meilleurs amis Ziegler et Nichols. Ils m'ont dit de trouver un P qui génère des oscillations et d'appliquer ensuite leur méthode. Je n'ai jamais trouvé ces oscillations. La seule chose que j'ai trouvée était un oooooooovershoot vers le ciel.

Et comment modéliser le fait que le chauffage n'est pas le même processus que le refroidissement ?

Je vais continuer mes recherches mais maintenant empaquetons votre contrôleur si vous êtes satisfait des performances que vous obtenez.

Étape 7: Emballez-le

Emballez-le
Emballez-le
Emballez-le
Emballez-le
Emballez-le
Emballez-le
Emballez-le
Emballez-le

J'ai eu accès au fablab de Moscou (fablab77.ru) et à leur découpeur laser et je leur en suis reconnaissant. Cette opportunité m'a permis de réaliser un joli package généré en un clic par un plugin qui fait des boites aux dimensions voulues (h=69 l=66 d=42 mm). Il y a deux trous (diam=5mm) sur le dessus pour la led et le switch et une fente sur le côté pour les pins de programmation. J'ai fixé le transformateur avec deux morceaux de bois et le PCB avec deux vis. J'ai soudé le bornier aux fils et au PCB, ajouté le commutateur entre le transformateur et l'entrée d'alimentation du PCB, connecté la led au PBO avec une résistance (300 Ohms) en série. J'ai aussi utilisé du vernis à ongles pour l'isolation électrique. Après le dernier test, j'ai recollé la boite. C'est ça.

Conseillé: