Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Circuito start-stop contatore

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[1] Circuito start-stop contatore

Messaggioda Foto Utentekevinpirola » 11 set 2014, 0:25

Ciao a tutti, per il solito progetto universitario sto progettando un contatore che mi permetta di determinare con precisione lo sfasamento tra due segnali, nello specifico devo contare il numero di colpi di clock che intercorrono tra due fronti di salita di 2 segnali.

Il primo segnale è a 1Hz, il secondo segnale è a 50Hz, il clock è a 20MHz. prendendo un contatore ad esempio un 4040 è facile contare solo ed esclusivamente il periodo che intercorre tra i due fronti, basta tramite una porta AND passarci dentro il clock e un segnale di abilitazione che vada alto al fronte di salita del primo segnale e scenda al fronte di salita del secondo.

Sono giusto alla conclusione del mio ragionamento con questo circuito:



Però l'affidabilità dipende inversamente dalla larghezza dell'impulso che dovrei cercare di tenere attorno all'ordine dei nanosecondi.

Avete qualche idea su come fare?

Modifico il messaggio per aggiungere una breve spiegazione del circuito.
Ipotizzo che OUT sia a livello LOW, ad ogni colpo di 50Hz il flipflop D continuerà ad aggiornare il suo Q con il valore 0 (ingresso DATA). All'ingresso della OR avrò quindi uno 0, ogni cambiamento del clock ad 1Hz si ripercuoterà direttamente sul JK. Il clock 50Hz è praticamente disabilitato, non ha effetto sull'uscita.

Nel momento in cui arriva un fronte di salita del clock 1Hz il flipflop JK (in configurazione TOGGLE) commuta le uscite invertendole (in questo caso da 0 a 1).

Al successivo colpo di clock 50Hz (e so che sicuramente viene prima questo clock per ovvie ragioni matematiche) il flipflop D commuta l'uscita da 0 a 1. Questo passaggio da 0 a 1 non è altro che un fronte di salita per il JK che commuterà di nuovo, in questo caso da 1 a 0, finendo nello stato stabile.


Il problema si presenta se l'impulso da 1Hz è troppo lungo che si sovrappone al clock di salita dell'impulso a 50Hz successivo, in tal caso il passaggio da 0 a 1 della commutazione del flipflop D sarebbe mascherato dal livello alto che ha ancora il segnale a 1Hz.
Che la forza sia con te.
- E con il tuo spirito.
Avatar utente
Foto Utentekevinpirola
319 4 9
Expert
Expert
 
Messaggi: 310
Iscritto il: 14 dic 2011, 18:52

1
voti

[2] Re: Circuito start-stop contatore

Messaggioda Foto Utenteboiler » 11 set 2014, 9:45

Ci sono diversi problemi.

Il piú banale è che un 4040 ha 12 bit, a te ne servono almeno 19. Quindi dovresti metterne due in cascata.

Il secondo problema è che mescoli dati e clock. È l'inizio della fine. È la scatola di Pandora. È come mangiare peperoncino con l'ulcera :mrgreen:
Il clock deve avere fianchi puliti senza glitches. I dati possono avere tutti i glitches che vogliono, a patto che siano stabili al momento del fianco attivo del clock. Se tu mandi clock e dati in una porta AND avrai all'uscita un "clock" (tra virgolette perché indegno di questo nome) pieno di glitches che verranno contati dal counter come impulsi sani.

Ci sono due modi per risolvere questo tipo di problema:
  • Il primo funziona (che io sappia) solo all'interno di FPGA, CPLD o ASIC perché ci vogliono dei componenti che non ho mai visto al di fuori delle librerie per questo tipo di oggetto. Sono clock buffers che assicurano l'accensione, spegnimento o switching di un clock senza glitches. Vedi per esempio la descrizione del BUFGMUX_CTRL in http://www.xilinx.com/support/documenta ... /ug362.pdf
  • Quello semplice e che funziona sempre è di usare un counter con ingresso enable. All'interno del counter c'è poi una logica che si occupa del clock-gating. Attenzione: sta a te assicurare che il segnale di enable sia stabile durante le condizioni di setup e hold!

