Il PID (parte 2)

Nell’articolo precedente eravamo rimasti allo studio di un PID che soltanto a livello teorico può funzionare, a causa di elementi che nella realtà è impossibile realizzare (la trattazione di questo articolo è particolarmente semplificata).
Primo fra tutti, l’azione derivativa che deve essere per forza approssimanta, in quanto sistema non causale, aggiungendo un polo in alta frequenza, che nel gergo ingegneristico viene chiama: “derivata ingegneristica” in quanto stima la derivata effettiva usando soltanto le informazioni salvate precedentemente.

Real PID

Un altro modo di interpretare la derivata è vedere il blocco derivativo come una rete anticipatrice: con un

L’articolo CONTINUA (clicca qui)

Il controllore PID si può riscrivere, in forma compatta, nel seguente modo:
usando le dovute approssimazioni:
con e

E’ interessante vedere il diagramma di bode con i seguenti parametri: ed

quindi:

Bode PID

Dalla funzione continua a quella discreta

Prima di poter applicare in pratica un controllo PID su di un microcontrollore, il controllore va ancora analizzato e visto come si comporta una volta discretizzato.

Discrete PID

Partendo dalla funzione di trasferimento analizzata prima e traformata la funzione di traferimenti in forma dicreta con un tempo di campionamento pari a 10.

Analizzando  la funzione di trasferimento si giunge alla seguente funzione di trasferimento

che è pressocché uguale alla forma approssimata:

L’integratore è in forma di eulero, e l’azione derivativa è una approssimazione del primo ordine. Sono presenti i seguenti guadagni: Kp, Ki, Kd ed il tempo di campionamento Tc.

Lo pseudo codice

Il modello utilizzato è quindi perfettamente utilizzabile all’interno di un microcontrollore, infatti l’equazione di stato associata alla funzione di trasferimento è:

leggibile nel seguente modo:

Si può riutilizzare la rappresentazione per scrivere un codice funzionante di PID da usare sul robot.

Questo è un esempio in pseudo-codice relativo alla rappresentazione di stato:

int xi, xd;     //Variabili temporanee
int err;        //err = y - u
                //y = uscita, u = ingresso
int contr;      //Uscita di controllo
int Kp,Ki,Kd;   //Guadagni controllo PID
int Tc;         //Tempo di campionamento
...
//Inizializzazione controllo PID
...
while(true)
{
//Le operazioni devono essere temporizzate con un preciso passo di campionamento Tc
err = ... ;                            //acquisizione errore

contr = (Ki*Tc)xi-(Kd/Tc)*xd+(Kp+(Ki*Tc)+(Kd/Tc))*err;    //uscita di controllo

//Salvataggio dei nuovi valori dell'azione integrale e derivativa
xi = xi + err;                         //Azione integrale
xd = err;                              //Azione derivativa

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

Copyright © 2009. All Rights Reserved.

2 thoughts on “Il PID (parte 2)

Leave a Reply