Battery Capacity Tester

(There is a new updated version.  Click <HERE> to see it)

Please see the UPDATE at the end of this article



I'm always using rechargeable batteries, and sometimes I like to test them to see if they are wearing out.  The circuit below can be used to test the capacity of rechargeable batteries.  It can also be used to drain a battery prior to charging.  Normally you do not need to drain a battery before charging (not even NiCads although plenty of people think so).  But sometimes I don't know whether a battery is fully charged, and I don't want to risk overcharging it even though I have one of those "smart" chargers.  So I will use the circuit to drain the battery down before popping it into the charger.

For large batteries, capacity is measure in amp-hours (AH).  For small batteries the capacity is measured in milliamp-hours (mAH).  For example a popular rating for "AA" rechargeable batteries is 2000mAH.  This means that the battery can provide a current of 2000mA for 1 hour.  Or 1000mA for 2 hours.  Or 500mA for 4 hours, etc.  But actually it is not perfectly linear.  2000mAH divided by 1/4 hour would be 8000mA (8 amps).  But you cannot really drag 8 amps out of an "AA" battery for 15 minutes.  The battery capacity rating is really only accurate for modest loads, not heavy loads.   



To determine the battery capacity, you need to do 3 things:

  1. Put a known load on the battery
  2. Time how long it takes for the battery to be depleted
  3. Disconnect the load after the battery is depleted

Step One - Put a known load on the battery

You could simply put a resistor across the battery.  Rechargeable batteries have a nominal voltage of 1.2 volts.

If you put a 12 ohm resistor across the battery,  1.2V / 12Ω =  0.1 amps  (100mA)  You now have a 100mA load on your battery.

If you have a 4.8V battery pack, placing a 48 ohm resistor across the battery pack will give a 100mA load.

But wait, we have a problem with this.  The battery voltage is not constant!  When you pull the battery out of the charger, the terminal voltage is typically higher than the nominal voltage.  And then when you attach the load, the battery voltage will slowly drop as the battery drains.  For a large portion of your test, the load on the battery is NOT going to be 100mA.  In order to make it work, you will need to monitor the battery voltage.  I saw someone else on the internet who did that.  They used a microcontroller with a built-in A/D converter to monitor the battery voltage.  They then charted the battery voltage over the duration of the test, and calculated an overall battery capacity.

That's a lot of work.  An easier way is to use a constant-current load.  Such a load will remain constant regardless of the battery voltage.  There will be no need to chart the battery voltage throughout the test.  And no fancy math to calculate the resulting battery capacity.  You only need a simple circuit which will draw a constant current.  This is the approach that my project uses.

Step Two - Time how long it takes for the battery to be depleted

We need to know how long it takes for the battery to be depleted.  This can be done with some kind of timer.  The accepted practice is to drain the battery to 1 volt (or drain a battery pack to 1 volt per cell).  We already know the load (from our constant-current load).  If we know the duration of the test, then we simply multiply the two together to get the mAH capacity of the battery. 

Step Three - Disconnect the load after the battery is depleted

This not only keeps from ruining the battery, it also marks the end for the timer.  You do not need a fancy microcontroller for this, just a simple comparator.  We don't care what the battery voltage is during the test, we just want to know when the battery voltage hits 1 volt (or 1 volt per cell).



The circuit is fairly simple.  U1 is an LM358 dual op-amp.  The first half (U1a) along with Q1 creates a constant-current load on the battery.  For Q1, any NPN power transistor should work fine.  A TO-220 package will be good up to about 300mA.  For larger loads, Q1 should be in a TO-3 package.  Either way, be sure to use a heat sink on the transistor. 

There are tons of different power transistors out there.  If you don't have any laying around you can try surplus vendors such as All Electronics, Electronic Goldmine, etc.  I am currently using a 2N3055.  They are cheap and easy to find.

VR1 sets the load on the battery.  The range is about 100mA to 1 amp when running a 4-cell battery pack (4.8V battery pack).  R1 can be changed to tweak the range.  If you would like a lower range then decrease R1.  For a higher range, increase R1.  You can also fudge with the range by changing the value of R3.

The other half of U1 (U1b) is a comparator.  One input is the battery voltage, and the other input is a trigger point set by VR2.  When the trigger point is reached then the output of U1b will go low and de-energize relay RY1.  This will remove the load from the battery.  R6 pulls-down the input of the comparator to keep the relay off when no battery is connected.

Q2 provides more power for driving the relay coil because the LM358 has a limited power output.  Diode D1 protects Q2 from the surge that occurs when the relay is de-energized. 

The comparator senses the battery voltage through relay contact RY1b.  This will keep the comparator disconnected from the battery after the circuit times out.  This is necessary because the battery voltage will recover (increase) when the load is disconnected.  If the comparator was still connected to the battery then the circuit would re-activate.

VR2 is typically set for 1V per cell.  Less than 1V per cell is not recommended.  Just take the nominal voltage of the battery or battery pack and divide by 1.2.  For example a 7.2V battery pack should use a trigger point of   7.2V  /  1.2  =  6.0V.

When the circuit is powered up and a battery is connected, the output of U1b will initially be low and no action is taking place.  To get things started, switch S1 must be pressed.  This will momentarily connect the battery to the comparator and energize the relay.

LED1 will stay illuminated until the trigger point is reached.

OK, so that is the basic circuit operation which provides a constant-current load on the battery.  To calculate capacity you need to know the size of the load AND how long the battery lasts until the trigger point is reached.  So we need a timer.  Timers can be expensive.  I came upon a simple solution to use a cheap battery operated quartz clock.  Notice D2 and D3 in the circuit.  Their only purpose is to provide power for the clock.  A diode will have a pretty constant 0.7V when forward-biased.  Two in series will provide close to 1.4V.  This is just fine for my little clock, which normally runs off a single AA battery.  The clock draws very little power.

Simply set the clock to 12:00.  When the circuit is activated the clock will get power and start ticking.  When the comparator switches off, the clock will stop.  You can then read elapsed time off the clock.  I got my clock from Radio Shack for $6.95, but it is now discontinued.  However I have seen similar clocks at Walmart.

Cheap?  Yes!  Accurate?  You bet -- even those cheapie quartz clocks are accurate.  The only possible problem you could encounter is if you know that your test will exceed 12 hours.  Then if the clock reads 3:00 you couldn't be sure whether it timed out after 15 hours or after only 3 hours.  In this case just check the clock part way through the test.

Please note that you cannot use a digital clock, they loose the time when power is removed.  You must use a regular clock with minute and hour hands. 

Also please note that you must use 3 wires to the battery under test.  Two of the wires are for draining the battery (through Q1) and the other wire is to sense the battery voltage for the comparator.  Do not try to use one set of wires -- the voltage drop in the wires will upset the comparator. 

Connect the comparator wire directly to the (+) battery terminal (or as close as possible).  So for example if you have a battery holder with long leads, do not connect the comparator wire to those leads.  The voltage drop in the leads will cause the comparator to see a lower voltage than the true battery voltage, which will cause the circuit to time-out prematurely and thus report a low battery capacity.  You would want to connect the voltage sense wires directly to the battery (or as close as possible).



I built the original circuit on a breadboard, which I then transferred to a circuit board from Radio Shack.  Their part number 276-170 is cheap and exactly matches the layout of a breadboard, which makes it easy to use.  I didn't bother putting the circuit in an enclosure, which is just as well because then I don't need to worry about dissipating heat.

Resistor R3 is a 4ohm power resistor.  I just used two 8 ohm resistors connected in parallel. 

U1 is an LM358, which is specially designed for single supplies.  But you could try using any other dual op-amp you have laying around.

I mounted the circuit onto a piece of wood and used velcro to secure the clock.  I could not solder wires onto the battery contacts of the clock, the type of metal they use just doesn't accept solder.  I used some small alligator clips to connect the power leads to the battery terminals on the clock.

For power I used a 15VDC 200mA wall adapter that I picked up at a surplus store.  It works fine.


The layout is not critical at all.  Feel free to arrange your circuit differently.



To test capacity:

  1. Set the clock to 12:00.
  2. Connect a voltmeter to TP1 and set VR2 for a trigger point of 1V per cell (battery pack voltage divided by 1.2). 
  3. Turn VR1 all the way down.
  4. Connect the battery to the circuit through your meter.  Set the meter to read current.
  5. Press S1.
  6. Adjust VR1 for the desired milliamps.  For testing the capacity, I recommend using a load approximately 1/5th the capacity of the battery.  (EXAMPLE:  For a 1000mAH battery, 1000/5 = 200mA).  Smaller loads are OK, but larger loads may not provide accurate results. 
  7. Come back later to see the results.  (When the LED goes out the test is done.)





Measured Capacity  =  200mA  x  4.58 hours  =  916mAH 



If you are just draining a battery prior to charging, then you can use a higher current drain.  Try battery capacity divided by 2 or 3.  You also don't need to drain it all the way down to 1V per cell.  1.05V per cell will be fine (battery pack voltage divided by 1.14).  This way it won't take hours and hours for the battery to drain down. 

When not using the capacity tester, connect the voltage sense wires together.  This will protect the IC from getting zapped by stray static electricity.





U1 1 IC, LM358N (dual, single supply)
REG1 1 Regulator, LM7812 (fixed +12V)
Q1 1 Transistor, NPN power (any general purpose power transistor in a TO-220 or TO-3 package)
Q2 1 Transistor, NPN, 2N3904 or similar
D1-D3 3 Diode, 1N4003
LED1 1 LED, red
C1 1 Capacitor, 0.22F film (Mylar, etc.)
C2 1 Capacitor, 0.1F ceramic disk
RY1 1 Relay, DPST or DPDT, 12VDC, contacts rated at least 1A
VR1 1 Potentiometer, 20KΩ 10-turn trimmer
VR2 1 Potentiometer, 10KΩ 10-turn trimmer
R1 1 Resistor, 680Ω, 5%, 1/4W
R2 1 Resistor, 1KΩ, 5%, 1/4W
R3 1 Resistor, 4Ω, 5%, 10W (or two 8Ω resistors in parallel)
R4 1 Resistor, 2KΩ, 5%, 1/4W
R5 1 Resistor, 220Ω, 5%, 1/4W
R6 1 Resistor, 1MΩ, 5%, 1/4W
S1 1 Switch, momentary pushbutton, normally open
  1 Heat sink for Q1
  1 Wall transformer, 15-20VDC, 200mA or more
  1 Clock, battery operated quartz
  6 Alligator clips (2 for battery connection, 2 for clock, 2 for voltage sense wires)
  1 Circuit board (Radio Shack p/n 276-170)



Originally I stated that Q1 does not need heat sinking.  Well, it didn't until I ran the battery drain up to 300mA.  Then Q1 got hot!  If you want to run Q1 up to 300mA, it definitely requires a heat sink.  For loads higher than 300mA I would recommend a power transistor in a TO-3 package along with a heat sink.  A 2N3055 works well.  That is what I did with mine.  There was not enough room to mount a 2N3055 on the circuit board, so I removed the old Q1 and ran wires to a 2N3055 which I mounted off-board.  I also put a heat sink on it.  Remotely mounting Q1 will not affect the operation.  Here is a picture of the modified project:


Back to Home Page