Skip to content

v1.7.0 — RSEN fix + ASTM F84 correction factors

Choose a tag to compare

@PEEKPerformer PEEKPerformer released this 12 May 13:05
· 96 commits to main since this release

Critical fix

The 4-Point Probe mode shipped with :SYST:RSEN OFF in the Keithley setup sequence, silently routing the voltmeter to the Force terminals instead of the Sense terminals. On any probe head wired Force=outer / Sense=inner (Signatone S-302 and similar), this meant every 4PP measurement was a 2-wire reading across the current-carrying outer pair — R_sample + 2·R_contact, not the intended sheet resistance.

If you ran 4PP measurements with v1.6.x or earlier, treat them as invalid and rerun. Bench-verified on a Keithley 2420 + S-302 + copper plate with a 100 Ω perturbation on the I/O HI lead:

State V (mean) V (sd)
RSEN OFF (pre-fix) +3198.7 mV 12.6 mV
RSEN ON (post-fix) −0.003 mV (−3 µV) 0.0006 mV

A ~10⁶ ratio — the pre-fix reading was dominated by source-loop resistance (probe contact + the perturbation resistor), the post-fix reading is the true sub-µV signal on copper.

New: ASTM F84-98 alignment

Calculations now optionally use the F84 correction-factor decomposition:
ρ(T) = R · F₂ · w · F(w/S) · F_sp and ρ(23) = ρ(T) · F_T

  • f2_finite_diameter(s, d, geometry) — F84 Table 3 for circles, Smits 1958 / Adamson-lab tables for square and rectangle L/W ∈ {2, 3, 4}.
  • f_thickness_correction(w, s) — Appendix X1.1 closed form (valid out to w/S = 2.0).
  • f_temperature_correction(ρ, T, dopant) — Table 5 lookup for n/p-type silicon.
  • 60 new unit tests pin values directly to F84 Tables 3/4/5 and the extended Smits table.

New UI fields on the 4PP tab: Diameter D + Geometry (next to Thickness); Temperature + Dopant in Advanced. The legacy K/α/Model path remains the default; the F84 path activates only when the user supplies a finite D, non-circle geometry, or T+dopant.

New: per-polarity delta logging

When delta (current-reversal) mode is on, CSV exports now include V_plus, V_minus, R_f, R_r alongside the averaged value — preserving the F84 §13.1 diagnostic that opposite-polarity readings should be kept separate.

Regression prevention

tests/test_workers.py::TestSCPIContract asserts the critical SCPI commands sent during setup for every mode (RSEN state, source/measure functions, compliance programming, FORM:ELEM contents). The harness existed before this release; the contract assertions did not. This is the test that would have caught the original RSEN bug.

tests/hardware/rsen_diagnostic.py is a ~10-second bench script that reproduces the diagnostic on real hardware — committed for any future regression check.

Full changelog

See README "Version History" for the complete v1.7.0 changelog.