Vai al contenuto
Controlli Automatici 1

Il controllore PID: taratura e realizzazione

Azioni proporzionale, integrale e derivativa, confronto delle risposte, taratura di Ziegler-Nichols con esempio, filtro sulla derivata, anti-windup e codice per microcontrollore.

Il controllore PID (proporzionale, integrale, derivativo) è di gran lunga il più usato nell’industria: regola temperature, pressioni, portate, velocità di motori, posizioni dei bracci robotici, la quota dei droni. Ha solo tre parametri, si può tarare anche senza un modello accurato del processo e funziona bene nella maggior parte dei casi. In questa lezione vediamo il significato delle tre azioni, i metodi di taratura e i dettagli pratici che fanno funzionare un PID reale.

Le tre azioni

    \[ u(t) = K_p\,e(t) + K_i\int_0^t e(\tau)\,d\tau + K_d\,\frac{de}{dt},\qquad C(s) = K_p + \frac{K_i}{s} + K_d s \]

Spesso si scrive nella forma con le costanti di tempo, C(s) = K_p\left(1 + \frac{1}{T_i s} + T_d s\right).

  • Proporzionale: reagisce all’errore attuale. Più K_p è grande, più la risposta è pronta e l’errore a regime piccolo, ma meno smorzato è l’anello. Da sola lascia un errore a regime sui processi di tipo 0.
  • Integrale: reagisce all’errore accumulato nel passato. Elimina l’errore a regime sui riferimenti e i disturbi costanti (lezione sugli errori), ma aggiunge ritardo di fase e tende a far oscillare.
  • Derivativa: reagisce alla velocità con cui l’errore cambia, cioè “prevede” dove sta andando. Aggiunge anticipo di fase e smorzamento, ma amplifica il rumore ad alta frequenza.
Risposte al gradino in anello chiuso con controllore P, PI e PID su un processo del terzo ordine
Con il solo proporzionale l’uscita si assesta lontano dal valore desiderato, con un errore a regime. Con il PI l’errore a regime sparisce ma la risposta è più lenta e oscillante. Con il PID la risposta è più pronta, raggiunge il valore finale e l’oscillazione è smorzata.

La figura mostra il comportamento tipico su un processo G(s) = 1/(s + 1)^3. Con il solo P (K_p = 2) l’uscita si ferma a 2/3: l’errore a regime è 1/(1 + 2). Con il PI arriva a 1 ma più lentamente. Con il PID arriva a 1, più in fretta e con oscillazioni contenute.

La taratura con Ziegler-Nichols

Il metodo classico, del 1942, si applica direttamente sull’impianto:

  1. si toglie l’azione integrale e derivativa e si aumenta K_p fino a quando l’anello oscilla in modo persistente;
  2. si annotano il guadagno critico K_u e il periodo dell’oscillazione T_u;
  3. si scelgono i parametri dalla tabella.
ControlloreK_pT_iT_d
P0{,}5\,K_u
PI0{,}45\,K_uT_u/1{,}2
PID0{,}6\,K_uT_u/2T_u/8

Esempio. Per G(s) = 1/(s + 1)^3 il guadagno critico si trova con Routh: l’equazione caratteristica è s^3 + 3s^2 + 3s + 1 + K = 0, stabile per 3\cdot 3 \gt 1 + K, cioè K \lt 8. Al limite l’equazione ausiliaria 3s^2 + 9 = 0 dà \omega_u = \sqrt3, quindi T_u = 2\pi/\sqrt3 \approx 3{,}63 s. Il PID di Ziegler-Nichols è K_p = 4{,}8, T_i \approx 1{,}81 s, T_d \approx 0{,}45 s.

Le regole di Ziegler-Nichols danno una risposta pronta ma piuttosto oscillante (sovraelongazione spesso del 30-50%): sono un buon punto di partenza da rifinire. Portare un impianto reale al limite di stabilità può essere pericoloso; esistono varianti che usano la risposta al gradino in anello aperto, e i regolatori industriali moderni hanno una funzione di autotaratura che esegue una prova controllata e calcola i parametri da soli.

I dettagli che contano

Un PID scritto come nella formula funziona male nella realtà. Le correzioni standard sono:

  • Filtro sulla derivata. La derivata pura amplifica il rumore del sensore. Si usa \frac{K_d s}{1 + T_f s}, con T_f circa un decimo di T_d, che limita il guadagno alle alte frequenze.
  • Derivata sulla misura. Quando il riferimento cambia a gradino, la derivata dell’errore è un impulso che dà un colpo violento all’attuatore (il “derivative kick”). Si deriva allora solo l’uscita misurata, -K_d\,dy/dt: per i disturbi l’effetto è lo stesso.
  • Anti-windup. Ogni attuatore ha dei limiti: una valvola non si apre più del 100%, un motore ha una tensione massima. Se l’attuatore è saturo l’errore non si riduce, ma l’integrale continua a crescere (windup); quando l’errore finalmente cambia segno, l’integrale enorme impiega molto tempo a scaricarsi e l’uscita supera di molto il riferimento. La soluzione è fermare l’integrazione quando il comando è saturo.

Il PID in un microcontrollore

In pratica il PID è un programma eseguito a intervalli regolari T_s, molto più brevi delle costanti di tempo del processo. L’integrale diventa una somma e la derivata una differenza:

/* PID a tempo discreto con derivata filtrata sulla misura e anti-windup */
float kp = 4.8f, ki = 4.8f / 1.81f, kd = 4.8f * 0.45f;
float Ts = 0.01f, a = 0.1f;        /* passo di campionamento e filtro */
float integ = 0, d = 0, y_prec = 0;

float pid(float r, float y) {
    float e = r - y;
    d = (1 - a) * d - a * kd * (y - y_prec) / Ts;
    y_prec = y;
    float u = kp * e + integ + d;
    if (u > 10.0f) u = 10.0f;            /* saturazione dell'attuatore */
    else if (u < -10.0f) u = -10.0f;
    else integ += ki * e * Ts;           /* integra solo se non saturo */
    return u;
}

È tutto qui: poche moltiplicazioni per ciclo. Per questo un PID gira su qualsiasi microcontrollore, anche il più piccolo, e si trova dentro gli elettrodomestici, i droni, le stampanti 3D e gli alimentatori digitali.

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x