ACS712 being accurate ?


I'd like to use a ACS712 with a precise 16bits ( I'll round the value to get 12bits ) with a 5v reference 0.2%. It's for datalogging then I use a battery with a dcdc 5v but it's not 5V, it's more 5.2v.

If I power supply the ACS712, it will give me 2.5V for 0A or the half of the Vcc (5.2V => 2.6V for 0A) ?

If yes, how we can make it accurate ?! Finding an accurate reference which allows a load. (even 10mA is still too much for a 0.2% reference)

I didn't find anything in the datasheet, just it's 2.5V for 0A if Vss=5V :/

Even if it's useless to get a 12bits accuracy, it's more useless and more unreliable to get a Vout at 0A dependent of the Vcc.

Is the sensitivity of 66mV/A is constant and independant of Vcc ? Then I'd just need to initialize the 0A value.

Datasheet :

Thank you.

The ACS712 is very inaccurate. It is a little noisy, but it is also very sensitive for magnetic fields caused by wires, transformers, and so on. You can never get 16 bits accuracy.

The next step is using a normal shunt resistor. For example this module : That is not isolated from the current (the ACS712 is), and the accuracy is only 1% and you want 0.0015% for 16 bit (or 0.024% for 12 bit).

For 16 bit accuracy you need to buy a measurement device of a few thousand dollars.

Hi, Actually I don't really want a 16bits resolution, I just have a pcb with a 16bits that's why I said I'm gonna round.

No, I want something isolated, then no shunt.

I forget the idea. Thank you !

If you gonna to measure AC, than you don't carre about 2.6V - as it DC offset, and can be easily null out via HPF.

No no, it's a DC current. Thanks !

jasonconvenant: Is the sensitivity of 66mV/A is constant and independant of Vcc ? Then I'd just need to initialize the 0A value.

When you supply the sensor from volt, and the reference voltage for your A/D is also the same volt, the 0-Amp value is always the same. e.g 32768 for a 16-bit A/D. Leo..

Yes, I found out this on the datasheet “ratiometry”.
I need to use Vref=Vcc in order to get the same equation for N=f(I).
I didn’t know it before, then it’s enough for me.

The ACS712 is not the only one.

Some can run on Arduino's 3.3volt rail. 3.3volt supply is fairly stable, even when the Arduno is supplied from USB. Aref can be changed to run from 3.3volt with a single resistor. If you select your parts carefully, and with the right code, I don't think a 12-bit A/D won't be able to do better.

What are your exact current requirements. Bidirectional or not. Leo..

Actually, it's ok, I know I can use a 3.3V ref and use only for one way (2.5V -> 0v) and get precision but I don't really need. I changed my mind.

Thank you for you reply !

Do I understand it right ? Are you going to use a 3.3V ACSxxx ?
The ACS714 is for 5V.
The ACS709,710,711,716,722,726,764 are 3.3V

Since the output is relative to the 5V (or 3.3V) voltage, a change of the 5V will not result into a change of the measure value, if the Arduino uses the 5V as reference.
Therefor powering the ACSxxx with an inaccurate 5V has the same final accuracy as using a accurate 3.3 voltage.

I'm using a ACS712 30A with 5V. BUT since the voltage for 0A is 2.5V (for Vcc=5v)

I can use Vref=3.3V on the Vref pin (we don't care if Arduino is powered with 5V or 3.3V) and then I could get an accuracy of 3.3/1024 = 3.22mV (50mA) instead of 5/1024 = 4.88mV (204mA)

Of course my calculations are without any noise and in a perfect world and not bidirectional current.

Well, it's all relative. If you have the Arduino board powered via the USB cable, the 5V could change between 4.5V and 5.0V. Then the output of the ACS712 would be relative to the inaccurate 5V (which is no problem). However, when you use the stable 3.3V as reference, the resulting measurements will be very inaccurate.

You can only do this if you are very sure that the 5V and the 3.3V are both very stable and accurate. Even then, using 3.3V as reference instead of 5V gives only slight more accuracy. You have to take a number of samples and average them to get more accuracy anyway.

When using 3.3V as reference, I think that the risks are higher than the slightly more accuracy.

Did you try a ACS712 ? Did you see how noisy and inaccurate it really is ?

I am currently measuring the 3.3volt rail of an Uno clone with 1.1volt Aref, and display it on an LCD shield. I have been monitoring it for a few days now. Temp changes, different supplies etc. It stays within a few millivolt, and USB or 9-12volt supply does not make a lot of difference.

I was thinking of powering a 3volt ACS from 3.3volt, and feed the same 3.3volt with a resistor into the Aref pin (see Aref page on this site). Calculate the value so that the Aref voltage drops to ~1.7volt. Then measure only the negative going voltage from the sensor. That is, if OP only wants to measure current in one direction. Sensor inaccuracy is something you can't change. Noise maybe, with proper smoothing. Leo..

Wawa, that is very clever (and a little tricky). Cool, a trick that I have not heard of before 8) This will only work with a 3.3V ACSxxx. Is the internal resistance of AREF always the same ? I think this could be done with 5V as well, even when the 5V changes between 4.5 and 5.0V. Because everything will be relative to the 5V. Do you agree ?

The Aref page mentions 32K internal resistance, so a ~30k resistor between 3.3volt and Aref will drop Aref to ~1.7volt.
You have to set Aref to external in your code.

Sure, you could also drop Aref to ~2.6volt from the 5volt rail (~30K).

Read the Aref page about the dangers when you use a resistor <5k.

I have read other sensors with this trick before, without problems.