I am using the Allegro ACS770 100A Unidirectional current sensor (datasheet). To measure the output from this sensor I am using the TI ADS1115 (datasheet).

The ACS770 is supposed to output a 0.5V quiescent voltage, and the voltage increases by 40mV every 1A.

The output is ratiometric. The change in quiescent voltage and sensitivity is calculated using the equations below:

ratiometric change in quiescent voltage output (%):

\$\Delta V_{IoutQ(\Delta V)} = \frac{V_{IoutQ(VCC)} \div V_{IoutQ(5V)}}{V_{cc} \div 5V } \times 100\$

ratiometric change in sensitvity (%)

\$\Delta \text{Sens} = \frac{\text{Sens}_{V_{cc}} \div \text{Sens}_{5V}}{V_{cc} \div 5V } \times 100\$

The ACS770 and ADS1115 are being powered by the 5V rail from an Arduino. This is not likely to be constant as power is drawn from the USB connection.

My problem is, how can I get the data required for the above calculations, namely \$V_{cc}\$ and \$\text{Sens}_{V_{cc}}\$ when powering on the Arduino? Is this even possible?

I have considered getting a precision voltage source for the ACS770, but this project is a quick prototype to provide data for another project, so I would like to spend as little money as possible on this.

Please provide ideas on other ways to calibrate at runtime, or some way to get the required values at runtime.

  • \$\begingroup\$ Just calibrating on startup is probably not good enough, if you expect the voltage to change while the device is in use. If you want a good regulated voltage to supply the ACS770, perhaps look into the LT1461, which is a linear regulator designed to be used as a voltage reference; it's characterized up to 100mA output and very stable over its range. You'll need to give it a higher supply voltage than 5V though. \$\endgroup\$
    – Hearth
    Jun 12, 2018 at 14:10

1 Answer 1


Use another channel on the ADC where you use two resistors to create 0.5*Vcc. Since this (switched capacitor) ADC always compares to an internal reference, this should provide the value you need, without calibration process.

In the software subtract the measurement of the ACS770 from this resistor reference. And correct the linearity error with the internal reference.

Obviously, you want to samples these channels in quick succession to each other.

If you are measuring AC, then you can also use a digital high pass filter to remove the offset errors.

You're using a 16 bit ADC, that looks a bit high for this sensor to me. For more precise current measurement I can recommend Sensitec CMS3000.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.