Instrumentation Amplifiers, Error Budgets & Calibration
Proving a measurement system meets its accuracy specification. Learn instrumentation-amplifier error sources (gain error and drift, offset and drift, CMRR, nonlinearity, bias current, noise, input range), accuracy vs precision vs resolution, systematic vs random errors, building an error budget in ppm of full scale, worst-case vs RSS summation, what calibration can and cannot remove, one-point, two-point and multi-point calibration, temperature compensation, traceability and recalibration intervals — with Python summing a pressure-chain budget and deriving two-point calibration coefficients.
A 24-bit ADC does not make a 24-bit-accurate instrument. Every block in the chain adds errors; the error budget lists them, converts them to common units and adds them up to show whether the specification can be met — before hardware is built.
Calibration removes the fixed (systematic) parts. What remains — drift, noise, nonlinearity, hysteresis — sets the real accuracy.
An analogy
An error budget is like a household budget: every expense (error source) is listed in the same currency (ppm of full scale), and if the total exceeds the income (specification), you must cut the biggest expense first — trimming small ones barely helps.
Accuracy, precision, resolution
Resolution is the smallest change you can see (LSB, noise-free bits). Precision (repeatability) is how closely repeated readings agree — set by noise and short-term stability. Accuracy is closeness to the true value — requires calibration traceable to standards. A system can be precise but inaccurate (consistent offset) or high-resolution but imprecise (noisy).
Instrumentation amplifier errors
For an in-amp stage, include:
- Gain error (initial, from R_G tolerance and internal resistors) and gain drift (ppm/°C)
- Input offset (RTI) and output offset (RTO): V_OS,total = V_OSI + V_OSO/G
- CMRR at the actual frequency (drops at 50/60 Hz harmonics and above)
- Gain nonlinearity (ppm), bias current × source impedance
- Noise (0.1–10 Hz pp and wideband), input common-mode/output swing limits
Summing errors
Worst-case summation assumes every error is at its limit with the same sign — guaranteed but pessimistic. RSS assumes independent random errors — realistic for many units but can be optimistic for correlated errors (e.g. drifts all driven by the same temperature). Common practice: sum correlated groups linearly, then RSS the groups; report both, and verify with Monte Carlo simulation and measurements on real units.
Calibration strategy
One-point calibration removes offset; two-point removes offset and gain; multi-point with polynomial or piecewise-linear correction removes much of the nonlinearity; calibration at several temperatures builds temperature-compensation tables. Calibrate the whole chain with traceable standards (reference weights, calibrators), store coefficients in non-volatile memory with checksums, schedule recalibration based on drift specs (e.g. annually), and document uncertainty per ISO/IEC 17025 practice.
Formulas
- Worst case:
E_wc = Σ|e_i| - Root-sum-square:
E_rss = √(Σe_i²) (independent errors) - Offset in %FS:
e = V_OS·G/V_FS × 100% - CMRR error:
e = ΔV_CM/CMRR (input-referred) - Two-point calibration:
y = m·code + b; m = Δy/Δcode; b = y₀ − m·code₀ - Temperature drift:
e = TC·ΔT (ppm/°C × °C)
Worked example: RSS
Given: Errors 3 mV and 4 mV (independent)
Find: RSS and worst case.
- √(9 + 16)
- 3 + 4
Answer: 5 mV RSS, 7 mV worst case
Worked example: Offset in %FS
Given: V_OS 50 µV, G 100, FS 2.5 V
Find: Error.
- 50 µV × 100/2.5 V
Answer: 0.2% FS
Worked example: CMRR error
Given: CMRR 100 dB, ΔV_CM 2.5 V
Find: Input-referred error.
- 2.5/10⁵
Answer: 25 µV
Error budget structure
Error source (FS = 10 mV bridge output) → ppm FS Calibratable?
Sensor offset ±0.5 mV (of 10 mV) 50 000 yes (offset cal)
Sensor span ±1% 10 000 yes (span cal)
Sensor nonlinearity 0.1% FS 1 000 partly (multi-point)
In-amp offset drift 0.06 µV/°C × 25 °C 150 no (unless re-zeroed)
Reference TC 10 ppm/°C × 25 °C 250 no
ADC INL ±5 LSB (16-bit) 76 no
Noise 0.1 µV rms × 6.6 66 averagingList every error with its raw datasheet value, convert to a common unit (ppm or %FS at the ADC input), and mark whether calibration removes it. Initial offsets and gain errors are often huge but calibratable; drifts and nonlinearity remain.
Budget summation and two-point calibration
import math
# Error budget for a pressure measurement chain (full scale 100 kPa -> 2.5 V ADC), worst case vs RSS
errors_ppm = { # all as ppm of full scale
"sensor nonlinearity": 1000,
"sensor temp drift (after cal)": 800,
"in-amp gain error (after cal drift)": 200,
"in-amp offset drift": 150,
"reference drift": 250,
"ADC INL": 120,
"noise (3 sigma, averaged)": 60,
}
wc = sum(errors_ppm.values())
rss = math.sqrt(sum(v**2 for v in errors_ppm.values()))
print(f"worst case {wc} ppm = {wc/1e4:.3f}% FS ({wc*1e-6*100:.3f} kPa); RSS {rss:.0f} ppm = {rss/1e4:.3f}% FS")
biggest = max(errors_ppm, key=errors_ppm.get)
print(f"largest contributor: {biggest} ({errors_ppm[biggest]/wc*100:.0f}% of worst case)")
# Two-point calibration: measured codes at 0 and 100 kPa
c0, c100 = 412, 3890
gain = 100 / (c100 - c0)
offset = -c0 * gain
print(f"calibration: P = {gain:.5f}*code + ({offset:.3f}) kPa; code 2151 -> {gain*2151+offset:.2f} kPa")
# In-amp: gain 200 from G = 1 + 49.4k/RG
print(f"RG for G = 200: {49.4e3/199:.1f} ohm; 0.1% RG -> gain error ~ {0.1*199/200:.3f}%")
# worst case 2580 ppm = 0.258% FS (0.258 kPa); RSS 1335 ppm = 0.134% FS
# largest contributor: sensor nonlinearity (39% of worst case)
# calibration: P = 0.02875*code + (-11.846) kPa; code 2151 -> 50.00 kPa
# RG for G = 200: 248.2 ohm; 0.1% RG -> gain error ~ 0.100%After calibration, the pressure chain's residual errors total 0.26% FS worst case or 0.13% FS RSS — dominated by the sensor's own nonlinearity (39%), so a better ADC would be wasted money; multi-point calibration or a better sensor would help. Two calibration points (0 and 100 kPa) give the slope and offset that convert raw codes to kPa.
Common mistakes
- Wrong: Choosing a better ADC when the sensor dominates. — Right: Fix the largest contributor first.
- Wrong: Assuming calibration removes drift. — Right: Drift after calibration remains — budget it.
- Wrong: Using only RSS for correlated errors. — Right: Add correlated groups linearly.
Applications
- Industrial transmitters: Accuracy classes and calibration.
- Medical devices: Documented error budgets for approval.
- Test & measurement: Traceable instrument calibration.
- Weighing: Legal-for-trade accuracy (OIML).
Key takeaways
- Convert every error to one unit (ppm or %FS).
- Report worst case and RSS; group correlated errors.
- Calibration removes fixed offset/gain, not drift or noise.
- Attack the dominant contributor first.
Going further
- Monte Carlo tolerance analysis: Statistical yield prediction.
- Measurement uncertainty (GUM): Type A/B uncertainties.
- In-system self-calibration: Auto-zero and reference switching.