multiplexing ground references

My project is monitoring individual cell voltages in a 24 cell battery. I plan to use 6 multiplexers, each selecting from four cells, each feeding an analog pin on the Arduino. I want to use a seventh multiplexer to select different ground references in the battery so that I can maintain an accuracy o .01 volts. I plan to tie all the multiplexer control channels together. The adruino and the multiplexers will be powered by a source separate from the battery being measured. Has anyone successfully tried this type of array of multiplexers? Should I use the inhibit capability in the multiplexers? I am concerned about ground loops. Thanks

I'm not sure I understand what you are planning, but it seems like a bad plan. I think you'd do better to put a differential amplifier across each cell and the mux the outputs of those together. You may need high voltage op-amps for those, since at least some of the common mode voltages are likely to be well outside the voltage range of normal op-amps.

I want to use groups of four inputs into the each of the 6 multiplexers- 0 through 5. Cells 1,7,13, and 19 into mux0 feeding analog pin 0, cells 2,8,14, and 20 into mux1 feeding analog pin 1 etc for 6 muxes. Cell 1 would be the most negative cell in the battery. The cell ID's refer to the positive side of the numbered cell. A seventh mux would select the ground reference for the group of cells being measured by the 6 analog pins- the negative sides of cells 1, 7, 13 and 19. The control pins of all 7 muxes would be ganged together and controlled by 3 digital pins. I will never show more than 5 volts to any mux input pin because I will either amplify or voltage divide the input voltages before the muxes. The highest voltage coming off any section of the battery would be less than 9 volts. Does this make more sense? Thanks jjac

Does this make more sense?

Maybe it does to someone else. Personally, it would help if you drew a diagram.

I think I have an idea of what you're doing. You should be able to do what you want with one MAJOR requirement. You must physically disconnect all electrical connections from all cells BEFORE making the connection to the cell you're measuring. This will float the measured cell relative to the Arduino and you can tie its negative terminal to your ground. You could not power the Arduino from the battery pack being measured. It would need its own power. You'd have to switch between cells with a matrix of relays. I don't think logic-based multiplexers would work.

Think of if you were measuring a cell in a pack with a multimeter. The multimeter has a 'ground' lead and you can measure any cell in the pack, one at a time. But you have to remove the leads from one cell before measuring another cell or you will create a bridge between the cells and possibly through the meter that could cause a short. EDIT: Nevermind that last statement. The meter's input impedance would prevent that.

What is your application? And how many and what type of cells do you need to measure? If you're trying to create your own Li-ion pack, I'll be interested in what you come up with and may be able to work with you. My current project needs a lithium pack and I'm trying to decide the best way to charge it through my Arduino too. (There are circuits designed specifically for this too, BTW.)

ANOTHER EDIT: Also check this site out. They have everything you ever wanted to know about batteries:

The application is load testing industrial lead acid batteries. I need to monitor individual cell voltages over a six hour discharge. During the test, the cell voltages start at around 2.15 volts +- .05. Testing requires .01 volt accuracy. I have already decided to use a separate power supply because of the changes in tested battery voltage over the time of the test. It will also reduce confusion of trying to maintain good Arduino supply voltage. I've been working with industrial batteries for over thirty years and I want to automate this testing process. I'll work on a drawing of my idea and post it. Relays are an option. They could be controlled by the muxes. Thanks for the input.

No matter how you break it up, you're going to have a large potential between the contacts of multiple cells. The closer the measured cells are to each other in the circuit, the lower that potential will be. But it will always be at least 2x cell voltage. Your best bet if you want to monitor more than one cell at a time is to monitor adjacent cells and use common contacts between them to measure the difference from point to point rather than trying to re-reference ground for each. For example, if you measured cells 1-4, then the neg terminal of cell 1 would be Gnd, and each terminal between cells would be an additional cell voltage level. So for the 4th cell, you're measuring the difference between 6.nn volts and 8.nn volts.

An op amp can usually handle up to about 18 volts on its input, so you should be able to use one per cell as differential amps across maybe 4-5 cells at a time. If you use a physical mux, like relays, you could re-ref gnd for each group and measure the difference between each cell. The output of the op amps would connect to your Arduino's analog in pins and should each give readings very close to each other (assuming the cells are each at the same voltage). I would measure the output of the op amps with a DMM before connecting them to the Arduino, just to be sure you're not putting >5 volts into a 0-5v pin. Also be sure your mux is a break-before-make type of 'switch' or you'll send some nasty spikes through your circuits. ;)

If the cells were all individual, this would be a slam dunk. But since they are in use and connected to each other, thinks get a little dicey with voltage levels.

I'm understanding the need for a physical disconnect in here, possibly using mechanical relays to make and break the grounds of the groups of cells and controlling these relays with the seventh mux. Also using the inhibit to shut everything down for a couple seconds to make sure the relays have time to work- helping the break before make. I'm thinking about four groups of six cells making the max potential of ~12.9 volts in a group- maybe six groups of four cells would be better- max potential ~8.6 volts. Use opamps on each input to get the voltage to the Arduino input pin to around 4-4.5 volts representing 2.15 volts then the discharged state voltage of 1.7 volts per cell would be around 3- 3.5 volts at the pin. This mess will definitely be tested running it manually before hooking in the Arduino. These batteries can dump hundreds of amps very quickly to a short. The sparks can be pretty exciting! Thanks