PWM e ADC - ritardo di risposta e sincronizzazione
In questa pagina 4
Quando un sistema è controllato in PWM da un µC con ADC on chip (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 →, ADC e DAC - risoluzione, SNR, ENOB ed erroriUn convertitore a $n$ bit con fondo scala $FSR$ ha risoluzione $LSB=FSR/2^n$; il codice vale $C=\mathrm{round}(V/LSB)$ e la tensione corrispondente è $V=C\cdot LSB$ con incertezza $\pm\frac12LSB$ (errore di quantizzazione). Con un modello a rumore uniforme di potenza $LSB^2/12$ il SNR di una sinusoide a fondo scala è $6{,}02,n+1{,}76$ dB; dal SNR misurato si ricava il numero di bit efficaci $ENOB=\frac{SNR-1{,}76}{6{,}02}$. Gli errori reali (offset, guadagno, INL, DNL, missing code) abbassano l'accuratezza. Accuratezza ≠ precisione: alta accuratezza implica alta precisione, non viceversa.ADC e DAC - risoluzione, SNR, ENOB ed errori →) si pone un problema di tempi: la scelta della frequenza di modulazione e di quella di campionamento, che non sono indipendenti.
Ritardo di risposta del modulatore digitale
Il modulatore digitale, a differenza di quello analogico, risponde con ritardo alle variazioni della modulante: in pratica la modulante è campionata alla frequenza di modulazione e tra due campioni resta costante. Se la modulante cambia subito dopo l'inizio di un periodo, la risposta (la variazione del duty-cycle) arriva solo nel periodo seguente: ritardo massimo di (quasi) un periodo di modulazione. Nei modulatori che permettono di aggiornare il duty-cycle a ogni semiperiodo (PWM simmetricaimpulsi centrati nel periodo, con contatore che sale e scende) il ritardo massimo si dimezza: è il motivo per cui esistono. La ISR del modulatore ha il compito di calcolare e scrivere il duty-cycle del periodo successivo.
Questo ritardo rallenta in modo significativo la dinamica del sistema sotto controllo e può rendere instabile un anello troppo veloce. Quindi:
- il controllo digitale deve essere limitato in banda ben al di sotto della frequenza di modulazione: la frequenza di cross-overfrequenza a cui il guadagno di anello vale 1 (0 dB) del guadagno di anelloprodotto delle funzioni di trasferimento di tutti i blocchi dell'anello di retroazione al massimo dell'ordine di (per non risentire del rippleondulazione residua alla frequenza della portante sui segnali di retroazione e del ritardo di campionamento);
- il margine di fasedistanza della fase dell'anello da -180 gradi alla frequenza di cross-over: misura la stabilità deve restare almeno di circa , per compensare la variabilità dello smorzamento e il ritardo del campionamento.
Campionamento a frequenza pari alla modulazione
Si vorrebbe la frequenza di campionamento la più alta possibile per massimizzare le prestazioni; ma la modulazione e il campionamento non sono indipendenti. Una scelta comune è . Le variabili campionate in un sistema pilotato in PWM contengono sempre componenti armoniche alla frequenza di modulazione e multiple: campionarle a viola il teorema di Shannon (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 →). Ma l'errore di aliasingsovrapposizione delle repliche dello spettro, che riporta le armoniche a bassa frequenza che ne risulta è qui utile: le armoniche della portante vengono riportate a frequenza nulla (continua) e, se il campionamento è fatto sempre nello stesso istante del periodo, la grandezza campionata non ha ripple: si ottiene direttamente il valore medio, cioè la demodulazione è implicita.
Come si ottiene. L'ADC deve essere sincronizzato con il PWM: il trigger di avvio della conversione è un segnale generato dallo stesso timer (un secondo registro di compare, CMP2), così la conversione parte sempre nello stesso punto del periodo. Senza sincronizzazione i campioni cadono in punti diversi del ripple e la misura è rumorosa (jitter di ampiezza).
Dove campionare. Il ripple di una grandezza filtrata (per esempio l'uscita di un RC o la corrente di un induttore) è triangolare: sale durante l'ON, scende durante l'OFF. Il suo valore medio si trova a metà della salita e a metà della discesa:
- PWM asimmetrica a leading edge (ON dall'inizio del periodo fino al match su ): a metà dell'impulso, cioè al conteggio (oppure a metà dell'OFF, ); per e : (o );
- PWM simmetrica (up-down): campionare al picco o alla valleil punto in cui il contatore up-down tocca il minimo del contatore, che cadono al centro dell'ON o dell'OFF. In questo modo si ha il filtraggio automatico del ripple al momento del campionamento.
Esempio di applicazione: controllo di un sistema del secondo ordine
Si controlla con un STM32G474RE un sistema dinamico del secondo ordine (emulariproduce il comportamento di un sistema reale con un circuito più semplice un inverter con filtro LC), pilotato da un PWM a kHz con valor medio regolabile (duty-cycle); le due variabili di stato hanno costanti di tempo molto diverse. La retroazione è unitaria con regolatore :
- PI solo se si riduce molto la banda; per non penalizzarla si usa un PIDregolatore con azione proporzionale, integrale e derivativa con cross-over al massimo kHz e margine di fase ; non bastano queste due specifiche per fissare i 3 coefficienti: si aggiunge un vincolo (per esempio gli zeri vicino alla frequenza di risonanza; più si arretrano gli zeri, più margine di fase ma risposta più lenta);
- fattori di scala: in ingresso il valor medio è V quando , cioè il registro di duty vale (periodo del modulatore in conteggi); in uscita 3,3 V corrisponde a una lettura dell'ADC (normalizzazione interadati scalati come numeri interi: l'ADC restituisce il valore in conteggi). Il guadagno di anello è moltiplicato per un fattore e (se FSR e alimentazione sono uguali, qui 3,3 V) è indipendente da FSR e dalla tensione di alimentazione;
- i coefficienti vanno discretizzati (Discretizzazione di Eulero e TustinPer realizzare numericamente un filtro o regolatore $F(s)$ si approssima $\frac1s$ con un integratore a tempo discreto. Eulero: $\boxed{s=\dfrac{1-z^{-1}}{T_c}}$ (da $\mathrm{Int}(nT)=\mathrm{Int}((n-1)T)+T,x(n)$). Così $\dfrac{1+s\tau_z}{1+s\tau_p}$ diventa $y(k)=\dfrac{\tau_p}{T_c+\tau_p}y(k-1)+\dfrac{T_c+\tau_z}{T_c+\tau_p}x(k)-\dfrac{\tau_z}{T_c+\tau_p}x(k-1)$. Il passaggio inverso (da algoritmo a $F(s)$) usa $z^{-1}\approx1-sT_c$. L'approssimazione è affidabile solo fino a circa $f_c/10$ (distorsione, warping); Tustin $s=\frac2{T_c}\frac{1-z^{-1}}{1+z^{-1}}$ è più fedele.Discretizzazione di Eulero e Tustin →) e tradotti in interi con fattore , con il risultato dei prodotti riportato nella scala corretta con shift a destra (Realizzare un filtro o un regolatore a virgola fissaRealizzare in C un filtro a virgola fissa vuol dire scegliere per ogni dato il formato (coefficienti $<1$ in 0.16 U, coefficienti $>1$ in 1.15, 4.12, 5.11 S...), moltiplicare con aritmetica a 32 bit ($16\times16\to32$) e riportare il prodotto al formato di arrivo con uno shift a destrascorrimento dei bit verso destra: equivale a dividere per una potenza di 2; per sommare due prodotti con scale diverse si fa lo shift prima di sommare. Con $a+b=2^{16}$ il filtro $y=\big(a,y_{k-1}+b,(u\ll4)\big)\gg16$ non va in overflow in un
uint32_t. Nel codice il formato di ogni variabile va dichiarato in un commento; la funzione $\sin x\approx x-\frac{x^3}6+\frac{x^5}{120}$ mostra come si approssima una funzione con polinomi a coefficienti in virgola fissa.Realizzare un filtro o un regolatore a virgola fissa →).
Errori comuni
- Ritenere che la violazione di Shannon sia sempre un errore: nel campionamento sincrono a è lo strumento che dà il valor medio.
- Campionare in un istante qualunque e non sincronizzatoavviato sempre nello stesso istante del periodo della portante con la portante: il ripple entra nella misura.
- Progettare il controllo con banda vicina a : il ritardo di fino a un periodo destabilizza l'anello.
- Confondere il registro di duty con quello di trigger dell'ADC (CMP1 e CMP2).
Versione ripasso
- Ritardo: duty aggiornato 1 volta per periodo → fino a (o con aggiornamento a semiperiodo).
- Banda: cross-over ; margine di fase .
- Campionamento: viola Shannon ma, con ADC sincronizzato (trigger dal timer), l'aliasing estrae il valor medio (nessun ripple).
- Istante: leading edge: (o ); simmetrica: picco o valle (, : ).
- Esempio: inverter 75 kHz con PID (cross-over 7,5 kHz, margine 60°), guadagno di anello , coefficienti .
- Errori: Shannon sempre sbagliato; campionare non sincronizzato; banda vicina a ; CMP1 ≠ CMP2 (PLL digitale con i timerUn PLL (anello ad aggancio di fase) tiene un segnale generato a frequenza e fase in relazione costante con un riferimento. In un µC si realizza con un timer in capture (misura il periodo del riferimento) e uno in compare (genera gli impulsi). L'errore di fase $\Delta\phi$ (intervallo tra due eventi) va portato a 0 con un regolatore sul periodo $P$ degli impulsi: compensare solo l'errore istantaneo non basta, serve un PI: $P_{int}(k)=P_{int}(k-1)+\frac{\Delta\phi(k)}N$, $P(k+1)=P_{int}(k)+\frac{\Delta\phi(k)}N$ (con $N$ = rapporto delle frequenze), che è dead-beat (errore nullo in un passo, polo in $z=0$). In pratica si riducono i guadagni per robustezza.PLL digitale con i timer →).
Esercizi su questo argomento
- Esercizio 25 · modulatore PWM con timer a 16 bit, registri di periodo e di confronto, risoluzione (temi d'esame gennaio 2025, febbraio 2025, gennaio 2026 e 2006)
- Esercizio 26 · demodulazione di un segnale PWM con filtro RC, ripple, PWM come convertitore D-A (temi d'esame luglio 2026, dicembre 2020 e luglio 2020)