At their heart, the majority of DC current sense circuits start with a resistance in a supply line (though magnetic field sensing is a good alternative, especially in higher-current scenarios). One simply measures the voltage drop across the resistor and scales it as desired to read current (E = I × R (if I didn’t include this, someone would complain)). If the sense resistor is in the ground leg, then the solution is a simple op-amp circuit. Everything stays referenced to ground, and you only have to be careful about small voltage drops in the ground layout.
But often, placing the sense resistor in a supply lead is the preferred approach. Why? Ground might not be available (e.g., a chassis-grounded automotive device), or you may not want device ground to be different than supply ground, which can lead to ground loops and other problems. So, what are the options?
The most obvious and explicit method is to throw a differential or instrumentation amplifier (inamp) across the sense resistor, but in practice this is rarely a good way. To accurately sense current, extremely high CMR (common-mode rejection) is usually required, which is both expensive and prone to drift.
How so? Let’s consider an example design: 0-10A, 12V nominal, 5 mΩ sense resistor:
The most obvious high-side current sensing solution, using a differential amp.
Don’t even think about using discrete resistors for this, unless they’re part of a precision matched network (hence not really discrete of course). For a 1V shift in supply voltage, and 80dB of CMRR in the diff amp (which translates to ~0.01% resistor matching), you’ll see the equivalent of a 20 mA shift in current (a 1V change with 80 dB CMRR results in a 0.1 mV shift referred to input; divide that by the 5 mV/A scaling of the 5 mΩ sense resistor).
For more detail: Quantum dots shrink on-chip lasers to 1μm