Esercizio 24timer in modalità capture, misura di periodo e di duty-cycle (temi d'esame gennaio 2026 e dicembre 2020)
In questa pagina 5
Testo (tema d'esame gennaio 2026 problema P5; esercizi del 4 dicembre 2020 problema 4).
(i) Il timer a 16 bit di un microcontrollore è configurato in modalità di cattura (capture). Al pin di cattura è applicato un segnale a onda quadra con frequenza tra 1 kHz e 100 kHz. Si desidera misurare il periodo in tempo reale garantendo una precisione della misura almeno dell'1%. L'algoritmo sottrae due valori consecutivi del registro di cattura, salvati a ogni fronte positivo. Determinare: (a) la frequenza minima del clock del timer; (b) la frequenza massima del clock; e, con MHz: (c) il valore ottenuto per il periodo quando è a 26 kHz; (d) l'errore relativo atteso per questa misura.
(ii) Un timer in capture, con contatore a 16 bit e clock di 12 MHz (senza prescaler), misura l'onda quadra a 1 kHz sui fronti di salita. Determinare: (a) la risoluzione temporale; (b) il valore esadecimale teorico del periodo (differenza tra due catture); (c) il valore del contatore al precedente evento di capture, sapendo che all'ultimo evento era .
(iii) Un impulso ha il fronte di salita catturato a , il fronte di discesa a e il successivo fronte di salita a (il contatore è andato in overflow tra le due prime catture). Calcolare larghezza dell'impulso, periodo e duty-cycle.
Teoria usata: 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 →, Numeri binari e complemento a dueI processori lavorano con un numero fisso di bit $n$. I naturali vanno da $0$ a $2^n-1$; per i negativi si usa il complemento a due: $C_2(N)=2^n-N=\overline N+1$ (si invertono tutti i bit e si somma 1). Con $n$ bit rappresenta $-2^{n-1}\le N\le2^{n-1}-1$, ha un solo zero e unifica somma e sottrazione. Quando il risultato esce dall'intervallo c'è overflow; gli overflow intermedi si compensano se il risultato finale è rappresentabile. La lunghezza di parola non è l'accuratezza.Numeri binari e complemento a due →.
Principio
In capture il contatore del timer è in free-run (a ) e a ogni evento sul pin ne salva il valore in un registro. Se e sono due catture successive sullo stesso tipo di fronte, il periodo in conteggi è (modulo ) e il periodo del segnale . L'errore di quantizzazione è di conteggio (1 LSB ): errore relativo .
(i) Specifiche di precisione
(a) Frequenza minima. L'errore relativo è peggiore alla frequenza più alta ( kHz): per averlo : (a 100 kHz il periodo vale 100 conteggi: ). (b) Frequenza massima. Il periodo più lungo ( kHz) non deve superare un giro del contatore: (con un solo overflow tra due catture la sottrazione resta corretta; con più di uno la misura è errata). (c) Con MHz e kHz: conteggi (cioè s; il periodo vero è s). (d) Errore relativo atteso: (un LSB ns su s).
(ii) Capture a 12 MHz, onda a 1 kHz
(a) Risoluzione temporale: . (b) Periodo teorico: conteggi. (c) Se all'ultimo evento , il precedente era : il contatore è andato in overflow tra le due catture (da a , poi da 0 a ) e la sottrazione senza segno dà comunque il risultato corretto.
(iii) Larghezza e duty-cycle
Le differenze si fanno modulo (aritmetica circolare):
- larghezza (fronte di discesa meno fronte di salita): conteggi;
- periodo (salita-salita): conteggi;
- duty-cycle . Il risultato non dipende dall'overflow, purché la durata misurata non superi conteggi: qui .
Errori comuni
- Credere che l'overflow del contatore falsi la misura: con una sola occorrenza la differenza modulo è corretta.
- Cercare minima con la frequenza più bassa (è la più alta a dare l'errore relativo peggiore) e massima con la più alta (la più bassa è quella che potrebbe fare più di un giro).
- Dimenticare che l'errore di un conteggio è un errore relativo pari a .
- Confondere larghezza dell'impulso (due fronti diversi) con il periodo (due fronti uguali).
Versione ripasso
Testo. Capture a 16 bit: clock per precisione 1% con kHz; misura a 50 MHz e 26 kHz; 12 MHz e 1 kHz; larghezza e duty con overflow (gennaio 2026, dicembre 2020).
- (i) MHz; MHz; , errore .
- (ii) risoluzione ns; periodo ; cattura precedente .
- (iii) larghezza , periodo , duty .
- Errori: overflow = errore; estremi di frequenza scambiati; errore assoluto/relativo; larghezza = periodo (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 →).