Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Suppose I want to measure individual cell voltage of a 12-serial-cell battery pack, what would be my most economical options?

Single cell voltage is 3V-4.2V but the stack can be between 2-12 cells high.

I am looking for a solution to be attached to a microcontroller running at 3V3. Update rate requirement is modest in the range of 10Hz for the whole stack.

My first bet would be a instrumentation amplifier with sufficiently high common mode range multiplexed to the respective junctions between the cells. This however requires both a sufficiently high rated amplifier and multiplexer. Can someone suggest suitable parts or suggest a better approach?

By the way, the cell voltage of course needs to be sampled by an ADC but resolution needs to be modest 8-bit at most.

share|improve this question
Are you looking for a manual solution do do a few times, or something to design into a product? – bitsmack Apr 17 '14 at 18:14
It going to be a university project. But it needs to be an automated solution. – Arne Apr 17 '14 at 18:21

There are off-the-shelf solutions to this problem, you don't need to mess with transformers and exotic circuits. You can take advantage of the fact that it's much easier to isolate a digital signal than an analog signal and use serial communications between your microcontroller and the battery monitor. You should search for a "multicell battery stack monitor". As an example, the Linear Technology LTC6802 can monitor the voltages on up to 12 Li-ion cells and provide the voltage data via an SPI interface.

share|improve this answer
+1 for an off-the-shelf solution! I didn't know that these chips existed... – bitsmack Apr 17 '14 at 21:08

I'm not sure if you'll be left with enough accuracy using this method, but I'd head in this direction first for its simplicity. At each junction point between the batteries, setup a voltage divider to ground where you get 1/16th of the total voltage from the junction. At a maximum of 50.4V this would result in a maximum input voltage to your system of 3.15V. Then you can use a standard low voltage mux or you can just send each of the 11 points (or 12 if you count ground) directly to your uController which would have a 12bit ADC internally capable of muxing in those 11 signals. You would lose 4 bits of resolution due to the 16X (2^4) voltage divider. The final result would be the 8 bits you're after. The trick to this setup would be getting very tight tolerance resistors.

To measure the voltage of each cell, you would simply take the voltage at the two points around it and subtract the high from the low.

share|improve this answer
I think I will investigate this further. – Arne Apr 17 '14 at 20:54

I'd look into putting a cheap microcontroller accross each battery. There are plenty of micros that can run from 3 to 4.2 V directly, and take very little current. The micro would measure the cell voltage, then send the information digitally over a opto-isolator.

The output of all the optos from all the cells would be in parallel, each being able to pull down on the same line. The only remaining trick would then be to make sure only one micro sends its data at a time. This could be done with a token-passing scheme.

The micro on the ground-referenced cell can be triggered directly by the main controller. After it sends its data, it would assert the trigger signal to the next higher up cell. This can be level shifted various ways. My first reaction is to use a transistor in common-base configuration, but there are other ways too. The point is that this is cheap and easy to do because the ground for the next micro is the power rail of the current micro.

One advantage of this scheme is that you can stack many cells this way, all using the same measurement circuit. The accuracy and resolution is the same for every cell in the stack.

share|improve this answer
Creating one's own communication protocol from scratch is my idea of over-engineering. – horta Apr 17 '14 at 21:11
@horta: That's the wrong way to look at any engineering problem. Attributes like "over-engineering" are pointless because they are so subjective. Instead you look at measureable parameters. This one scales very well to many cells without loosing accuracy or precision. The argument about creating a comm protocol is also pointless since it's so subjective. I would use UART hardware in the micro to send the data over the opto, and a UART to receive it in the master. There is very little to "re-invent" here. This should be trivial for any compentent EE. – Olin Lathrop Apr 17 '14 at 21:50
I'm not saying your answer is wrong, impossible or unfeasible. Joe's answer is better. My comments were explaining some of the justification of the way I voted. – horta Apr 18 '14 at 1:36

The obvious method is to use a differential measurement, but getting acceptable accuracy with that method is quite difficult.

A flying capacitor system would be less troublesome potentially, but in this case it would require quite high voltage switches.

Individual isolation amplifiers are a bit expensive but will work with a minimum of issues.

There's another possible method: If you connect a transformer per channel through a diode to each cell, you can pulse the transformer and measure the voltage waveform at the driving end to determine the cell voltage. A couple spare channels can be used for calibration (zero/Vref), so you'd need 14 channels. It's a bit more of a project though.

Edit: To expand on the transformer idea, here is a Jim Williams (RIP) application note AN112 describing it in the context of battery measurement, and a block diagram, schematic from that AN. It uses BJTs connected as diodes. The transformer is a Pulse Engineering PA2100NL/PA2101NL.

enter image description here

enter image description here

share|improve this answer
Can you elaborate on the transformer idea? – Arne Apr 17 '14 at 19:19

Check this out, this is likely to be the easiest solution to your problem:


By using reference diodes and voltage dividers you can translate and scale every voltage to 0-3.3V, where it can be measured by the on chip ADC.

Because your chip likely doesn't have 10 analog input pins, you could use an analog demultiplexer.

share|improve this answer
Good point! I wonder whether a TLV431 adjustable voltage reference can be used instead of multiple fixed-value zeners. – Arne Jun 30 '14 at 13:08

You'll need a dozen difference or instrumentation amps with high common mode voltage feeding a data acquisition system.

A commercially available amp is the AD627. For how to roll your own, see http://cds.linear.com/docs/en/design-note/dn25.pdf, but note that resistor matching is critical. Also, any high-voltage instrumentation amp will use an internal voltage divider, and this will discharge the cells if given long enough.

If you can't allow any discharge during measurement, you'll have to get creative. If you can set your amplifier ground to the midpoint of the cell string, you only have to deal with +/- 25 volts. You can get high voltage opamps to handle this, and make a dozen voltage followers to buffer the individual cells, then do voltage dividers/opamps to measure the differences. This will require a non-standard set of power supplies, and you'll have to guarantee that the amplifier supplies are floated WRT the battery.

Once you've conditioned the difference voltages to something reasonable, there are any number of companies making data acquisition systems.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.