Integrate Measured ESP32 PCB Geometry
- Add measured F.Fab bounds and USB mouth markers - Add guarded preservation and regression validation - Refresh review exports and remove draft presentation labels
This commit is contained in:
@@ -7,6 +7,26 @@ Open **`../../../../hardware/PCB/serial-carrier.kicad_pcb`** in KiCad 10. The ro
|
||||
existing `../../../../hardware/PCB/serial-carrier.kicad_pro` / `../../../../hardware/PCB/serial-carrier.kicad_sch` project. **Not for fabrication.**
|
||||
No Gerbers, production drills or manufacturing archive were generated.
|
||||
|
||||
## Measurement update — embedded U1, silkscreen and exports
|
||||
|
||||
The user has now supplied ESP32 main-PCB, antenna and USB mouth geometry; see
|
||||
`footprint-notes.md` and the hardware README. The library HW678 footprint contains
|
||||
these measured F.Fab bounds. Embedded U1 now has the same four shapes and two
|
||||
measurement-limit annotations; generic library captions are omitted to avoid
|
||||
colliding with existing board labels. Silkscreen, PDF and SVG/PNG/3D previews are
|
||||
refreshed. Existing footprint fields, all existing non-generated UUIDs, pads/nets,
|
||||
placement, routing, edges, RF reserve and project settings are unchanged. Old
|
||||
hidden U1 status/description fields are retained historical metadata, not evidence
|
||||
that planar measurements are missing. RF requirements, full USB envelopes and
|
||||
assembly heights remain pending; the antenna rectangle is not an RF keepout.
|
||||
|
||||
At unchanged A1 U1 placement, the measured main PCB occupies carrier-local
|
||||
X=6.635…34.725, Y=21.635…77.705 mm; the projecting antenna occupies
|
||||
X=12.045…29.675, Y=14.745…21.635 mm. USB mouths are at Y=77.705 mm,
|
||||
**2.295 mm inside the carrier bottom edge**, so flush-with-module USB does not
|
||||
mean flush-with-carrier access. Review mating-plug clearance before accepting
|
||||
placement; no relocation, rerouting or RF sign-off is implied by this update.
|
||||
|
||||
## Size and placement
|
||||
|
||||
- **Carrier bounding dimensions: 82 × 80 mm**, within the requested 100 × 100 mm.
|
||||
@@ -14,8 +34,8 @@ No Gerbers, production drills or manufacturing archive were generated.
|
||||
- Proposed **1.6 mm** carrier thickness; fabrication stackup/process not selected.
|
||||
- Stepped outline: a **36 × 19 mm top-left antenna cutaway** fits within a simple
|
||||
rectangular/square case. The lower edge is now straight, with ESP32 USB toward
|
||||
the bottom and RS-232 toward the top. U1 moved down by 19 mm; its exact USB/body
|
||||
registration remains provisional pending the user's measured ESP32 geometry.
|
||||
the bottom and RS-232 toward the top. A1 moved U1 down by 19 mm; this measurement
|
||||
integration retains that placement and uses the user-accepted approximate header datum.
|
||||
- Module and mating-plug overhangs are not included in the carrier dimensions.
|
||||
The final complete assembly/enclosure envelope still needs measurement.
|
||||
|
||||
@@ -80,8 +100,8 @@ allocation, **not a measured antenna envelope or a manufacturer RF keepout**.
|
||||
The module itself may span the rule area; footprint placement is not forbidden.
|
||||
No carrier copper enters the reserve, but copper runs close to its boundary.
|
||||
|
||||
U1's exact PCB/antenna/USB offsets are still unmeasured. The intended antenna
|
||||
overhang and USB access must be checked with the actual board and a printed
|
||||
U1's planar PCB/antenna/USB-mouth offsets are now recorded. Antenna clearance
|
||||
and USB access must still be checked with the actual board and a printed
|
||||
placement template. Move U1, change the edge or enlarge the reserve if required.
|
||||
Missing RF clearance cannot be signed off from the current footprint alone.
|
||||
|
||||
@@ -147,11 +167,13 @@ RS-232's visible rounded corners retain true arcs. Small gaps clear pad/mask
|
||||
openings, vias and adjacent resistor markings; the original full F.Fab geometry
|
||||
remains unchanged.
|
||||
|
||||
U1 instead has **header-row guides**, labelled `HEADER GUIDES`: guide edges are
|
||||
1.20 mm outside the outer pin centres. These are graphic alignment aids, **not
|
||||
claimed socket-body dimensions or an inferred ESP32 PCB outline**. The actual
|
||||
U1 body/antenna/USB outline still requires measured offsets. Existing button and
|
||||
resistor silkscreen remains unchanged.
|
||||
U1 now has **measured body/antenna outlines**, replacing the header-row guides
|
||||
and `HEADER GUIDES` label. Silkscreen is clipped inside the stepped carrier with
|
||||
0.22 mm additional edge/mask clearance; the off-carrier antenna projection remains
|
||||
visible only on F.Fab. Two **0.30 mm strokes** mark the 8.87 mm USB mouth spans,
|
||||
replacing coincident 0.12 mm body-edge strokes. Wider strokes receive correspondingly
|
||||
wider clearance. No USB depth or RF keepout is inferred. Existing button/resistor
|
||||
silkscreen remains unchanged.
|
||||
|
||||
These are board-local drawings, not edits to the footprint libraries. If the
|
||||
module placement or routing changes, close PCB Editor and refresh them with:
|
||||
@@ -160,7 +182,8 @@ module placement or routing changes, close PCB Editor and refresh them with:
|
||||
/usr/bin/python3 -B hardware/PCB/add_device_silkscreen.py
|
||||
```
|
||||
|
||||
The script requires pcbnew and Shapely, replaces only its own generated graphics,
|
||||
The script first verifies the saved U1 measured graphics against the library.
|
||||
It requires pcbnew and Shapely, replaces only its own generated graphics,
|
||||
and refuses an open PCB or concurrent board change. It leaves project settings,
|
||||
copper, pads and source F.Fab outlines unchanged. Run it **after** placement or
|
||||
routing regeneration; moving a footprint does not move these board-local drawings.
|
||||
@@ -174,6 +197,21 @@ warning. PDF and both previews have been refreshed.
|
||||
|
||||
## Review outputs
|
||||
|
||||
PCB presentation labels have been removed: title suffix `draft`, revision suffix
|
||||
`DRAFT`, front-silkscreen `DRAFT - NOT FOR FAB`, and the title-comment prefix
|
||||
`NOT FOR FABRICATION -` (including the PDF exporter). The generator no longer
|
||||
emits these labels. Specific technical cautions, dimensions, geometry, hidden
|
||||
metadata and footprint identifiers remain; artifact filenames are unchanged.
|
||||
This is a presentation change, **not fabrication approval**. The schematic and
|
||||
its exports are outside this PCB-only cleanup.
|
||||
|
||||
`remove_draft_markers.py` performs the guarded, idempotent cleanup and audits
|
||||
that no other parsed board content or project settings change. The U1 regression
|
||||
now permits exactly these label edits against its unchanged historical baseline,
|
||||
without relaxing geometry/pad/net/routing checks. Fresh PCB DRC, U1/silkscreen
|
||||
regressions and both footprint tests pass; the expected U2 parity warning remains.
|
||||
PDF/SVG/PNG/3D outputs were regenerated and visually reviewed after cleanup.
|
||||
|
||||
- `../../../../hardware/PCB/validation/pcb-draft.svg` / `../../../../hardware/PCB/validation/pcb-draft.png`: combined copper/outline/fab review.
|
||||
- `../../../../hardware/PCB/validation/pcb-draft-3d.png`: KiCad render of the carrier and available standard
|
||||
component models. **ESP32, OLED and RS-232 assembled module models are absent**;
|
||||
@@ -181,7 +219,35 @@ warning. PDF and both previews have been refreshed.
|
||||
- `../../../../hardware/PCB/pcb-placement-draft.pdf`: **1:1** front placement/pad/outline drawing. Print at
|
||||
100%, disable fit-to-page, and confirm the outer width is 82 mm before use.
|
||||
It includes the known module outlines and nominal STEP-derived DE-9 metal
|
||||
bounding projections; no guessed U1 body or case-wall geometry.
|
||||
bounding projections and measured U1 planar geometry; no guessed USB depth,
|
||||
RF keepout or case-wall geometry.
|
||||
|
||||
Refresh the embedded measurement graphics and PDF without replacing the footprint:
|
||||
|
||||
```sh
|
||||
/usr/bin/python3 -B hardware/PCB/update_u1_graphics.py
|
||||
/usr/bin/python3 -B hardware/PCB/add_device_silkscreen.py
|
||||
/usr/bin/python3 -B hardware/PCB/export_placement_pdf.py
|
||||
```
|
||||
|
||||
Both board-writing helpers refuse PCB Editor locks and concurrent board changes,
|
||||
use `SaveBoard(..., True)`, and check unchanged project settings. The PDF exporter
|
||||
verifies embedded geometry instead of overlaying the library; only review captions
|
||||
change on its temporary plotting board. Print at 100%, not fit-to-page.
|
||||
|
||||
Preview refresh commands (repository root, KiCad and Inkscape installed):
|
||||
|
||||
```sh
|
||||
kicad-cli pcb export svg --mode-single --layers F.Cu,B.Cu,F.SilkS,F.Fab,Dwgs.User,Edge.Cuts --sketch-pads-on-fab-layers --page-size-mode 2 --output hardware/PCB/validation/pcb-draft.svg hardware/PCB/serial-carrier.kicad_pcb
|
||||
inkscape hardware/PCB/validation/pcb-draft.svg --export-type=png --export-width=1800 --export-filename=hardware/PCB/validation/pcb-draft.png
|
||||
kicad-cli pcb render --width 1600 --height 1200 --side top --quality high --output hardware/PCB/validation/pcb-draft-3d.png hardware/PCB/serial-carrier.kicad_pcb
|
||||
```
|
||||
|
||||
KiCad's SVG trailing whitespace was normalized after export (`git diff --check`
|
||||
passes); the rendered geometry is unchanged. PDF and previews were visually reviewed.
|
||||
|
||||
The board-area SVG crop omits outside-board review captions/parts of the DE-9
|
||||
projection; use the full-page PDF for the complete placement drawing.
|
||||
|
||||
## Validation and limits
|
||||
|
||||
@@ -190,6 +256,9 @@ Run from the repository root with the system Python containing KiCad bindings:
|
||||
```sh
|
||||
/usr/bin/python3 -B hardware/PCB/validate_pcb_draft.py
|
||||
/usr/bin/python3 -B hardware/PCB/validation/pcb-routing-check.py
|
||||
/usr/bin/python3 -B hardware/PCB/validate_footprints.py
|
||||
/usr/bin/python3 -B hardware/PCB/validate_u1_update.py
|
||||
/usr/bin/python3 -B hardware/PCB/reference/db9-cad/validate.py
|
||||
```
|
||||
|
||||
The first script exports a **fresh saved-schematic netlist** and checks the actual
|
||||
@@ -204,7 +273,25 @@ placement/net/UUID preservation against the initial unrouted snapshot. It needs
|
||||
locally installed NumPy and Shapely in addition to pcbnew. It is not a substitute
|
||||
for current-schematic net validation and is specific to this initial layout.
|
||||
|
||||
Results with KiCad **10.0.6**:
|
||||
Measurement-integration validation with KiCad **10.0.6**:
|
||||
|
||||
- All five commands above pass. New `validate_u1_update.py` compares the complete
|
||||
parsed board against `validation/pcb-before-u1-measured.kicad_pcb`, excluding
|
||||
only owned silk and six new U1 graphics. Snapshot and project hashes are pinned;
|
||||
full pad/net/UUID/placement/routing/edge/zone/settings preservation passes.
|
||||
- Measured embedded/library geometry, silk regeneration idempotence, carrier/notch
|
||||
clipping, two exact USB mouth markers and a stale-geometry negative control pass;
|
||||
**91 generated silk items**. U1 refresh byte-idempotence also passed; an already
|
||||
current U1 now returns without writing. Evidence: `hardware/PCB/validation/pcb-u1-update.json`.
|
||||
- The historical A0 `pcb-routing-preservation.py` does **not** pass: it stops on
|
||||
its historical `serial-carrier.kicad_prl` protected hash, already stale for this
|
||||
working state. Its older exact-footprint contract also predates measured U1
|
||||
additions. Historical script/reports were not weakened or rebaselined; the new
|
||||
A1 pre-update comparison is the preservation evidence for this change.
|
||||
- PCB, project and schematic retain their existing content except the authorized
|
||||
board graphics. No firmware/assets, reroute, upload, erase or hardware test.
|
||||
|
||||
Current results:
|
||||
|
||||
- **0 physical DRC errors/warnings; 0 unconnected items.**
|
||||
- All saved-schematic pad nets match the PCB; **1 expected U2 footprint parity warning**.
|
||||
|
||||
Reference in New Issue
Block a user