misure di alta frequenza

salve a tutti,

sto leggendo in giro molti progetti di frequenzimetri, ma mi sfugge il principio di base.
Come si puo misurare una frequenza di 50/100 mhz con un oscillatore che fornisce un clock da 16mhz o peggio da 4mhz.

Se la frequenza da misurare e' piu bassa di quella del clock siamo daccordo:
1 conto gli impulsi del segnale da misurare in un certo intervallo di tempo (dato dal clock)
2 conto il numero di impulsi di clock che cadono dentro un periodo del segnale da misurare

ma nel caso che il segnale e' molto piu veloce del clock quale e' il principio?

Semplicemente non si può, ma esistono i frequenzimetri, un processore o un microcontrollore ha compiti più nobili, mica quello di fossilizzarsi a leggere una frequenza direttamente sprecando il suo tempo, questi compiti si delegano a IC dedicati allo scopo.

Michele aveva presentato un frequenzimetro che va bene per te.
http://www.michelemenniti.it/elettronica_in.html
http://www.elettronicain.it/mymain/riviste/anteprime/frequenzimetro/frequenzimetro.pdf
http://forum.arduino.cc/index.php?topic=145059.15
Ciao Uwe

ti assicuro che e' possibile! tuttora a laboratorio misuro una frequenza di 352MHz con un timer/counter dotato di oscillatore da 10MHz...

se dai un occhiata in rete trovi progetti con mcu atmega16 e atmega32 di frequenzimetri a 50MHz

prima di provare magari con arduino o con l'atmega328 vorrei capire il principio con il quale si calcola una frequenza piu alta del clock

uwefed:
Michele aveva presentato un frequenzimetro che va bene per te.
http://www.michelemenniti.it/elettronica_in.html
http://www.elettronicain.it/mymain/riviste/anteprime/frequenzimetro/frequenzimetro.pdf
Frequenzimetro Digitale con micro ATMEL - FINITO - - Software - Arduino Forum
Ciao Uwe

grazie Uwe dei link ma non viene spiegato il principio di funzionamento, viene solo descritto il frequenzimetro e le sue caratteristiche tecniche... io stavo cercando di capire il principio do come si misura una frequenza piu alta del clock

inserisci tra l'ingresso del Micro e la frequenza da misurare un prescaler, che ti divide la frequenza x10, x20, etc etc

sobrano:
ma nel caso che il segnale e' molto piu veloce del clock quale e' il principio?

Molto semplice, tutti i frequenzimetri di questo mondo non fanno altro che contare il numero di impulsi in ingresso in un determinato tempo, tipicamente 1 secondo, quindi quello che serve è solo una base dei tempi molto precisa e non un clock maggiore della frequenza che devi misurare.
Nel caso degli ATmega la frequenza da misurare si invia in ingresso ad un timer settato in modalità counter e si leggono quanti count avvengono in un secondo.
Si deve tenere conto degli overflow del counter, tramite interrupt, in quanto al massimo può rappresentare un valore pari a 65535, e della massima frequenza ammessa in ingresso che è circa 8 MHz, per frequenze maggiori si usa un prescaler prima del counter.

triac60:
un processore o un microcontrollore ha compiti più nobili, mica quello di fossilizzarsi a leggere una frequenza direttamente sprecando il suo tempo,

Peccato che tutti i frequenzimetri decenti sono realizzati proprio con micro, più vario hardware, se non fpga.

astrobeed:
Molto semplice, tutti i frequenzimetri di questo mondo non fanno altro che contare il numero di impulsi in ingresso in un determinato tempo, tipicamente 1 secondo, quindi quello che serve è solo una base dei tempi molto precisa e non un clock maggiore della frequenza che devi misurare.
Nel caso degli ATmega la frequenza da misurare si invia in ingresso ad un timer settato in modalità counter e si leggono quanti count avvengono in un secondo.
Si deve tenere conto degli overflow del counter, tramite interrupt, in quanto al massimo può rappresentare un valore pari a 65535, e della massima frequenza ammessa in ingresso che è circa 8 MHz, per frequenze maggiori si usa un prescaler prima del counter.

