Go Down

Topic: Leggere la frequenza di un segnale digitale: il duty cycle influisce? (Read 3745 times) previous topic - next topic

Michele Menniti

Il quesito è tutto nel titolo. Devo leggere dei segnali digitali, la frequenza (fissa) può variare nell'intero range di lettura del micro ATmega328P; ho appurato sperimentalmente che oltre i 7MHz inizia a dare i numeri, ma a me bastano ed avanzano 3MHz, quindi sono a posto. Succede ora che in alcuni casi non avrò un duty cycle del 50%, quindi l'onda quadra perfetta, ma potrebbe anche variare dal 10 al 90%, sempre comunque con una frequenza perfettamente stabile.
Il valore della frequenza dovrebbe essere letto mediante l'uso diretto dei timer, il dubbio è: può il valore del duty cycle influenzare tale lettura?
La teoria e la strumentazione mi rispondono no, infatti frequenzimetro e DSO lo ignorano, almeno così mi pare dalle misure che ho eseguito, però non so come "ragiona" il micro.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed


Il valore della frequenza dovrebbe essere letto mediante l'uso diretto dei timer, il dubbio è: può il valore del duty cycle influenzare tale lettura?


Dato che userai solo un fronte per la misura, discesa o salita a tua scelta, questo comporta che il duty cycle non ha alcun effetto per la misura della frequenza dato che il periodo tra due fronti identici consecutivi, nel caso di segnali costanti, è sempre pari al periodo del segnale stesso e il suo inverso alla frequenza.
Va da se che valori del duty cycle molto prossimi agli estremi possono causare un jitter nella lettura, ma non mi pare sia il tuo caso.

Michele Menniti

Grazie, in realtà ho qualche dubbio perché il segnale sinusoidale che applico allo squadratore è "largo" alla base e molto "stretto" in alto, col risultato che ho detto, comunque a giorni farò i primi test di lettura, vediamo che ne esce.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

uwefed


Il quesito è tutto nel titolo. Devo leggere dei segnali digitali, la frequenza (fissa) può variare nell'intero range di lettura del micro ATmega328P; ho appurato sperimentalmente che oltre i 7MHz inizia a dare i numeri, ma a me bastano ed avanzano 3MHz, quindi sono a posto. Succede ora che in alcuni casi non avrò un duty cycle del 50%, quindi l'onda quadra perfetta, ma potrebbe anche variare dal 10 al 90%, sempre comunque con una frequenza perfettamente stabile.
Il valore della frequenza dovrebbe essere letto mediante l'uso diretto dei timer, il dubbio è: può il valore del duty cycle influenzare tale lettura?
La teoria e la strumentazione mi rispondono no, infatti frequenzimetro e DSO lo ignorano, almeno così mi pare dalle misure che ho eseguito, però non so come "ragiona" il micro.

Piú informazioni per favore.....
Ciao Uwe

flz47655

Quote
Il valore della frequenza dovrebbe essere letto mediante l'uso diretto dei timer


Puoi postare il codice che vuoi usare?

Michele Menniti

@ flz: ancora non ho un codice, cerco informazioni per essere sicuro di partire nella giusta direzione.

@ Uwe: che altre info posso darti? se mi fai domande specifiche sono a disposizione, purtroppo non ho fatto foto altrimenti sarei più chiaro; provo a rispiegare il problema: al'uscita di un integrato mi trovo una frequenza che varia in base al segnale in ingresso, ma che comunque è fissa, rientra nel range da 1KHz e 3MHz; poiché ho dovuto adattare il livello dell'integrato all'ingresso CMOS di un divisore, ho usato un transistor sul cui collettore ho un segnale sinusoidale in cui la sezione vista come LOW è molto più ampia di quella vista come HIGH, di conseguenza ho un segnale con duty cycle lontano dal 50%, tipo ___||___||___||___. Gli strumenti di cui dispongo (frequenzimetro e DSO) non risentono di questa cosa e misurano correttamente le frequenze, vorrei sincerarmi che anche il micro sia in grado di leggerle. Astro mi ha chiarito che leggendo l'intervallo tra due rising o falling non c'è possibilità di errore, a meno che il duty cycle non sia così sfavorevole da causare un jitter nella lettura; penso che a questo punto l'unica sia fare qualche foto di segnali al DSO e sottoporvele, farò così appena riesco a tornare al lab.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

cyberhs


astrobeed


Per curiosità: a cosa stai lavorando?


Io lo so perché la mia AstroBox(tm) mi ha già rivelato tutto, però non posso dirvelo altrimenti Michele mi cancella dalla lista degli amici  :smiley-mr-green:

flz47655


Io lo so perché la mia AstroBox(tm) mi ha già rivelato tutto, però non posso dirvelo altrimenti Michele mi cancella dalla lista degli amici  :smiley-mr-green:


E ridaglie col frequenzimetro..   ]:D

Michele Menniti

sgamato :D

Astro, quando seleziono il tuo nome il tasto "delete" sparisce, quindi pur volendo..... :*

@ tutti: ne ho parlato diverse volte, a sprazzi, ma ora finalmente penso di esserci; un paio di giorni fa il mio prescaler RF, di cui Astro è stato Musa Ispiratrice (scusa, ma scritto al maschile mi suona proprio male :smiley-mr-green:) ha letto senza battere ciglio frequenze da 100KHz a 1,1GHz, con sensibilità eccellentissime; fino ad un mese fa ero arenato sui 350MHz, poi l'insperato aiuto di un amico grande esperto di RF, che mi ha dato alcuni INPUT FONDAMENTALI sui percorsi della RF, sulle masse, i filtri di alimentazione, mi hanno fatto raggiungere la perfezione, e dire che il mio obiettivo era 500MHz! La frequenza in ingresso viene divisa prima x40 e poi x10 da due diversi integrati, ecco perché alla fine ottengo max 3MHz. Ho una libreria che ho testato con segnali diretti su Arduino fino a circa 7MHz, e va piuttosto bene, però ho usato duty cycle al 50%. Non mi piace molto questo segnale che ottengo e sto vedendo se riesco a migliorarlo, visto che alla fine, avendo uno stadio per la BF (DC-50MHz) ed uno per i segnali digitali diretti (DC-25MHz), questo strumento diventerà qualcosa di veramente stupendo, quindi non voglio rischiare flop nelle misure.

flz: tu non ci credevi ed invece è fatta :smiley-sweat: comunque l'RF è davvero una brutta bestia, è come l'acqua, si infila dappertutto, anzi peggio, perché l'acqua di fronte ad un ostacolo idrorepellente si ferma, l'RF no, provoca disturbi ed autooscillazioni, aggiungi la mia esperienza 0, non sapevo dove mettere le mani. Pensa che, collegando la massa della sonda del DSO e mettendo il puntale distante 4-5cm il DSO rilevava segnali, al punto che dubitavo del mio piano di massa!! Questo amico mi ha dato alcune indicazioni, che mi è stato facile applicare, anche perché il PCB l'avevo disegnato veramente bene, ragionando sui percorsi, e di colpo è sparito ogni disturbo, non finirò mai di ringraziarlo, così come Astro, ma per lui il grazie ormai è un "conto aperto",  e non certo (solo) per questo lavoro XD.

Nei prox giorni faccio un po' di istantanee dei vari segnali, magari mi aiutate a capire del perché di questo "restringimento" della sinus nel picco alto, responsabile poi della condizione attuale di duty cycle.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

flz47655

Guarda che io ci credevo  ]:D

Se chiedevi a me andava a finire che il tuo segnale lo captavano tutti gli utenti del forum, andava dappertutto tranne che dove volevi ;)
Ecco alcune domande visto che ormai ne hai parlato:
- Come generi 1.1 GHz? Sono onde sinusoidali o quadre?
- BF (DC-50MHz) ????? 50 MHz non è proprio BF...

Quote
poiché ho dovuto adattare il livello dell'integrato all'ingresso CMOS di un divisore, ho usato un transistor sul cui collettore ho un segnale sinusoidale in cui la sezione vista come LOW è molto più ampia di quella vista come HIGH, di conseguenza ho un segnale con duty cycle lontano dal 50%, tipo


Qual'è la frequenza di transizione del transistor? Puoi spiegare meglio questa cosa magari con qualche schema e immagine?

Michele Menniti


Ecco alcune domande visto che ormai ne hai parlato:
- Come generi 1.1 GHz? Sono onde sinusoidali o quadre?

Ho un Generatore RF, onde rigorosamente sinusoidali, ma il primo prescaler mi restituisce un'onda simil-quadra ecco perché mi sarei aspettato di meglio dopo il transistor.

Quote

- BF (DC-50MHz) ????? 50 MHz non è proprio BF...

In genere vengono definiti così questi stadi in "contrapposizione" all'ingresso HF, giusto perché partono dalla DC, alcuni frequenzimetri sdoppiano questo ingresso in DC-10MHz e 10MHz-100MHz; poiché ho una risposta eccellente dal prescaler a me va bene un solo ulteriore ingresso, il limite superiore è dato dal limite di frequenza del circuito di amplificazione del segnale. Il prescaler sotto i 50MHz tende a perdere sensibilità, questo ulteriore stadio si complementa alla perfezione  ;)

Quote

Quote
poiché ho dovuto adattare il livello dell'integrato all'ingresso CMOS di un divisore, ho usato un transistor sul cui collettore ho un segnale sinusoidale in cui la sezione vista come LOW è molto più ampia di quella vista come HIGH, di conseguenza ho un segnale con duty cycle lontano dal 50%, tipo


Qual'è la frequenza di transizione del transistor? Puoi spiegare meglio questa cosa magari con qualche schema e immagine?

Come detto dovrò ritornare al lab e fare qualche screen del DSO; il transistor è un BC817smd:
fT transition frequency IC = 10 mA; VCE = 5 V; f = 100 MHz (min)
Deve amplificare un segnale massimo di 30MHz, quindi dovrei starci dentro senza troppi problemi, l'uscita sul collettore è di circa 4V, il mio dubbio principale deriva dal fatto che a valle c'è un divisore CMOS che, come tale, ha una VIH minima=3,15V; di conseguenza la parte dell'intero segnale vista come HIGH è rappresentata solo da 0,85V superiori del segnale che, come ho detto, è molto stretto. Sto pensando di far passare il segnale a valle del TR in uno Schmitt-Trigger HCT che ha una VIH minima=2,00V, ma devo fare ulteriori verifiche col DSO; l'ultima volta mi sono dedicato a raggiungere le migliori prestazioni possibili sull'RF, la prossima volta cerco di risolvere questa cosa che poi non è detto che sia un problema reale.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

flz47655

Con il transistor che ampiezza ha il segnale di ingresso? Di quanto lo amplifichi?
Ma perché per squadrare l'onda sinusoidale non la fai passare in un semplice op-amp comparatore e dopo la dai in pasto al divisore?

Michele Menniti

#13
Oct 14, 2012, 12:49 pm Last Edit: Oct 14, 2012, 12:50 pm by Michele Menniti Reason: 1

Con il transistor che ampiezza ha il segnale di ingresso? Di quanto lo amplifichi?
Ma perché per squadrare l'onda sinusoidale non la fai passare in un semplice op-amp comparatore e dopo la dai in pasto al divisore?

No, niente stravolgimenti, lo schema è questo e qui lavoro, ho troppo arretrato, non ho il tempo di riprogettare e stampare un altro PCB; l'eventuale Schmitt-Trigger lo sto già usando nello schema ed ho 4 porte libere, sempe che mi risolva la cosa. In realtà il primo divisore mi restituisce un'onda simil-quadra a 4V, che trasferisco tramite un C sulla base del Transistor, dove mi trovo circa 0,7V, per avere nuovamente 4V sul C del transistor, ma questa volta sinusoidali, mi basterebbe ottenere una sinusoide più armoniosa per risolvere il problema.
Un'altra prova che voglio fare è proprio bypassare il TR, l'unico dubbio è se la corrente in uscita dal divisore è sufficiente per pilotare il CMOS.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

flz47655

Vuoi amplificare un segnale a 30 MHz di quasi 6 volte con un transistor con FT di 100 MHz??
Comunque senza schema probabilmente non ho capito una mazza..  ]:D

Go Up