Quantizzazione, fattori di scala e cicli limite
In questa pagina 6
La progettazione di un controllore o filtro numerico (Filtri numerici IIR e FIRUn filtro numerico è una equazione alle differenzerelazione che dà il campione di uscita in funzione di campioni di ingresso e di uscita passati $y(k)=\sum_ib_ix(k-i)+\sum_ia_iy(k-i)$. IIR (ricorsivo: qualche $a_i\ne0$) ha risposta impulsiva infinita e bastano pochi termini; FIR (tutti $a_i=0$) è sempre stabile ma richiede molti termini. Il passa-basso IIR del primo ordine $y(k)=b,x(k)+a,y(k-1)$ con $a+b=1$ ha guadagno 1 ed è stabile se $|a|<1$; la risposta al gradino è $y(k)=1-a^{k+1}$. Il filtro analogico equivalente (Eulero) ha $\tau=\dfrac{a,T_c}{1-a}$ e $f_T=\dfrac1{2\pi\tau}$. La media mobile di $N$ campioni è un FIR passa-basso che si assesta in $N$ passi.Filtri numerici IIR e FIR →, Regolatori PI e PID digitaliIl PI digitale è $y(k)=k_p,e(k)+y_I(k)$ con $y_I(k)=k_I',e(k)+y_I(k-1)$ e $k_I'=k_iT_c$ (con una MAC bastano 3 cicli). Nel PID la derivata si calcola come $\frac{k_d}{T_c}[e(k)-e(k-1)]$ ed è sensibile al rumore: si usa la versione filtrata $y_d(k)=\frac{k_d}{T_c+\tau_L}[e(k)-e(k-1)]+\frac{\tau_L}{T_c+\tau_L}y_d(k-1)$ o una media su più campioni. Con la saturazione dell'attuatore serve l'anti-wind-up: $|y_I|\le L(k)=Y_{max}-|k_pe(k)|$. Il controllo dead-beatcontrollo che porta l'errore a zero in un numero finito di passi (predittivo) azzera l'errore in un numero finito di passi ma è poco usato in industria.Regolatori PI e PID digitali →) si fa, in prima battuta, assumendo il processore ideale. In realizzazione contano la sua aritmetica, la lunghezza di parola e le prestazioni delle periferiche (per esempio l'ADC): limitano la qualità e possono costringere a riprogettare. I problemi nascono da (uno o più, anche insieme): temporizzazione, acquisizione dei dati, fattori di scala, quantizzazione in ingresso e uscita, precisione finita dell'aritmetica, cicli limite.
Temporizzazione
La distribuzione nel tempo delle operazioni è critica: le prestazioni di un filtro o controllo dipendono dalla frequenza di campionamento e il requisito minimo è che, fissata, resti costante (la teoria elementare dei sistemi campionati assume questo). Con un ADC on chip è facile: spesso lavora in modo autonomo e continuo grazie a un timer interno, oppure in modalità triggeredavviato da un segnale di trigger esterno o da un altro modulo del chip (parte con un segnale di avvio, necessaria per sincronizzare la conversione con altri eventi: per esempio un timer o un PWM come sorgente di trigger).
La velocità di conversione dell'ADC (oggi spesso µs) pone il limite superiore a ; il limite inferiore è dato dalla dinamica del processo o dalla banda richiesta al filtro. La tendenza è porre al valore più alto consentito dall'ADC, ma non sempre è la scelta migliore. Il metodo più usato: si mette l'algoritmo dentro la ISR dell'ADC, che genera una interruzione a fine conversione. Programma principale: dopo l'inizializzazione, while(1){}; il filtro o regolatore vive nella ISR. Requisito: la durata della ISR, con le latenze e le ISR a priorità maggiore, deve essere minore del periodo di campionamento, altrimenti si perdono dati e il calcolo non procede a frequenza costante (Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →); all'ADC conviene associare l'interruzione di priorità più alta. La durata reale di un segmento si misura con un pin di I/O e un oscilloscopio.
Acquisizione e condizionamento
Un trasduttore è collegato all'ADC con un circuito di condizionamento (di solito con amplificatori operazionali) che deve: a. adattare il livello del segnale al fondo scala dell'ADC; b. filtrare per eliminare rumore e impedire l'aliasing (Campionamento, aliasing e sample and holdCampionare vuol dire prendere i valori di $s(t)$ a istanti $kT_c$ ($T_c$ periodo, $f_c=1/T_c$). Teorema di Shannon: se lo spettro è nullo sopra $BW$, $s(t)$ si ricostruisce esattamente da campioni con $f_c\ge2BW$. Lo spettro campionato è la replica periodica (ogni $f_c$) dello spettro originale; se $f_c<2BW$ le repliche si sovrappongono: aliasing (una sinusoide a $f$ campionata a $1{,}25f$ appare a $0{,}25f$). Si previene con un filtro anti-aliasing sotto $f_c/2$ e col sovracampionamento. Il sample and holdcircuito che campiona il segnale e lo mantiene costante durante la conversione tiene il segnale costante durante la conversione.Campionamento, aliasing e sample and hold →). Un circuito tipico (differenziale con filtro) ha : permette l'acquisizione differenziale o single-ended, la somma di un offsetvalore costante sommato al segnale, per esempio per portarlo tutto in tensioni positive (utile per segnali con segno: per esempio un segnale di V attenuato di 2 e sommato a 2,5 V entra in un ADC con FSR 5 V), amplificazione o attenuazione, filtraggio passa-basso, e ha una bassa resistenza di uscita (nessun effetto di carico). Si completa con strutture di protezione (diodi Schottkydiodi con bassa caduta di tensione, usati come protezione degli ingressi verso l'alimentazione) che limitano le escursioni entro i livelli ammessi.
Per sfruttare al meglio la parola dell'ADC, il massimo valore atteso della grandezza (con un margine per rivelare condizioni anomale) deve coincidere con il massimo codice dell'ADC. Dato che la parola del processore ha più bit di quella dell'ADC, l'allineamento può essere: a destra (gli LSB coincidono: normalizzazione intera) o a sinistra (gli MSB coincidono: normalizzazione frazionaria, 1.15 su 16 bit, facendo attenzione al segno). Un dato a 12 bit allineato a sinistra su 16 bit è .
Fattori di scala
Il problema esiste solo per processori a virgola fissa (Operazioni in virgola fissa - somma, prodotto e riallineamentoIn virgola fissa il processore opera sugli interi e non sa dov'è la virgola: tocca al programmatore. Regola 1: si sommano solo dati con lo stesso formato (stesso $m$). Regola 2: il prodotto di $n_1.m_1$ per $n_2.m_2$ ha $m_1+m_2$ bit frazionari e il doppio dei bit: va riallineato con uno shift a destra di $m_2$ posizioni (per riportarlo a $m_1$) o preso dalla parte alta. Con la normalizzazione frazionaria $1.15$ il prodotto è $2.30$ e basta uno shift a sinistra di 1 prima di prendere la parte alta. I fattori di scala si scelgono per evitare overflow e perdita di risoluzione.Operazioni in virgola fissa - somma, prodotto e riallineamento →). Una scelta errata porta o a un cattivo sfruttamento dell'aritmetica (quantizzazione) oppure a overflow o saturazione, che di solito rendono il codice inutilizzabile. Il problema è serio nei sistemi di controllo perché influisce sul guadagno della catena e può addirittura rendere instabile il sistema anche con un regolatore ben progettato (coefficienti con valori molto diversi, ).
- Normalizzazione intera: intuitiva ma i coefficienti vanno premoltiplicati per e ogni prodotto va seguito da uno shift a destra di .
- Normalizzazione frazionaria 1.15: i coefficienti frazionari non danno problemi, il prodotto di due frazioni non va mai in overflowvalore fuori dall'intervallo rappresentabile; gli interi si gestiscono con fattori di scala (, poi ×4). Il prodotto 1.15 × 1.15 è 2.30 e va shiftato a sinistra di 1 per essere un 1.31, di cui si usa la parte alta (16 bit). Il formato va dichiarato nel codice.
Overflow. Non deve mai verificarsi in una routine di filtro o regolatore. Per le variabili che accumulano (la parte integrale di un PI) si usano talvolta parole doppie (l'accumulatoreregistro che raccoglie somme e prodotti, spesso largo il doppio della parola, spesso largo il doppio, si salva con due locazioni; nella somma con un dato a parola singola si usa solo la parte alta se si lavora in 1.15). Alcuni processori hanno l'aritmetica saturatail risultato fuori intervallo è sostituito dal massimo o dal minimo: in caso di overflow il risultato è sostituito dal massimo (0x7FFF) o dal minimo (0x8000); equivale a un blocco non lineare dopo ogni somma, di effetti non facilmente prevedibili (si ricorre alla simulazione).
Quantizzazione
In virgola fissa gli effetti di quantizzazione intervengono in più punti: (a) conversione A/D dei dati; (b) calcolo dei coefficienti di filtri e regolatori; (c) prodotti, quando il risultato è troncato o arrotondato; (d) trasformazione del risultato in un segnale (DAC). Introducono non linearità il cui impatto è difficile da prevedere sulla carta (esistono metodi analitici ma di difficile applicazione): si usa la simulazione (per esempio il Fixed Point Blockset di Simulink). Il caso peggiore è quello dei sistemi a catena chiusa.
Un quantizzatore "lineare" associa a ogni con il numero ; è il passo di quantizzazionela distanza tra due livelli consecutivi del quantizzatore, cioè 1 LSB ( LSB) e gli intervalli larghi sono i bin.
- Ingresso (ADC). La parola dell'ADC è molto più corta di quella del processore, quindi il peso di nell'aritmetica interna è maggiore di 1 LSB. In un controllo a catena chiusa il suo effetto è un errore a regime (per riferimento costante) fino a , non compensabile: deve essere minore del massimo errore tollerabile (criterio di scelta dell'ADC).
- Uscita. La quantizzazione in uscita (DAC o comando di un trasduttore) crea un errore a regimeerrore che resta dopo che il transitorio si è esaurito e può dare origine a un ciclo limite.
- Coefficienti. L'arrotondamento dei coefficienti sposta i poli del filtro o del regolatore. Esempio: filtro con su 8 bit (1.7): , cioè , e . Il tempo di salita al 90% passa da a campioni: +28%.
Paradosso della frequenza di campionamento. Se si riduce a 1/5 il tempo di salita richiesto (in campioni) scende a circa un quinto: , : 44,9 campioni contro 48,0 (+7%): l'errore è 4 volte minore. L'aumento di non sempre migliora filtro o regolatore, perché rende più critica la quantizzazione dei coefficienti: alte frequenze di campionamento richiedono lunghezze di parola maggiori.
- Prodotti. Il prodotto di due numeri a bit ha bit; riportarlo a bit (parte alta) è un troncamento (o arrotondamento) interno all'algoritmo, quindi una quantizzazione per ogni moltiplicazione: il numero di non linearitàcomportamento in cui l'uscita non è proporzionale all'ingresso cresce rapidamente (si pensi a un FIR) e lo studio si fa solo per simulazione.
Cicli limite
Nei sistemi a catena chiusa la precisione finita può indurre oscillazioni persistenti dei bit meno significativi del risultato: i cicli limite (limit cycles). I filtri FIR, non avendo retroazione interna, ne sono protetti (ma se un FIR è usato come regolatore in un anello chiuso, i cicli limite possono comparire). La teoria (metodo di Tsypkin, funzione descrittiva) è applicabile solo a casi semplici: in pratica si usa la simulazione e si cerca la quantizzazione responsabile. Con processori a 16 bit i cicli limite aritmetici sono rari e si confinano nei bit bassi; se l'uscita (o il DAC) ha meno bit del processore, un allineamento opportuno scarta i bit corrotti.
Anche con un algoritmo ideale, la risoluzione finita dell'uscita (per esempio il duty-cycle del PWM) può rendere impossibile raggiungere il punto di equilibrio: se il processo non ha un integratore, il ciclo limiteoscillazione persistente di piccola ampiezza causata dalla quantizzazione è a frequenza nulla (errore permanente rispetto al set-pointvalore di riferimento che l'uscita deve raggiungere); se ha almeno un integratore si ha un'oscillazione persistente tra i due valori di uscita più vicini all'equilibrio, a causa dell'integrazione dell'errore da parte del processo. È tipico dei controlli PWM digitali: se il duty-cycle di equilibrio non coincide con uno dei valori possibili (per esempio con 8 bit) si oscilla tra e . Perciò è importante una buona risoluzione sul duty-cycle (almeno 8 bit) (Modulazione PWM - duty-cycle, risoluzione e demodulazioneLa PWM trasferisce un segnale modulante $V^$ nella larghezza degli impulsi di un'onda quadra a frequenza fissa: con duty-cycle $d=t_1/T$ e livelli $\pm\frac E2$ la media è $V_{med}=(d-\frac12)E=E,\frac{V^}{V_p}$. L'informazione sta nel valor medio; il resto dello spettro (armoniche della portante) si elimina con un passa-basso (demodulazione). Il modulatore digitale è un timer: contatore + comparatore, $N=f_{clk}/f_{PWM}$ conteggi per periodo, risoluzione $n=\log_2N$ bit (massima frequenza per $n$ bit: $f_{clk}/2^n$), registro di compare = duty-cycle. Servono almeno 8 bit per evitare cicli limite.Modulazione PWM - duty-cycle, risoluzione e demodulazione →).
Errori comuni
- Alzare senza controllare i coefficienti: si avvicinano a 0 e a 1 e la quantizzazione sposta i poli.
- Non sfruttare l'intera parola dell'ADC (segnale che occupa metà del fondo scala: si perde 1 bit di SNR).
- Dimenticare l'overflow nella parte integrale.
- Credere che la quantizzazione sia sempre un rumore piccolo e innocuo in un anello chiuso: può dare errore a regime e cicli limite.
Versione ripasso
- Temporizzazione: deve restare costante; l'algoritmo sta nella ISR di fine conversione dell'ADC (priorità più alta), con durata minore di . L'ADC può essere avviato da un trigger di un timer o di un PWM.
- Condizionamento: il segnale va portato al fondo scala dell'ADC con un circuito che adatta livello e offset, filtra contro l'aliasing e protegge gli ingressi con diodi. Esempio: un segnale di ±5 V attenuato di 2 e sommato a 2,5 V entra in un ADC con FSR 5 V.
- Allineamento: a destra (gli LSB coincidono: normalizzazione intera) o a sinistra (gli MSB coincidono: 1.15 su 16 bit); un dato a 12 bit allineato a sinistra è .
- Scale: intera (coefficienti premoltiplicati per , con shift di dopo ogni prodotto) oppure 1.15 (il prodotto di due frazioni non va in overflow, il prodotto si shifta di 1). Il formato va dichiarato nel codice.
- Overflow: non deve mai verificarsi; l'integrale di un PI può usare accumulatori doppi; l'aritmetica saturata sostituisce il risultato con
0x7FFFo0x8000. - Quantizzazione: avviene in cinque punti: ADC, coefficienti, prodotti (troncamento o arrotondamento), uscita (DAC o PWM) e, nel caso peggiore, nei cicli a catena chiusa. Si studia per simulazione.
- Errore a regime dall'ADC: con riferimento costante resta un errore fino a (1 LSB), non compensabile; va scelto minore dell'errore tollerabile.
- Coefficienti: in formato 1.7 diventa e : il tempo di salita al 90% passa da 229 a 294 campioni (+28%). Con di un quinto, dà e 44,9 campioni contro 48,0 (+7%): alzare non sempre migliora il filtro.
- Cicli limite: oscillazioni persistenti degli LSB. Senza integratore nel processo l'oscillazione è a frequenza nulla (errore permanente); con integratore oscilla tra i due valori di uscita più vicini all'equilibrio. Esempio: con 8 bit, duty oscilla tra e ; per questo servono almeno 8 bit di duty-cycle. I FIR non hanno retroazione interna e ne sono protetti (Modulazione PWM - duty-cycle, risoluzione e demodulazioneLa PWM trasferisce un segnale modulante $V^$ nella larghezza degli impulsi di un'onda quadra a frequenza fissa: con duty-cycle $d=t_1/T$ e livelli $\pm\frac E2$ la media è $V_{med}=(d-\frac12)E=E,\frac{V^}{V_p}$. L'informazione sta nel valor medio; il resto dello spettro (armoniche della portante) si elimina con un passa-basso (demodulazione). Il modulatore digitale è un timer: contatore + comparatore, $N=f_{clk}/f_{PWM}$ conteggi per periodo, risoluzione $n=\log_2N$ bit (massima frequenza per $n$ bit: $f_{clk}/2^n$), registro di compare = duty-cycle. Servono almeno 8 bit per evitare cicli limite.Modulazione PWM - duty-cycle, risoluzione e demodulazione →).
- Errori tipici: alzare senza controllare i coefficienti; usare metà del fondo scala dell'ADC (si perde 1 bit di SNR); dimenticare l'overflow nell'integrale; ritenere la quantizzazione sempre innocua in un anello chiuso (Realizzare un filtro o un regolatore a virgola fissa).
- Temporizzazione: la durata della ISR, con latenze e ISR di priorità maggiore, deve essere minore di , altrimenti si perdono campioni.
- Interfaccia del trasduttore: amplificatore con adattamento di livello, filtro passa-basso e bassa resistenza di uscita; diodi Schottky di protezione verso l'alimentazione.
- Aritmetica saturata: sostituisce il risultato fuori intervallo con
0x7FFFo0x8000; ha effetti non lineari che si studiano per simulazione. - Prodotti: il troncamento interno è una quantizzazione per ogni moltiplicazione; le non linearità crescono rapidamente, per esempio in un FIR.
- Effetto dei coefficienti: con più alta i coefficienti si avvicinano a 0 e a 1 e la quantizzazione sposta di più i poli.
Esercizi su questo argomento
- Esercizio 14 · sensore e convertitore A-D, allineamento a 16 bit, offset e tempo di calcolo (temi d'esame gennaio 2022, gennaio 2025, febbraio 2025 e settembre 2026)
- Esercizio 21 · controllo digitale della velocità di un motore con regolatore PI, scale, timer e trasmissione seriale (tema d'esame 3 settembre 2020)
- Esercizio 28 · programmazione degli STM32 con la HAL e quesiti di linguaggio C (temi d'esame gennaio 2021, gennaio 2022, febbraio 2022, febbraio 2025 e 2020-21)
- Esercizio 30 · istruzione MAC con accumulatore a 32 bit e arrotondamento (tema d'esame luglio 2020)
- Esercizio 31 · sistema di controllo di un ascensore con microcontrollore a 8 bit (tema d'esame 18 luglio 2006)
Teoria collegata
- Filtri numerici IIR e FIR
- Formulario - elettronica industriale
- Microcontrollori STM32 - clock, timer, ADC e codice HAL
- Modulazione PWM - duty-cycle, risoluzione e demodulazione
- Operazioni in virgola fissa - somma, prodotto e riallineamento
- Realizzare un filtro o un regolatore a virgola fissa
- Regolatori PI e PID digitali