I have to build up a battery cell(single) monitoring system which can calculate the cell's (single) efficiency which should be atleast 0.1% - 0.5% accurate. The cell would be charged over a couple of hours (nominal rating 12V - 15A), and then discharged during a specified time. At the end i have to calculate the total energy delivered to and obtained from the battery by measuring the current and voltage. The sensed current would range in from few milli Amps to a maximum of 50 Amps. I read alot about current sensing online and i came accross a very famous opinion of using series shunt to measure the current if you require a high accuracy. I also came to know about high side sensing and low side sensing. Now my question is would it be possible for me to measure the current with the help of shunt, as to me, my range seems a bit large (few mA to 50A), so would a 0.01ohms shunt for e.g would be able to cover the whole range (resulting voltage would be in between 0.01mV (for 1mA) - 500mV (for 50A) ) ? What i mean is that after amplifying my resulting voltage across the shunt before feeding it to the ADC, would i be able to measure the current accurately keeping in mind if i am using some AVR contorller for e.g which has a 10 bit resolution ADC, with a reference voltage of 5 V ? Or if there exists any other solution, other than measuring(with high accuracy) via shunt resistor, please tell ! Thanks !


As stated, you need to go talk to whoever set the requirements for your measurements. The dynamic range and precision required are just absurd.

Just for rough numbers, let's say your current range is 5 mA to 50 A. That's 4 orders of magnitude. If each current measurement must be accurate to .1%, that requires a system resolution of 5 uA. 50 A divided by 50 uA is 10,000,000. That is a 24-bit dynamic range. Trying to get this level of accuracy is enough to boggle the mind. At the least, keeping a shunt at a constant resistance (to within 0.1 ppm!) over a current range like this is mind-boggling. Think about self-heating for a bit. Hint - it varies as the square of the current. Think about how this affects the resistance of the shunt.

Much more reasonable is to consider exactly what range of currents will be encountered in a discharge cycle, and more importantly to establish just exactly why you need 0.1% accuracy. A 10-bit A/D converter will provide a nominal 0.1% resolution (with accuracy somewhat less due to nonlinearity), but attempting to extend this to calculate battery capacity to this accuracy is just silly. Among other things, battery capacity changes with discharge current level, temperature and age. Batteries are not precision artifacts.

Ordinarily, you would measure capacity based on a constant current discharge, with the test stopping at a voltage well above 1/2 the starting voltage. The test is then repeated for different current levels. To do otherwise is wasted effort. If you want to wring the last few electrons out of the battery, consider that, in a multi-cell battery this will inevitably cause one or more cells to become reverse-biased, and this is most definitely not good for the cells.

If you do this (constant-current discharge with a fixed cutoff) then a 10-bit measurement of the voltage and the current will provide a nominal energy resolution of about 9 bits, or ~.2%. For each different current level you can vary the shunt resistance to get the peak current measurement near full scale of the ADC.

Even if you decide to try for a full discharge of the test cell, keep in mind that, once you're below about half the original voltage, the time left will be (relatively speaking) very small, and inaccuracies introduced by limited ADC resolution will have only a very small effect on total accuracy.

And finally, if you really, really must try for this accuracy, you will need to pay extraordinary attention to the accuracy of your charge cycles. Extreme consistency will be the key, with absolute accuracy of charge current and temperatures required. Plus, you will need to provide some way to guarantee that each cell is (in absolute terms) discharged to the exact same level before starting a charge cycle.

  • \$\begingroup\$ Is it absurd? I have a cheap multimeter with at least that much dynamic range. \$\endgroup\$ – Phil Frost Mar 13 '15 at 19:57
  • 1
    \$\begingroup\$ Not at a single setting (and a single shunt value), you don't. \$\endgroup\$ – WhatRoughBeast Mar 13 '15 at 20:58
  • \$\begingroup\$ I think that might be the point. \$\endgroup\$ – Phil Frost Mar 14 '15 at 15:47
  • \$\begingroup\$ Thanks alot for such a detailed answer. Also you made it pretty clear that its not possible to measure the whole range of currents with a single shunt, i will have to vary the shunt with the required current value. does that mean i will have to physically replace the shunt every time or i can design some ciruitory (possibly containing all the shunts) which can do this with the help of a microcontroller ? \$\endgroup\$ – yiipmann Mar 16 '15 at 11:30
  • \$\begingroup\$ Actually I’m just required to check if the battery efficiency changes by changing the amount of current during the charge and discharge cycle. And for that purpose I will be applying currents from a very little range to a very large range. Battery capacity would be (12V , 15A) nominal. But for discharging at 3C, for e.g, I will be required to measure currents as high as 50A. So while doing all this I am supposed to do the measurements which should be 0.1-0.5% accurate so that I can reach my conclusion accurately. \$\endgroup\$ – yiipmann Mar 16 '15 at 11:31

I am currently working on a battery monitoring project for a lead acid accumulator.

I have partially gone through your way and finally decided to use a dedicated circuit by TI. It is quite a sophisticated device that is able to monitor many battery parameters including momentary and average current, voltage, State of Charge etc. It has a constant shunt voltage measurement accuracy of +-0,5% (see the specs). The battery voltage measurement accuracy is the same.

The IC has built in UART interface so you can easily interface it to AVR or other microcontroller.


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.