Vai al contenuto
Controllo Digitale

Implementare un regolatore digitale: ritardo di calcolo, jitter e quantizzazione

Perdita di margine di fase per il ritardo dimostrata con esempio, jitter, zona morta dell'azione integrale quantizzata dimostrata, struttura dei filtri, anti-windup e regole pratiche.

Un regolatore digitale progettato bene sulla carta può funzionare male sul microcontrollore. Il calcolo richiede tempo, i convertitori hanno un numero finito di livelli, l’aritmetica ha una precisione limitata, e il programma condivide il processore con altri compiti. In questa lezione vediamo il ritardo di calcolo e la sua dimostrazione di costo in margine di fase con un esempio, la variabilità dei tempi, gli effetti della quantizzazione con la dimostrazione di un errore a regime che l’azione integrale non riesce a eliminare, e le regole pratiche per un’implementazione robusta.

Il ritardo di calcolo

Temporizzazione di un regolatore digitale
A ogni istante kT il convertitore A/D campiona la misura (punto verde); il calcolo dura il tempo tau c (rettangolo arancione); al termine il convertitore D/A aggiorna il comando u, che resta costante fino all’aggiornamento successivo.

Tra il campionamento della misura e l’aggiornamento del comando passa il tempo di calcolo \tau_c. Ci sono due scelte:

  • aggiornare il comando appena pronto: il ritardo è \tau_c, ma varia da un ciclo all’altro;
  • aggiornarlo all’istante di campionamento successivo: il ritardo è sempre un periodo intero T, più grande ma costante e facile da includere nel modello come un fattore z^{-1} (lezione sulla stabilità nel piano z, dove un passo di ritardo dimezzava il guadagno massimo).

Teorema. Un ritardo puro \tau nell’anello lascia invariato il modulo della funzione d’anello e ne riduce la fase di \omega\tau radianti; il margine di fase diminuisce di \omega_c\tau, dove \omega_c è la frequenza di attraversamento.

Dimostrazione. Il ritardo ha funzione di trasferimento e^{-s\tau}, e in regime sinusoidale e^{-j\omega\tau}, di modulo 1 e fase -\omega\tau. Moltiplicato per la funzione d’anello L(j\omega), non cambia la frequenza alla quale |L| = 1 e sottrae \omega_c\tau alla fase in quel punto, quindi al margine. ∎

Al ritardo di calcolo si somma quello del mantenimento, circa T/2 (lezione sul controllo digitale di Controllo dei processi), e quello del filtro anti-aliasing davanti all’A/D.

Esempio. Con \omega_c = 100 rad/s, T = 1 ms e aggiornamento al campione successivo (\tau_c = T), la perdita di margine è \omega_c(T/2 + T) = 100\cdot 0{,}0015 = 0{,}15 rad, circa 8,6°. Con T = 10 ms sarebbe 86°: il sistema diventerebbe quasi certamente instabile.

Una regola semplice riduce il ritardo: prima calcolare e scrivere l’uscita, poi aggiornare lo stato del regolatore. Nella maggior parte degli algoritmi l’uscita dipende dalla misura nuova con un solo prodotto e una somma; tutti gli altri calcoli (aggiornamento degli integratori, dei filtri, della diagnostica) si fanno dopo, mentre si aspetta il campione successivo.

La variabilità dei tempi

Se il campionamento non avviene a intervalli esattamente regolari, o il tempo di calcolo varia (interruzioni, cache, altri compiti), il ritardo fluttua: è il jitter. Il regolatore è progettato per un T fisso, e un jitter grande equivale a un disturbo aggiuntivo e a una perdita di margine. Si combatte facendo partire il convertitore A/D da un temporizzatore hardware, non dal programma, aggiornando il D/A allo stesso modo, e dando al compito di controllo la priorità più alta in un sistema operativo in tempo reale.

La quantizzazione

Un convertitore A/D a n bit distingue 2^n livelli (lezione sulla quantizzazione di Teoria dei segnali); anche il D/A e i numeri interni del programma hanno un passo minimo. Nell’anello chiuso la quantizzazione produce effetti non lineari: zone morte e cicli limite, piccole oscillazioni permanenti di uno o due passi.

Teorema. Si consideri un’azione integrale in forma incrementale \Delta u(k) = K_iTe(k), con il comando rappresentato con passo q e l’incremento arrotondato al passo più vicino. Allora un errore costante con |e| \lt  q/(2K_iT) non viene mai corretto.

Dimostrazione. Se |K_iTe| \lt  q/2, l’arrotondamento di K_iTe al multiplo di q più vicino è 0: il comando non cambia, l’uscita non cambia e l’errore resta lo stesso. La situazione si ripete identica a ogni passo. ∎

Esempio. Comando a 12 bit normalizzato al fondo scala, q = 1/4096, e K_iT = 0{,}001 (azione integrale lenta, campionamento veloce): l’errore può restare fino a q/(2K_iT) = 0{,}12, cioè il 12 % del fondo scala, nonostante l’azione integrale. Il paradosso è che campionare più in fretta peggiora le cose, perché riduce K_iT.

Il rimedio è tenere l’integratore con più bit di quelli del comando (per esempio a 32 bit, o accumulando il resto dell’arrotondamento) e quantizzare solo all’uscita verso il D/A. Lo stesso problema riguarda i coefficienti: con campionamento veloce i poli si avvicinano a z = 1 (perché e^{sT} \approx 1 + sT) e i coefficienti dei filtri diventano numeri come 0,9995 che richiedono molti bit. Le strutture del filtro contano (lezione sulle strutture dei filtri numerici di Elaborazione numerica dei segnali): in cascata di sezioni del secondo ordine, o con l’operatore delta (z - 1)/T, che lavora sulla differenza tra campioni.

Altre regole pratiche

  • Saturazioni e anti-windup: l’attuatore ha limiti; quando il comando satura, l’integratore va fermato o riportato indietro (lezione sul controllore PID di Controlli automatici). Nella forma incrementale basta saturare il comando accumulato.
  • Passaggio senza scosse (bumpless) tra manuale e automatico: all’inserimento il regolatore si inizializza con il comando attuale.
  • Aritmetica in virgola fissa con saturazione invece del traboccamento (overflow), che trasformerebbe un numero grande positivo in uno grande negativo.
  • Filtro anti-aliasing prima dell’A/D, perché un disturbo a frequenza alta, campionato, si ripiega a bassa frequenza e il regolatore cerca di correggerlo.
  • Watchdog e controlli di plausibilità: se il programma si blocca o una misura è assurda, l’attuatore va portato in una condizione sicura.
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x