Libreria freqcount Nano e Mega

Progetti Arduino
Rispondi
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Libreria freqcount Nano e Mega

Messaggio da Maxvarese »

Sto conducende degli esprimenti per la misura di frequenze sino a 8 Mhz con risoluzione di un Hz con Arduino nano e mega.
Attualmente non so come vengano utilizzate le risorse del micro, ma presumo che il conteggio dei cicli venga eseguito da un timer interno a 16 bit.
Da prove empiriche mi sono accorto che si commette un errore di misura di 35 Hz per ogni overfull del contatore.
La cosa strana è che questo errore dovrebbe aumentare esponenzialmente all' aumentare della frequenza campionata ma ciò sembra non avvenire.
:? Anzi tra 1 e 3 Mhz rimane costante :shock: .
In pratica la frequenza viene determinata contando i fronti di salita dell' onda quadra ttl in un secondo.
Un contatore a 16 bit per arrivare a 5.980.000 si
" riempe " 92 Volte accumulando un errore di 3200 Hz
Devo elaborare una correzione software, ma per farlo devo determinare la funzione di progressione dell' errore.
Ps.
Ho già provato a compensare l'errore aumentando leggermente il tempo di misura ma il comando mi consente una variazione minima di 1 msec, che è eccessiva e sposta l'errore in eccesso.
Allegati
Tabella Frequenza/ errore
Tabella Frequenza/ errore
20210812_214757_crop_640x480.jpg (189.92 KiB) Visto 2817 volte
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Libreria freqcount Nano e Mega

Messaggio da Maxvarese »

Ho eseguito una prova comparativa con un frequenzimetro che utilizza i timer interni del pic 16f628.
Questo alla frequenza di 6 Mhz commette un errore di soli 73 Hz in meno.
Tale differenza può dipendere dall' ottimizzazione del codice ma anche dall' architettura interna dei micro.
Oltre a questo nel frequenzimetro basato sul pic Microchip questo lavora a 20 Mhz contro i 16 di Arduino, questo renderà più rapida l'acquisizione dell' overfull?
Dovrei conoscere il codice e il numero di cicli totali necessari a eseguire le istruziini per rispondermi.
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Libreria freqcount Nano e Mega

Messaggio da pgv »

Tanto per cambiare l'impostazione del problema, perche' non usare un bel contatore tipo https://www.ti.com/lit/ds/symlink/sn74lv8154.pdf che totalizza 32 bit e che arriva a 40 MHz se uno sta attento col carico? Si fa contare per 0.1, 1.0, 10.0 secondi a volonta', quando e' finito l'intervallo di misura si blocca il clock e si leggono i 4 byte di conteggio. Meno divertente, ma se si tratta di qualcosa che deve passare in produzione puo' essere piu' facile da mantenere anche cambianto modello (e clock) di Arduino.
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Libreria freqcount Nano e Mega

Messaggio da Maxvarese »

pgv ha scritto: lun 16 ago 2021, 20:01 Tanto per cambiare l'impostazione del problema, perche' non usare un bel contatore tipo https://www.ti.com/lit/ds/symlink/sn74lv8154.pdf che totalizza 32 bit e che arriva a 40 MHz se uno sta attento col carico? Si fa contare per 0.1, 1.0, 10.0 secondi a volonta', quando e' finito l'intervallo di misura si blocca il clock e si leggono i 4 byte di conteggio. Meno divertente, ma se si tratta di qualcosa che deve passare in produzione puo' essere piu' facile da mantenere anche cambianto modello (e clock) di Arduino.
Grazie per il suggerimento devo studiare il data sheet.
Da quanto ho capito si trattano di due timer a 16 bit che possono essere connessi in cascata per formarne uno da 32 che poi comunica il risultato del conteggio attraverso un bus parallelo a 8bit .
Mi chiedo solo se l'operazione di lettura non sia più dispendiosa in termini di tempo rispetto all' utilizzo dei timer interni, vero è che si risparmia la fase di calcolo.
Sono costretto a fare ipotesi perché non conosco ma posso solo immaginare la procedura di conteggio eseguita dalla libreria.
Avatar utente
Maxvarese
Messaggi: 1954
Iscritto il: mar 9 apr 2019, 23:53

Re: Libreria freqcount Nano e Mega

Messaggio da Maxvarese »

Comunque a prescindere dalla mia applicazione, credo continuerò a fare esperimenti.
La possibilità di creare un frequenzimetro con arduino può essere utile a molti hobysti.
Con una serie di misure comparate con uno strumento di riferimento vorrei elaborare una formula/tabella di correzione per ridurre l'errore di misura.
Avatar utente
pgv
Messaggi: 484
Iscritto il: gio 17 set 2020, 13:16
Località: Ginevra

Re: Libreria freqcount Nano e Mega

Messaggio da pgv »

In effetti sono proprio due timer a 16 bit collegabili in cascata. Quanto alla lettura, se ricordo bene (gli anni passano) si usava il segnale RCLK per trasferire il conteggio accumulato dai contatori al registro di lettura, dopo di che i contatori continuavano a contare, per cui il tempo necessario per selezionare uno alla volta i quattro byte e leggerli e' ininfluente a meno di non voler leggere molto, molto in fretta. In questo modo il conteggio e' "cumulativo", ossia se leggo un segnale a 1 MHz ogni secondo la prima volta leggero' 1,000,000, la seconda 2,000,000 e cosi' via fino all'overflow dei 32 bit (dopo circa 4294 secondi). Altrimenti, e' possibile anche (con cautela!) azzerare i contatori una volta trasferiti nel registro di lettura (pero' non lo farei con un pin di Arduino perche' il timing non e' all'altezza).
Per avere uno strumento valido penso che la cosa migliore sarebbe di aggiungere un quarzo "di riferimento" (magari termostatato) e avere la possibilita' di calibrare la lettura usando quello. Oppure piu' semplicemente di generare la finestra temporale di misura utilizzando un quarzo preciso (di modo che il secondo, decimo di secondo etc di durata della misura sono precisi "per costruzione"). Una volta diviso per benino il quarzo, il segnale puo' servire per dare il comando di trasferire i conteggi nel registro di lettura e ordinare all'Arduino di andarlo a leggere.
Senza farsi male al portafoglio, un oscillatore TCXO compensato in temperatura puo' dare un errore di meno di 1 ppm, ossia per esempio 10 conteggi misurando un segnale a 10 MHz. Senno' con un OXCO da 250 Euro fai 1 ppb (1 conteggio a 1 GHz), ma mi sembra costosetto... I quarzacci normali dovrebbero fare 50 ppm.
Rispondi