Salta al contenuto
Note per Studenti Esercizio 29 · PLL digitale con timer, regolatore dead-beat e margini di tempo di calcolo (esempio del corso)

Esercizio 29PLL digitale con timer, regolatore dead-beat e margini di tempo di calcolo (esempio del corso)

In questa pagina 5

Testo (esempio svolto a lezione, anello ad aggancio di fase con i timer del microcontrollore STM32G474RE). Si deve generare un'onda quadra a frequenza N=11N=11 volte quella di un segnale di sincronismo (onda quadra), con frequenza del sincronismo tra 4 kHz e 6 kHz (nominale 5 kHz). L'errore di fase Δϕ(k)\Delta\phi(k), valutato alla fine di ogni treno di 11 impulsi, è la differenza tra l'istante dell'evento A (fronte del sincronismo) e quello dell'evento B (fronte di discesa dell'undicesimo impulso). L'algoritmo è Pint(k)=Pint(k−1)+g Δϕ(k)11,P(k+1)=Pint(k)+g Δϕ(k)11,P_{int}(k)=P_{int}(k-1)+g\,\frac{\Delta\phi(k)}{11},\qquad P(k+1)=P_{int}(k)+g\,\frac{\Delta\phi(k)}{11}, con PP periodo degli impulsi generati.

(a) Con g=1g=1 (dead-beat) e sincronismo a 5 kHz già agganciato, simulare per tre treni il comportamento quando il sincronismo passa a 6 kHz: scrivere Δϕ\Delta\phi e PP a ogni treno. (b) Ripetere con g=0,5g=0{,}5 e g=0,3g=0{,}3: confrontare il transitorio. (c) Calcolare il tempo a disposizione per eseguire l'algoritmo (i) a regime con il sincronismo a 6 kHz, (ii) nel caso peggiore con un salto del sincronismo da 4 a 6 kHz. (d) Perché non si può compensare l'errore con un'azione puramente proporzionale?


Teoria usata: 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 →, 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 →, Timer - prescaler, compare, capture e watchdogUn timer è un contatore binario di periodi di clock: $f_{cont}=f_{clk}/PSC$ ($PSC$ = fattore del prescaler). In modalità compare/match genera un evento (interruzione, reset del conteggio, azione su un pin) quando il conteggio raggiunge il registro di match: per un evento ogni $T$ servono $N=T,f_{clk}/PSC\le2^{16}$ conteggi, e si prende il minimo $PSC$ (massima risoluzione). Con uscita in modo toggle la frequenza dell'onda quadra è metà di quella degli eventi, il duty-cycle 50%. In modalità capture il valore del contatore, salvato a due fronti, dà il periodo: $T=C_2-C_1$ (corretto anche con un overflow), risoluzione $1/f_{clk}$. Il watchdog reinizializza il sistema se non viene azzerato in tempo.Timer - prescaler, compare, capture e watchdog →.

(a) Dead-beat

A regime con il sincronismo a 5 kHz (PS=200 μP_S=200\ \mus): P=PS11=18,18 μP=\frac{P_S}{11}=18{,}18\ \mus (frequenza degli impulsi 55 kHz), Pint=18,18 μP_{int}=18{,}18\ \mus, Δϕ=0\Delta\phi=0. Al treno k=5k=5 il sincronismo passa a 6 kHz (PS=166,67 μP_S=166{,}67\ \mus): il treno già in corso dura ancora 11⋅18,18=200 μ11\cdot18{,}18=200\ \mus, ma il fronte A arriva dopo 166,67 μ166{,}67\ \mus: l'evento A anticipa l'evento B di Δϕ=166,67−200=−33,33 μ\Delta\phi=166{,}67-200=-33{,}33\ \mus.

treno kk PSP_S [µs] P(k)P(k) [µs] Δϕ(k)\Delta\phi(k) [µs] P(k+1)P(k+1) [µs]
4 200 18,18 0 18,18
5 166,67 18,18 −33,33-33{,}33 12,12
6 166,67 12,12 0 15,15
7 166,67 15,15 0 15,15

Calcolo del treno 5: Pint(5)=18,18+−33,3311=18,18−3,03=15,15 μP_{int}(5)=18{,}18+\frac{-33{,}33}{11}=18{,}18-3{,}03=15{,}15\ \mus; P(6)=Pint(5)+−33,3311=15,15−3,03=12,12 μP(6)=P_{int}(5)+\frac{-33{,}33}{11}=15{,}15-3{,}03=12{,}12\ \mus. Il treno 6 dura 11⋅12,12=133,3 μ11\cdot12{,}12=133{,}3\ \mus: recupera il ritardo (rispetto al fronte A atteso ogni 166,67 μ166{,}67\ \mus) e Δϕ(6)=0\Delta\phi(6)=0; da allora P=Pint=15,15 μP=P_{int}=15{,}15\ \mus, cioè f=66f=66 kHz =11⋅6=11\cdot6 kHz ✓. L'aggancio avviene in un solo passo di regolazione dopo il rilevamento dell'errore (due treni dal salto).

