Measurement Techniques & Lab Instruments for Analog

Measuring analog circuits without fooling yourself. Learn DMM voltage, current and resistance measurement (input impedance, burden voltage, 4-wire ohms), oscilloscope bandwidth, sample rate, rise time and probe selection (10×, active, differential, current probes), probe loading and grounding (ground-spring vs long lead), triggering and measuring ripple and noise, function generators and their 50 Ω output, bench power supplies (current limit, remote sense), spectrum analysers and FFT, LCR meters, network/Bode analysers for loop gain, and measurement uncertainty — with Python quantifying probe loading, system rise time, ground-lead ringing and meter burden voltage.

Every instrument connected to a circuit becomes part of it: it loads nodes, adds capacitance and inductance, and has limited bandwidth and accuracy. Good measurements start with knowing how the instrument changes what you measure.

The goal is not just a number, but a number you trust — with an idea of its uncertainty.

An analogy

Measuring a circuit is like checking a tyre's pressure: every time you press the gauge on, a little air escapes. A good gauge (instrument) lets out so little that the reading still represents the tyre.

Multimeters

Use them well:

Oscilloscopes and probes

Choose bandwidth ≥ 3–5× the highest frequency of interest (or 0.35/t_r of the fastest edge × 3), sample rate ≥ 2.5–5× bandwidth, and enough memory to keep that rate over long captures. 10× passive probes must be compensated with the scope's calibrator square wave. Use differential probes for floating measurements (never float the scope's ground!), current probes for inductor and switch currents, and 1× probes or dedicated low-noise techniques for small ripple.

Signal sources and supplies

Function generators have a 50 Ω output: into a high-impedance load the actual voltage is double the display (unless set to 'High-Z'). Bench supplies should use current limiting when powering new boards and remote sensing for accurate voltage at the load. Electronic loads test regulators with steps.

Frequency-domain instruments

Spectrum analysers and scope FFTs show harmonics, spurs and noise floors (set RBW, window and averaging appropriately). Network/frequency-response analysers inject a signal and measure gain/phase — Bode plots of filters and loop gain of power supplies (with an injection transformer). LCR meters measure capacitors at a given frequency and DC bias, revealing ceramic derating and ESR. Always state measurement conditions and uncertainty.

Formulas

Worked example: Probe impedance

Given: 12 pF at 100 MHz

Find: |X_C|.

Answer: ≈ 133 Ω

Worked example: Scope rise time

Given: 100 MHz bandwidth

Find: t_r.

Answer: 3.5 ns

Worked example: Cascaded rise time

Given: Scope 1.2 ns, signal 2 ns

Find: Displayed.

Answer: ≈ 2.33 ns

Correct probing of a fast edge or ripple

  WRONG: 15 cm ground clip → large loop → ringing + picked-up switching noise
      probe tip ──── node
      ground clip ─(15 cm loop)─ GND somewhere
  RIGHT: ground spring (≤ 1 cm) at the capacitor terminals, 20 MHz bandwidth limit for ripple,
         AC coupling, 1× or 10× as needed; for floating nodes use a differential probe

The ground lead's inductance and the probe's capacitance form a resonant circuit that rings at ~100 MHz and picks up magnetic fields from nearby switching loops. A short ground spring at the measurement point removes most of that artefact.

Probe loading, rise time, ringing and burden

import math
# Measurement: probe loading, system rise time, ground-lead ringing and meter burden
Cp = 12e-12
for f in (1e3, 1e6, 10e6, 100e6):
    Xc = 1 / (2 * math.pi * f * Cp)
    print(f"10x probe (10 Mohm || 12 pF) at {f/1e6:8.3f} MHz: |Z| ~ {1/math.sqrt((1/10e6)**2 + (1/Xc)**2)/1e3:10.2f} kohm")
tr_scope, tr_probe, tr_sig = 3.5e-9, 1.4e-9, 2e-9
tr_meas = math.sqrt(tr_scope**2 + tr_probe**2 + tr_sig**2)
print(f"100 MHz scope (3.5 ns) + probe: a 2 ns edge is displayed as {tr_meas*1e9:.2f} ns")
L_lead = 15e-9 * 15                               # ~15 nH/cm, 15 cm ground clip
f_ring = 1 / (2 * math.pi * math.sqrt(L_lead * Cp))
print(f"15 cm ground lead ({L_lead*1e9:.0f} nH) with 12 pF rings at {f_ring/1e6:.0f} MHz -> use the ground spring")
# DMM on 200 mA range with 1 ohm shunt measuring a 150 mA load on a 3.3 V rail
print(f"burden voltage {0.15*1.0:.2f} V -> the DUT sees {3.3-0.15:.2f} V instead of 3.3 V")
# 10x probe (10 Mohm || 12 pF) at    0.001 MHz: |Z| ~    7984.71 kohm
# 10x probe (10 Mohm || 12 pF) at    1.000 MHz: |Z| ~      13.26 kohm
# 10x probe (10 Mohm || 12 pF) at   10.000 MHz: |Z| ~       1.33 kohm
# 10x probe (10 Mohm || 12 pF) at  100.000 MHz: |Z| ~       0.13 kohm
# 100 MHz scope (3.5 ns) + probe: a 2 ns edge is displayed as 4.27 ns
# 15 cm ground lead (225 nH) with 12 pF rings at 97 MHz -> use the ground spring
# burden voltage 0.15 V -> the DUT sees 3.15 V instead of 3.3 V

A '10 MΩ' probe is only ~1.3 kΩ at 10 MHz because of its 12 pF — it can load high-impedance nodes badly. A 100 MHz scope shows a 2 ns edge as 4.3 ns, so fast edges need more bandwidth (≥ 3–5× the signal's). A 15 cm ground lead rings near 100 MHz. And a DMM's current shunt drops 0.15 V at 150 mA — enough to brown out a 3.3 V circuit under test.

Common mistakes

Applications

Key takeaways

Going further