Skip to content

Check what the probes push with, and what the DUT does under it - #4

Merged
Boernsman merged 1 commit into
mainfrom
contact-force-checks
Aug 30, 2026
Merged

Boernsman merged 1 commit into
mainfrom
contact-force-checks

Conversation

@Boernsman

Copy link
Copy Markdown
Contributor

Two new board checks, PS028 and PS029, for the failure nothing in the drill plan shows: how
many probes there are.

One spring pin is 0.75 N, which is nothing, so nobody thinks about force when they add one more
test point. Two hundred of them is 150 N and a lever clamp. That load closes the fixture, is
carried by the DUT's standoffs, and between them the board is an unsupported plate with the whole
of it spread across its middle. It bows, the probes in the centre over-travel while the outer ones
stop reaching, and the fixture reads intermittent on whichever channel is furthest from a hole.

Every probe on such a board is placed, spaced and netted correctly. The only thing wrong with it
is the count, which is exactly the number no check looked at.

The checks

Code Severity What it means
PS028 warning The probes add up to more force than a hand clamp will close
PS029 warning That force bows the DUT between its supports, so contact goes uneven

PS028 is the arithmetic: probes times the per-probe force, reported in newtons and kgf with the
share each mounting hole carries, past a default of 100 N.

PS029 is the consequence. The DUT is modelled as a uniformly loaded rectangular plate, simply
supported across the span its mounting holes give it (falling back to the outline when there are
fewer than three), with Roark's coefficient interpolated over the aspect ratio:
δ = α·q·b⁴/(E·t³). Default limit 0.5 mm. Both approximations in that model — even load, and
simple supports where the board is really bolted — under-report the bow, which is the direction a
warning should be wrong in.

warning: PS029 150 N of probe force bows the DUT about 0.84 mm between its supports
  [1.6 mm board, supported 150x90 mm across 4 holes, 200 probes] -- more than the 0.5 mm this
  allows, estimated as a uniformly loaded FR-4 plate. At that much bow the probes in the middle
  over-travel while the outer ones stop reaching, and the joints under any large BGA take the
  strain. Add supports inside the span, use a lighter spring pin, or back the DUT with a stiffener.

Past a bow of roughly the board's own thickness the linear plate model stops being true — the
board starts carrying load by stretching as well as bending — so the finding says so rather than
letting a 6.7 mm figure be quoted as a measurement.

What else changed

  • Board thickness is read. Stiffness goes as the cube of it, so the estimate is worthless
    without it: read_board takes (general (thickness ...)) off the file into Board.thickness,
    reported as thickness_mm in the JSON output. A board declaring none is assumed to be 1.6 mm
    FR-4 and the finding's refs say 1.6 mm board assumed. The shipped example board now declares
    its thickness the way a real KiCad file does.
  • The probe sets the force. pinside project passes the chosen probe's force_n into the
    limits, the same way it already passes the pitch and the body diameter, so a lighter pin relaxes
    both findings without a second edit.
  • --probe-force, --max-force and --max-deflection on pinside check, for a probe the
    catalogue does not have.
  • README tables and prose, a Force column in the probe table, and a CHANGELOG entry.

Verification

The example board stays clean at the defaults and reports both findings when the limits are
tightened. Synthetic 20×10 probe fields at 0.8, 1.6 and 2.4 mm bow 6.71, 0.84 and 0.25 mm — the
cube law the model claims. Eight new tests cover both findings, the thickness relationship, the
assumed-thickness path and the reader; the suite is 229 tests, all passing, with ruff check and
ruff format --check clean.

One spring pin is 0.75 N, which is nothing, so nobody thinks about the force
when they add one more test point. Two hundred of them is 150 N and a lever
clamp. That load closes the fixture, is carried by the DUT's standoffs, and
between them the board is an unsupported plate with the whole of it spread
across its middle: it bows, the probes in the centre over-travel while the
outer ones stop reaching, and the fixture reads intermittent on whichever
channel is furthest from a hole.

Nothing in the drill plan shows either half of that. Every probe on such a
board is placed, spaced and netted correctly; the only thing wrong with it is
how many there are, which is exactly the number no check looked at.

PS028 is the total: probes times the per-probe force, reported in newtons and
kgf with the share each mounting hole carries, past a default of 100 N. PS029
is the consequence, estimated as a uniformly loaded rectangular plate simply
supported across the span the mounting holes give it, with Roark's deflection
coefficient interpolated over the aspect ratio. Both approximations in that
model -- even load, and simple supports where the board is really bolted --
under-report the bow, which is the direction a warning should be wrong in.

Stiffness goes as the cube of the thickness, so the number is worthless
without it: read_board now takes (general (thickness ...)) off the file, and
the finding says when it had to assume 1.6 mm FR-4 instead. The shipped
example board declares its thickness the way a real KiCad file does.

The probe a fixture config chooses sets the force, the same way it already
sets the pitch and the body diameter, so a lighter pin relaxes both findings
without a second edit. --probe-force, --max-force and --max-deflection are
there for a probe the catalogue does not have.

Past a bow of about the board's own thickness the linear plate model stops
being true -- the board starts carrying load by stretching as well as bending
-- so the finding says so rather than letting a 6.7 mm figure be quoted as a
measurement.

Verified against the example board, which stays clean at the defaults and
reports both findings when the limits are tightened, and against synthetic
20x10 probe fields at 0.8, 1.6 and 2.4 mm: 6.71, 0.84 and 0.25 mm of bow, the
cube law the model claims. The suite is 229 tests, all passing.
@Boernsman
Boernsman force-pushed the contact-force-checks branch from c872d24 to 41c410f Compare August 30, 2026 18:11
@Boernsman
Boernsman merged commit 1e37938 into main Aug 30, 2026
9 checks passed
@Boernsman
Boernsman deleted the contact-force-checks branch August 30, 2026 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant