Notions de base sur le contrôleur PID & tutoriel : implémentation PID dans Arduino
Pour ceux qui travaillent dans les contrôles industriels, la théorie proportionnelle, intégrale, dérivée (PID) est probablement un concept familier. Pour la plupart des gens, le terme est complètement étranger, mais vous pourriez être plus familier avec lui que vous ne le pensez. Lorsque vous appuyez sur la pédale d'accélérateur d'une voiture, vous considérez non seulement à quelle distance vous êtes de votre vitesse idéale—la partie proportionnelle du PID—vous prenez également en compte comment votre véhicule particulier accélère ainsi que les conditions comme les côtes.
Pour ceux qui travaillent dans les contrôles industriels, la théorie proportionnelle, intégrale, dérivée (PID) est probablement un concept familier. Pour la plupart des gens, le terme est complètement étranger, mais vous pourriez être plus familier avec lui que vous ne le pensez. Lorsque vous appuyez sur la pédale d'accélérateur d'une voiture, vous considérez non seulement à quelle distance vous êtes de votre vitesse idéale—la partie proportionnelle du PID—vous prenez également en compte comment votre véhicule particulier accélère ainsi que les conditions comme les côtes.
Ces effets plus subtils sont ce que les termes I et D considèrent mathématiquement. Dans cet exemple, ils empêcheraient la vitesse d'une voiture de passer d'une limite supérieure à une limite inférieure, et nous pouvons appliquer le même concept à une variété de situations de contrôle. Alors que le contrôle basé sur les limites peut vous donner une idée générale, votre système aura tendance à agir de manière quelque peu erratique.
Équation PID
Nous pouvons exprimer le contrôle PID mathématiquement avec l'équation suivante. P, I et D sont représentés par les trois termes qui s'additionnent ici. Kp, Ki et Kd sont des constantes qui ajustent la façon dont le système réagit à chaque facteur :
Nous pouvons également remplacer Ki et Kd par 1/Ti et Td, respectivement. Ce changement donne à l'équation une meilleure relation avec sa signification physique et permet aux unités de bien fonctionner pour obtenir un nombre sans unité :
Nous pouvons également transposer l'équation pour extraire la valeur de Kp et l'appliquer à l'ensemble de l'équation, dans ce qu'on appelle la forme standard. Un avantage de cette forme est que nous pouvons ajuster la constante Kp globale pour l'ensemble de l'équation en une seule fois :
Tout cela peut sembler un peu intimidant, peut-être même pour quelqu'un qui a obtenu un diplôme en ingénierie. La bonne nouvelle est que vous n'avez pas besoin de ressortir votre manuel Modeling and Analysis of Dynamic Systems pour comprendre ce qui se passe ici. Et bien qu'il ne soit jamais inutile, vous n'avez même pas besoin de savoir faire du calcul.
En décomposant la première équation, nous produisons u(t) — la sortie du contrôleur sans unité sur le côté gauche de l'équation — en ajoutant trois éléments mathématiques sur le côté droit du signe égal : P, I, et D. Chaque élément a une valeur constante K devant (Kp, Ki, et Kd), qui indique le poids de chaque élément lorsqu'ils forment u(t), ou la sortie de contrôle à un moment précis. Nous pouvons ajuster individuellement chaque valeur K pour améliorer la performance du système, ce que nous expliquerons plus en détail ci-dessous :
Proportionnel (P—Kp)
Le premier et le plus crucial terme dans cette équation est e(t). En tant que tel, la valeur Kp qui le précède est généralement plus grande que les autres valeurs K de l'équation. Ici, e(t) est simplement l'erreur instantanée à un moment donné — la valeur réelle d'un dispositif contrôlé moins la valeur souhaitée. Multipliez cela par Kp et vous obtenez sa contribution à la sortie globale du contrôleur.
Intégral (I—KI)
Le second terme de cette équation concerne l'erreur cumulée dans le temps. C'est la somme de toutes les erreurs rencontrées sur le dispositif :
Chaque fois qu'un contrôleur calcule u(t), il ajoute l'erreur instantanée à un total cumulé.
Ce chiffre est ensuite multiplié par Ki et ajouté à u(t).
Considérez une situation où une force maintient un moteur en place et ne lui permet pas de revenir au point de consigne dans des conditions normales. Comme il est hors spécification de plus en plus longtemps, le terme I continuera à augmenter, finissant par surmonter cette force ou atteignant les limites de la capacité du moteur.
Dérivé (D—Kd)
Le troisième terme de cette équation concerne la vitesse à laquelle l'erreur change :
Théoriquement, si vous n'aviez qu'un terme D dans cette équation et que votre processus maintenait constamment la mauvaise valeur, ce terme resterait nul et ne contribuerait pas à la sortie appropriée. D'un autre côté, si l'un des deux autres termes essaie de ramener la sortie du dispositif à sa place trop rapidement, le dérivé peut aider à atténuer cet effet.
Bien que l'expression basée sur le calcul de ce concept puisse être utile, la réalité du contrôle PID est beaucoup moins magique qu'il n'y paraît au premier abord. Pratiquement parlant, nous calculons la sortie en utilisant uniquement l'addition, la soustraction, et la multiplication, en tenant compte de l'erreur et du temps entre les lectures. En fait, nous avons utilisé des systèmes pneumatiques pour mettre en œuvre les premières formes de contrôle PID, utilisant des moyens mécaniques pour entrer chaque "terme".
- Les contrôleurs prennent une lecture d'erreur instantanée.
- Soustrayez la lecture instantanée précédente de celle-ci.
- Multipliez cette valeur résultante par Kd pour calculer sa contribution à u(t).
Tutoriel sur le contrôleur PID Arduino
Dans de nombreuses situations, il est avantageux de brancher un contrôleur PID dédié à votre processus, mais vous pouvez créer le vôtre avec un Arduino ou une autre carte de développement similaire. Vous pouvez même écrire votre propre routine PID. Exprimez chaque terme dans votre code d'une manière similaire à :
- P:erreurInstantanée = consigne – entrée;
- I:erreurCumulative = += erreur * tempsÉcoulé;
- D:tauxDErreur = (erreur – erreurDernierCalcul)/tempsÉcoulé
Pour obtenir la sortie nécessaire, multipliez chacun de ces termes par sa valeur K respective et ajoutez-les ensemble. D'autre part, si vous souhaitez éviter de réinventer la roue, vous pouvez utiliser la bibliothèque PID de Brett Beuregard. Cette bibliothèque prend en charge les détails pour vous et vous permet de vous concentrer sur le réglage des valeurs constantes P, I et D selon les besoins.
Pour démontrer la théorie PID en action, j'ai sorti un Arduino Nano Every de ma boîte à outils, ainsi que :
- Carte de commande de moteur
- Capteur infrarouge
- Moteur récupéré d'un drone Hubsan H107C
J'ai imprimé un support pour plaque d'essai pour le moteur avec une « hélice » qui bloque la lumière 50 % du temps pour éviter de manquer des impulsions lorsqu'il tourne. Le driver de moteur est l'entrée du moteur (sinon non contrôlé), et le retour d'information est basé sur le temps entre les impulsions.
Quand j'ai finalement élaboré le code et obtenu les pièces imprimées en 3D, j'ai pu contrôler le moteur d'une manière plus sophistiquée qu'en actionnant le bouton d'alimentation avec une sortie PWM (modulation de largeur d'impulsion) constante.
Des éléments de code notables incluent l'utilisation d'une routine d'interruption pour enregistrer chaque impulsion lorsque le dispositif de blocage tourne et calculer le temps entre les impulsions en utilisant millis(). J'ai configuré le PID dans la première partie du code en dehors des fonctions avec :
PID myPID (&difference, &driverOut, &setPoint,Kp,Ki,Kd, DIRECT)
Kp, Ki, et Kd sont définis avant cette ligne dans le code, et &difference contrôle &driverOut, avec &setPoint modifié par le moniteur série. Nous pouvons manipuler ces calculs pour transformer cette différence de temps en RPM, mais les réglages du PID fonctionnent comme des sorties DIRECT parce que ce pilote particulier s'allume lorsque l'entrée est mise à la terre. Lorsque la sortie analogique augmente (moteurs éteints), le délai entre les impulsions augmente également.
Une version antérieure de la routine PID. Notez que CH1 lit les impulsions d'entrée, tandis que CH2 est la sortie calculée en utilisant la routine PID - les impulsions basses sont des entrées pour le moteur.
Cet exemple simple de contrôleur PID a été réalisé avec des pièces disponibles (y compris le nouvel Arduino Nano Every) et un moteur avec lequel j'étais vaguement familier. Mais j'ai pu démontrer comment appliquer le contrôle PID dans une grande variété de situations, même sans avoir tous les éléments. Que ce soit pour le contrôle d'un moteur, le contrôle de la température d'un four ou l'équilibrage d'un robot, une petite configuration et un réglage PID vous offrent des options d'expérimentation infinies.
Étiquettes d'article