Pages: [1]   Go Down
 Author Topic: Measuring Accuracy of DC Volts  (Read 1891 times) 0 Members and 1 Guest are viewing this topic.
Offline
Newbie
Karma: 0
Posts: 5
 « on: November 15, 2012, 04:47:48 am » Bigger Smaller Reset

Dear community,

I am looking for the measuring accuracy for Arduino Uno for the voltage inputs.

I know It can measure up to 5V, but I will be measuring from 0 to 5 mV from a sensor, What would be the accuracy with Arduino?

I am new to Arduino so any information you can provide me will be appreciated.

Thanks,

Luis

 Logged

Brisbane, Australia
Offline
God Member
Karma: 17
Posts: 812
 « Reply #1 on: November 15, 2012, 06:43:06 am » Bigger Smaller Reset

Hi Luis

If you use the inbuilt analog to digital capabilities on a Uno, it's capable of 10-bit accuracy, so 1023 steps between 0V and 5V (say) as the input.

That is done by using the analogRead() function (analogRead() reference).  Unfortunately for your needs this is too granular giving 5000mV/1023 = 4.9mV per step by default so it might be able to tell you something was present by returning a 1 or a 0 only.  Depending on your requirements that might be sufficient, but there is a way of improving this, by setting analogReference(EXTERNAL) first and connecting a 5mV source to the AREF pin on the Uno, redefining the maximum value to 5mV rather than 5V (analogReference() reference page.

I tried to find a note for the minimum functional voltage that AREF can take, and have not been able to find anything.  You'll have to try it to see if that's going to work out.  For this you'll also need a smooth 5mV reference voltage to connect to AREF - not sure if you have one of those, but it would be possible to construct with a voltage divider.

Another option (and one to take if you don't have a nice smooth 5mV voltage reference to feed in there) is to set the analogReference to INTERNAL which will use 1.1V as the maximum, giving 1.07mV per step so your readings might come back somewhere between 0 and 5.

If you need greater resolution than this, you could choose an external ADC with a higher resolution or perhaps work with an amplifier to increase the output range to 0-5V (say), read it via the Uno's ADC and scale the result in your code back to 0-5mV.

Just some thoughts to start the conversation anyway
Geoff
 Logged

0
Online
Tesla Member
Karma: 71
Posts: 6617
Arduino rocks
 « Reply #2 on: November 15, 2012, 07:15:54 am » Bigger Smaller Reset

For measuring in a range of 0mV to 5mV you will need a rail-to-rail instrumentation opamp such as the INA326 (although that only has a max gain of 100)
 Logged

Offline
Newbie
Karma: 0
Posts: 5
 « Reply #3 on: November 16, 2012, 04:36:00 am » Bigger Smaller Reset

Dear all,

Thank you very much for the information and the explanation. They are very much appreciated it.

I found that the Arduino Due has 12 bits for the input (4096).

However what I haven't been able to figure out if with the Arduino Due can I change the reference voltage to lets say 1 V?

Thank you very much,

Luis
 Logged

0
Online
Tesla Member
Karma: 71
Posts: 6617
Arduino rocks
 « Reply #4 on: November 16, 2012, 06:53:42 pm » Bigger Smaller Reset

Dear all,

Thank you very much for the information and the explanation. They are very much appreciated it.

I found that the Arduino Due has 12 bits for the input (4096).

However what I haven't been able to figure out if with the Arduino Due can I change the reference voltage to lets say 1 V?

Thank you very much,

Luis
No, that's not possible.

From the datasheet the ADVREF can be 2.4V upto the max analog supply (3.6V) - for 12-bit accuracy, as low as 2.0V for 10-bit accuracy.  If you want to use the AREF pin on the Due you have to desolder a resistor-bridge from the board BTW as otherwise its hardwired to the 3.3V supply via a noise-filter circuit.
 Logged

United Kingdom
Offline
Karma: 131
Posts: 4674
 « Reply #5 on: December 02, 2012, 04:30:20 pm » Bigger Smaller Reset

For measuring 0 to 5mV, amplifying the signal using an op amp or an instrumentation amplifier (depending on your exact requirement) is your best bet.
 Logged

Formal verification of safety-critical software, software development, and electronic design and prototyping. http://www.eschertech.com

Peoples Republic of Cantabrigia
Offline
God Member
Karma: 6
Posts: 634
Arduino happiness
 « Reply #6 on: December 09, 2012, 06:22:39 pm » Bigger Smaller Reset

I agree that a op amp is your best bet. Analog Devices have some very useful resources online as well as programs that allow you to model ahead of time how well an op amp will perform - ie expected noise, ENOB that can be expected, etc. very very cool

As far as the arduino is concerned, the minimum voltages for the AREF are around 1v, depending on the model. But there is no reason to restrict the voltage range, just use a well-matched op amp and be done with it.

That said, if high speed is not needed, a external ADC with a built in PGA like the MCP 3421 can be pretty compelling.
 « Last Edit: December 09, 2012, 06:29:45 pm by Constantin » Logged

Left Coast, CA (USA)
Offline
Brattain Member
Karma: 279
Posts: 15316
Measurement changes behavior
 « Reply #7 on: December 09, 2012, 06:33:07 pm » Bigger Smaller Reset

Quote
That is done by using the analogRead() function (analogRead() reference).  Unfortunately for your needs this is too granular giving 5000mV/1023 = 4.9mV per step by default so it might be able to tell you something was present by returning a 1 or a 0 only.  Depending on your requirements that might be sufficient, but there is a way of improving this, by setting analogReference(EXTERNAL) first and connecting a 5mV source to the AREF pin on the Uno, redefining the maximum value to 5mV rather than 5V (analogReference() reference page.

No, not possible to wire a 5mv voltage to the AREF pin, minimum amount is 1.0vdc per datasheet.

Lefty
 Logged

 Pages: [1]   Go Up