ACS714 voltage range

The specs say with a 5v input, zero current is centered at 2.5v and each amp (+ or -) is 0.066mV/A. For the rated +/-30A range, a full +30A should yield 0.066V/A x 30A = +1.98V

Is this because above +30 or below -30 the sensor loses linearity?

What range should i be using with an Arduino to calculate the correct current?

Merry Christmas /Happy Holidays to All !!


As mentioned in the ACS714 datasheet, nonlinearity can be observed when saturation occurs while approaching the sensor’s full-scale current. You should not expect meaningful data outside the sensor’s sensing range.

It is not clear what you mean by “What range should i be using with an Arduino to calculate the correct current?”. You can calculate the current going through the sensor by measuring the output voltage of sensor using one of the analog inputs on the Arduino.

- Jeremy


Your ACS714 webpage specs say the device is -30A to +30A and with a Vcc of 5.0 it changes by 66mV/A. If zero current is centered at 2.5v then at 0v to +5.0v the current would theoretically read a full range of -37.9 to +37.9 A. Is my assumption correct that since its listed with a range of -30A to +30A rating, it’s because it’s only linear from a voltage range of +0.52 to +4.48v? The datasheet curves end at 30A, its not clear what happens above 30A.

All the information we have for that sensor is from its datasheet. Like you mentioned, the datasheet does not say what happens beyond its sensing range. As I stated in my previous post, you should not expect meaningful data outside the sensor’s sensing range. If you need to measure more than 30A, you might consider switching to our ±75A ACS709 current sensor carrier.

- Jeremy

I am familiarizing myself with the current sensors using the ACS711EX (-15 to +15) rather than risking damage to my 18v25CS driver.

Here is my setup:

Regulated supply with 5.02v to Arduino and to Vcc on the ACS711 board. My PWM signals are 100% duty cycle so that my power supply and DMM are reading accurate absolute values PWM averages

At at zero current through a load (using 50W , 10.4 ohm 1% Dale resistor) the ACS OUT reads 2.60v on my DMM and or scope. The Arduino program code is:

DAC= analogRead(CS_Pin);  // integer from 0-1023 with Vcc 5v = 0.0049v per DAC step
voltage = DAC * 0.0049; 
//for 711EX Vcc = 5.0 and zero current centered at 2.5v --> 66mV/A
current = ((voltage-2.5) / 0.066); 

So at zero current, my Arduino analog input reads the ACS711EX OUT pin very high while my high impedance DMM reads the OUT pin correctly as 2.60v :
DAC = 769.00
Voltage = 3.77
Current = 19.21

With my Rigol providing a current limit of 1A on the load, the ACS711EX OUT pin as read by the Arduino analog inpput pin is shown while my DMM reads the ACS711EX OUT pin voltage as 2.75v:
DAC: 811.00
Voltage: 3.97
Current: 22.33

Forgetting about the incorrect Arduino analog read, assuming my DMM is correct, the 1A load on the ACS711EX results in a 150mV increase on the OUT pin which is more than 2amps. I have a pretty accurate Fluke clamp on current probe and it confirms that the load thru the ACS711EX is 1.0 A.

Two questions:

  1. any ideas what may be going on with the ACS711EX board. I have another new board I can try as well as trying this on a 714 board as well.
  2. how do you recommend correcting in code for the incorrect Arduino analog input voltage readings? I will also try a different Arduino.

Happy and Healthy New Year !!

oops I was using the ACS714 0.066A/V scale while for the 711EX it would be 0.136A/V with Vcc at 5.0v. However the problem remains the same.

My bad… i figured out my mistake. I was supplying the ACS711EX with a 5v VCC but my Arduino (Moteino) is a 3.3v operating even though it takes a supply of 5vdc. Now all is working as I think it should. Only issue is the zero current center voltage output is 1.69v and my Moteino is reading it as 1.55v. However with a 1A load the relative voltage change is correct so I assume I only have to add a correction fudge factor in the code?

Happy New Year !!


I am glad you got it mostly working. You should be able to compensate for the constant error in voltage in the code. You might also consider adding a filter that averages multiple readings of the sensor.

- Jeremy