Wednesday, December 2, 2015
NiMH battery discharge tests
A couple weeks ago my wife got a few ornamental Christmas trees lit by RGB LEDs. Each of them takes 3 AA batteries, I bought a pack of Amazon Basics batteries since they were the best deal I could find for good quality batteries, since they are OEM eneloop batteries. The ones I received were manufactured 201412, which suggests they are 4th generation eneloops. I used 3 of the Amazon Basics batteries in 2 of the trees, and 3 Rayovacs I had lying around for the third tree. After the batteries ran out, I tested their voltages. The Amazons were consistently in the 1V range, but one of the Rayovacs was completely drained, reading 0 volts, even after the 2nd fill charge/discharge cycle. The three Rayovacs looked similar, but the 0V battery was a bit different than the other two. After looking through all of my rechargeable batteries, I realized I had 3 different kinds; the "0V" battery shown in the top of the picture above, one labeled "pre-charged", in the lower part of the photo above, and a couple labeled "ready-to-use". None of them had a capacity visible anywhere on the battery.
While I was confident that the capacity of the regular "0V" Rayovac was less than the "ready-to-use", I wanted to get a better idea of the actual capacity of the batteries. I also have some 1st-generation eneloops "3UTG" I purchased over 5 years ago that I wanted to compare to the new Amazon Basics batteries. I don't have smart battery charger/tester, but with a bunch of AVR boards around I thought it would only take a couple dozen lines of code to time the battery discharge. Before I started, I decided to see if somebody had already made a battery discharge project I could use. It didn't take long to find Denis Hennessy's battery capacity tester. I'm not a fan of the Arduino core, but if it worked, it didn't matter much if the code isn't pretty.
After reviewing Denis' code, I determined it work work well with a couple small changes. The AVR board I already had plugged into my breadboard was running at 3.3V, and Denis' code assumes an AVR running at 5.0V for the ADC calculations. I changed the code to use a "VCC" define. Even for boards running at 5V, using the exact voltage instead of assuming 5.0 could give more accurate ADC readings. I also modified the code so the "test complete!" message is output to the serial log, since wasn't hooking up a 1602 LCD (the code works fine without the LCD or DS18B20 attached). The last change I made was making the serial log output every minute instead of every second. I connected a 3.7 Ohm (nominal 4 Ohm) 15W speaker in lieu of a power resistor, and single AA battery holder for the battery.
The 3.7 Ohm load means the discharge current will be in the 300-350mA range, which is a bit higher than typical battery-powered electronics projects, but still within manufacturer specs for AA NiMH discharge rates. After a couple days, I had tested 5 different batteries:
The battery capacity tester calculates joules rather than mAh, so I've done a rough calculation in mAh since that is the typical rating for NiMH batteries. The regular Rayovac (purple line) was about 1100mAh, with the pre-charged Rayovac (green line) around 1300mAh. The ready-to-use Rayovac (red line) was around 1350mAh, which matches the capacity specified for the new Rayovac "recharge" batteries. The 1st-generation eneloop is still doing pretty well at around 1900mAh, and the Amazon Basics give a very respectable 2050mAh.
My updates to the battery capacity tester were merged a couple days ago, so you just need to download the zip from Denis' github repository. If you are not hooking up the temperature sensor, you can comment out the OneWire and DallasTemperature references. You will need a copy of the Time library, which is now maintained by Paul Stoffregen.