intanto grazie per la risposta perche mi stai facendo capire che dentro i mcu c e qualcosa che lavora indipendentemente dal clock (immagino qualcosa di analogico che scrive i conteggi in un registro a 16bit(65536 numeri).
Mi sembra obbligatorio quindi che le scritture nel registro del timer che tiene conto degli impulsi del segnale in ingresso devono avvenire piu velocemente del clock!!
Immagino pero che almeno la lettura del numero che sta scritto dentro al registro deva avvenire a tempo di clock, quindi se il clock e' 1MHz io mi vado a leggere 1 volta ogni microsecondo il numero. Al massimo ci puo essere scritto 65535 quindi una frequenza di 65535 impulsi ogni microsecondo ovvero 65,535GHz...

sbaglio da qualche parte?

p.s.
Per adesso conosco pochissime cose: il registro di controllo TCCR con cui setto il prescaler, e il contatore interno il TCNT1 (nel caso di 16bit) ma ho sempre immaginato che questo conta ("apre gli occhi") sempre in corrispondenza di un impulso di clock...quindi il timer di cui parli deve essere un altra cosa

sobrano:
(immagino qualcosa di analogico che scrive i conteggi in un registro a 16bit(65536 numeri).

No è totalmente digitale, i timer dei micro/mcu altro non sono che dei contatori a cui viene applicato un clock, il clock può essere sia interno al micro/mcu, quindi legato al clock della cpu e la relativa catena di eventuali pll e prescaler, oppure può essere esterno al micro, come nel caso del frequenzimetro, dove il segnale da misurare diventa il clock del timer.
Il clock interno del micro, tramite un ulteriore timer, viene usato per la base dei tempi in modo da poter leggere ad ogni intervallo previsto, p.e. 1 s, il contenuto del timer usato come contatore, più è preciso il clock del micro e maggiore è la precisione del frequenzimetro.
Il limite è dato non dal clock del micro/mcu ma dalle caratteristiche hardware del timer che ha una sua frequenza massima di lavoro sugli input esterni, nel caso degli AVR è circa 8 MHz, nel caso di altri micro come i PIC è 50 MHz.
Come ho rimarcato prima il timer degli AVR al massimo è da 16 bit, se non solo 8, pertanto per poter conteggiare milioni di conteggi in un secondo è necessario tenere conto degli overflow (passaggi per lo 0) del timer durante il periodo di conteggio e questo si fa tramite interrupt, alla fine del tempo di conteggio si somma il valore contenuto nel timer con il prodotto di 2^16, o 2^8 se il timer è da 8 bit, e il numero di overflow ed hai il valore della frequenza.

Come dice Astro ... e per aggirare la cosa, semplicemente, si usano dei divisori all'ingresso (prescaler) ... in effetti ci sono diverse possibili soluzioni, ma le due piu comuni sono i prescaler ed i contatori esterni ...

Quella dei contatori esterni, comunque, e' una soluzione che era usata in passato, ma ormai non si usa piu ... ... si mandavano gli impulsi da contare ad una catena di contatori esterni in grado di funzionare a frequenze maggiori di quelle del micro che gestiva il tutto (pensiamo ai vecchi micro a 4 o 8 MHz, mentre dei normali contatori HCT funzionavano tranquillamente anche a 70 e passa MHz ... e con la base dei tempi leggevi una volta al secondo i contatori (il mio primo frequenzimetro non aveva neppure un micro, parliamo del '75, era una semplice catena di contatori decimali attaccati ai display attraverso dei latch, con una base tempi quarzata e basta ... e funzionava pure :stuck_out_tongue: :D)

Rimane il prescaler, che e' un divisore velocissimo, di solito per 32, 64, 128, 256 o 512, dipende dal modello ... basta dire al micro che ogni impulso in uscita dal divisore sono 256 o 512 impulsi (o quello che e' l'uscita del prescaler), ed hai gia moltiplicato il fondoscala del tuo frequenzimetro :wink: ... ovviamente, perdi la lettura delle ultime cifre, ma in genere per frequenze molto alte, non le si considera neppure ... ad esempio, se hai un frequenzimetro che legge 10MHz e gli metti un prescaler da 256, diventa da 2.5GHz (teoricamente, perche' poi bisogna considerare la frequenza massima del prescaler ... in genere comunque funzionano sul GHz e poco piu, quindi avresti comunque uno strumento in grado di leggere almeno 1GHz) ... a quel punto, ovviamente, perdendo le ultime 3 cifre, leggeresti ad esempio 945.234 KHz, e sapere che la frequenza e' 945.234.102 Hz oppure 945.234.105 Hz non te ne fregherebbe molto, perche' nel campo delle microonde non esiste praticamente nessun filtro con pendenze simili ... :wink:

Diverso e' il caso di apparati da laboratorio usati per misure campione o certificazioni, che leggono in GHz con risoluzioni di 1Hz o addirittura 0.1Hz ... ma a questo punto siamo nel campo di strumenti talmente costosi e complessi che praticamente nessun hobbysta potrebbe permettersi ... ad esempio, un Tektronix MCA3040, che non e' neppure il massimo, dato che arriva "solo" (:P) a 40GHz, costa in media la modica cifra di 13.000 dollari ... e c'e' anche "robaccia" da quasi 100GHz, mooooooolto piu costosa :stuck_out_tongue: :smiley:

astrobeed:
il segnale da misurare diventa il clock del timer.

questo e' il punto cruciale che mi mancava credo... praticamente posso attaccare ai pin XTAL1 e XTAL2 un "oscillatore" da 1GHz (che in realta sarebbe il segnale da misurare e non un oscillatore) senza danneggiare nulla...

ho appena dissaldato da una vecchia scheda grafica un oscillatore "AKER AXO-400B" da 27,000MHz
provo ad attaccarci quello per iniziare, e vedo se riesco a leggere i 27MHz...

p.s. ho sempe letto in giro che gli oscillatori interni dei micro non sono precisi, non sarebbe ideale usare un oscillatore esterno? (credo che servirebbero 4 pin XTAL a questo punto: 2 per il segnale e 2 per l'oscillatore esterno)

sobrano:
... praticamente posso attaccare ai pin XTAL1 e XTAL2 un "oscillatore" da 1GHz ...

Ehm, no ... il clock del timer, non il clock del micro ... sono due concetti leggermente diversi :wink:

Ed in ogni caso, sei comunque limitato dalla massima frequenza a cui puo lavorare il componente ... se il timer ad esempio non accettasse piu di 20MHz, collegandoci una frequenza maggiore, semplicemente non funzionerebbe nulla ...

:frowning: ancora non ho capito allora..ma credo che ci sono vicino.

Quindi il mio segnale da misurare dove dovrei attaccarlo? al pin clk? o ad una porta specifica (tipo il pin T1) e usare il TCNTn e l'OCR per contare - comparare?

Ciao, i principi ti sono stati spiegati molto bene da gente più esperta di me, quindi personalmente non posso aggiungere altro, se non ciò che ho fatto nel mio progetto, di cui ti ha parlato UWE.
Posto che ho usato un micro con un oscillatore quarzato esterno, invece del normale quarzo, oltre ad altre tecniche, per garantirmi una maggiore precisione, il micro, mediante l'uso di una specifica libreria "frequency counter" conta appunto gli impulsi applicati al pin 11. Come ti è stato spiegato il limite massimo dei micro AVR a 8bit è di circa 8MHz, ma tale limite diminuisce se la frequenza da misurare non ha un duty cycle perfetto al 50%; nel mio caso sono arrivato a 6MHz scarsi. Davanti al micro ho previsto tre diversi stadi:

  • uno di BF, frequenza max 10MHz, lo stadio termina con un TTL HCT divisore per 10 e quindi al pin 11 arriva una frequenza max di 1MHz
  • uno per segnali digitali CMOS e TTL, frequenza max 50MHz, anche qui termino con un divisore come il precedente, quindi arrivo al micro con max 5MHz
  • uno per segnali RF frequenza max 1,1GHz, in questo caso la divisione è doppia, prima c'è un prescaler che divide per 40, quindi restituisce max 27,5Mhz, e poi il solito divisore per 10, quindi faccio arrivare al micro una frequenza di 2,75MHz.
    Come vedi in nessun caso applico al micro una frequenza maggiore di 5MHz.
    Naturalmente le frequenze misurate vengono poi moltiplicate via software per il relativo fattore di divisione, e quindi visualizzo la misura della frequenza reale.
    Altri micro, come i PIC possono leggere direttamente fino a 50MHz, se avessi usato uno di questi mi sarei semplificato la vita dal punto di vista circuitale, ma io non li conosco e non li so programmare, quindi mi sono "arrangiato" con ciò che sapevo fare, però il risultato è stato davvero eccellente.

grazie Michele,
adesso ho capito! In realta qualcuno mi aveva gia risposto ma non so per quale ragione io pensavo sempre al prescaler interno 1/8/64... e invece il prescaler e' ovviamente esterno al micro.

Grazie a tutti per le risposte

astrobeed:
Peccato che tutti i frequenzimetri decenti sono realizzati proprio con micro, più vario hardware, se non fpga.

Ecco appunto 'più vario hardware'

Il senso della mia frase se non si è capito lo spiego meglio:

non si può leggere direttamente una frequenza elevata attraverso un pin del processore.

triac60:
non si può leggere direttamente una frequenza elevata attraverso un pin del processore.

Dipende dal processore, con un pic arrivi fino a 50 MHz, con un STM32 puoi arrivare oltre 200 MHz, il vario hardware era riferito alla parte di condizionamento dei segnali, che è decisamente più complessa e critica rispetto a quella digitale.