Non capisco la parte integrale del controller PID


12

Non capisco la parte integrale del controller PID. Supponiamo che questo pseudocodice da 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

Integrale è impostato su zero all'inizio. E poi nel ciclo sta integrando l'errore nel tempo. Quando apporto una modifica (positiva) al setpoint, l'errore diventerà positivo e integralmente "mangeranno" i valori nel tempo (dall'inizio). Ma ciò che non capisco è che quando l'errore si stabilizza nuovamente a zero, la parte integrale avrà ancora un certo valore (errori integrati nel tempo) e contribuirà comunque al valore di uscita del controller, ma non dovrebbe, perché se l'errore è zero, anche l'output del PID dovrebbe essere zero, giusto?

Qualcuno può spiegarmi che per favore?

Risposte:


16

Lo scopo principale del termine integrale è eliminare l'errore di stato stazionario. Nel caso normale si verificherà un piccolo errore di stato stazionario e l'integrale viene utilizzato principalmente per eliminare questo errore. È comunque vero che quando l'errore arriva a 0 l'integrale sarà comunque positivo e ti farà superare. Quindi, dopo il superamento, l'integrale inizierà di nuovo a scendere. Questo è l'effetto negativo del termine integrale. Quindi c'è sempre il compromesso e devi regolare il controller PID per assicurarti che il superamento sia il più piccolo possibile e che l'errore di stato stazionario sia ridotto al minimo. Qui è dove entra in gioco il termine derivativo. Il termine derivato aiuta a ridurre al minimo il superamento del sistema.


8
E un buon esempio di errore allo stato stazionario è l'attrito in un giunto. Supponiamo che il tuo controller PD si assesti vicino all'angolo del giunto target, ma non riesca ad arrivarci a causa dell'attrito. Il termine "io" si accumulerà lentamente e alla fine genererà un input abbastanza ampio da superare l'attrito.
Ben

2
Un altro esempio è la propensione allo sterzo. Se si scopre che c'è un leggero bias nel controllo dello sterzo o, per i robot in stile battistrada, un battistrada diventa leggermente più lento dell'altro nonostante il controller li imposti sullo stesso valore, ci sarà un bias. Il termine integrale, impostato correttamente, lo corregge.
ViennaMike

8

Immagina di aver installato un controller PID sul tuo braccio, in modo da poter tenere una tazza di caffè davanti a te.

  • L'elemento proporzionale controllerebbe la forza del braccio relativamente alla posizione della mano troppo alta o troppo bassa.
  • L'elemento derivato regolerebbe quella forza in base alla velocità con cui ti stavi già muovendo, in modo da non superare il bersaglio.
  • L'elemento integrale compenserebbe gli effetti della gravità; senza di essa, la coppa si fermerebbe dove la forza proporzionale eguagliava la forza di gravità.

Sembra che la parte del codice su cui sei bloccato sia che il sistema deve in qualche modo misurare il peso del caffè e un modo per farlo è accumulare l'errore di posizione nel tempo. La maggior parte dei controller PID ha un termine aggiuntivo per specificare un limite ragionevole alla dimensione che può essere l'elemento integrale.


2
+1. "se l'errore è zero, anche l'output del PID dovrebbe essere zero, giusto?" Come spiega Ian, anche quando la tazza di caffè è nella posizione perfetta e l'errore è zero, l'uscita del PID deve avere una forza verso l'alto per mantenere quella tazza in posizione.
David Cary,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.