Salta al contenuto
Note per Studenti 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 25modulatore PWM con timer a 16 bit, registri di periodo e di confronto, risoluzione (temi d'esame gennaio 2025, febbraio 2025, gennaio 2026 e 2006)

Esame
In questa pagina 5

Testo (temi d'esame gennaio 2025, febbraio 2025 problema P6, gennaio 2026 problema P7, 18 luglio 2006 problema 4).

(i) Un modulatore PWM è realizzato con un timer a 16 bit a clock di 200 MHz, conteggio up-counting. Determinare: (a) la massima frequenza della portante che consente almeno 12 bit di risoluzione per il duty-cycle; (b) il valore del registro di fine conteggio (PERIOD) per una portante prossima a 15 kHz; (c) quali eventi devono corrispondere a SET e RESET del pin per una modulazione di tipo leading edge (opzioni: reset del timer, match sul duty-cycle, match sul periodo); (d) il valore del registro di confronto 1 (CMP1) per un duty-cycle del 50%; (e) il valore del registro di confronto 2 (CMP2) per un segnale di sincronismo che, inviato all'ADC come trigger, comporti il filtraggio automatico del ripple (triangolare) sul segnale demodulato.

(ii) Timer a 16 bit con clock 170 MHz, onda quadra a 100 kHz, risoluzione >10>10 bit (gennaio 2025): (a) il valore del registro di prescaler; (b) il registro di match; (c) il numero effettivo di bit; (d) il registro del duty-cycle per il 50%; (e) con demodulatore passa-basso del 1° ordine con polo a ω=50\omega=50 krad/s, l'attenuazione della prima armonica in dB.

(iii) Timer a 16 bit, portante 20 kHz con risoluzione almeno 10 bit, clock del contatore a 170 MHz (febbraio 2025): (a) di quante volte può essere aumentata la frequenza di clock per avere la massima risoluzione temporale nel conteggio (1×1\times, 2×2\times, 3×3\times, 4×4\times); (b) il valore del registro di match (MR) con la scelta precedente; (c) il numero di bit effettivi; (d) il registro di compare per un duty-cycle del 75%.

(iv) Un µC a 8 bit, clock 12 MHz, ha un modulatore PWM a 8 bit; la tensione sul motore è V=d⋅EV=d\cdot E con E=200E=200 V (luglio 2006): (a) la massima frequenza di modulazione con 256 valori di duty-cycle; (b) il prescaler per una frequenza il più prossima a 15 kHz; (c) il registro di compare per d≃0,232d\simeq0{,}232 e l'errore sulla tensione media.


Teoria usata: 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 →, PWM e ADC - ritardo di risposta e sincronizzazioneUn modulatore PWM digitale ritarda la risposta: il duty-cycle si aggiorna una volta per periodo (al massimo si attende $T_{PWM}$; $T_{PWM}/2$ se si aggiorna a ogni semiperiodo). Perciò il controllo digitale deve avere banda ben sotto $f_{PWM}$ (cross-over $\lesssim f_{PWM}/10$, margine di fase $\ge60^\circ$). Si campiona di solito a $f_c=f_{PWM}$: viola Shannon, ma se l'ADC è sincronizzato con la portante (trigger dal timer PWM) l'aliasing estrae il valor medio, senza ripple. Il campionamento va fatto a metà del tempo di ON (leading edge: $\frac{DT}2$, in generale a metà dell'impulso) o al picco/valle del contatore (PWM simmetrica).PWM e ADC - ritardo di risposta e sincronizzazione →, 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 →.

(i) 200 MHz

(a) Per n=12n=12 bit servono N≥212=4096N\ge2^{12}=4096 conteggi per periodo: fPWM,max=fclk4096=200 MHz4096=48,8 kHzf_{PWM,max}=\frac{f_{clk}}{4096}=\frac{200\ \text{MHz}}{4096}=\mathbf{48{,}8\ kHz}. (b) N=200 MHz15 kHz=13333,3→13333=0x3415N=\frac{200\ \text{MHz}}{15\ \text{kHz}}=13333{,}3\to\mathbf{13333}=\texttt{0x3415} (log⁡213333=13,7\log_2 13333=13{,}7 bit; frequenza ottenuta 15,000415{,}0004 kHz). (c) In modulazione leading edge l'impulso comincia all'inizio del periodo e finisce al match con il duty-cycle: SET_PIN sul reset del timer (inizio periodo), RESET_PIN sul match sul duty-cycle. Il "match sul periodo" è l'evento che provoca il reset del timer: non è un evento di SET né di RESET separato. (d) CMP1=D⋅N=0,5⋅13333=6666,5→6667=0x1A0BCMP_1=D\cdot N=0{,}5\cdot13333=6666{,}5\to\mathbf{6667=0x1A0B} (oppure 6666). (e) Il ripple della tensione demodulata è triangolare: sale durante l'impulso (da 0 a DNDN) e scende dopo. Il valor medio si trova a metà della salita, cioè a DN2\frac{DN}2: CMP2=0,5⋅133332=3333,25→3333=0x0D05CMP_2=\frac{0{,}5\cdot13333}2=3333{,}25\to\mathbf{3333=0x0D05} (in alternativa a metà della discesa: (1+D)N2=10000=0x2710\frac{(1+D)N}2=10000=\texttt{0x2710}): con il campionamento sincronizzato a quell'istante l'ADC legge il valore medio, con il ripple filtrato automaticamente.

(ii) 170 MHz, 100 kHz

(a) Con prescaler 1 (nessuna divisione) i conteggi per periodo sono 170 MHz100 kHz=1700<65536\frac{170\text{ MHz}}{100\text{ kHz}}=1700<65536 ✓: registro di prescaler = 0x0001 (fattore 1; in HAL il registro contiene fattore −1=0-1=0). (b) Registro di match (periodo) =1700=0x06A4=1700=\mathbf{0x06A4}. (c) Bit effettivi =log⁡21700=10,73=\log_21700=\mathbf{10{,}73} (>10>10 ✓). (d) Duty 50%: 0,5⋅1700=850=0x03520{,}5\cdot1700=850=\mathbf{0x0352}. (e) La prima armonica è alla frequenza della portante: ω=2π⋅100 kHz=628\omega=2\pi\cdot100\ \text{kHz}=628 krad/s; ωωp=62850=12,57\frac\omega{\omega_p}=\frac{628}{50}=12{,}57: ∣H∣=11+12,572=0,0793|H|=\frac1{\sqrt{1+12{,}57^2}}=0{,}0793, cioè −20log⁡101+157,9=−22,0 dB-20\log_{10}\sqrt{1+157{,}9}=\mathbf{-22{,}0\ dB}.

(iii) 20 kHz, 170 MHz

(a) Con 170 MHz: N=170 MHz20 kHz=8500N=\frac{170\text{ MHz}}{20\text{ kHz}}=8500 conteggi (13,0513{,}05 bit, più dei 10 richiesti). Aumentando il clock di kk volte, N=8500 k≤65535N=8500\,k\le65535 (16 bit): k≤7,7k\le7{,}7. Fra 1×,2×,3×,4×1\times,2\times,3\times,4\times il massimo è 4× (clock 680 MHz): massima risoluzione temporale compatibile con il contatore a 16 bit. (b) MR=N=8500⋅4=34000=0x84D0MR=N=8500\cdot4=\mathbf{34000}=\texttt{0x84D0}. (c) Bit effettivi =log⁡234000=15,05=\log_234000=\mathbf{15{,}05} (≈15\approx15 bit). (d) 0,75⋅34000=25500=0x639C0{,}75\cdot34000=25500=\mathbf{0x639C}.

(iv) Motore con PWM a 8 bit, 12 MHz

(a) 256 valori di duty-cycle ⇒N=256\Rightarrow N=256: fPWM,max=12 MHz256=46,875 kHzf_{PWM,max}=\frac{12\ \text{MHz}}{256}=\mathbf{46{,}875\ kHz}. (b) Per ≃15\simeq15 kHz con N=256N=256 si ha PSC=12 MHz15 kHz⋅256=3,125→3PSC=\frac{12\text{ MHz}}{15\text{ kHz}\cdot256}=3{,}125\to\mathbf3 (0x03\texttt{0x03}): f=12 MHz3⋅256=15,625f=\frac{12\text{ MHz}}{3\cdot256}=15{,}625 kHz. (c) 0,232⋅256=59,39→59=0x3B0{,}232\cdot256=59{,}39\to59=\mathbf{0x3B}: deff=59256=0,2305d_{eff}=\frac{59}{256}=0{,}2305. Tensione media: ideale 0,232⋅200=46,40{,}232\cdot200=46{,}4 V, reale 0,2305⋅200=46,090{,}2305\cdot200=46{,}09 V: errore −0,31-0{,}31 V (0,3060{,}306 V in modulo).

Errori comuni

  • Usare il clock del processore (non quello del contatore) per le formule.
  • Confondere il registro di periodo (frequenza) con quello di compare (duty-cycle): CMP1 e CMP2 sono due compare diversi (duty e trigger ADC).
  • Dimenticare che il clock può essere aumentato solo finché N≤65535N\le65535.
  • Scegliere il SET al match sul duty (è per il trailing edge, o per l'impulso invertito).
  • Dimenticare il termine +1+1 sotto radice nell'attenuazione 1+(ω/ωp)2\sqrt{1+(\omega/\omega_p)^2}: a ω/ωp=12,6\omega/\omega_p=12{,}6 la differenza è solo 0,020{,}02 dB, ma vicino al polo l'errore sarebbe grande.

Versione ripasso

Testo. PWM con timer a 16 bit: 200 MHz (12 bit, 15 kHz, leading edge, CMP1, CMP2); 170 MHz a 100 kHz; 20 kHz con clock ×4; motore a 8 bit a 12 MHz (gennaio e febbraio 2025, gennaio 2026, 2006).

Teoria collegata