Je ne comprends pas la partie intégrale du contrôleur PID

12

Je ne comprends pas la partie intégrante du contrôleur PID. Supposons ce pseudocode de Wikipedia:

previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start

Integral est mis à zéro au début. Et puis dans la boucle, il intègre l'erreur au fil du temps. Lorsque je modifie (positivement) le point de consigne, l'erreur deviendra positive et l'intégrale "mangera" les valeurs au fil du temps (depuis le début). Mais ce que je ne comprends pas, c'est que lorsque l'erreur se stabilise à zéro, la partie intégrale aura toujours une certaine valeur (erreurs intégrées dans le temps) et contribuera toujours à la valeur de sortie du contrôleur, mais cela ne devrait pas, car si l'erreur est nulle, la sortie du PID devrait également être nulle, non?

Quelqu'un peut-il m'expliquer cela s'il vous plaît?

user561838
la source

Réponses:

16

L'objectif principal du terme intégral est d'éliminer l'erreur d'état stationnaire. Dans le cas normal, il va y avoir une petite erreur d'état stationnaire et l'intégrale est principalement utilisée pour éliminer cette erreur. Il est cependant vrai que lorsque l'erreur arrive à 0, l'intégrale sera toujours positive et vous fera dépasser. Ensuite, après le dépassement, l'intégrale recommencera à baisser. C'est l'effet négatif du terme intégral. Il y a donc toujours un compromis et vous devez régler le contrôleur PID pour vous assurer que le dépassement est aussi petit que possible et que l'erreur d'état stable est minimisée. C'est là que le terme dérivé entre en jeu. Le terme dérivé aide à minimiser le dépassement dans le système.

JuliusG
la source
8
Et un bon exemple d'erreur d'état stationnaire est le frottement dans un joint. Disons que votre contrôleur PD s'installe près de l'angle de votre articulation cible, mais ne peut pas y arriver en raison de la friction. Le terme "I" s'accumulera lentement et finira par générer une entrée suffisamment importante pour surmonter la friction.
Ben
2
Un autre exemple est le biais dans la direction. S'il s'avère qu'il y a un léger biais dans la commande de direction, ou, pour les robots de type bande de roulement, une bande de roulement tourne légèrement plus lentement que l'autre malgré le fait que le contrôleur les ait réglés à la même valeur, il y aura un biais. Le terme intégral, correctement défini, corrige cela.
ViennaMike
8

Imaginez que vous installiez un contrôleur PID sur votre propre bras, afin de pouvoir tenir une tasse de café directement devant vous.

  • L'élément proportionnel contrôlerait la force de votre bras par rapport à la position de votre main trop haute ou trop basse.
  • L'élément dérivé ajusterait cette force en fonction de la vitesse à laquelle vous vous déplaciez déjà, de sorte que vous ne dépassiez pas votre cible.
  • L'élément intégral compenserait les effets de la gravité; sans elle, la coupe s'arrêterait là où la force proportionnelle égalait la force de gravité.

On dirait que la partie du code sur laquelle vous êtes coincé est que le système doit en quelque sorte mesurer le poids du café, et une façon de le faire est d'accumuler l'erreur de position au fil du temps. La plupart des contrôleurs PID ont un terme supplémentaire pour spécifier une limite raisonnable sur la taille de l'élément intégral.

Ian
la source
2
+1. "si l'erreur est nulle, la sortie du PID devrait également être nulle, non?" Comme l'explique Ian, même lorsque la tasse de café est dans la position parfaite et que l'erreur est nulle, la sortie du PID doit avoir une force ascendante pour maintenir cette tasse en position.
David Cary