Misure di frequenza con Arduino e libreria FreqMeasure

Vogliamo presentarvi una libreria software utile ad effettuare misure di frequenza con dispositivi Arduino o compatibili; si tratta di FreqMeasure, ed è particolarmente indicata per applicazioni tachimetriche e, più in generale, per applicazioni cosiddette RPM

In questo articolo vogliamo presentarvi una libreria software utile ad effettuare misure di frequenza con dispositivi Arduino o compatibili; si tratta di FreqMeasure, ed è particolarmente indicata per applicazioni tachimetriche e, più in generale, per applicazioni cosiddette RPM in cui si ha la necessità di misurare rotazioni per minuto. Il principio che sta alla base è quello di misurare la durata temporale di un periodo e quindi calcolarne la frequenza tenendo conto anche della frequenza della CPU; pertanto è evidente che tale libreria possa funzionare egregiamente con segnali che abbiano un ridotto numero di armoniche. Per ottenere quindi una misura piuttosto accurata, è quindi opportuno filtrare preventivamente il segnale da misurare con un filtro passa-basso. Il filtraggio del segnale elimina parte del rumore e taglia le armoniche a frequenza elevata. Ecco un possibile schema del filtro da applicare al segnale:

In realtà è necessario amplificare il segnale quando il livello di tensione dello stesso non sia sufficiente a pilotare l'input digitale TTL.

Misurare una frequenza nulla:

dato che questa libreria si basa sul principio di misurare la distanza temporale di due istanti con lo stesso livello in tensione (in pratica triggerando il segnale), per misurare una frequenza nulla non si deve fare altro che impostare un timeout; cioè bisogna impostare un intervallo di tempo oltre il quale, se non è stato “agganciato” alcun segnale, viene assunta come frequenza del segnale la frequenza nulla.

Vediamo ora come utilizzare la libreria:

per prima cosa procediamo all'installazione della libreria: Le librerie degli utenti sono memorizzate nella cartella di Arduino cartella \libraries. Quindi se volessimo installare la libreria FreqMeasure, dovremmo creare nella cartella \libraries una cartella che si chiamerà FreqMeasure e che conterrà i nostri files FreqMeasure.cpp e FreqMeasure.h, riavviare l'IDE di Arduino. L'intera cartella da posizionare in “libraries” è scaricabile in formato “zip” dal link della fonte

FreqMeasure.begin(); Inizio acquisizione segnale misurando

FreqMeasure.available(); Restituisce il numero di misure, oppure restituisce “0” se non vi sono misure leggibili. FreqMeasure.read(); Legge la misura. Contiene il numero dei clock della CPU trascorsi in un periodi della forma d'onda. Per convertire in frequenza, F_CPU deve essere diviso per questo numero. Ogni misura inizia immediatamente dopo la precedente senza alcun ritardo, così facendo possiamo fare più acquisizioni al fine di migliorare la risoluzione.

FreqMeasure.end(); Interrompe la misura di frequenza

Ora un esempio pratico :

#include  <FreqMeasure.h>

void setup() {   

Serial.begin(57600);   

FreqMeasure.begin();

}

double sum=0;

int count=0;

void loop() {   

if (FreqMeasure.available()) {

    // average several reading together     

    sum = sum + FreqMeasure.read();

    count = count + 1;

    if (count > 30) {

      double frequency = F_CPU / (sum / count);

      Serial.println(frequency);

      sum = 0;

      count = 0;     }

  }

}

I limiti di FreqMeasure: La frequenza massima misurabile non è solo limitata dalla possibilità di agganciare o meno il segnale, ma all'aumentare della frequenza sorgono problemi di impiego della CPU. Alla fine di ogni periodo, infatti, vi è una richiesta di interrupt alla CPU per far si che i dati vengano elaborati con la minore latenza possibile; pertanto all'aumentare della frequenza di interrupt, avremo un eccessivo impiego della CPU. Una soluzione possibile sarebbe quella di disabilitare gli interrupts; a frequenze elevate, però vi è il rischio di saltare periodi del segnare e quindi falsare la misura della frequenza. Per tutte le ragioni esposte, possiamo dire che FreqMeasure è utilizzabile per misurare frequenze da 0.1 a 1 kHz, mentre per frequenze più elevate è conveniente utilizzare la libreria FreqCount (da 1 kHz a 5 Mhz).

Arduino è disponibile da Farnell

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend