Go Down

### Topic: High frequency measurement using Arduino Due (Read 5646 times)previous topic - next topic

#### shahabai

##### Feb 28, 2013, 09:07 pm
Hello Everyone,

I am a newbie to Arduino boards and I am trying to do frequency measurement using an Arduino Due and store the frequency on a microSD card every 1ms. Here is the shield I'm using for the microSD card.

The input signal is from a signal generator and I want to be able to measure the frequencies up to 400kHz. I was wondering if anyone knows about the best way to do this.

I have been working on this for weeks now and I am completely lost in the subject. I have tried many different ways, but non of them worked. So I decided to start fresh again and any help is greatly appreciated.

Thanks,
Shahab

#### Leon Heller

#1
##### Feb 28, 2013, 10:17 pm
How are you processing the input signal? You need to convert it to a square wave so that you can use a timer to measure to measure the frequency.
Leon Heller
G1HSM

#### shahabai

#2
##### Feb 28, 2013, 10:21 pm
It is already a square wave signal. I'm not sure how I can use a timer.

#### Leon Heller

#3
##### Feb 28, 2013, 11:50 pm
Measure the time between two pulses. You can then calculate the frequency.
Leon Heller
G1HSM

#### shahabai

#4
##### Mar 01, 2013, 12:30 am
The problem is using the Analogread(), I can only read the values from ADC up to 10,000 samples/sec which is the maximum of 10kHz for the input signal. I also found an example of using ADC in free mode, which I was able to measure the frequencies up to ~190kHz. Please let me know if you know of any other way to read the values from ADC.

#### retrolefty

#5
##### Mar 01, 2013, 12:48 am

The problem is using the Analogread(), I can only read the values from ADC up to 10,000 samples/sec which is the maximum of 10kHz for the input signal. I also found an example of using ADC in free mode, which I was able to measure the frequencies up to ~190kHz. Please let me know if you know of any other way to read the values from ADC.

Measuring a signal's frequency via it's amplitude values via an ADC is simply the wrong method. I suspect you will not get anything to work worth using. To measure frequency one counts signal zero crossings for a fixed 'sample time', then store the result and reset the count for the next sample window.

Lefty

#### shahabai

#6
##### Mar 01, 2013, 01:14 am
Quote
To measure frequency one counts signal zero crossings for a fixed 'sample time', then store the result and reset the count for the next sample window.

Could you please explain more what do you mean by counting the signal zero crossing? I am newbie anf I appreciate it if you could explain it more or even give me a sample code for doing so.

#### retrolefty

#7
##### Mar 01, 2013, 02:02 am

Quote
To measure frequency one counts signal zero crossings for a fixed 'sample time', then store the result and reset the count for the next sample window.

Could you please explain more what do you mean by counting the signal zero crossing? I am newbie anf I appreciate it if you could explain it more or even give me a sample code for doing so.

http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/

Lefty

#### shahabai

#8
##### Mar 01, 2013, 02:38 am
Does the library work on ARM processors? It looks to me that it was written for AVR processors.

#### retrolefty

#9
##### Mar 01, 2013, 02:51 am

Does the library work on ARM processors? It looks to me that it was written for AVR processors.

Yes it was, just look at the dates, the Due came out late last year. I'm sure it could be modified if needed. I posted to show you the method used so that you can come to the conclusion that trying to use ADC to determine frequency of a signal is just not the way to go.

Lefty

#### OptimusPrime

#10
##### Mar 06, 2013, 01:53 pm
I'm struggeling with a similar problem.
I took the approach of measuring the time between two interrupts.
Now it turns out that micros() delivers (randomly) wrong values when called in an interrupt-function.
My new idea is to stop times directly with internal timers. But this turns out a bit more difficult than expected  :~.

Go Up

Please enter a valid email to subscribe