I'm trying to build a battery capacity tester for Li-ion batteries.
I made this schematic using Arduino:
enter image description here

While bush button is not triggered arduino only shows battery voltage on Serial & when button is triggered it turns on the MOSFET and starts the test.
My problem is while MOSFET is off the battery voltage that arduino reads is battery's 100% voltage (e.g. 3.97v)
But when MOSFET turns on the battery voltage drops to a lower value (e.g. 3.21v for that initial 3.97v) !
And when the test is finished (arduino reads 2.7v) and it turns off the MOSFET that dropped voltage comes back! and 2.7v becomes 3.5 !!
for different amount of load resistor this drop is different (larger resistor ,less drop!)

Why this happens? am I doing something wrong?

  • 1
    \$\begingroup\$ A battery (with its serial resistance) can only provide so much current/energy so for a specific load to match it (ohms law and stuff) the voltage must be lower. \$\endgroup\$
    – PlasmaHH
    Commented Feb 25, 2015 at 11:40
  • \$\begingroup\$ @PlasmaHH: so, i need to take a lower cutoff voltage level? or what? \$\endgroup\$
    – Ariyan
    Commented Feb 25, 2015 at 11:44
  • 1
    \$\begingroup\$ What were you expecting would happen? Note also that the IRF640 is an inappropriate part if you want consistent results as Rds(on) is not well defined with logic level drive. \$\endgroup\$ Commented Feb 25, 2015 at 11:47
  • \$\begingroup\$ @SpehroPefhany: I want to empty a full changed battery up to its lower limit to measure its capacity (mAh); datasheet says Rds(on) is 0.18 ; what type of fet is appropriate? \$\endgroup\$
    – Ariyan
    Commented Feb 25, 2015 at 11:52
  • 2
    \$\begingroup\$ @4r1y4n The datasheet I have says 0.15\$\Omega\$ at Tj = 25°C AND Vgs = 10V. For this application you should have a MOSFET specified with Vgs = your microcontroller output voltage or lower (eg. 4.5V for a 5V micro). \$\endgroup\$ Commented Feb 25, 2015 at 11:57

3 Answers 3


A battery has some internal resistance that for Li-ion batteries is usually in the 0.15 \$\Omega\$ region when fresh.

As you should know from Ohm's Law, \$V = I \times R\$ so if you put a load on the battery this will cause a current to drain from the battery and this will cause, depending on the current, a small voltage drop over the battery's internal resistance as it would on any normal resistor in a circuit. This can be explained visually like so:


simulate this circuit – Schematic created using CircuitLab

As the battery gets used and 'ages' this internal resistance increases so the voltage drop over it will also increase for a constant current. The 'open-circuit' voltage of the battery will always be more or less the initial voltage as the 'load' will be near infinity so all the voltage drop will be over this air-gap between the batteries two terminals.
As you mentioned the drop in voltage is less with a larger load, this is because the current draw will be less and hence the drop over the internal resistance will also be less.

You should look into a constant current source using a low voltage op-amp (I did something similar to this a couple of months a go and ran into the same issue - hence that question) and you'll be able to work out the mAh easily enough as the current should be more or less constant and you'll know the time taken for the voltage to fall.

Hopefully this helps and answers your question - it is expected that a voltage drop will be seen when applying a load to a battery.


The normal procedure for measuring battery capacity is to discharge at a constant current until the battery voltage drops to some endpoint voltage. The constant current and endpoint voltage should be specified in the battery datasheet. It is normal for the battery voltage to recover when you remove the load. That is, the open circuit voltage will be higher than the voltage under load. But the voltage under load is what is used for capacity measurement.

Your circuit is not a constant current circuit, so you may get slightly different results compared to the datashseet. Your circuit (if you fix the mosfet problem Spehro mentioned) could still be useful for comparing cells to each other, but not for comparing to battery specifications.

Make sure that the discharge current does not exceed recommended maximum for the given cell. For example, if you are testing small cells (less than 2 Ah), your 2 Ohm load could discharge the cell very fast, resulting in abusive conditions for the cell.


A simple workaround is to measure voltage under load and without load. So you can calculate the change in internal resistance. Regarding the capacity of the battery, it is important to know under what discharge conditions this capacity is calculated. Very often this is a 20 hour discharge with low current - conditions too favorable for good results.

  • \$\begingroup\$ Welcome to EE.SE. "So you can calculate the change in internal resistance." The internal resistance will remain pretty much the same. What will change is the internal voltage drop and this will be zero at zero current. \$\endgroup\$
    – Transistor
    Commented Feb 17, 2020 at 23:52

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.