David,
Really appreciate the reply.
Why is the common mode voltage range so high if you can measure at the low or high side?
Good point. I went back and watched Dave's video on the uCurrent (more on this below), and noticed he ran it low-side. He didn't really talk about it, but this eliminates CMRR error altogether, and he doesn't have to worry about a subtraction stage in his amp or any of that mess.
Use as large (in watts) a current shunt as feasible to minimize temperature rise
This is a great idea. I hadn't given much thought to temp co stuff since it'll be sitting in a lab, and the error doesn't add much anyway. Either way, I like it.
I would work backwards to find the absolute minimum shunt resistance
This is an approach I didn't consider. Let me make sure I got this straight.
Given my range of inputs (300 uA - 200 mA) and my range of desired output (0 - 10V), it necessitates a gain of 50 to make full use of my output range. That gain will ultimately be a multiplicative product of shunt resistance and amplifier gain. We haven't determined those values yet, so put it aside for now. Gain of 50.
Considering my lowest output (300 uA input, gain of 50, means 15 mV output), the sum total output error must be 150 uV or less to meet my 1% accuracy spec. Given the gain of 50, that means my sum total input error must be 3 uV or less. That in turn demands my lowest shunt voltage must be at least 300 uV.
Therefore, if my lowest input is 300 uA, and my minimum output is 300 uV (to stay ahead of the 1% error spec), a 1Ω shunt is the minimum resistance. As you said, any lower resistance and the drop across it will be too low to stay ahead of the error. However, I don't understand why it couldn't be higher, say 2Ω, and reduce the amplifier gain to 25. Our overall gain is still 50, and we're still within the 10V output limit.
So you have a load resistor and current shunt in series across the battery?
Yes. The discharge current is based on the battery capacity. The device needs to support a range of capacities (hence the current requirements), so the actual load resistance will vary from battery to battery.
I did not even consider a dedicated current sense amplifier. Are any good enough?
Maybe? After your post, I'm beginning to realize I'm not analyzing this problem properly; although I'm still digesting your advice. Quite possibly they're good enough. So far, though, given a few other wrinkles in the design requirements I haven't brought up here, the error is still too large at lower currents. At least, if TI's error calculation tutorial is to be believed (and if I'm doing it right).
I do not understand why there is a significant common mode voltage to handle at all if either low or high side sensing can be used.
There isn't. I'm mistaken.
All that said, after watching Dave's uCurrent video again from way back when he was still in his garage, I've found a better approach that sidesteps all the amplifier error issues altogether.
I don't need one.
First, I was mistaken in my current range requirement; it's actually 3 mA to 200 mA. Oops. Second, instead of a single shunt, use multiple and switch them in or out with a FET or something. I have plenty of DIOs on the DAQ. This way I can keep the gain for a given range well above the error floor for the DAQ. I'm thinking this:
1 mA - 10 mA @ 100Ω
10 mA - 100 mA @ 10Ω
100 mA - 1000 mA @ 1Ω
This scales everything to sit nicely within the 1V range on the DAQ. If the resistance on the FET is a significant portion of the 1Ω shunt, I may be able to eliminate that one and just step up to the 5V range on the DAQ if the error isn't too bad. I didn't have time to run the numbers today, but I think the error should be acceptable. There's a few other design requirements that may spoil this, but we'll see.