balanced Li-Po cell status

I guess I’m just not thinking clearly, but is there a simple, low-component-count way of checking multiple voltages that are wired in series?

Lithium Polymer (Li-Po) cells are often permanently wired in series, e.g., 2S, 3S or 6S, with each cell between a cutoff 3.75V and a full 4.20V. The cells have the total voltage wired for general use, and also a second connector that gives access to individual cells for monitoring or charging.

+V <-+-> V3
     |
     =
     |
     +-> V2
     |
     =
     |
     +-> V1
     |
     =
     |
GND <+-> V0

I’d like to make a simple small-pcb solution that uses an ATmega8 or such, to individually monitor voltages, but I’m drawing a blank on how to simultaneously or dynamically monitor each cell vs the digital AGND of the Atmel chip. If I just wanted to measure one, say V2-V1, I’d just hook V1 to AGND and V2 to an ADC pin, and disconnect the others. I don’t want to disconnect/reconnect individual cells.

Why not just tap off each cell with a voltage divider and run that tap into an A/D converter input? All of the taps are relative to GND and you can do the subtraction (V2-V1, for example) in code.

I think you want more accuracy than that.

The best bet would be to use high side current monitoring techniques to shift the voltage down and loose the DC component. Basically this is by using a differential amplifier.

This page describes some of the concepts. http://www.maxim-ic.com/appnotes.cfm/an_pk/746/

I agree that I need more resolution than an approach that voltage-divides-it-all and subtracts V1-V0 from V2-V0 in software. In fact, if I could assume each cell (say V2-V1) is over 3.0V, and get ten bits of ADC resolution scaled/mapped from 3.0 to 4.5V, that would be awesome.

I appreciate the link you gave, Grumpy. It's just way over my head. I'm an analog doofus, I guess. I am able to guess at a couple small bits of it, but nothing like being able to apply the approach(es) to my situation.

I too feel that using two voltage dividers (for V2 & V3, V1 measured directly) and doing the math will give you the most bang for the buck without requiring external active components and the resolution would be good enough for the monitoring of charging and cell balancing.

Lefty

OK, if you want maximum resolution you are going to need a differential amplifier for each battery. Here is such an amplifier that can be powered by up to 3 cells in series (since the TLV2371 is limited to a +15V supply) and expects input voltages in the range 3V-4.2V and outputs the difference between V+ and 3V. Thus, the output will be between (approximately) 0V and 1.2V. If you use precision 1% resistors and the 0.5% variant of the TL431 you probably won't have to do any calibration. Finally, you can use this module 3 times to differentially measure each battery like this:

RuggedCircuits, thanks for translating the maxim's schematics into something I can follow and even build. I hope the drawings are useful for other folks too. I am gathering that your differential module's supply voltage (9~12.6V) is allowed to come from the same battery, the one that is dropping as the battery is consumed, and the circuit tries to maintain the ideal 0~5V range for ADC purposes. Yes?

retrolefty, it's quite good enough for a "high, middle, low, recharge" indicator like you see on little battery indicators. I might go with that in some cases. Balancing chargers try to keep the cells within 0.01V of each other until they're all full. If we're talking about a 4.20 to 3.75 volt range, a perfect ADC division circuit would only give about 36 steps from "full" to "cutoff" for each cell.

(That's equivalent to map((4.2-3.75)/(12.6/5.0), 0.0, 5.0, 0, 1023) in Arduino math. Since that linear interpolation function only uses integer operations, state it as map((420-375)*50/126), 0, 500, 0, 1023).)

RuggedCircuits, thanks for translating the maxim's schematics into something I can follow and even build. I hope the drawings are useful for other folks too. I am gathering that your differential module's supply voltage (9~12.6V) is allowed to come from the same battery, the one that is dropping as the battery is consumed, and the circuit tries to maintain the ideal 0~5V range for ADC purposes. Yes?

Yes, the idea was the modules were powered by the three batteries in series, and the voltage would vary from 9V to 12.6V depending on charge status.

I'm glad you pointed out the output range -- the circuit output was only going up to 1.2V so I revised the resistor values a bit and now you should see voltages use more of the full range, closer to 4.7V (see below). I also added a zener diode on the output to make sure the voltage doesn't go above ~5V and damage your board (in case one input goes free, etc.)

Great post, very useful if you want to build your battery meter/balance checker for a DIY electric bike. Both LiPO and LiFePO4 are used a lot in this application