Cool stuff
@Cal ! This looks good, but I have some comments anyway if you want to think about them. I'll adjust my comments to a higher level since you are clearly an above-average forum user with respect to circuits. I apologize if any of my prior comments were patronizing, I just assumed a certain level based on you asking for advice about using PCB software.
- You're already using an INA part for the shunt; that's good. The last one I used was the INA219, but a colleague of mine recently used the INA226. That's a good choice and will work very well for your 300A shunt.
- Sigma-delta ADC is a good choice as bandwidth is not important and you don't want something more difficult to drive, like a SAR ADC.
- OPA991 is reasonably low offset (125uV). You can definitely go lower-offset with a chopper amplifier, typically 10uV. In integrated solutions like inside the INAs, the chopping is synchronous to the ADC sampling. But, 125uV is probably ok for this application. More on this later.
- You may as well add a capacitor in the feedback loop of the op-amp circuit to further reduce its bandwidth and noise, since you don't need to maximize bandwidth in this application.
- Your op-amp circuit is single ended. A better solution since you have a differential sensor, a differential MUX, and a differential ADC, would be to also use a fully-differential amplifier. These have a common-mode feedback loop which keeps the output common mode constant even as the input differential mode (and common mode) is varying. I can expound on this if you're interested**; but long story short you should replace the resistors and op-amp with something like this:
The AD8476 is a very low power, fully differential precision amplifier with integrated gain resistors for unity gain. It is an ideal choice for driving low power, high performance ADCs as a single-ended-to-differential or differential-to-differential amplifier. It provides a precision gain of 1...
www.analog.com
- The mux's resistance and the input resistors for each of its 8 paths will add to your gain error since it participates in the R2/R1 gain of the op-amp circuit. Ideally you would not have this source of error since it would use matched resistors on the opposite side of the mux. Assuming you stick with a discrete approach like this, you should at least move the resistors to the opposite side of the mux (which also eliminates the need for some of them). If you instead switch to the fully-differential topology I linked to above, the resistors are now integrated and matched for you inside the amplifier silicon, and you just have MUX -> DIFF_AMP -> ADC, fully differential the whole way, with no discrete resistors to worry about.
- Similarly, you'll get better resistor matching if all 100k resistors are in a single package, as they are on a single integrated circuit, typically better than if you're using discrete 0.1% resistors like you did in your prototype design. The actual value is not important, only the matching is important.
**Ok, a little expounding is in order: Right now you're relying on the input common mode rejection of the OPA991 which is a less optimal way to reject the varying common mode as you move up the stack of batteries with your MUX. You're also introducing a differential-mode to common-mode error at the ADC, since you're using a differential ADC in a single-ended mode. A reason to change it how I described above is because offset voltage and gain error are both common-mode-voltage dependent (in both the op-amp and the ADC). A second reason is that differential signaling is less susceptible to outside interference than single-ended signaling. On-chip stuff is fully-differential the whole way, typically.
Source: I interned at Analog Devices for a year while in grad school and designed a low-offset fully-differential amplifier, before starting my actual career in this field. Seems pretty apropos to the circuit at hand!
Edited a few times after initial writing.