# Precision Current Measurement Using Arduino

We are designing a circuit to measure the current consumed by a Ultra-low power communication module. The requirement is below:

1. Min current = 0.2mA
2. Max current = 100mA
3. Resolution = 0.005mA (5uA)

We do not need to measure dynamic current, just want to measure average current at a specified working condition such as Active, Sleep, Shutdown we will use a sensing resistor in series to the load. I have some questions, please provide clarifications.

1. The sense resistor value selected is 500 mOhm. According to my understanding to get 5 uA resolution ADC’s 1 LSB must be less than or equal to 2.5 uV (RsenseCurrent step, ie (500mohm5uA). Please correct me if I am wrong.

2. Do I need to use a pre-amplifier after current sense resistor? Imagine I am using an ADC with 24bit resolution and 5V reference then my 1LSB will be 0.3uV, less than the required resolution. Is it possible to connect a buffer after Rsense and connect its output directly to ADC input?

May I know can I use Arduino for this application

• This is not an Arduino topic, it is more suite in the "Electrical engineering" group. Aug 29 '18 at 5:58
• I'm not sure what you're asking. You ask about a lot of external hardware but at the end you want to know if you can use Arduino for this. Apparently not if you have to build hardware for it?
– pipe
Aug 29 '18 at 11:05
• You mention resolution but offset and noise are more likely to be your problems wrt accuracy. I suggest taking a different approach to the problem and measuring the current in each mode and calculating. Or buy a 6.5 digit DMM with an Ethernet port and use that. Aug 29 '18 at 11:29
• "Imagine I am using an ADC with 24bit resolution". OK. Now what? Does an Arduino have a 24 bit ADC? Do you need one? 100/.005 is 20,000, or just a hair over 14 bits. Can you get an Arduino with a 16 bit ADC? As far as I know, Arduinos only provide 10 bits, or about 1 part in 1000 resolution, for a maximum resolution of about .1 mA at 100 mA full scale. Aug 29 '18 at 13:30
• What ADC are you using? Just because it is 24 bits, that doesn't mean there are 24 effective bits. Is there an ENOB spec in the data sheet? Often different sampling rates and PGA settings impact ENOB as well. Aug 29 '18 at 20:48

The sense resistor value selected is 500 mOhm. According to my understanding to get 5 uA resolution ADC’s 1 LSB must be less than or equal to 2.5 uV (RsenseCurrent step, ie (500mohm5uA). Please correct me if I am wrong.

You're correct, but not in any useful way. Yes, your resolution is 2.5 uV for .005 mA, but your full scale (5 volts across .5 ohms) is 10 amps, or 100 times greater than you need.

Do I need to use a pre-amplifier after current sense resistor? Imagine I am using an ADC with 24bit resolution and 5V reference then my 1LSB will be 0.3uV, less than the required resolution.

For any reasonable ADC, yes. At 100 mA, a .5 ohm resistor will give you .05 volts out. For a full-scale reference of 5 volts, you'll need a gain of 100 buffer amp. Of course, this amplifier must have less than 5 uV of temperature and aging drift over whatever temperature range you might operate (referenced to the input). Note that that is not 5 uV/ degree of temperature drift, but 5 uV total over the entire range.

However, why should we imagine you're using a 24-bit ADC? Do you have one available?

Is it possible to connect a buffer after Rsense and connect its output directly to ADC input?

Yes. A gain of 100 will do nicely for a 5 volt full scale input.

May I know can I use Arduino for this application

Never in a million years. Your required resolution is .1/.000005, or 20,000 counts. A 14 bit converter will provide a resolution of 16,384, so if you relaxed your resolution requirement a bit to 6.1 uA, you could (theoretically) go that route.

Of course, Arduino's don't come with 14 bit ADCs. 10 bits is all you get. For a 100 mA full scale, your resolution will be nominally (and we haven't addressed accuracy here, only resolution) 100 mA/1024, or 97.6 uA, nearly 20 times worse than you have specified.

• Consider using two cascaded pre-amplifier stages, the first one gives 5uA resolution (note: resolution, not accuracy) for signals up to 5mA, the second one gives 100uA resolution up to 100mA. This would allow you to use the Arduino/AVR Mega ADCs (2 channels) and pick which value to use in software. Note that you are unlikely to get close to 1LSB accuracy with the mega ADCs without careful circuit design and layout (no breadboards, etc) and oversampling. Aug 29 '18 at 14:18
• Hi WhatRoughBeast, is it possible to interface an external ADC with Arduino to make measurements.
– Hari
Aug 30 '18 at 9:19
• @Hari -- that is absolutely possible, but not in your question. I suggest you write a new question -- or better yet, do some research about this first to inform your question, and THEN write a new question if you still need to. Aug 30 '18 at 13:32
• Yes, but it would be clumsy. You would need an ADC with a serial output, with the conversion clock done locally (to get the conversion done right) with control and output clock lines driven by the Arduino digital lines. Alternatively, if you're willing to spend the money (and I suspect you're not), and your Arduino has a USB interface, you can get external ADCs with USB interface, and use that. If you're interested, start with mccdaq.com/ Aug 30 '18 at 13:34
• There's no reason why connecting an ADC to an Arduino (or bare Atmega chip) has to be especially difficult. Like the LTC2440 Straightforward connection to an Arduino. 24bit ADC, takes just 3 data pins, a standard Arduino library, and a few lines of code.
– JRE
Aug 30 '18 at 13:48