Skip to content
Instrument Control

Hipot and Dielectric Withstand Testing

Learn how to automate hipot and dielectric withstand safety tests, log results to TofuPilot, and maintain compliance records.

JJulien Buteau
intermediate9 min readMarch 14, 2026

Hipot and Dielectric Withstand Testing with TofuPilot

Hipot (high-potential) testing verifies that a product's electrical insulation can withstand voltage stress without breakdown. It's required by UL, IEC, and most safety standards for any product connected to mains power. TofuPilot logs every hipot result for production traceability and compliance.

What Hipot Testing Verifies

Hipot testing applies a high voltage between isolated circuits (typically line-to-ground or primary-to-secondary) and measures the leakage current. If current stays below the threshold and no breakdown occurs, the insulation is adequate.

ParameterTypical valueStandard
Test voltage (AC)1000-3000 VrmsIEC 60950, IEC 62368
Test voltage (DC)1414-4243 VdcIEC 60601 (medical)
Duration1-60 secondsVaries by standard
Leakage current limit0.5-10 mAVaries by product class
Ramp time0.5-3 secondsPrevents voltage spikes

Automating Hipot Tests

Connecting to a Hipot Tester

Most programmable hipot testers (Chroma, Associated Research, GW Instek) support SCPI commands over GPIB, RS-232, or LAN.

hipot_test.py
import pyvisa
from tofupilot import TofuPilotClient

rm = pyvisa.ResourceManager()
hipot = rm.open_resource("GPIB::5::INSTR")
client = TofuPilotClient()

def run_hipot_test(serial, test_voltage_v=1500, duration_s=60, leakage_limit_ma=5.0):
    # Configure hipot tester
    hipot.write(f"VOLT {test_voltage_v}")
    hipot.write(f"TIME {duration_s}")
    hipot.write(f"CURR:LIM {leakage_limit_ma}")
    hipot.write("RAMP 2")  # 2 second ramp

    # Run test
    hipot.write("TEST")
    hipot.query("*OPC?")  # Wait for completion

    # Read results
    result = hipot.query("MEAS:RES?")  # "PASS" or "FAIL"
    leakage = float(hipot.query("MEAS:CURR?")) * 1000  # Convert to mA

    passed = result.strip() == "PASS"

    client.create_run(
        procedure_id="HIPOT-SAFETY-TEST",
        unit_under_test={"serial_number": serial},
        run_passed=passed,
        steps=[{
            "name": "Dielectric Withstand",
            "step_type": "measurement",
            "status": passed,
            "measurements": [
                {"name": "test_voltage_v", "value": test_voltage_v, "unit": "V"},
                {"name": "duration_s", "value": duration_s, "unit": "s"},
                {"name": "leakage_current_ma", "value": leakage, "unit": "mA", "limit_high": leakage_limit_ma},
                {"name": "breakdown", "value": 0 if passed else 1, "unit": "bool", "limit_high": 0},
            ],
        }],
    )

    hipot.write("VOLT 0")  # Discharge
    return passed

Multi-Point Hipot Testing

Some products require hipot tests between multiple isolation boundaries.

multi_point_hipot.py
# Test multiple isolation boundaries
isolation_tests = [
    {"name": "Line-to-Ground", "voltage": 1500, "limit_ma": 5.0},
    {"name": "Line-to-Secondary", "voltage": 3000, "limit_ma": 5.0},
    {"name": "Secondary-to-Ground", "voltage": 500, "limit_ma": 1.0},
]

steps = []
for test in isolation_tests:
    # Configure and run each test
    leakage = run_hipot_measurement(test["voltage"])
    passed = leakage < test["limit_ma"]

    steps.append({
        "name": test["name"],
        "step_type": "measurement",
        "status": passed,
        "measurements": [
            {"name": f"voltage_{test['name'].lower().replace('-', '_')}", "value": test["voltage"], "unit": "V"},
            {"name": f"leakage_{test['name'].lower().replace('-', '_')}", "value": leakage, "unit": "mA", "limit_high": test["limit_ma"]},
        ],
    })

all_pass = all(s["status"] for s in steps)
client.create_run(
    procedure_id="HIPOT-MULTI-POINT",
    unit_under_test={"serial_number": serial},
    run_passed=all_pass,
    steps=steps,
)

Leakage Current Trending

Even for passing units, track leakage current over production. A healthy process shows consistent leakage values. Changes indicate:

TrendPossible cause
Gradual increaseContamination buildup on PCB, flux residue
Step increaseNew board revision, different conformal coating
High varianceInconsistent manufacturing (solder splash, debris)
Bimodal distributionTwo different PCB suppliers or manufacturing lines

TofuPilot's measurement histogram for leakage current shows these patterns across your production.

Compliance Records

Safety agencies require per-unit hipot test records. TofuPilot stores:

  • Serial number of the tested unit
  • Test voltage applied
  • Duration of the test
  • Measured leakage current
  • Pass/fail result
  • Timestamp
  • Station/tester identification

When an auditor asks for hipot records for a specific serial number or date range, pull them from TofuPilot in seconds.

Safety Considerations

Hipot testing involves lethal voltages. Always:

  • Use proper safety interlocks on the test fixture
  • Ensure the DUT is fully discharged after the test
  • Never bypass safety mechanisms on the hipot tester
  • Log test equipment calibration dates
  • Train operators on hipot safety procedures

TofuPilot is the data management layer. The safety of the test setup is your responsibility.

Ground Continuity Testing

Ground continuity is often tested alongside hipot. It verifies that the safety ground connection has low enough resistance to carry fault current.

ground_continuity.py
# Ground continuity test (typically 25A for 2 seconds)
ground_resistance = measure_ground_resistance(current_a=25, duration_s=2)

client.create_run(
    procedure_id="GROUND-CONTINUITY",
    unit_under_test={"serial_number": serial},
    run_passed=ground_resistance < 0.1,
    steps=[{
        "name": "Ground Bond",
        "step_type": "measurement",
        "status": ground_resistance < 0.1,
        "measurements": [
            {"name": "ground_resistance_ohm", "value": ground_resistance, "unit": "ohm", "limit_high": 0.1},
            {"name": "test_current_a", "value": 25, "unit": "A"},
        ],
    }],
)

Most safety test workflows run ground continuity first, then hipot. If the ground bond is bad, there's no point running the hipot test. TofuPilot links both results to the same serial number for a complete safety test record.

More Guides

Put this guide into practice