Signal Conditioning & 4–20 mA Transmission

Turning weak, noisy sensor signals into clean, standard ones. Learn amplification and the instrumentation amplifier (CMRR), excitation, bridge completion, filtering, linearisation, isolation, and the industrial 4–20 mA current loop (live zero, loop power budget, 2-wire/4-wire, NAMUR NE43 fault currents, scaling to engineering units), plus noise, grounding and shielding practice.

Sensors rarely produce signals a controller can use directly: a thermocouple gives microvolts, a strain bridge millivolts riding on a large common-mode voltage, an RTD a resistance. Signal conditioning amplifies, filters, linearises and isolates them.

For transmission over hundreds of metres in electrically noisy plants, industry standardised on the 4–20 mA current loop: immune to wire resistance, able to power the transmitter over the same two wires, and self-diagnosing (0 mA = broken wire).

An analogy

Signal conditioning is a translator and bodyguard for a quiet witness: it amplifies the whisper, filters out the crowd noise, and escorts the message safely across a noisy plant using the 4–20 mA 'armoured car'.

Conditioning functions

A conditioning chain may include:

The instrumentation amplifier

Bridges and thermocouples produce small differential signals on top of large common-mode voltages (half the excitation, or ground noise). An instrumentation amplifier amplifies only the difference, with very high input impedance and CMRR of 100–130 dB. Its gain is set by one resistor. Offset, drift and noise density decide the smallest measurable signal.

The 4–20 mA loop

A current is the same everywhere in a series loop, so wire resistance doesn't change the reading. The 'live zero' of 4 mA both powers 2-wire transmitters and distinguishes 0% (4 mA) from a broken wire (0 mA). NAMUR NE43 reserves < 3.6 mA and > 21 mA for failure signalling. The receiver converts current to voltage over a 250 Ω resistor (1–5 V). HART superimposes a digital FSK signal on the same loop.

Noise, grounding and shielding

Noise enters by capacitive coupling (reduce with shields grounded at one end), inductive coupling (twisted pairs, separation from power cables), conductive/ground loops (single-point grounding, isolators) and radiated EMI (filtering, enclosures). Segregate cable trays: signal, control and power separated by 300+ mm. For hazardous areas, intrinsically safe barriers or isolators limit energy in the loop (IEC 60079-11).

Formulas

Worked example: Set in-amp gain

Given: Bridge 0–5 mV, ADC 0–5 V, G = 1 + 50k/R_G

Find: R_G.

Answer: ≈ 50.05 Ω (use 49.9 Ω → G ≈ 1003)

Worked example: Scale a reading

Given: 0–250 °C transmitter reads 17.6 mA

Find: Temperature.

Answer: 212.5 °C

Worked example: Loop budget

Given: 24 V supply, transmitter 12 V min, 250 Ω receiver, 2 × 1 km of 20 Ω/km cable, IS barrier 280 Ω

Find: Enough voltage?

Answer: Just OK (0.6 V margin) — tight; consider a lower-drop barrier

In-amp gain, common-mode rejection and 4–20 mA scaling

# Instrumentation amplifier (3-op-amp, like INA128): G = 1 + 50k/RG
for RG in (5000, 500, 50):
    G = 1 + 50e3 / RG
    print(f"RG = {RG:5d} ohm -> G = {G:.0f}")
# Common-mode rejection: 110 dB CMRR at G=1000, 1 V common-mode noise
G, cmrr_db, vcm = 1000, 110, 1.0
err_in = vcm / 10 ** (cmrr_db / 20)
print(f"CMRR {cmrr_db} dB: 1 V common mode looks like {err_in*1e6:.2f} uV at the input ({err_in*G*1e3:.2f} mV out)")
# 4-20 mA scaling to engineering units
lo, hi = 0.0, 250.0                              # 0-250 C
for mA in (4, 12, 17.6, 20):
    print(f"{mA:5.1f} mA -> {lo + (mA - 4) / 16 * (hi - lo):6.1f} C")
# RG =  5000 ohm -> G = 11
# RG =   500 ohm -> G = 101
# RG =    50 ohm -> G = 1001
# CMRR 110 dB: 1 V common mode looks like 3.16 uV at the input (3.16 mV out)
#   4.0 mA ->    0.0 C
#  12.0 mA ->  125.0 C
#  17.6 mA ->  212.5 C
#  20.0 mA ->  250.0 C

One resistor sets the gain. Even with 110 dB CMRR, 1 V of common-mode noise becomes 3.16 µV of input error — comparable to a thermocouple's 41 µV/°C, so layout, shielding and filtering still matter.

Scaling and fault detection in a PLC (IEC 61131-3 Structured Text, illustrative)

FUNCTION_BLOCK FB_AnalogIn
VAR_INPUT
    raw      : INT;        (* ADC counts, 0..27648 = 4..20 mA on many PLC cards *)
    lrv, urv : REAL;       (* engineering range *)
END_VAR
VAR_OUTPUT
    pv       : REAL;
    fault    : BOOL;
    mA       : REAL;
END_VAR
    mA := 4.0 + 16.0 * INT_TO_REAL(raw) / 27648.0;
    (* NAMUR NE43: < 3.6 mA or > 21.0 mA means sensor/loop failure *)
    fault := (mA < 3.6) OR (mA > 21.0);
    IF NOT fault THEN
        pv := lrv + (mA - 4.0) / 16.0 * (urv - lrv);
    END_IF;    (* on fault keep last good value and raise an alarm *)
END_FUNCTION_BLOCK

Illustrative ST in the IEC 61131-3 language used by Siemens, Rockwell, Codesys and others (the raw count range depends on the card). Good practice: scale in one place, detect NE43 fault currents, and never silently pass a failed signal to control logic.

Common mistakes

Applications

Key takeaways

Going further