I would like to turn an Arduino clone into a current meter that allows me to measure the the power draw of a sensor node which has sleep and active modes. The sensor node's supply voltage is in the 4-6V range and during sleep the current I'm trying to measure is in the single-digit microamp range, while during transmission it may draw up to 150mA. Ideally I'd like to stay well below 1% error across the measurement range after calibration.

This type of problem seems to come up occasionally. Here and here are proposals for actively switching circuitry, and I've seen references to a device called uCurrent which also requires manual switching of sensing ranges. Then I came across this question where an answer suggested to use different-value shunts in series to accommodate the different sensing ranges, which struck me as an elegant solution, though I don't know enough to judge the solution compared to what was suggested in this question, namely to use multiple current sense amplifiers to measure voltage drop on a single shunt.

My question is: What are the relative merits of the two designs (multiple shunts + diodes vs single shunt with multiple amplifiers)?

For my use case I found a number of current sense amps that seem to fit the bill:

  • common-mode input range beyond supply voltage
  • typical offset voltages in the single-digit μV range
  • typical gain errors below 0.1%
  • gains of up to 1000

If I were to use a single shunt, I might use 50/500x gain current sense amplifiers in the INA191 family or 50/1000x in the INA21x family; connecting both a 50x gain and 1000x gain current sense amplifier to a 0.2Ω shunt, I could use two channels of the 14 bit ADC built into my my Arduino clone, measuring over the range 0-2V to sample up to 200mA with 24μA accuracy and up to 10mA with 1.22μA accuracy (assuming 13 usable bits from my 14-bit ADC).

If I were to use two shunts, I might choose two identical current sense amplifiers, perhaps with 100x gain, and appropriate shunts such as 0.1Ω and 10Ω. I'm also wondering if I might want to add a Zener diode to protect the ADC from overvoltages from the higher-resistance shunt.

Would one of the two designs yield better accuracy, or allow me to expand my measurement range noticeably, or be simpler or more reliable to build? (edit: And would both be usable for high-side current measurement, which I understand is considered good practice and would allow me to re-use my current meter for more projects?)

I apologize in advance if this is not a good comparison for some reason; I'm still trying to understand some of the fundamentals. In that case I would appreciate pointers to relevant material.


2 Answers 2


The simplest approach is a single shunt with a single switchable gain amplifier. Whether you can use this depends on your precise circumstances.

What is the largest shunt resistor you can use at maximum current? This will be limited by your voltage drop. For instance, at 150 mA, a 1 Ω resistor will drop 150 mV. Maybe you can tolerate more?

Now with that shunt resistor, can you specify an amplifier that will give you sufficient accuracy (noise, offsets) at your lowest current? 1% accuracy of 1 uA is 10 nA, or 10 nV with the same shunt resistor.

There are some good autozero amplifiers available now, but they will not get you to a confident 10 nV input resolution, you might see offsets in the μV region. As you head into the nV, errors appear from everywhere, Seebeck effects from thermal gradients on the board for instance. Maybe you don't need 1% accuracy at the lowest current range. Maybe you can reduce the bandwidth with heavy filtering to improve resolution at sleep currents.

I see little point in using multiple amplifiers, expect for the dubious advantage of not having to switch their gain. Better to spend your money on one really good amplifier and switch its gain.

If you can't handle the low current with a single shunt resistor, then you need at least two shunt resistors, whether switched by some form of FET switch, or automatically routed by diodes. Note that using diodes will give you a large variable voltage drop as the load current changes. If you can tolerate that, then can you tolerate a single, much larger, shunt?

I am a great fan of using a silicon diode, or better still a diode-connected power transistor (as they track a logarithmic law more faithfully), for this sort of very wide range current measurement. However, your 1% accuracy requirement is completely beyond using a diode. Now if you could be happy with 10% accuracy, then it gets to be possible.

  • \$\begingroup\$ Thank you! I will think more about what the largest voltage drop I can tolerate might be. I also have a couple of clarifying questions: (1) I've been struggling to interpret data sheets to tease out accuracy at my lowest input level. Could you help? INA191 lists max offset voltage = 12μV and a typical voltage noise density of 75 nV/sqrt(Hz). Is that useful? (2) When you say 1% accuracy is "completely beyond" using a diode, could I characterize a given diode by measuring known currents and creating a lookup table? \$\endgroup\$ Commented Aug 25, 2020 at 9:33
  • \$\begingroup\$ @DanielWagner (1) At the lowest levels, teasing out what's noise and what's drift is user interpretation dependant. You often have to build it to see if it works for your application. (2) The killer with diodes is temperature, you must compensate the measured voltage, and 1% accuracy requires unattainable thermal matching. See these answers from me for more detail. electronics.stackexchange.com/questions/255646/… This first one is built into a regulator, so constant voltage to the load. But if that's not needed, you can use the sense open loop. \$\endgroup\$
    – Neil_UK
    Commented Aug 25, 2020 at 12:15
  • \$\begingroup\$ @DanielWagner electronics.stackexchange.com/questions/472017/… and electronics.stackexchange.com/questions/340330/… \$\endgroup\$
    – Neil_UK
    Commented Aug 25, 2020 at 12:16
  • \$\begingroup\$ Thank you for the additional pointers. I'll read up more and may post a new question when my knowledge reaches its limits (again). \$\endgroup\$ Commented Aug 25, 2020 at 12:43

In my limited experience, the simplest solution seems to be a single shunt and a couple of fixed-gain amplifiers connected in parallel to it. ADC channels are cheap and it’s easy enough to select one that’s in-range at any given time. Sample all of them and switch between in software as they go into and out-of range.

Decades ago I was making a homebrew 2-slope multimeter and ended up with 5 A/D converters running off the same input in parallel - each with a different gain. Even then it was somewhat cheaper than having good range-switching via relays or mechanical switches. And there was no waiting for range switching either. To make range switches more obvious I put a short square pulse into a small loudspeaker to make a “tock” sound, as an aural hint supplementing the DP movement on the display. Kinda like hearing the relay click, but without waiting for repeated measurements to zero-in on the range needed in autorabging.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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