Simulateur interactifDébutant

Simulateur de contrôleur PID pour la robotique

Réglez les gains proportionnel, intégral et dérivé en visualisant la réponse, l'erreur, la saturation et les perturbations dans un simulateur de contrôleur PID.

Catégorie
Systèmes de commande
Durée
60–120 min
Plateforme
Navigateur · Arduino
Schéma technique : Simulateur de contrôleur PID pour la robotiqueRESPONSETIMESETPOINT

01 / Commencez ici

Introduction

La commande PID est omniprésente en robotique : vitesse des roues, cap, position des articulations, température et systèmes d'équilibrage reposent tous sur la rétroaction. Ce projet transforme le contrôleur en expérience visible. Modifiez un gain, perturbez le système et reliez la courbe obtenue au code qui pourrait s'exécuter sur un Arduino ou un contrôleur embarqué.

Live lab / Deterministic sampled control loop

PID controller simulator

Drive a second-order plant toward a setpoint. Tune each gain, inject a load, and watch response, error, and control effort in real time.

Browser native
This simulator plots a PID controller's response, error, and control effort over time. Use the controls below to run it, or read the full theory and algorithm after this lab.

Three stacked plots share a scrolling time axis: measured output against the setpoint line, tracking error around zero, and control effort inside the shaded actuator-limit band.

Simulation

Paused. Press Start or Step to begin.

Setpoint & timing
PID gains
Disturbance
Setpoint
1.00
Measured
0.000
Error
1.000
Control
0.000
Overshoot
0%
Steady-state error
1.000

Keyboard: focus the plots, then use Space to run/pause, N to step, R to reset, G to toggle the load, and F for full screen.

Commandes

Le simulateur expose la consigne, les gains proportionnel, intégral et dérivé, l’intervalle d’échantillonnage, la limite de l’actionneur et l’amplitude des perturbations. Des tracés alignés montrent la consigne, la sortie mesurée, l’erreur et l’effort de commande. La réinitialisation efface la mémoire du contrôleur pour que les expériences restent comparables.

Théorie

Un contrôleur par rétroaction calcule l’erreur comme la consigne moins la mesure. L’action proportionnelle réagit immédiatement, l’action intégrale accumule l’erreur persistante et l’action dérivée répond à la vitesse de variation. Leur somme devient la commande de l’actionneur.

Les performances du contrôleur sont contraintes par le système. Échantillonner trop lentement masque le mouvement ; dépasser la limite de l’actionneur provoque une saturation ; des mesures bruitées rendent un terme dérivé non filtré instable. Le réglage est donc une expérience portant à la fois sur le contrôleur et sur le système.

Tracé de réponse indicielle comparant trois réglages d'un système du second ordre. Une courbe à gain élevé dépasse la consigne et oscille avant de se stabiliser. Une courbe bien réglée monte rapidement avec un léger dépassement et se stabilise vite. Une courbe à faible gain monte lentement et ne dépasse jamais.
L'amortissement façonne la réponse indicielle : trop de gain provoque dépassement et oscillations, pas assez rend la réponse lente, et un réglage équilibré se stabilise rapidement. Télécharger le SVG

Algorithme

  1. Lisez la mesure à intervalle fixe et calculez l’erreur.
  2. Accumulez une intégrale bornée en utilisant le pas de temps réel.
  3. Estimez la dérivée à partir de la mesure ou de l’erreur et appliquez le filtrage approprié.
  4. Sommez les trois termes pondérés et saturez dans la plage de l’actionneur.
  5. Appliquez la commande, mémorisez l’échantillon précédent et enregistrez les métriques.
  6. Réinitialisez l’intégrale et l’historique lorsque le mode de commande ou le système change sensiblement.

Code source

Cette implémentation comprend une condition simple anti-emballement :

float updatePid(float setpoint, float measured, float dt) {
  const float error = setpoint - measured;
  const float derivative = (error - previousError) / dt;
  const float candidateIntegral = integral + error * dt;
  const float raw = kp * error + ki * candidateIntegral + kd * derivative;

  const float output = constrain(raw, outputMin, outputMax);
  if (raw == output) integral = candidateIntegral;
  previousError = error;
  return output;
}

Les contrôleurs de production définissent aussi le comportement en cas de mesures invalides, de dépassements d’horloge, de transitions de mode et de défauts d’actionneur.

Hypothèses et différences avec le matériel

Le système est ici un modèle propre du second ordre avec masse, amortissement et retard connus que vous réglez avec les curseurs — pas un vrai moteur avec frottements, zone morte, couple qui s’affaiblit avec la vitesse et pont de puissance qui chauffe. L’échantillonnage est fixe par construction, si bien que le terme dérivé reste bien sage ; sur un Arduino, delay() ou d’autres tâches bloquantes font fluctuer l’intervalle et le terme D se comporte mal même lorsque les gains sont inchangés. La saturation de l’actionneur est modélisée comme une saturation dure avec anti-emballement fourni, mais un système physique présente aussi des limites de courant, des chutes d’alimentation et de la chaleur qui modifient la limite en cours de fonctionnement. Réglez l’allure ici, puis vérifiez sur le matériel où le système n’est connu qu’approximativement.

