Hi, I have a project, where the customer wants to monitor some Li-Ion battery packs. So the thing is not for series production, but a few dozen of those will be made for large scale battery pack testing, with some more in the future.
We need to measure cell voltages on 2...14S battery packs in completely unknown condition (including shorted/dead cells). Now there are specialized chips from AD/LT, TI and others, but they are either extremely complex and/or expensive and/or have lower limit on number of cells and/or require NDAs. Also, the customer wants to avoid using super-specialized parts if at all possible, because of current semiconductor shortage (we already have had 2 projects that went tits-up and are currently on indefinite hold due to critical parts being on back order with lead time of "honestly, we don't know"). So the only reasonable solution seems to be to build it out of opamps. At 60V max pack voltage it should be possible without floating circuits etc. The goal is to achieve <10mV accuracy on cell voltage as cheaply as possible. Most modern precision opamps are 5V parts, so 3.3V will be assumed as opamp supply. Every channel will be 2-point calibrated using linear function.
Now I've come at a few solutions:
1. Make a diff-amp using precision/autozero opamp with .1% resistors. Obviously common mode is an issue, so the diff amp gain will have to be in the order of 1/20, which means output voltage in 150...210mV range, and this has to be amplified by another non-inverting opamp to fit the ADC dynamic range. In general 28 precision opamps are needed. Most likely this will offer best acuracy.
2. Make diff amps as in 1) and then mux the results into a single non-inv amplifier, this would result in 15 precision opamps. This is obviously slower than 1., but speed is not an issue. Potential issue I see is additional error due to a multiplexer in the analog path.
3. Make 14 different dividers feeding into buffer opamps, subtract voltages in the CPU. This cuts the number of precision resistors, although many different values would be required and therefore cost of a single resistor could end up pretty high (0.1% resistors seem to be ~0.1€/piece at 100s). Requires 14 opamps.
4. Make 14 different dividers as in 3, but feed them into a mux, and buffer after the mux. This reduces opamp count to 1.
What would you do and why?
Currently I want to use Microchips MCP6V79 as opamps, since they seem to offer good price/performance ratio, have high CMRR and other parts I'd use in such situation are not available.