Il terzo problema è che hai due domini di clock (50 Hz e 1 Hz) che entrano nel dominio di clock dei 20 MHz. Qui hai il rischio sempre in agguato della metastabilità. Si ha metastabilità quando il segnale sincrono con un clock viene dato in ingresso ad un FF clockato da un altro dominio. Se i dati in ingresso variano all'interno delle condizioni di setup e hold, l'uscita non passa necessariamente ad un livello logico definito, ma può iniziare ad oscillare o assumere un valore di tensione che non rappresenta né uno 0 né un 1. Dopo un certo periodo di tempo (di solito indicato nei data-sheets) la metastabilità si risolve e il FF passa ad un livello logico valido.

Questo problema si risolve introducendo sincronizzatori ad ogni passaggio di dominio. Sono semplicemente catene di FF tipo D che hanno come clock il clock del dominio in cui entri. Se si verifica metastabilità nel primo FF, si spera che questa si risolva entro un ciclo e che quindi il secondo abbia un segnale valido in entrata. In base al periodo di clock e al tempo di risoluzione della metastabilità si stima il rischio e si sceglie la lunghezza della catena. Questo ovviamente introduce latenza, ma se fatto su ambo gli ingressi con catene di lunghezza uguale non credo che per la tua applicazione sia un problema (ma questo puoi dirlo con certezza solo tu...)

Resta poi il problema che hai sollevato tu, ma alla luce di quanto detto sopra, credo che hai già abbandonato l'idea di usare quel circuito. O almeno spero :twisted:

Hai scritto che è un lavoro universitario. Ogni università che si rispetti ha cassetti pieni di evaluation boards di FPGA e CPLD. Se hai un'infarinatura di VHDL risolvi il tuo problema in mezza giornata...

Altrimenti sviluppa una Finite State Machine e costruiscila con componenti discreti. A naso non ti serviranno piú di 3 bit, quindi la complessità non sarà eccessiva.

Saluti Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[3] Re: Circuito start-stop contatore

Messaggioda Foto Utenteobiuan » 11 set 2014, 11:00

Oltre a tutte le ottime osservazioni di Boiler che condivido al 100%, aggiungo:

Kevinpirola ha scritto:Al successivo colpo di clock 50Hz (e so che sicuramente viene prima questo clock per ovvie ragioni matematiche) il flipflop D commuta l'uscita da 0 a 1. Questo passaggio da 0 a 1 non è altro che un fronte di salita per il JK che commuterà di nuovo, in questo caso da 1 a 0, finendo nello stato stabile.


Mi pare sia errato. All'arrivo della commutazione da 0 a 1 del Flip Flop D, l'OR di ingresso passerebbe da 10 a 11, mantenendo quindi l'uscita a 1. Nessun fronte dunque per il JK che non commuterà fino all'arrivo del primo fronte di clock a 50Hz successivo al fronte di discesa del clock a 1Hz.

in ogni caso, è una considerazione inutile perché per quanto detto da boiler quel circuito non andrebbe bene anche non ci fosse questo problema. Non puoi usare più clock fra loro non sincroni in un circuito sequenziale, mai. In questi casi, usi il più veloce come clock e gli altri come segnali logici che sincronizzi col clock.
_______________________________________________________
Gli oscillatori non oscillano mai, gli amplificatori invece sempre

Io HO i poteri della supermucca, e ne vado fiero!
Avatar utente
Foto Utenteobiuan
5.894 3 10 13
Master
Master
 
Messaggi: 980
Iscritto il: 23 set 2013, 23:45

1
voti

[4] Re: Circuito start-stop contatore

Messaggioda Foto UtenteBrunoValente » 11 set 2014, 14:10

Non so se ho compreso correttamente la questione, correggetemi se sbaglio ma mi pare che il requisito principale da pretendere sia la completa indipendenza del valore raggiunto dal contatore (fase) dal duty cycle dei due segnali in ingresso.
A tale scopo mi pare possa funzionare la seguente soluzione



La sequenza si riferisce al caso in cui A e B hanno la stessa frequenza ma dovrebbe funzionare ugualmente anche quando le frequenze sono diverse
Avatar utente
Foto UtenteBrunoValente
39,6k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7796
Iscritto il: 8 mag 2007, 14:48

0
voti

[5] Re: Circuito start-stop contatore

Messaggioda Foto Utentekevinpirola » 11 set 2014, 20:17

Ringrazio tutti per le risposte, oggi in laboratorio ho cercato di concentrarmi su questo argomento così da avere certezze e stabilità.

