screw_thr_len = 16mm
mat_th = 3mm
pcb_th = 1.6mm
nut_th = 2.25mm
pogo_uncompressed_length = 8mm
pogo_compression = 1mm
pivot_support_r = 4.55mm (calculated from pivot_d + 6)/2head_z = screw_thr_len - nut_th = 16 - 2.25 = 13.75mm
base_z = screw_thr_len + 3*mat_th = 16 + 9 = 25mm
base_pivot_offset = pivot_support_r + (pogo_uncompressed_length - pogo_compression) - (mat_th - pcb_th)
= 4.55 + (8 - 1) - (3 - 1.6)
= 4.55 + 7 - 1.4
= 10.15mmZ = 25mm (base_z) ═══════════════════════════ Top of base structure
Z = 22mm (base_z - mat_th) ┌─────────────────────────┐ ← TOP CARRIER (tight fit)
│ PCB cutout (exact) │ Clamps PCB from above
└─────────────────────────┘ mat_th = 3mm thick
Z = 19mm (base_z - 2*mat_th) ┌─────────────────────────┐ ← BOTTOM CARRIER (inset)
│ PCB cutout (inset 1mm) │ Supports PCB from below
└─────────────────────────┘ mat_th = 3mm thick
Z = 0mm ═══════════════════════════ Base bottom
PCB Position in Carriers:
- PCB sits between the two carriers
- Top carrier bottom surface: Z = 22mm
- Bottom carrier top surface: Z = 19mm + mat_th = 22mm
- PCB rests at approximately Z = 22mm
The head pivots at:
Pivot Z-position = base_z + base_pivot_offset
= 25 + 10.15
= 35.15mm
When head rotates down (closed position, approximate -8° rotation):
Z = 35.15mm ●●●●●●●●●●●●●●●●●●●●●●●●●●● ← Pivot hinge point
Z ≈ 25mm (head_top) ┌─────────────────────────┐ ← HEAD TOP PLATE
│ Clearance holes │ Z = head_z - mat_th
│ for pogo pins │ = 13.75 - 3 = 10.75mm
└─────────────────────────┘ (relative to head base)
↓↓↓ Pogo pins ↓↓↓
Z ≈ 22mm (contact with PCB) ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ← Pogo pin tips contact PCB
(compressed 1mm)
Z ≈ 22mm (head_base) ┌─────────────────────────┐ ← HEAD BASE PLATE
│ ● ● ● (pogo holes) │ Contains ALL pogo pins
│ Both TOP & BOTTOM │ (top side AND bottom side
│ test points here │ test points)
└─────────────────────────┘ Z = 0 (relative to head)
Problem: Bottom carrier (1mm inset) was not concentric with top carrier (exact fit). Visible offset in all 4 directions.
Root cause: OpenSCAD's scale() affects ALL coordinates, including the board origin position from KiCAD's absolute coordinate system.
Solution: Compensate for scaled board origin when centering the cutout:
sx_offset = (board_origin_x + pcb_x / 2) * (1 - scale_x);
sy_offset = (board_origin_y + pcb_y / 2) * (1 - scale_y);Real-world example:
- Board origin: (155, 113) mm
- Board center: (155 + 72/2, 113 + 45/2) = (191, 135.5) mm
- Scale factor: 0.972x (for 1mm inset on 72mm board)
- Center after scaling: (185.65, 131.71) mm
- Required offset: (5.35, 3.79) mm to re-center
Verification: Use mode = "check_aligned" in OpenSCAD - cyan and magenta cutouts are now perfectly concentric.
Expected PCB position: Z = 22mm (between carriers)
Head base position when closed:
head_base_z_global = (base_z + base_pivot_offset) - head assembly height
= 35.15 - (head_z + adjustments for rotation)
≈ 22-25mm range (depends on rotation angle)
Current Design (in code):
- 1 head base plate with pogo holes for BOTH top and bottom test points
- 2 carrier plates sandwich the PCB
- All pogo pins come from the same direction (head closes down)
This means:
- Pogo pins for "top" test points press down directly
- Pogo pins for "bottom" test points must pass THROUGH the PCB somehow
- OR there's a design assumption that "bottom" means different layer of same-sided access
Looking at the code in head_base_common():
// Loop over test points - TOP
for ( i = [0 : 1 : len (test_points_top) - 1] ) {
circle (r = pogo_r); // Pogo pin hole
}
// Loop over test points - BOTTOM
for ( i = [0 : 1 : len (test_points_bottom) - 1] ) {
circle (r = pogo_r); // Same pogo pin hole, same plate!
}Both arrays drill holes in the SAME plate!
This is a single-sided fixture where:
test_points_top= test points on the top copper layertest_points_bottom= test points on the bottom copper layer- All pogo pins access from the TOP (head closes down)
- PCB is held fixed in carriers
- For bottom-side test points, the pogo pins contact pads on the bottom copper layer that are exposed (no solder mask)
There are NOT 2 separate head plates for top/bottom testing.
There is:
- 1 HEAD BASE plate (Z ≈ 0 relative to head) - contains ALL pogo pin holes
- 1 HEAD TOP plate (Z ≈ 10.75mm relative to head) - structural + pogo clearance
- 1 BOTTOM CARRIER (Z = 19mm absolute) - PCB support with 1mm inset
- 1 TOP CARRIER (Z = 22mm absolute) - PCB clamp with exact fit
Alignment when fixture closes:
- Head base (with pogo pins) presses down on PCB at Z ≈ 22mm ✓
- PCB sits in carriers at Z = 22mm ✓
- These ARE aligned - the head closes to bring pogo pins into contact with PCB
The "2 head plates" misconception:
- There's only 1 pogo pin plate (head_base)
- Head_top is structural, not a second pogo plate
- Both top and bottom test point arrays use the same head_base plate