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

Tra il campionamento della misura e l’aggiornamento del comando passa il tempo di calcolo
. Ci sono due scelte:
- aggiornare il comando appena pronto: il ritardo è
, ma varia da un ciclo all’altro; - aggiornarlo all’istante di campionamento successivo: il ritardo è sempre un periodo intero
, più grande ma costante e facile da includere nel modello come un fattore
(lezione sulla stabilità nel piano z, dove un passo di ritardo dimezzava il guadagno massimo).
Teorema. Un ritardo puro
nell’anello lascia invariato il modulo della funzione d’anello e ne riduce la fase di
radianti; il margine di fase diminuisce di
, dove
è la frequenza di attraversamento.
Dimostrazione. Il ritardo ha funzione di trasferimento
, e in regime sinusoidale
, di modulo 1 e fase
. Moltiplicato per la funzione d’anello
, non cambia la frequenza alla quale
e sottrae
alla fase in quel punto, quindi al margine. ∎
Al ritardo di calcolo si somma quello del mantenimento, circa
(lezione sul controllo digitale di Controllo dei processi), e quello del filtro anti-aliasing davanti all’A/D.
Esempio. Con
rad/s,
ms e aggiornamento al campione successivo (
), la perdita di margine è
rad, circa 8,6°. Con
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
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
bit distingue
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
, con il comando rappresentato con passo
e l’incremento arrotondato al passo più vicino. Allora un errore costante con
non viene mai corretto.
Dimostrazione. Se
, l’arrotondamento di
al multiplo di
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,
, e
(azione integrale lenta, campionamento veloce): l’errore può restare fino a
, cioè il 12 % del fondo scala, nonostante l’azione integrale. Il paradosso è che campionare più in fretta peggiora le cose, perché riduce
.
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
(perché
) 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
, 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.