Parto con Foto Utenteboiler:

FPGA e compagnia bella: l'obiettivo è tenere il costo del circuito nell'ordine dei centesimi, non ha senso per fare una cosa così semplice usare un fpga, sarebbe uno spreco assoluto di risorse. L'eventuale alternativa (ma che esula dal mio compito attuale) sarebbe quella di trovare un microcontrollore che lavori a frequenze superiori a 20MHz che faccia al caso mio, ormai la stragrande maggioranza dei chip include alcuni pin che eseguono esattamente quello di cui ho bisogno, ma questo sarebbe lo step successivo che probabilmente la mia tesi non sarà in grado di toccare.

Finite state machine:

si, ho provato, ma lavorare con i fronti dei clock non l'ho mai fatto, ho ipotizzato, sbagliando, che il bit di uscita fosse uno e quindi gli stati fossero 2, o 0 oppure 1. Il collegamento tra i due però mi risulta complesso.

C'è da dire che 1Hz e 50Hz NON sono dei clock, sono dei segnali che arrivano dal "campo" e sono con buona approssimazione a quelle frequenze.

Oggi ho simulato il circuito che ho presentato nel primo messaggio, tenendo la durata dell'impulso da 1Hz abbastanza bassa (circa 40ns) non ho avuto alcun problema di sorta, inoltre la tabella di verità (e qui tiro in ballo Foto Utenteobiuan) dà come stato "degenere" solo ed esclusivamente quello stato in cui si presenta il fronte di salita dal secondo flip-flop mentre il segnale 1Hz è ancora alto.
Con un segnale in ingresso (chiamo quello da 1Hz lo "start") abbastanza breve la probabilità che il dispositivo vada in stato degenere è molto scarsa, se l'impulso di start inoltre è minore del tempo di propagazione attraverso i due flip-flop allora è impossibile che si presenti un fronte d'onda positivo in uscita al secondo FF mentre il primo è ancora alto.

Tenendo inoltre l'impulso nell'ordine di grandezza paragonabile con un battito di clock a 20MHz potrei inoltre concludere che se il FF cade nello stato degenere allora lo sfasamento tra start e stop non è sufficientemente basso da essere calcolato, situazione che mi può andare bene che verrebbe identificata con "sfasamento 0".

Sto seriamente però valutando quello che mi avete detto per quanto riguarda la metastabilità, simulando però il circuito "idealmente" con simulink non ho riscontrato problemi e con una prova su breadboard (con componentistica infima a maltrattata, ben lontana dali HC che dovrò usare) il segnale di uscita dal circuito è corretto e non sono riuscito a far cadere il FF nello stato degenere.


Per quanto riguarda la AND con il clock, dentro la AND capita solo un enable che sta alto esclusivamente per il tempo in cui il counter deve contare, quindi a parte i due fronti (posso perdere si e no un paio di colpi di clock) non dovrei avere problemi perché l'atro segnale è esattamente il clock (che è una ciofeca già di suo e devo provare a sistemare).


Foto UtenteBrunoValente, sei sempre preciso come sempre difatti il circuito che hai disegnato assomiglia molto a quello che ho disegnato io solo che usa una xor dopo, ma la teoria di mettere i segnali in ingresso al clock è la stessa, domani proverò a verificare se è stabile con duty-cycle più interessanti.
Che la forza sia con te.
- E con il tuo spirito.
Avatar utente
Foto Utentekevinpirola
319 4 9
Expert
Expert
 
Messaggi: 310
Iscritto il: 14 dic 2011, 18:52

0
voti

[6] Re: Circuito start-stop contatore

Messaggioda Foto Utenteboiler » 11 set 2014, 21:27

kevinpirola ha scritto:FPGA e compagnia bella: l'obiettivo è tenere il costo del circuito nell'ordine dei centesimi


Non ignorare la "compagnia bella".
Una Altera MAX V costa 90 centesimi di dollaro e fa tutto.
Un HC4040 costa 78 centesimi di dollaro e fa metà del counter.

ho provato, ma lavorare con i fronti dei clock non l'ho mai fatto


Dimenticati del fatto che siano dei clock. Sincronizzali con una catena di FF tipo D clockati a 20 MHz e considerali segnali. Aggiungi un ulteriore FF-D alla fine della catena. Il segnale prima dell'ultimo FF-D e dopo di esso puoi usarlo per la detezione di un fianco (se x_{-1} = 0 e x_{0} = 1 hai un fianco positivo, viceversa uno negativo). Questo è uno degli input (sincronizzati a 20 MHz) della tua FSM (che viaggia a 20 MHz). L'altro input è la stessa cosa fatta sull'altro ingresso.

Mi sembra che ora tu abbia tutto per farti la tua FSM :ok:

C'è da dire che 1Hz e 50Hz NON sono dei clock


A maggior ragione non puoi usarli come tali!

simulando però il circuito "idealmente" con simulink non ho riscontrato problemi


Su simulink non vedrai mai la metastabilità! Per simulink i gates sono ideali.

il segnale di uscita dal circuito è corretto e non sono riuscito a far cadere il FF nello stato degenere.


Quante ore è durato il tuo test? Quale è la probaibilità di aver coperto tutti gli angoli di fase tra i tre clock?
Parli di un prodotto che deve costare "centesimi", quindi immagino una produzione in grosse serie. Sento puzza di problemi anche a distanza e attraverso l'internet.

Per quanto riguarda la AND con il clock, dentro la AND capita solo un enable che sta alto esclusivamente per il tempo in cui il counter deve contare, quindi a parte i due fronti (posso perdere si e no un paio di colpi di clock)


Non preoccuparti, non ne perderai, ne guadagnerai. :evil:
L'enable è un segnale e non un clock. Il motivo per cui non puoi miscelarlo con un clock è che può avere (meglio: ha sicuramente) glitches. Un'immagine vale piú di cento parole. Hai un FF di tipo D:



Questo comportamento è perfettamente accettabile ed è anche quello che avviene durante il propagation delay. Se Q è il tuo enable che entra nella porta AND assieme al clock e il clock in quel momento è alto, allora il tuo counter vedrà 3 fianchi attivi e conterà di conseguenza.

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[7] Re: Circuito start-stop contatore

Messaggioda Foto Utentekevinpirola » 11 set 2014, 21:58

Ed oltre la FSM con 4 FF non esiste altro metodo per uno start-stop?

Comunque il progetto di tesi, in quanto tale, morirà dentro uno scatolone da qualche parte in laboratorio, però lo sviluppo è proprio incentrato al semplice perché esistono in commercio oggettini che fanno la stessa cosa ma costano centinaia di migliaia di euro.

Domani provo a lavorare con la FSM, anche se ancora non ho le idee chiare...

EDIT:
Resta il fatto che comunque devo far passare il clock in una AND, perché il 4040 non ha un segnale di enable, e altri contatori non viaggiano ad alta velocità
Che la forza sia con te.
- E con il tuo spirito.
Avatar utente
Foto Utentekevinpirola
319 4 9
Expert
Expert
 
Messaggi: 310
Iscritto il: 14 dic 2011, 18:52

0
voti

[8] Re: Circuito start-stop contatore

Messaggioda Foto Utenteboiler » 11 set 2014, 23:00

kevinpirola ha scritto:Ed oltre la FSM con 4 FF non esiste altro metodo per uno start-stop?


4 FF? Te ne servono almeno almeno 6. Forse 7.
Per ogni canale di entrata uno di sincronizzazione e uno di ritardo. Fa 4.
In agguiunta quelli che lo stato della FSM.

Un altro modo?
Piú complicato di sicuro.
Propongo un time-to-amplitude converter in cui il segnale a 1 Hz scarica la capacità quando basso, i 20 MHz la caricano attraverso un integratore e il fianco del 50 Hz triggera l'ADC (che deve essere apocalitticamente veloce). Costerebbe un botto farlo bene ma funzionerebbe probabilmente meglio della semi-ciofeca sulla quale stiamo ragionando.
Scusa se sono franco, ma chiedi aiuto, ti si dice che non va bene e tu vuoi continuare su quella strada?

Quale è concretamente il problema?

Ripeto ancora una volta, anche se non sembra interessarti, che ci sta tutto (detezione dei fianchi, FSM e counter) in una CPLD da 90 centesimi di dollaro. Anche il PCB ha il suo prezzo. Se calcoli anche la riduzione del footprint rispetto ad un'accozzaglia di logica discreta, la mia soluzione stra-vince.

ma costano centinaia di migliaia di euro.


