2012-11-24 17 views
11

Non capisco la parte integrale del controller PID. Supponiamo questo pseudocodice da Wikipedia:Non capisco Parte integrante del controller PID

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 

L'integrale è impostato su zero all'inizio. E poi nel ciclo sta integrando l'errore nel tempo. Quando eseguo un cambiamento (positivo) nel valore misurato o nel setpoint, l'errore diventa positivo e l'integrale "mangia" i valori nel tempo (dall'inizio). Ma quello 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 continuerà a contribuire al valore di uscita del controller, ma non dovrebbe.

Qualcuno può spiegarmi che per favore?

+0

per chiunque fosse interessato, ho implementato questo algoritmo esatto per controllare la velocità del loop. http://stackoverflow.com/questions/38377820/throttling-await-for-inbound-messages – Jim

risposta

1

Guardiamo in questo modo: non è sufficiente che l'errore si stabilizzi a zero. È necessario che l'integrale si azzeri, il che significa che la media del valore misurato nel tempo corrisponde al valore impostato.

Un cattivo esempio proverebbe a raggiungere il valore del 100% da zero con alcuni Ki, Kp, Kd.

x = 0,60,80,90,98,99,100,100,100.

Qual è il valore di x? Il valore medio è 80.777. Neanche vicino a 100.

+1

Ancora non capisco. Puoi spiegarlo di più per favore? – user561838

+0

Ma l'integrale andrà a zero solo se il valore misurato supererà il setpoint (perché abbiamo bisogno di un errore negativo).Nel tuo esempio, se (Ki è 1 e dt anche 1) quando il valore misurato sarà 100 (= setpoint), l'uscita del controller sarà ancora diversa da zero (penso che oscilli). Ma se il regolatore PI (D) è sintonizzato bene, non c'è overshoot. Non riesco ancora a capirlo :( – user561838

+2

Devo non essere d'accordo. Overshoot è la proprietà di I. P/D d'altra parte hanno la proprietà di non raggiungere la destinazione.Inoltre l'integrazione è generalmente indulgente: I (n + 1) = I (n) * alpha + (1-alpha) * errore dimentica lentamente errori precedenti dando più enfasi al momento presente. –

1

A seconda del sistema che si desidera controllare e della qualità del sensore, ci sarà sempre un qualche tipo di disturbo tra il controller e il sistema/impianto. La parte integrale del controller non andrà a zero quando c'è un tale disturbo, ma invece lo neutralizzerà! Ciò è causato dal fatto che l'integrale continuerà a cambiare finché l'uscita del sistema non sarà uguale al riferimento (cioè il valore integrale è opposto al disturbo).

V., per esempio this page descrivere le paramters controllo: un steady state error è possibile quando il sistema e l'ingresso hanno un certo carattere, un integrale cercherà di opporsi a questo che si traduce in un errore finale molto inferiore, ma in alcuni casi più sovraelongazione.

Inoltre, l'accuratezza/rumore del sensore può imporre un limite sulla precisione del valore per l'integrale, che potrebbe oscillare attorno allo zero.

1

Il termine I è necessario per l'errore di stato stazionario. Guarda il grafico di esempio su Wikipedia.

http://en.wikipedia.org/wiki/File:Change_with_Ki.png

È possibile vedere i cambiamenti nel grafico di cambiare i guadagni del termine mi. Ovviamente Ki = 2 è molto alto a causa dell'avvolgimento integrale, che è ciò che causa quel drastico overshoot. Ki = .5 sembra ok, ma se vuoi raggiungere un valore stabile il prima possibile, devi aumentare un po 'di Ki. Guarda Ki = 1, supera un po 'ma raggiunge comunque la stabilità più velocemente di Ki = .5. Quindi devi decidere se vale quel tipo di trade off.

9

Pensate all'uscita allo stato stazionario ... Volete che il valore_misura sia il setpoint, l'errore sia zero e l'uscita sia qualsiasi cosa per mantenere il processo costante al valore misurato. (Potrebbe essere zero in alcuni casi, ma l'uscita potrebbe non sempre essere zero - ad esempio: è necessario un riscaldatore impostato per marcare 6.5 per mantenere una stanza a 72F.)

Se l'errore è zero, allora il il termine errore proporzionale non contribuisce in alcun modo all'output.

Se il processo è allo stato stazionario, allora error-previous_error è zero e il termine derivativo non contribuisce a nulla.

Se l'uscita è l'impostazione appropriata che mantiene il processo allo stato stazionario, il termine integrale deve essere l'unico termine che fornisce il valore di uscita. Ha accumulato la memoria corretta degli errori, misurata in unità di misura volte i tempi di osservazione, che può essere convertita in unità di output dal termine Ki, che è in unità di outputUnits/(error * measurementTime).

Come esempio di termostato, se l'uscita è nelle unità 0-11 sulla manopola di un riscaldatore elettrico in una stanza e si misurano i gradi F nella stanza rispetto a un setpoint di 72F ogni 1 minuto, quindi l'integrale riassume il gradiFtooCold * minuto che hai registrato, e il termine Ki convertirà la somma degli errori osservati nelle unità sul quadrante.

È perfettamente soddisfacente e prevede che l'integrale sia diverso da zero allo stato stazionario.

1

Penso che parte della spiegazione qui sia che quando la parte integrale viene superata, la parte proporzionale inizierà ad opporvisi. Il secondo overshoot sarà quindi più piccolo, il terzo ancora più piccolo e così via. Ma come accennato in precedenza, ci sarà normalmente un rumore di processo che fa sì che l'errore sia diverso da zero e il controller probabilmente non raggiungerà mai un output costante, ma le variazioni dell'output dovrebbero essere molto piccole.

0

Con tutto il dovuto rispetto, hai una ragione per mettere in discussione la definizione PID, perché perpetua un errore nel controllo PID, rispetto al termine Intergral. L'errore può essere illustrato come segue: 1) Anche se c'è zero errori, il termine Intergral causerà un'azione di uscita. 2) L'Intergral si basa su errori precedenti che non sono più rilevanti. Il controllo proporzionale può produrre 0 errore se il controllore sta confrontando l'ingresso con l'uscita e attraverso il feedback negativo e portando l'errore a zero.

Il termine PID corretto: D termine: aggiungere le modifiche (differenziazione) all'INPUT in regime costante da combinare nella giunzione sommatoria.

I termine: aggiungere le modifiche (differenziazione) al negativo (feedback negativo) dell'uscita OUTPUT stazionaria da combinare nella giunzione sommatoria.

integrazione è differenziazione quando combinato di tutti (circa) risposte negative

L'uscita è collegata alla giunzione di somma con un gioco molto elevata e la polarità negativa (invertente).

Termine P: è l'uscita desiderata divisa per l'INPUT desiderato o il rapporto del segnale alimentato dalla giunzione sommatoria dall'uscita OUTPUT diviso per il segnale alimentato dalla giunzione sommatoria dall'INPUT.

D termine, differenziazione accelera la risposta di uscita in ingresso in modo che l'uscita si avvicini al valore corretto prima.

L'integrazione rallenta la risposta di uscita quando si avvicina al valore corretto/desiderato.