(b) Guadagni ridotti

Con lo stesso salto, gli errori Δϕ(k)\Delta\phi(k) (in µs) per k=5,6,7,…k=5,6,7,\dots sono:

(c) Tempo di calcolo

L'algoritmo deve aggiornare il periodo prima della fine del primo semiperiodo del primo impulso di ogni treno.

  • A regime a 6 kHz: P=15,15 μP=15{,}15\ \mus, semiperiodo P2=7,58 μ\frac{P}2=7{,}58\ \mus. (Per il sincronismo al massimo, 6 kHz: PS,min22=16000⋅22=7,58 μ\frac{P_{S,min}}{22}=\frac1{6000\cdot22}=7{,}58\ \mus.)
  • Caso peggiore (salto 4 → 6 kHz): Δϕ=16 kHz−14 kHz=166,67−250=−83,33 μ\Delta\phi=\frac1{6\text{ kHz}}-\frac1{4\text{ kHz}}=166{,}67-250=-83{,}33\ \mus; il nuovo periodo P(k+1)=144 kHz−2⋅83,33 μs11=22,73−15,15=7,58 μP(k+1)=\frac1{44\text{ kHz}}-\frac{2\cdot83{,}33\ \mu\text{s}}{11}=22{,}73-15{,}15=7{,}58\ \mus (circa 132 kHz) e il calcolo deve concludersi in 7,582=3,79 μs\frac{7{,}58}2=\mathbf{3{,}79\ \mu s}: compatibile con la velocità di un µC a 170 MHz (≈640\approx640 cicli).

(d) Perché non basta il proporzionale

Con P(k+1)=P(k)+Δϕ(k)11P(k+1)=P(k)+\frac{\Delta\phi(k)}{11} la correzione "in un passo" porta il periodo al valore giusto ma lascia l'errore di fase invariato al treno successivo: l'errore di fase è l'integrale dell'errore di frequenza (Comunicazione wireless - ASK, OOK, FSK, PLL e antenneMolti µC integrano un trasmettitore RF semplice: PLL che genera la portante a $N$ volte la frequenza di un quarzo, amplificatore (LNA) e antenna con rete di adattamento. Modulazioni digitali: ASK (due livelli di ampiezza), OOK (un livello è zero), FSK (due frequenze). In analogico si usa l'FM con VCO e PLL (CD4046). Il PLL è un anello di retroazione: comparatore di fase, filtro passa-basso, VCO ($k_{VCO}=\frac{f_{max}-f_{min}}{V_{max}-V_{min}}$), divisore per $N$; a regime errore nullo di frequenza e di fase. Antenne a microstriscia: loop (lunghezza $\lesssim\lambda/10$), patch ($f_r\simeq\frac c{2L\sqrt{\varepsilon_r}}$). Standard: Wi-Fi 802.11, Bluetooth 802.15.1, ZigBee 802.15.4 (2,4 GHz, 250 kbit/s, rete mesh, basso consumo).Comunicazione wireless - ASK, OOK, FSK, PLL e antenne →), quindi per annullarlo serve un termine che accumuli le correzioni. Esempio: sincronismo con periodo 11 (unità arbitrarie), P(k)=0,9P(k)=0{,}9, Δϕ=1,1\Delta\phi=1{,}1: P(k+1)=0,9+0,1=1,0P(k+1)=0{,}9+0{,}1=1{,}0 (valore corretto), ma dopo 11 impulsi l'errore è ancora 11+1,1−11⋅1,0=1,111+1{,}1-11\cdot1{,}0=1{,}1: il sistema non annulla mai l'errore. Con PintP_{int} (g=1g=1): Pint(0)=1,0P_{int}(0)=1{,}0, P(1)=1,1P(1)=1{,}1: il treno successivo recupera esattamente il ritardo (11⋅1,1=12,111\cdot1{,}1=12{,}1) e da lì P=Pint=1,0P=P_{int}=1{,}0 con errore nullo.

Errori comuni

  • Valutare l'errore all'evento A anziché all'evento B (si cambierebbe il periodo in mezzo a un treno).
  • Dimenticare di ricostruire l'errore di fase negativo sommando il periodo del sincronismo quando l'evento B precede A.
  • Usare un solo termine (proporzionale) e aspettarsi l'azzeramento dell'errore di fase.
  • Mantenere i guadagni dead-beat con un riferimento che cambia rapidamente.

Versione ripasso

Testo. PLL digitale ×11\times11 con Pint(k)=Pint(k−1)+gΔϕ11P_{int}(k)=P_{int}(k-1)+g\frac{\Delta\phi}{11}, P(k+1)=Pint(k)+gΔϕ11P(k+1)=P_{int}(k)+g\frac{\Delta\phi}{11}; sincronismo da 5 a 6 kHz; guadagni 1, 0,5, 0,3; tempo di calcolo (esempio del corso).

Teoria collegata