Measuring NiMH Cell internal resistance
This page ©2012 Andrew Wylie all rights reserved
The first thing that I wanted to do with my new Mirrorbow USB25IO was to check a number of NiMH rechargeable AA cells that I use for cameras and other devices. I had accumulated a number over the years, but a good fraction did not appear to work properly any longer. This was a nuisance because my cameras use four cells, and even one dud would cause the camera to stop working, usually just at a critical moment. Cells can exhibit problems if they have been overcharged, as is common when using the cheap timer-based chargers that are sold at low prices, even by the cell manufacturers.
A good starting point is to measure the cell's internal resistance. A common circuit model of a voltage cell is a perfect voltage source in series with a small resistance. In fact, you can measure this easily with a digital voltmeter and one external resistor: measure the open-circuit voltage, and then the cell voltage when discharging through the external resistor. If the model is correct, there will be a drop in voltage equal to the internal resistance multiplied by the current drawn. The current is equal to the measured voltage divided by the (known) external resistance. Alternatively, you can regard the internal and external resistors as a potential divider and relate the measured voltage to their values that way. Whichever you use, you have two equations and two unknowns and can solve for the 'perfect' voltage value (which is the open-circuit voltage) and the internal resistance.
That's all very well, but it does not tell you how accurate your values are, or whether the cell model is correct. More information can be gained by using several external resistor values and measuring several voltages. I did this using the USB25IO to read the voltages. This then allowed me to process the results in a PC program that I wrote. Measuring the voltage was trivial, as the USB25IO ADCs have a range of 0 to +5 volts, ideal for a NiMH cell of about 1.3 volts. The image on the right shows my setup, with various resistors and some short leads terminated with crocodile clips to make the circuit. I just happened to have a number of large wirewound 1-ohm resistors, which were quite useful. The cell is in the middle, and the USB25IO is inside the grey box.
Having measured the voltages at several resistance values, I wanted to use least-squares to fit a curve to the results. This would not only give the internal resistance value, but also the statistical error from the spread of the measurements. This works best if the data fit a straight line, but that is not the case for the curve of external voltage versus external resistance. The equation is
which is in fact a hyperbola. (E is the 'perfect' voltage, Vext the measured voltage, Rint and Rext the internal and external resistances). However, by inverting both sides we obtain:
which shows that if we plot the reciprocal of the measured voltage against the reciprocal of the external resistance, it should be a straight line.
The (rather small) screenshot on the right shows my program. The resistance values are entered one by one at the top right and a button is clicked to read the voltage from the USB25IO. When all have been read, clicking the 'Calculate' button displays the graph, calculates the slope and intercept, and transforms those into the voltage and resistance. I also calculate the errors in the voltage and resistance values. The red lines are estimated errors on the data points caused by resistor tolerance; I believe these to be over-estimates judging by how close the line passes to the centre of the red bars. Note that the graph has a suppressed zero: the errors are not huge! Interestingly, I get a better fit to the points if I omit the open-circuit point: that has been done in this example, and you can see that the fitted blue line does not pass close to the o/c point. This suggests an imperfection in the simple circuit model.
The results of the exercise were interesting and useful. Internal resistances varied from about 0.2 ohms to over 4 ohms. There were two groups of values, one below 0.3 ohms and another between 0.6 ohms and about 1 ohms. I threw out all cells with resistance above 0.4 ohms and bought a better charger.