Principes de base du contrôleur PID et tutoriel : Implémentation PID dans Arduino
Pour ceux qui travaillent dans le contrôle industriel, la théorie des régulateurs proportionnels, intégrateurs, dérivateurs (PID) est probablement un concept familier. Pour la plupart des gens, le terme est entièrement étranger, mais vous pourriez en être plus familier que vous ne le pensez. Lorsque vous appuyez sur la pédale d'accélérateur d'une voiture, vous ne considérez pas seulement la distance par rapport à 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 telles que les côtes. Pour ceux qui travaillent dans le contrôle industriel, la théorie des régulateurs proportionnels, intégrateurs, dérivateurs (PID) est probablement un concept familier. Pour la plupart des gens, le terme est entièrement étranger, mais vous pourriez en être plus familier que vous ne le pensez. Lorsque vous appuyez sur la pédale d'accélérateur d'une voiture, vous ne considérez pas seulement la distance par rapport à 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 telles que 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 varier entre une limite supérieure et 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 amener dans la bonne direction, 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'ajoutent ici. Kp, Ki et Kd sont des constantes qui ajustent la réaction du système à 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 s'aligner correctement 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, ce qui est connu sous le nom de 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 est diplômé en ingénierie. La bonne nouvelle, c'est que vous n'avez pas besoin de sortir votre manuel Modeling and Analysis of Dynamic Systems pour comprendre ce qui se passe ici. Et bien que cela ne fasse jamais de mal, vous n'avez même pas besoin de savoir faire du calcul différentiel. 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 donné. Nous pouvons ajuster individuellement chaque valeur K pour une meilleure 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 le 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 dans l'équation. Ici, e(t) est simplement l'erreur instantanée à un moment donné—la valeur réelle d'un appareil 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 deuxième terme dans cette équation concerne l'erreur combinée dans le temps. C'est la somme de toutes les erreurs rencontrées sur l'appareil : Chaque fois qu'un contrôleur calcule u(t), il ajoute l'erreur instantanée à un total en cours. Cette valeur est ensuite multipliée par Ki et ajoutée à 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 d'augmenter, surmontant éventuellement cette force ou atteignant les limites de la capacité du moteur. Dérivé (D—Kd) Le troisième terme dans cette équation concerne la rapidité du changement de l'erreur : Théoriquement, si vous n'aviez qu'un terme D dans cette équation et que votre processus maintenait constamment la valeur erronée, ce terme resterait nul et ne contribuerait pas à la sortie appropriée. D'un autre côté, si l'un des deux autres termes tente de faire revenir la sortie de l'appareil en place trop rapidement, le dérivé peut aider à atténuer l'effet. Bien que l'expression basée sur le calcul différentiel 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. En pratique, 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 utilisions des systèmes pneumatiques pour mettre en œuvre les premières formes de contrôle PID, en utilisant des moyens mécaniques pour introduire 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
In many situations, it's expedient to plug in a dedicated PID controller to your process, but you can make your own with an Arduino or other similar dev board. You can even write your own PID routine. Express each term in your code in a manner similar to:
- P:instanteneousError = setpoint – input;
- I:cumulativeError = += error * elapsedTime;
- D:rateOfError = (error – errorLastCalculation)/elapsedTime
To get the necessary output, multiply each of these terms by its respective K value and add them together. On the other hand, if you'd like to avoid reinventing the wheel, you can jump in with Brett Beuregard's PID library. This library takes care of the details for you and lets you focus on tuning P, I, and D constant values as needed.
Pour démontrer la théorie du PID en action, j'ai sorti un Arduino Nano Every de ma boîte à outils, ainsi que :
- Carte de pilote de moteur
- Capteur infrarouge
- Moteur récupéré d'un drone Hubsan H107C
Les éléments de code notables incluent l'utilisation d'une routine d'interruption pour enregistrer chaque impulsion lorsque le dispositif de blocage tourne et le calcul du temps entre les impulsions à l'aide de 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 cette mathématique pour transformer cette différence de temps en RPM, mais les réglages du PID se traduisent par des sorties DIRECT parce que ce pilote particulier s'allume lorsque l'entrée est tirée vers le bas. 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 vers 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 tous les faits. Que ce soit pour le contrôle de moteur, le contrôle de la température d'un four, ou l'équilibrage d'un robot, un petit réglage et ajustement PID vous offre des options d'expérimentation infinies.
Étiquettes d'article