Skip to content
Test Data & Analytics

How to Detect Measurement Drift with TofuPilot

Learn how to spot gradual measurement drift caused by instrument aging, fixture wear, or environmental changes using TofuPilot's trend and control charts.

JJulien Buteau
intermediate8 min readMarch 14, 2026

Measurement drift is a gradual shift in your test data over time. Parts still pass today, but the distribution is creeping toward a spec limit. TofuPilot's trend charts and control charts make drift visible before it becomes a yield problem.

What Causes Drift

Drift has real physical causes. Knowing them helps you investigate when you spot a trend.

Instrument aging is the most common. A DMM's calibration drifts over months. A current sense resistor changes value with thermal cycling. A force gauge spring weakens with use.

Fixture wear matters too. Pogo pins lose spring force after thousands of contacts. Test sockets develop intermittent connections. Alignment features wear down, changing DUT positioning.

Environmental changes are subtler. Seasonal temperature shifts affect analog measurements. Humidity changes impact high-impedance readings. Facility voltage fluctuations add noise.

Component lot variation comes from your supply chain. A new reel of resistors from a different lot shifts your circuit's behavior slightly. The parts are all in spec, but the distribution center moved.

Writing Tests That Reveal Drift

Drift detection requires consistent, repeatable measurements with enough resolution to see small shifts. Use physical units, set limits with margin, and avoid rounding.

drift_sensitive_test.py
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot

@htf.measures(
    htf.Measurement("ref_voltage")
    .with_units(units.VOLT)
    .in_range(minimum=2.495, maximum=2.505),
    htf.Measurement("temp_sensor")
    .in_range(minimum=23.0, maximum=27.0),
    htf.Measurement("adc_offset")
    .in_range(minimum=-3, maximum=3),
)
def calibration_check(test):
    """Measure reference points that are sensitive to drift."""
    test.measurements.ref_voltage = 2.4988
    test.measurements.temp_sensor = 24.6
    test.measurements.adc_offset = 1

@htf.measures(
    htf.Measurement("contact_resistance")
    .in_range(maximum=0.100)
    .with_units(units.OHM),
    htf.Measurement("leakage_current")
    .in_range(maximum=0.000001)
    .with_units(units.AMPERE),
)
def fixture_health_check(test):
    """Track fixture-related measurements that degrade over time."""
    test.measurements.contact_resistance = 0.0423
    test.measurements.leakage_current = 0.00000012

@htf.measures(
    htf.Measurement("gain")
    .in_range(minimum=19.5, maximum=20.5),
    htf.Measurement("phase_margin")
    .in_range(minimum=45.0),
    htf.Measurement("output_impedance")
    .in_range(maximum=2.0)
    .with_units(units.OHM),
)
def analog_performance_test(test):
    """Measure analog parameters prone to component lot variation."""
    test.measurements.gain = 20.05
    test.measurements.phase_margin = 52.3
    test.measurements.output_impedance = 1.1

def main():
    test = htf.Test(
        calibration_check,
        fixture_health_check,
        analog_performance_test,
    )
    with TofuPilot(test):
        test.execute(test_start=lambda: "UNIT-1001")

if __name__ == "__main__":
    main()

The fixture_health_check phase is particularly useful. Contact resistance that climbs from 40 to 80 mohm over a few weeks tells you the fixture needs maintenance, even though every reading still passes.

Spotting Drift in TofuPilot

Open any measurement's trend chart in TofuPilot to see values plotted over time. Drift shows up as a consistent slope in the data points.

Control charts add statistical rigor. Look for these patterns:

  • Seven or more consecutive points on one side of the center line (process has shifted)
  • Six consecutive points trending in one direction (drift in progress)
  • The process mean moving closer to UCL or LCL over weeks

TofuPilot calculates these automatically. When the trend is visible, you still have margin before parts start failing.

Responding to Drift

When you spot drift, the response depends on the cause.

For instrument drift, recalibrate and verify with a known reference. Check if your calibration interval is too long.

For fixture wear, inspect and replace worn components. Track the fixture's cycle count and set preventive maintenance schedules based on the drift data you've collected.

For environmental drift, correlate with facility logs. If temperature is the driver, improve environmental controls around the test station or add temperature compensation to your measurements.

For component lot variation, compare measurement distributions before and after a lot change. If the shift is significant but still in spec, update your control chart baseline. If it's borderline, work with your supplier on tighter incoming specs.

Building a Drift Monitoring Routine

Check TofuPilot's trend charts weekly for your most critical measurements. Focus on measurements with tight specs (low Cpk) since those hit limits first when drift occurs.

Set up filtered views by station and time range. A measurement that looks stable across all stations might be drifting on just one, masked by the aggregate view.

More Guides

Put this guide into practice