Se mi parli da una parte ci 100'000 euro e dall'altra di centesimi, possiamo anche farlo costare 10 euro. Da un punto di vista del pricing non fa nessunissima differenza.

Domani provo a lavorare con la FSM, anche se ancora non ho le idee chiare...


Io, così, tra una birra e l'altra, userei i seguenti stati: attesa_fianco_1_positivo, conta, attesa_fianco_1_negativo

A te definire le transizioni tra uno stato e l'altro nonché l'output.

Resta il fatto che comunque devo far passare il clock in una AND, perché il 4040 non ha un segnale di enable, e altri contatori non viaggiano ad alta velocità


http://www.toshiba.com/taec/components2 ... EN_395.pdf
Resta aperta la domanda sulla CPLD che si farebbe 100 MHz fischiettando.

Tra l'altro... cosa te ne fai dei 19 segnali binari che indicano il valore del counter alla fine del processo di conta. Non credo che tu voglia mandarli a 19 LED, no?
E come fai la detezione della fine del processo di conta?

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[9] Re: Circuito start-stop contatore

Messaggioda Foto Utentekevinpirola » 11 set 2014, 23:44

Lo so che cpld e fpga sono più semplici e più veloci, ma devo farlo il logica discreta, altrimenti non starei a sbatterci la testa sopra ;)

boiler ha scritto:Scusa se sono franco, ma chiedi aiuto, ti si dice che non va bene e tu vuoi continuare su quella strada?


Non ti arrabbiare, non ce n'è bisogno, ma non mi basta sapere che non va bene, mi serve capire perché (e le tue motivazioni mi sembrano buone) e soprattutto perché dopo 8 ore di prove con generatori di frequenza sfasati di 0,001 Hertz il circuito che ho progettato io non è andato in pappa. D'altronde devo studiare tutte queste cose per farci una relazione sopra.

Soprattutto adesso sono a casa, e più di disegnare FSM non posso fare perciò lascio andare l'immaginazione e cerco di trovare varie soluzioni, fermo restando che sicuramente proverò in laboratorio le varie alternative che mi sono state presentate.


Discutendo sul counter, il 592 non è di facile reperibilità (rs non lo ha fino a ottobre -tardi- e distrelec non ha SMD. farnell manco lo trova). Quindi sarei castrato in partenza, ma comunque ne discuterò col relatore. (senza contare che ne servono 3 invece di 2)

Tra l'altro... cosa te ne fai dei 19 segnali binari che indicano il valore del counter alla fine del processo di conta. Non credo che tu voglia mandarli a 19 LED, no?

Logic Analyzer

E come fai la detezione della fine del processo di conta?

All'arrivo del segnale a 1 hertz aspetto 800ms poi resetto il counter. L'altro segnale è sicuramente già arrivato (più volte). In 800ms ho tutto il tempo per acquisire i dati digitali con lo scope.

P.S. mi puoi linkare la cpld che dici?
Che la forza sia con te.
- E con il tuo spirito.
Avatar utente
Foto Utentekevinpirola
319 4 9
Expert
Expert
 
Messaggi: 310
Iscritto il: 14 dic 2011, 18:52

0
voti

[10] Re: Circuito start-stop contatore

Messaggioda Foto Utentekevinpirola » 12 set 2014, 1:06

Foto Utenteboiler, mi è venuta l'ispirazione. Con simulink funziona, devo però provarlo in laboratorio.



Usando solo due FlipFlop ho ipotizzato una macchina a 4 stati:

-Stato 1: Aspetto che ci sia uno 0 nel segnale ad 1Hz (uscita 0)
-Stato 2: Aspetto un 1 sul segnale ad 1Hz (uscita 0)
-Stato 3: Ho appena rilevato un fronte di salita, aspetto che sui 50Hz ci sia uno 0 (uscita 1)
-Stato 4: Ho rilevato uno 0, continuo a contare finché ricevo un 1 in ingresso sul secondo ingresso (uscita 1), poi ritorno allo stato 0.

Con simulink funziona fino a duty-cycle del 90% e più. quindi non credo che in lab ci possano essere problemi.

Cosa ne pensi?
Che la forza sia con te.
- E con il tuo spirito.
Avatar utente
Foto Utentekevinpirola
319 4 9
Expert
Expert
 
Messaggi: 310
Iscritto il: 14 dic 2011, 18:52

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti