August 12, 2013

PID control

UPDATE IN ENG – COMING SOON

Com’è noto un regolatore proporzionale, integrale e derivativo PID esercita tre azioni di controllo [1 – Pratical PID Control]:

  • Proporzionale all’errore tra il segnale di riferimento e la variabile misurata in uscita dal sistema di controllo;
  • Proporzionale all’integrale dell’errore (cioè di fatto al suo valor medio), richiesto per imporre che l’errore si annulli asintoticamente a fronte di segnali di riferimento o disturbi additivi costanti;
  • Proporzionale alla derivata dell’errore con lo scopo di “anticipare” l’andamento dell’errore negli istanti futuri.

La legge di controllo, cioè il legame errore-uscita è:

C(t) = K_P \cdot e(t) + K_D \frac{de(t)}{dt} + K_I \int_0^t e(\tau) d\tau

dove e(t) = u(t) - y(t) funzione d’errore del segnale in ingresso, data dall’uscita del segnale u(t) ed il riferimento y(t).

K_P, K_I, K_D sono le costanti positive o nulle.

Applicando la trasformata di Laplace alla legge di controllo per t_0 = 0, si ottiene la funzione di trasferimento:

C(s) = \left(K_P + K_D \cdot s + K_I \cdot \frac{1}{s} \right)E(s)
Controllo pid

Schema a blocchi del controllo PID

La presenza dell’azione integrale assicura che l’errore sia nullo a regime permanente a fronte di segnali di riferimento additivi costanti, mentre l’azione derivativa introduce uno zero, che a sua volta genera un anticipo di fase e quindi una maggiore prontezza del sistema di controllo [2 – Regolazione PID] [3 – Isidori Sistemi di controllo].

Poiché l’azione derivativa non è fisicamente realizzabile, essendo costituita da due zeri ed un polo nell’origine, essa è ottenuta per mezzo della rete anticipatrice:

R_a(s) = \frac{1+\tau_a s}{1 + \frac{\tau_a}{m_a}s}

Si può quindi riscrivere il controllo PID nella forma:

G(s) = \frac{C(s)}{E(s)} = \left(K_P + K_I \cdot \frac{1}{s} \right)\frac{1+\tau_a s}{1 + \frac{\tau_a}{m_a}s}

Se m_a >> 1 la funzione può essere approssimata in:

G(s) = \left(K_P + K_I \cdot \frac{1}{s} \right)\left(1+\tau_a s \right)

infine

G(s) = \hat{K_P} +\hat{K_D} \cdot s + K_I \cdot \frac{1}{s}

Con

\hat{K_P} = K_P + K_I \cdot \tau  e K_D = K_P \cdot \tau

Realizzazione del regolatore PID

La realizzazione di un regolatore PID con dispositivi digitali, pone numerosi problemi. E’ necessario quindi adottare vari accorgimenti per migliorare le prestazioni del sistema di controllo.

Innanzitutto occorre scegliere un opportuno tempo di campionamento, dipendente dalle caratteristiche del dispositivo digitale impiegato, e la lunghezza del passo di quantizzazione.

La realizzazione di un controllore continuo richiede, nel controllo a tempo discreto, la trasformazione della variabile continua in una a tempo discreto.

A questo proposito viene qui impiegata la trasformata bilineare [4 – Fondamenti Controlli] chiamata in questo modo per la struttura della trasformazione, che consiste nel trasformare la variabile complessa s nella seguente espressione:

s = \frac{1}{T}\frac{z-1}{\alpha \cdot z + 1 - \alpha}

Dove \alpha è un arbitrario valore compreso tra 0 ed 1, T è il tempo di campionamento.

Questa trasformata si specializza nei metodi di Eulero in avanti e all’indietro e nel metodo di Tustin a seconda del valore dato ad \alpha

  • Metodo di Eulero in avanti: s = \frac{z-1}{T} per \alpha = 0;
  • Metodo di Eulero all’indietro: s = \frac{z-1}{T \cdot z} per \alpha = 1;
  • Metodo di Tustin: s = \frac{2}{T}\frac{z-1}{z+1} per \alpha = 0.5.

E’ interessante notare come i poli vengano “rimappati” nel piano \mathbb{C} e come poli stabili nel piano \mathbb{Z} possono diventare instabili una volta trasformati. Come si può vedere nella figura seguente, il metodo di Tustin da la migliore approssimazione digitale del regolatore, specialmente se non si hanno conoscenze specifiche della struttura dei segnali di ingresso, in quanto i poli stabili nel piano complesso rimangono tali anche nel discreto.

02-metodidiapprossimazione-jpg

E. in avanti, E. all’indietro e Tustin (dall’alto verso il basso)

Applicando la trasformata al regolatore PID si ottiene quindi per i tre casi:

  • Eulero in avanti G\left( \frac{z-1}{T}\right) = \left(K_P + K_D \cdot \frac{z-1}{T} + K_I \cdot \frac{T}{z-1} \right);
  • Eulero all’indietro G\left( \frac{z-1}{T \cdot z} \right) = \left(K_P + K_D \cdot \frac{z-1}{T \cdot z} + K_I \cdot \frac{z \cdot T}{z-1} \right);
  • Tustin G\left( \frac{2}{T}\frac{z-1}{z+1} \right) = \left(K_P + K_D \cdot \frac{2}{T}\frac{z-1}{z+1} + K_I \cdot \frac{T}{2} \frac{z+1}{z-1} \right).

Nel dominio del tempo, il controllore approssimato con il metodo di Tustin viene quindi discretizzato:

C(k) = K_P\cdot e(k) + \frac{K_D}{T_c}\left( e(k) - e(k-1) \right) + K_I\cdot T_c \sum_{i=0}^k \frac{e(i)+e(i-1)}{2}

Da quest’ultima l’espressione ricorsiva della legge di controllo diventa:

C_k = C_{k-1} + K_P\cdot \left( e_{k} - e_{k-1} \right) + \frac{K_D}{T_c}\left( e_{k} - 2 \cdot e_{k-1} + e_{k-2} \right) + \frac{K_I\cdot T_c}{2}\left( e_{k}+e_{k-1}\right) C_{k} = C_{k-1} + \left( K_p + \frac{K_d}{T_c} + \frac{K_i \cdot T_c}{2} \right) \cdot e_{k} +{} \ - \left( K_p + \frac{2 \cdot K_d}{T_c} - \frac{K_i \cdot T_c}{2} \right) \cdot e_{k-1}+\left(\frac{K_d}{T_c}\right) e_{k-2}

con le seguenti costanti definite:

C_{k} = C_{k-1} + p_0 \cdot e_{k} + p_1 \cdot e_{k-1} +p_2 \cdot e_{k-2}

p_0 = K_p + \frac{K_d}{T_c} + \frac{K_i \cdot T_c}{2}
p_1 = -\left( K_p + \frac{2 \cdot K_d}{T_c} - \frac{K_i \cdot T_c}{2} \right)
p_2 = \frac{K_d}{T_c}

L’esecuzione della legge di controllo così scritta è stata implementata sul robot Explorer di un microcontrollore dsPIC33 della scheda Motion Control. Il tempo di esecuzione di 30 cicli macchina ha con un tempo effettivo di circa 0.75 μs.

Antiwind-up

La maggiore utilità dell’azione integrale consiste nel garantire errore nullo a regime. Come l’azione derivativa, però, anche quella integrale è da manipolare con cautela, pena un grosso peggioramento delle prestazioni. Interessante è il caso di sovraelongazioni prodotte dalla concomitanza di una saturazione della variabile di controllo e di un’eccessiva azione integrale [5 – PID regolatori].

Quando l’attuatore satura, limita l’entità dell’azione di controllo con il risultato che l’errore continua ad essere consistente. La presenza dell’errore per lungo tempo finisce con il favorire la saturazione dell’attuatore, perché più passa il tempo e più l’azione integrale si fa energica, ma l’attuatore è già saturato. Si verifica, in altre parole, un forte accanimento nel voler portare gli attuatori in saturazione e un conseguente calo delle prestazioni del sistema: questo fenomeno viene comunemente detto windup. In presenza di saturazione della variabile di controllo il termine integrale può raggiungere valori molto elevati: è quindi richiesto, che l’errore presenti segno opposto per un lungo periodo prima che si esca dalla saturazione.

Le possibili soluzioni sono:

  • Limitazione del segnale di setpoint. Consiste nell’evitare che variazioni troppo brusche del setpoint mandino al limite della saturazione la variabile di controllo. Se, ad esempio, il setpoint deve passare da 0 a 1, si può pensare di scomporre questa transizione in tante piccole transizioni a gradino; tale scelta è comunque sconsigliabile, in quanto porta ad un decadimento delle prestazioni e non evita il windup in seguito a disturbi esterni (anche se i disturbi vengono in realtà filtrati dal processo prima di arrivare al controllore).
  • Integrazione condizionata. Consiste nella possibilità di spegnere l’integratore in determinate condizioni, ovvero quando si è lontani dal valore di regime o quando si è in saturazione. Ancora meglio risulta spegnerlo quando si è in saturazione ed il termine integrale renderebbe il controllore ancora più saturato: tale condizione si verifica quando errore e variabile di controllo presentano lo stesso segno.
  • Back calculation. Quando il controllore satura il termine integrale viene ricalcolato, diminuendo la sua azione di una quantità proporzionale alla profondità di saturazione. La Figura seguente mostra, infatti, che più la differenza tra il segnale di comando dell’attuatore e l’uscita effettiva del controllore è elevata e più l’azione integrale viene diminuita, attraverso la costante di tempo T_t (detta tracking time constant); tale costante può essere posta pari a sqrt{T_icdot T_d} nel caso di PID, oppure a Ti nel caso l’azione derivativa manchi.

    03-backcalculation-png

    Schema a blocchi del controllo PID con Back calculation

  • Preload. Durante la saturazione il termine integrale assume un valore predefinito, in genere minore del valore di regime per evitare overshoot; quando si esce dalla saturazione, poi, viene attribuito il valore integrato attuale.

Pseudocodice

#DEFINE TC ...  //Definizione del tempo di campionamento
#DEFINE Kp ...  //Definizione della costante Kp
#DEFINE Ki ...  //Definizione della costante Ki
#DEFINE Kd ...  //Definizione della costante Kd

#DEFINE P0 Kp+Kd/TC+Ki*TC/2 //Definizione della costante P0
#DEFINE P1 -(Kp+2*Kd/TC-Ki*TC/2) //Definizione della costante P1
#DEFINE P2 Kd/TC //Definizione della costante P2

int err1 = 0;        //err1 = y - u
int err2 = 0;        //err2 = y - u
int err3 = 0;        //err3 = y - u
int contr = 0;      //Uscita di controllo
...
//Inizializzazione controllo PID
...
while(true)
{
//Le operazioni devono essere temporizzate 
// con un preciso passo di campionamento Tc
err1 = ... ;                            //acquisizione errore

contr += P0*err1+P1*err2+P2*err3;    //uscita di controllo

//Salvataggio dei valori dell'errore
err3 = err2;
err2 = err1;

//Adattamento segnale di controllo ed invio all'attuatore 
...

}

Bibliografia

  1. V. A., Practical PID Control. Springer, 2006.
  2. M. Veronesi, Regolazione PID – FrancoAngeli, 3rd ed. Springer, 2007.
  3. A. Isidori, Sistemi di Controllo, 2nd ed. Roma: Siderea, 1992.
  4. R. . S. R. Bolzern, P. & Scattolini, Fondamenti di controlli automatici, 3rd ed. Milano: McGraw-Hill, 2008.
  5. Regolatori industriali pid. [Online]. Available: http://automatica.ing.unibs.it/mco/tco/3_pid/

Copyright © 2013. All Rights Reserved.

3 thoughts on “PID control

  • Trovo l’articolo ben fatto ma in effetti un po’ stringato.
    Non è trattata la stabilità del sistema retroazionato che impone delle condizioni ad esempio sul valore di Ki (calcolabili ad esempio tramite la tabella di Routh)
    Nell’ambito robotico ci sono poi diverse estensioni da trattare per migliorare il controllo che non sono toccate

    Ciao

    • Ti ringrazio per il commento.
      La pagina è stata volutamente scritta senza andare troppo nel dettaglio, ci sono autori ben più autorevoli di me che hanno scritto in dettaglio tutte le varie tematiche relative al PID. (In bibliografia ho messo dei testi che reputo ottimi per l’argomento).

      Per quanto riguarda la stabilità, quella è strettamente legata al processo che si vuole controllare portando ad una trattazione più lunga e particolareggiata. Ciò non toglie che ovviamente la verifica dei valori a ciclo chiuso e l’assegnamento dei guadagni resta necessario. Ma in questo caso se la conoscenza del modello è molto affidabile si potrebbe direttamente passare ad un controllo LQR.

      Nell’ambito robotico ci sono molte estensioni interessanti e per me reputo molto “intriganti” quelle non lineari o non lineari a tempo discreto.

      Appena ho un po’ di tempo vorrei scrivere una pagina (sempre non troppo dettagliata) sulla progettazione di un controllore PID per il controllo di velocità di un motore. In modo tale da mettere in dettaglio le varie tematiche, ad esempio relative al PWM, ADC, etc etc etc

Leave a Reply