Qual è il modo più semplice per contare gli impulsi ad alta velocità?


2

Devo contare gli impulsi digitali con una larghezza di 30 ns e visualizzare il conteggio aggiornato per l'utente ogni secondo. Gli impulsi sono già passati attraverso un comparatore e uno shaper. La risoluzione non è un problema, la mia unica preoccupazione è il conteggio del numero di impulsi di 30 ns mentre si rileva un rumore minimo.

Esiste un modo semplice per utilizzare un microcontrollore PIC o un circuito speciale per eseguire il conteggio? Potrei usare un PIC o un circuito per eseguire il conteggio e inoltrare il conteggio a un Raspberry Pi per ulteriore elaborazione / visualizzazione?

Risposte:


1

30ns è troppo veloce per i microcontrollori PIC che conosco. Ad esempio, il PIC16F77 richiede un periodo di un ciclo di istruzioni più 40 ns, quindi alla massima frequenza di clock il periodo deve essere di almeno 200 + 40 ns.

Vorrei usare un contatore IC a 4 bit (es. 74169, contatore binario sincrono su / giù a 4 bit) che si dividerebbe per 16. La sua uscita verrebbe immessa nel pin di ingresso del timer del PIC (T0CKI per il 16F77). Ma questo conterà solo multipli di 16. Se vuoi un conteggio preciso mentre gli impulsi vengono ricevuti, diventerà difficile perché non solo quei 4 bit dovrebbero essere bloccati, ma dovrebbero essere sincronizzati con il timer / contatore del PIC .


0

Un modo per contare i pali è usare un trigger di interruzione sul fronte positivo o negativo. Puoi usare un PIC o anche potresti essere meglio di usare il lampone più da solo. Per quanto riguarda la riduzione al minimo del rumore, suggerirei di posizionare un circuito di filtro adeguato per filtrare il rumore.

Un altro da considerare è la modalità di acquisizione e confronto. Non l'ho usato ma ne ho letto brevemente. Penso che il microcontrollore PIC supporti Capture and Compare.

Infine, per quanto riguarda il rumore, è meglio comprendere la fonte del rumore e le caratteristiche del rumore. Quindi filtra tutti i rumori che influiscono sul tuo design.


Riferimenti:


0

Non conosco i PIC, ma loro, come la maggior parte dei microcontrollori, hanno registri timer / contatore che possono essere impostati come input da un GPIO per contare gli impulsi digitali su un fronte di salita, un fronte di discesa o entrambi. È necessario assicurarsi che la frequenza del processore sia superiore alla frequenza di input, altrimenti è possibile perdere alcuni conteggi. Inoltre, a seconda delle dimensioni del registro contatori, 8, 16, 32 bit, ecc., Si potrebbe verificare una condizione di overflow. In quel caso. È necessario attivare un interrupt (ISR) quando il contatore trabocca per mantenere il conteggio del troppo pieno. Ad esempio, in un registro contatori a 8 bit, verrà traboccato e reimpostato su 0 dopo il conteggio di 255 impulsi. Il contatore può attivare un interrupt in una condizione di overflow e quella routine di interrupt può semplicemente fare qualcosa come overflowCount + = 1

Quando leggi il conteggio totale degli impulsi per l'utente, dovresti fare: totalPulses = valore del registro contatore + (255 * overflowCount)

Non so per quanto tempo conterà, ma potresti traboccare la variabile del contatore se non usi un tipo di variabile abbastanza grande. Forse usa un tipo Long a 64 bit.

Leggi la scheda tecnica del tuo PIC e dovresti trovare un esempio di contatore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.