Measure Cell Voltages Switched Ground/Common Positive

I’m having a hard time wrapping my head around this.

I have several (six) lithium battery packs in a power bank with each single pack comprised of 4 cells and a BMS board. The BMS board switches the negative side on/off for protection (overcurrent, charge/discharge) via several MOSFETs. This means the positive side of all my battery packs is connected together and the negative side may or may not be connected together depending on current operating conditions.

I want to use an Arduino to measure individual cell voltages for every pack so I can monitor battery pack and cell health.

If my negative sides were all connected together this would be trivial as it would be the 0V reference for my Arduino and I could use a voltage divider for each cell. It’s the common positive that’s throwing me for a loop.

Any suggestions?

As long as the over-discharge protection circuit is connecting the pack to ground, they will all have the same voltage, because they are connected together by the MOSFETs at the negative side and by wires at the positive side. You won't be able to measure their voltages separately.

Have I misunderstood what you want to do?

A diagram might help.

1 Like

I see no reason the grounds cannot be connected. The positive will just fall down to the ground level.

Here's a basic schematic of a TI based cell balancing charger using external MOSFETs to switch the pack on/off.

I'm using a pre-made 4S BMS, but the MOSFETs are connected the same as this circuit (except mine has 10 MOSFETs total for increased current). Several other BMS designs I've seen are also constructed this way (regarding the MOSFETs) , so there must be a reason they're doing it like this.

If you have access to all the cell voltages, don't you also have access to the last cell ground?

jim-p

If I had a single battery pack I'd just connect the Arduino ground to the last cell ground and use voltage dividers at each cell to get my individual voltages.

The problem is I have 6 of these packs in a single device. The Pack+ and Pack- wires are all connected together in parallel for increased current output. I can't connect the battery grounds together as that defeats the purpose of having the protection MOSFETs.

Do you think I could connect all my battery grounds together using a resistor (say 10K from each cell) to form a floating common ground?

I have thought of a couple brute force methods that will work, but would like to find the simplest soltuion.

The circuit posted in #5 is standard, and does not support the claim below. Please post a schematic of the complete setup.

1 Like

jremington

Here's a simplified circuit with each "block" being a duplicate of the the full circuit in post #5.

You have 6 packs with 4 cells each, so thats 24 separate voltages you need to measure. I don't know of any arduino that has 24 analog inputs so I would imagine you were planning to use some type of multiplexer. So why not multiplex the ground connections?

jim-p

Yes, I was going to multiplex the cells to get all 24 voltages. I could multiplex the grounds as well, but changing each pack from 4 channels to 5 channels (adding the ground) messes with my I/O. Groups of 4 are so much easier to work with than groups of 5. I have already figured out a way to do this, so it’s probably what I’ll end up doing if nothing better presents itself.

What I was wondering (hoping for) is if there was a way to treat the positive side of the packs as a common reference and then measure the voltage at each cell going down, rather than the usual method of always using ground as the reference and measuring each cell going up.

BMS units are not that expensive, have you considered using one?

Stacked cells are best measured with the "flying cap" principle. That uses a single A/D.
High resolution, and no calibration between A/Ds and voltage dividers needed.
The only practical way I know is with small DPDT signal relays, one for each cell.
See this thread.
Leo..

2 Likes

I am using a BMS. They're so cheap these days it doesn't make sense to make your own BMS (possibly based on an Arduino). The problem is they're basically a "dumb" black box. They do what they're supposed to (charge cells, balance cells, protect from overcharging/discharging and current). But that's it. They have no way to monitor cell voltages or anything else.

That seems like a lot of work/components.

After some digging I think I've found my solution. An external ADC with I2C connection and dual supplies. Something like this:

ADS112C04 16-Bit, 4-Channel, 2-kSPS, Delta-Sigma ADC With I2C Interface datasheet (Rev. A) (ti.com)

If I understand the datasheet correctly, it allows you to run a separate power supply for the analog and digital sides of the circuit. So I can connect the analog portion to the 4 cells directly and use a separate power supply for the digital side which is shared with my Arduino.

16 bits is overkill for my needs, but I'm sure other companies make similar devices with dual supplies expressly for this purpose.

Thanks for all the sugegstions.

For what...

The ADS from your link seems a variation on the ADS1115.
Same thing. All inputs/outputs, including I2C, must stay within the limits of the chip's supply.
Leo..

1 Like

That would work.
You would an opamp to invert the voltages

The ADS1115 is a single supply chip. The one I linked has a separate VDD for the analog and digital side along with a separate ground for each side. Unless I’m misunderstanding the data sheet.

Wishful thinking, I read that the analogue part can have a bipolar supply, so -2.5volt to +2.5volt signals can be measured. The datasheet states a max voltage between digital ground and analogue negative/GND of -2.75volt to +0.3volt.
Leo..

I see. So the dual supplies isn’t for isolation, but rather to allow for a bipolar analog supply for certain types of measurement circuits.

In that case I’ll use a standard i2c ADC at each battery pack and an i2c isolator to communicate since my Arduino won’t (always) share a ground with the battery packs. I’ll power the ADC circuit directly from the battery pack.

Surely this is easier than using DPDT relays and flying caps. And with the ADC mounted directly at the battery pack it should be accurate and relatively noise free due to the short signal oaths.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.