Schéma de câblage

Le capteur de rétroaction rend compte de la sortie réelle ; il ne remplace ni une limitation de courant ni un arrêt de sécurité matériel. Le contrôleur compare la consigne à la mesure conditionnée du capteur, puis pilote l’actionneur via un étage PWM calibré pour la charge.

Schéma fonctionnel d'une boucle fermée de commande PID. La consigne entre dans un sommateur, l'erreur résultante alimente le contrôleur PID, sa sortie pilote un actionneur et un étage PWM, qui pilote le système, et un capteur mesure la sortie du système et la renvoie au sommateur avec un signe négatif.
La boucle PID fermée : le capteur referme le chemin de la sortie du système vers le sommateur, où la rétroaction est soustraite de la consigne. Télécharger le SVG

Expériences guidées

Lire sur le dépassement n’est pas la même chose que le produire délibérément. Chaque expérience ci-dessous prend quelques minutes et isole exactement un effet.

1. Trouvez le gain ultime

Mettez Ki et Kd à zéro. Augmentez Kp jusqu’à ce que la sortie oscille à amplitude constante — ni croissante ni décroissante. Notez ce gain (Ku) et la période d’oscillation (Tu).

Ces deux nombres suffisent pour un premier réglage :

Contrôleur Kp Ki Kd
PID (classique) 0,6 Ku 1,2 Ku / Tu 0,075 Ku Tu
PID (sans dépassement) 0,2 Ku 0,4 Ku / Tu 0,066 Ku Tu

Saisissez-les et comparez. La ligne classique est agressive et dépasse de 20–40 % ; la seconde se pose sans dépassement et prend plus de temps. Aucune n’est « correcte » — ce sont des réponses différentes à des exigences différentes, et c’est bien le propos.

2. Observez l’emballement de l’intégrale

Réglez la limite de l’actionneur à un niveau bas — environ 20 % de sa plage — puis commandez un grand échelon de consigne. Observez le tracé d’effort de commande : il sature immédiatement et y reste, tandis que l’intégrale continue d’accumuler une erreur sur laquelle elle ne peut pas agir. Lorsque la sortie atteint enfin la consigne, toute cette action stockée se libère et le système dépasse largement.

Augmentez ensuite la limite de l’actionneur et répétez avec les mêmes gains. Le dépassement disparaît en grande partie. Rien n’a changé dans le contrôleur — c’est la leçon. L’emballement est une propriété de l’interaction entre le contrôleur et un actionneur saturé, pas des gains.

3. Prouvez que c’est le retard, pas le bruit, qui tue une boucle

Augmentez l’intervalle d’échantillonnage depuis sa valeur la plus basse par paliers, en gardant les gains fixes. La réponse se dégrade bien avant que le tracé ne paraisse bruité : le dépassement augmente, puis une oscillation apparaît, puis le système devient instable.

Intervalle d’échantillonnage Ce que vous observez avec un réglage par ailleurs correct
5 ms Propre, comme réglé
20 ms Légèrement plus de dépassement
50 ms Oscillations visibles
100 ms Oscillation entretenue
200 ms Instable

C’est pourquoi supprimer un delay() de la boucle d’un robot améliore souvent le suivi plus que n’importe quel réglage. Une information périmée ne se récupère par aucun gain.

4. Donnez du bruit à la dérivée

Augmentez l’amplitude des perturbations avec Kd à zéro, puis augmentez Kd. La trace d’effort de commande devient saccadée bien avant la sortie — vous observez la différentiation amplifier le contenu haute fréquence, exactement comme elle le doit.

C’est ce comportement qui fait conclure que D est inutile et le mettre à zéro. La vraie correction est en amont : filtrez la mesure, ou filtrez le terme dérivé lui-même.

Ce que vous devriez observer

Réglage Allure attendue Si vous observez autre chose
Kp seul, faible Monte lentement, se stabilise sous la consigne —
Kp seul, élevé Dépasse, oscille, s’amortit Une oscillation croissante signifie que vous avez dépassé Ku
Kp + Kd Montée rapide, peu de dépassement, petit écart résiduel Un effort saccadé signifie que D amplifie le bruit
Kp + Ki Atteint exactement la consigne, plus lentement Un grand dépassement signifie emballement ou trop de Ki
PID complet Rapide, dépassement minimal, aucun écart —

L’écart résiduel avec P et D mais sans I mérite d’être produit délibérément une fois. C’est la démonstration la plus claire du rôle réel du terme intégral : l’action proportionnelle a besoin d’une erreur non nulle pour produire une sortie, donc elle se stabilise nécessairement un peu en deçà.

Transposition au matériel

Les gains trouvés ici sont un point de départ, pas un transfert. Ce qui se transfère parfaitement, c’est la procédure ; ce qui ne se transfère pas, ce sont les nombres, car ils décrivent ce système.

Ce labo Un robot réel
L’intervalle d’échantillonnage est exact Fluctue sauf si vous mesurez dt et le transmettez
Le système est un modèle propre du second ordre Frottements, zone morte, couple qui s’affaiblit avec la vitesse
La limite de l’actionneur est une saturation dure Aussi limites de courant, chutes d’alimentation et chaleur
Pas de bruit de capteur sauf si vous en ajoutez Toujours du bruit, et rarement gaussien
Le système ne change jamais Tension de batterie, charge et température le modifient

La dernière ligne cause le plus de confusion en pratique. Un réglage parfait avec des piles neuves sera lent avec des piles faibles, car la même commande produit alors moins de couple. Ce n’est pas un échec de la méthode — les gains sont des propriétés du système, et le système a changé. Les réponses professionnelles sont une boucle de vitesse sous-jacente, ou une adaptation des gains. Suivez comment régler un contrôleur PID pour la procédure complète, puis apportez-la au labo suiveur de ligne où le système se défend.

Liste de vérification du matériel

Composants

  • Microcontrôleur avec une horloge stable
  • Système mesuré tel qu'un moteur à courant continu ou un servomoteur
  • Codeur, potentiomètre ou autre capteur de rétroaction
  • Étage de sortie calibré pour l'actionneur
  • Alimentation régulée et arrêt d'urgence

Explorer le graphe

Où ce simulateur est utilisé

Les projets, parcours d'apprentissage et tutoriels qui s'appuient sur ce labo.

Continuer la construction

Ressources à télécharger

Utilisez ces références sur la page pendant que vous avancez dans le projet. Les archives de projet téléchargeables ne seront ajoutées qu'une fois leur source et leur version publiées.

Questions courantes

Questions fréquentes

Par quoi dois-je commencer le réglage ?

Commencez avec les gains intégral et dérivé à zéro. Augmentez le gain proportionnel jusqu'à obtenir une réponse utile mais oscillante, puis ajoutez de l'amortissement dérivé. Ajoutez le gain intégral en dernier et uniquement s'il subsiste une erreur statique répétitive. Une règle empirique courante : P donne la rapidité, D réduit le dépassement et I supprime l'écart résiduel — ajoutez-les dans cet ordre, un par un.

Comment empêcher un contrôleur PID de dépasser la consigne ?

Le dépassement provient généralement d'une action proportionnelle ou intégrale excessive. Réduisez d'abord le gain proportionnel, puis augmentez le gain dérivé pour amortir l'approche. Si le dépassement n'apparaît qu'après que l'actionneur a atteint sa limite, la cause est l'emballement de l'intégrale plutôt que le gain, et vous devez saturer le terme intégral.

Pourquoi mon contrôleur PID oscille-t-il ?

Une oscillation entretenue signifie presque toujours que le gain proportionnel est trop élevé pour la boucle, ou que le terme dérivé est trop faible pour l'amortir. Réduisez le gain proportionnel de moitié environ, puis ajoutez du gain dérivé. L'oscillation peut aussi provenir d'une boucle de commande trop lente ou à intervalle irrégulier, ce qui rend le terme dérivé peu fiable.

Qu'est-ce que l'emballement de l'intégrale et comment l'éviter ?

L'emballement se produit lorsque l'actionneur sature — un moteur à pleine vitesse, une vanne grande ouverte — mais que l'erreur intégrale accumulée continue de croître, si bien que le contrôleur dépasse largement lorsque l'erreur finit par s'inverser. Prévenez-le par saturation (cesse d'alimenter l'intégrale pendant que la sortie est saturée) ou par recalcul (réduisez l'intégrale en utilisant l'écart entre la sortie demandée et la sortie fournie).

À quelle vitesse une boucle PID doit-elle fonctionner ?

La boucle doit échantillonner plusieurs fois plus vite que le système qu'elle commande, à intervalle régulier. Sur un microcontrôleur, évitez les longs délais bloquants : une boucle variable ou lente modifie les termes intégral et dérivé effectifs même lorsque les gains sont inchangés, ce qui est une cause cachée fréquente d'un mauvais réglage.

Puis-je utiliser un PID avec seulement les termes P et D ?

Oui. La commande PD (sans intégrale) est courante lorsqu'une petite erreur statique est acceptable et que vous voulez éviter l'emballement, et la commande PI (sans dérivée) convient aux signaux bruités où un terme dérivé amplifierait le bruit. N'utilisez que les termes dont le problème a besoin plutôt que de toujours utiliser le PID complet.

Quelle est la différence entre le réglage manuel et Ziegler–Nichols ?

Le réglage manuel ajuste un gain à la fois en observant la réponse, ce qui est intuitif et sûr pour apprendre. Ziegler–Nichols est une méthode par formules qui déduit les gains du point d'oscillation entretenue ; elle est plus rapide mais souvent agressive, donc son résultat est généralement un point de départ à affiner à la main.

Pour aller plus loin

Références

Des sources faisant autorité pour aller plus loin que le modèle pédagogique, borné, de ce simulateur.