Misurare durata impulso con cpld altera

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

Misurare durata impulso con cpld altera

Postby Altero » 01 Jul 2013, 13:50

salve a tutti,
vi spiego il mio problema.
ho un apparato che genera un impulso che viene ripetuto con una certa frequenza.
l'impulso può durare da un minimo di 10 nsec a qualche millisecondo.

diciamo che quelli lunghi qualche millisecondo riesco a leggerli con il microcontrollore,
quelli molto brevi dell'ordine del nanosec no,
e per questo ho pensato di realizzare un circuito con una cpld.

pensate sia possibile realizzare questo misuratore di durata di impulso tramite una logica programmabile?
e se si sapreste indicarmi un codice o uno schema elettrico già pronto per realizzare tale dispositivo?

ciao
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33

Re: Misurare durata impulso con cpld altera

Postby deluca » 02 Jul 2013, 09:19

@altero,
potresti darci qualche altra indicazione, tipo:

- la freq di ripetizione con cui si presentano gli impulsi,
- se si tratta di segnali periodici,
- con quale micro hai già misurato gli impulsi,
- che risoluzione sulla lettura desideri, nanosec o picosec o altro,

avendo qualche elemento in più possiamo aiutarti, altrimenti ....

ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Misurare durata impulso con cpld altera

Postby Altero » 02 Jul 2013, 21:49

deluca grazie per l'interesse.
allora,
la frequenza con cui si presentano gli impulsi è di qualche Hz, diciamo che può variare da 1 a 10Hz.
avevo fatto delle prove con arduino ma per impulsi troppo brevi ho dei limiti e non riesco a misurarli.
visto che il più breve impulso è lungo 10nsec a me basterebbe apprezzare questa unità. quindi poter leggere a passi di 10nsecondi.

ancora grazie per l'aiuto.
buonaserata
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33

Re: Misurare durata impulso con cpld altera

Postby Leonardo » 02 Jul 2013, 23:34

Salve Altero,

Un impulso isolato con periodo 10ns è possibile vederlo come come un impulso di periodo 20ns (10ns ON - 10ns OFF) con frequenza quindi di 50 MHz.

Per campionare l'impulso è necessario un clock di periodo massimo 10ns per il campionamento, ovvero un clock di almeno 100MHz anche se un clock superiore può dare una maggiore risoluzione.

In realtà campionando sia sul fronte di salita che di discesa basterebbe un clock di 50MHz.

Purtroppo le CPLD di Altera non hanno un PLL (le MAX V lo hanno pubblicizzato ma non è utilizzabile) quindi il clock deve essere generato esternamente e questo potrebbe risultare abbastanza problematico, per il resto diversi modelli supportano tale frequenza. A parte eventuali problematiche di PCB viste le frequenze in gioco esistono tranquillamente oscillatori da 100MHz.

In alternativa una piccola FPGA (anche una Cyclone EP1C3) con PLL integrato per moltiplicare la frequenza proveniente ad esempio da un cristallo oscillatore onboard a 20 MHz potrebbe risolvere il problema introducendo però una maggiore complessità rispetto ad una CPLD (memoria di configurazione, etc..)

Veniamo a qualche dritta per misurare la durata degli impulsi.

Una semplice strategia potrebbe essere controllare se il segnale è presente sul fronte di salita del clock (come detto di almeno 100 MHz)
- Se il segnale è presente (e il conteggio non è già iniziato) iniziare a contare il numero di cicli di clock trascorsi tramite un semplice contatore
- Se il segnale non è presente ed il conteggio è in corso fermare il contatore.

L'implementazione è abbastanza semplice e con una semplice macchina a stati è realizzabile senza complicazioni.

Supponendo di aver contato un ciclo il segnale sarà stato all'incirca della durata 10ns, se invece i cicli contati sono due il segnale sarà stato di circa 20ns e così via..

Il sistema con una frequenza esatta di 100 MHz rende però molto incerta la misura, se ad esempio il clock fosse di 100.0...1 MHz per qualche tolleranza dell'oscillatore si potrebbero contare 2 cicli per un segnale di 10ns, con un errore abbastanza elevato (20ns stimati al posto di 10ns), più sarà elevato il clock e con maggiore sicurezza (risoluzione) sarà possibile determinare la durata dell'impulso

Ciao
Last edited by Leonardo on 03 Jul 2013, 08:42, edited 1 time in total.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Misurare durata impulso con cpld altera

Postby Ludo69 » 03 Jul 2013, 07:49

si potrebbe anche mandare il CK (100MHz) in due contatori, uno sensibile al fronte di salita, l'altro al fronte di discesa, si farebbero partire al presentarsi dell'impulso e bloccare alla fine dell'impulso, analizzando il conteggio si avrebbe una misura del periodo attivo dell'impulso con una indeterminazione dimezzata, ovvero come se l'avessimo campionata a 200MHz.

Altra tecnica è doppiare il SISTEMA di conteggio, ovvero uno per il conteggio per misure precise di impulsi lunghi, ed un'altro che STIMI gli impulsi più corti, immagina ad es. una rete logica (da NON semplificare!) costituita da una decina di latch in cascata che partono da resettati, il primo ha un ingresso dato "1" e tutti sono attivati dal tuo impulso: dopo l'evento la propagazione dell' "1" nella catena dei latch, noto approssimativamente il ritardo di propagazione, è una stima della lunghezza dell'impulso! certo variabile con il chip ed anche con il fitting, ma misurabile con impulsi campione.
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: Misurare durata impulso con cpld altera

Postby Altero » 03 Jul 2013, 18:35

vi ringrazio per l'aiuto.
devo dire che la soluzione 1 di ludo69 mi piace,
quella di utilizzare i due fronti del clock, due contatori e alla fine fare la somma dei 2 conteggi mi sembra molto valida.

mi metto al lavoro e vi faccio fapere, spero quanto prima.

ciaoooo
Altero
 
Posts: 46
Joined: 20 Apr 2012, 09:33

Re: Misurare durata impulso con cpld altera

Postby Leonardo » 03 Jul 2013, 19:05

Salve Altero,

La soluzione è sostanzialmente la solita che indicavo con la frase "campionando sia sul fronte di salita che di discesa basterebbe un clock di 50MHz"

Xilinx ha dei CPLD con flip flop dual edge http://www.xilinx.com/support/documentation/application_notes/xapp910.pdf è possibile implementare dei pseudo flip-flop dual edge con l'ausilio di due flip-flop ed un pò di logica aggiuntiva (MUX, etc..) anche su dispositivi Altera

Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 21 guests

cron