Leggere la frequenza di un segnale digitale: il duty cycle influisce?

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.

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.

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.

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

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

Puoi postare il codice che vuoi usare?

@ 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.

Per curiosità: a cosa stai lavorando?

cyberhs:
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 :grin:

astrobeed:
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 :grin:

E ridaglie col frequenzimetro.. ]:smiley:

sgamato :smiley:

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 :grin:) 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 :sweat_smile: 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.

Guarda che io ci credevo ]:smiley:

Se chiedevi a me andava a finire che il tuo segnale lo captavano tutti gli utenti del forum, andava dappertutto tranne che dove volevi :wink:
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...

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?

flz47655:
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.

  • 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 :wink:

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.

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?

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?

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.

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.. ]:smiley:

flz47655:
Comunque senza schema probabilmente non ho capito una mazza.. ]:smiley:

Vero :smiley:

Sarà secondo me lo schema misterioso ed innominabile.. ]:smiley:

astrobeed:

flz47655:
Comunque senza schema probabilmente non ho capito una mazza.. ]:smiley:

Vero :smiley:

  • 1 :stuck_out_tongue_closed_eyes:

@flz: sta lavorando no? ho detto che ne sto facendo solo una questione di duty cycle, è evidente che è tutto funzionante, per fine settimana prox avrò le altre prove, c'ho ragionato molto e credo che ormai la strada da seguire sia una delle due che ho detto; poi aggiorno il Topic

A rilevare duty cycle diverso da 50% non c'è problema
Ovvio che senza schemi e maggiori informazioni non ti possiamo aiutare sugli altri problemi
Ciao

flz47655:
Ovvio che senza schemi e maggiori informazioni non ti possiamo aiutare sugli altri problemi

No problem, io so esattamente quello che sta facendo Michele e gli ho già dato luce verde all'inizio di questo topic :smiley: