What are the limits for differential amplifiers

Thread Starter

NomadAU

Joined Jul 21, 2012
46
Hi

I'm designing a rudimentary circuit for measuring the cell voltages of an 8 cell LiFePO4 battery pack. Before anyone suggests using custom BMS chips like bq76930 et al, let me just say that I am already working on a BMS based around such a chip. This project is ONLY about measuring cell voltages with a small degree of accuracy, say to 2 decimal places. Cells voltage will typically be between 2 and 3.7V - this will be measured using the ADC on an Arduino or a MCU running 5V.
I have tried a few designs using MUXs to select and switch the cell - and + lines, but failed due to the total voltage across the pack exceeding the specifications of the MUX being used. I've now moved to a different approach (and one that others have tried, albeit with fewer cells being measured) using an op amp per cell. Essentially, the circuit consists of 8 op amps configured as voltage followers (the role of these is simply to limit current from each cell) and these provide the voltage from each cell, nominally 3.6, 7.2, 10.8...and so on up to cell 8 (28.4).
A further 8 op amps will then be configured as differential amps to get the voltage difference between C1 and GND, C2 and C1, C3 and C2... C8 and C7.
Each of these will use identical resistors to give Unity gain so the cell voltage can be read directly without any multipliers.
Finally, a 8:1 MUX will be used by the MCU to select which cell voltage to be measured...and each of these are expected to be well below 5V.
Now my question...
If the op amps are powered directly by the pack voltage (say between 23V and 28V) then what, if any, are the problems with this design? My reading of op amps states that they are in some ways limited by their voltage extremes - in my case this is likely to be 0V to 23-28V.
If I use an op amp which can operate with up to 36V and with a low Vos, what gotchas am I likely to run into?

I've attached a circuit diagram showing the main components.

Cheers
Mike
 

Attachments

Last edited:

danadak

Joined Mar 10, 2018
4,057
You could use this approach, single chip design, a PSOC.

IDE (PSOC Creator) and compiler free. https://www.cypress.com/products/psoc-creator-integrated-design-environment-ide

Dev board, probably could use the $ 10 board.

https://www.cypress.com/documentati...oc-5lp-prototyping-kit-onboard-programmer-and


You would optimize the divider for each cell number to give max accuracy on measurements. The dividers
bring the cell V into CM range for SAR. You make single ended measurements and then calc from them individual
Cell V's. Ignore the R's all being 10K, thats just the tool default value. Note these are external to chip.

The Vref for the ADCs is onboard, good for +/- .1% if I recall correctly.

Note right hand window, most of chips resources still left for other uses, like OpAmps, DACs, Digital
counter/timer/pwm/DSP/gates/flops/general logic/LUT, LCD, Quadec....... Processor core is ARM M3.

The ADC, SAR, is 12 bit. You could use the DelSig onboard + an onboard mux which goes to 20 bits. This might
allow you to use a thin film R array with equal value Rs bottom side and still get accuracy/resolution you want.

If you needed to do a current test of stack DelSig has ability to handle input 100 mV outside either rail. So would
work good for a low side sense shunt.


1587994319311.png
 
Last edited:

Hymie

Joined Mar 30, 2018
1,277
What you are proposing to do should work, but I question the need for buffer amps (voltage followers), since input resistors at each op-amp could limit the current from each cell.

You should consider in your design that a semiconductor IC can fail short circuit (any pin to pin); therefore to protect the battery pack/cells you need to add some resistance at critical locations (even to the op-amp rails). Consider that any op-amp pin could fail short to the op-amp 0V pin – without adequate protection (impedance) a large fault current could flow.

Other than providing the above protection, given the accuracy you are seeking I would recommend you include the facility to adjust the zero of each op-amp to remove any inherent offset.
To reduce battery drain from the monitoring circuit, I would use 10kΩ resistors (where you have 1kΩ) in your circuit.

In relation to your original idea of using MUX, you could include a voltage division across the cells (say reducing all measured voltages by 2) and correct for this reduction in any data processing.
 

Thread Starter

NomadAU

Joined Jul 21, 2012
46
You could use this approach, single chip design, a PSOC.

IDE (PSOC Creator) and compiler free. https://www.cypress.com/products/psoc-creator-integrated-design-environment-ide

Dev board, probably could use the $ 10 board.

https://www.cypress.com/documentati...oc-5lp-prototyping-kit-onboard-programmer-and


You would optimize the divider for each cell number to give max accuracy on measurements. The dividers
bring the cell V into CM range for SAR. You make single ended measurements and then calc from them individual
Cell V's. Ignore the R's all being 10K, thats just the tool default value. Note these are external to chip.

The Vref for the ADCs is onboard, good for +/- .1% if I recall correctly.

Note right hand window, most of chips resources still left for other uses, like OpAmps, DACs, Digital
counter/timer/pwm/DSP/gates/flops/general logic/LUT, LCD, Quadec....... Processor core is ARM M3.

The ADC, SAR, is 12 bit. You could use the DelSig onboard + an onboard mux which goes to 20 bits. This might
allow you to use a thin film R array with equal value Rs bottom side and still get accuracy/resolution you want.

If you needed to do a current test of stack DelSig has ability to handle input 100 mV outside either rail. So would
work good for a low side sense shunt.


View attachment 205521
Thanks for the suggestion Danadak. I will continue with the use of op amps because I've already got a pile of them ready to go. However I'm also going to take a look at the SoC you recommended. I've got a lot of experience using more basic PIC mcus but haven't really looked into anything more comprehensive than the basic PICs. Thanks for the direction.
Cheers
Mike
 

Thread Starter

NomadAU

Joined Jul 21, 2012
46
What you are proposing to do should work, but I question the need for buffer amps (voltage followers), since input resistors at each op-amp could limit the current from each cell.

You should consider in your design that a semiconductor IC can fail short circuit (any pin to pin); therefore to protect the battery pack/cells you need to add some resistance at critical locations (even to the op-amp rails). Consider that any op-amp pin could fail short to the op-amp 0V pin – without adequate protection (impedance) a large fault current could flow.

Other than providing the above protection, given the accuracy you are seeking I would recommend you include the facility to adjust the zero of each op-amp to remove any inherent offset.
To reduce battery drain from the monitoring circuit, I would use 10kΩ resistors (where you have 1kΩ) in your circuit.

In relation to your original idea of using MUX, you could include a voltage division across the cells (say reducing all measured voltages by 2) and correct for this reduction in any data processing.
Thankyou for the feedback Hymie. Everything you say makes sense to me and I hadn't given any thought to the shorting risk and need for suitable protection. By using resistors instead of the voltage followers, I get some of the pins protected as a bonus so I'll probably do that. Finally, your suggestion re the MUX solution to use a voltage divider on the input is sound and I'm now wondering why I didn't think of it at the time.
Many thanks for taking the time to answer my questions.
Cheers
Mike
 

Reloadron

Joined Jan 15, 2015
7,501
This is your opamp. Here is an example which parallels what you want to do. Vcc is the B_Total so looking at the data sheet and looking at the second link I don't see why this won't work. You aren't exceeding any common mode specifications. Actually this has become a popular means of measuring individual cells in a series LiPo battery pack. All things considered I don't see why it won't work. :) This recently came up in another forum and as I recall even using the same operational amplifier.

Ron
 

RPLaJeunesse

Joined Jul 29, 2018
252
A low-parts-count approach would be to use an single ADG5207 multiplexer feeding a LT6375 difference amplifier. Control the mux from the Arduino and get each cell voltage right out of the LT6375. Definitely want to add resistors (10K 1%) between the batteries and the mux inputs to allow for power sequencing situations that might otherwise destroy the mux. Note that these resistors will reduce the output of the LT6375 by about 5%, software can compensate for that easily.
 

Thread Starter

NomadAU

Joined Jul 21, 2012
46
A low-parts-count approach would be to use an single ADG5207 multiplexer feeding a LT6375 difference amplifier. Control the mux from the Arduino and get each cell voltage right out of the LT6375. Definitely want to add resistors (10K 1%) between the batteries and the mux inputs to allow for power sequencing situations that might otherwise destroy the mux. Note that these resistors will reduce the output of the LT6375 by about 5%, software can compensate for that easily.
My first attempt was similar to this approach. I used 2 x 8:1 MUXs to switch between each cell, i.e. one MUX switched the pos line and the other switched the neg line. The idea was to control these with an Arduino and also use the ADC function of the Arduino to read each voltage. This failed for at least 2 reasons: 1 - the voltages across the cells exceeded the max for the MUX I was using so it rapidly overheated, and 2 - the Arduino ADC was limited to reading 0-5V whereas the cell voltages coming out of the MUXs were, with the exception of cell 1, outside of this range. Your idea would avoid these issues because the MUX can operate with voltages > my Batt Max and the op amp would limit the output voltage seen by the Arduino to < 5V.
I'm already building a circuit using 8 op amps and a CD4051BE 8:1 MUX to switch cell voltages to the Arduino but thanks for the suggestion.
 
Top