# Plasma DMD — notes for Claude The goal: drive a second-hand 128×32 pinball **plasma** DMD panel standalone from a **Wemos D1 mini ESP32**, powered from **12 V DC only**. The panel was originally on a Williams WPC controller and was bought on 2021-09-18 for €37. No original controller or PSU came with it. ## Status (keep this section up to date) - **PAUSED (2026-10-24)** at the user's request, because of the cost and the safety risk. If resuming, consider the cheaper, no-high-voltage alternative discussed: a 128×32 HUB75 LED matrix driven by the same ESP32 (about €30–50). - Design docs in `docs/`, PSU schematic and routed PCB rev 0.1 in `hardware/kicad/`, firmware skeleton in `firmware/`. - Not yet known: the panel's make and part number, its power and data connector pinouts, and the polarity of its control signals. **J2's pinout is a placeholder (Stern CN2 order).** - Nothing is built or tested on real hardware. - **Proposed rev 0.2: module-only PSU** (no linear regulators or heatsinks), reviewed in `docs/design-review.md`. It's waiting on the must-fix items M1–M4 there. The schematic and PCB are still rev 0.1. ## Design decisions (don't silently change these) - **PSU:** - A 12 V brick feeds a Mini560 (5 V) and two NCH6100HV boost modules: one at 90 V, and one at 130 V fed through an isolated DC-DC, so its output floats and becomes −130 V. - Those raw rails feed a copy of the regulator section of the Stern 520-5138-00 (zener-referenced followers), giving about +65 V, −112 V and −100 V. - The zeners set the panel voltages, not the module trim pots. - **Modules sit off-board** on screw terminals. The PCB is a carrier board. - **Safety first:** - A relay switches the 12 V feed to the HV modules. - The relay is driven by a hardware charge-pump watchdog, toggled by GPIO21 once per scanned row (about 2 kHz). If toggling stops, the HV drops. - Bleeders and fuses on every HV rail. - **Clearances** (`hardware/kicad/plasma_dmd_psu.kicad_dru`): - 3 mm between HV and LV, 1.3 mm between HV nets. - Documented exceptions only inside or next to transistor and connector pins. - **TO-220 tabs and heatsinks are live.** Each heatsink pin is on its collector net. - **Track widths** come from IPC-2221 against the fuse currents (see `hardware/kicad/README.md`). ## Workflow and tools - KiCad 10: `C:/Users/patri/AppData/Local/Programs/KiCad/10.0/bin/` (`kicad-cli.exe`, and `python.exe` with `pcbnew`). - Freerouting 2.5.0 jar: `tools/freerouting/`, git-ignored. It needs **Java 25**: `C:/Program Files/Eclipse Adoptium/jre-25.0.4.101-hotspot/bin/java.exe`. - Pipeline (KiCad must be closed while the scripts run): 1. `python hardware/kicad/gen_kicad.py` writes the schematic and the project net classes from `PARTS`. It **keeps symbol UUIDs**, so the PCB stays linked. 2. `python hardware/kicad/check_netlist.py` verifies every pin's net through kicad-cli. 3. ` hardware/kicad/layout_pcb.py` adds, swaps and places footprints from `PLACE` and draws the outline and silkscreen. **It deletes tracks and zones.** 4. ` hardware/kicad/route_pcb.py [passes]` runs Freerouting: - It routes with oversized tracks and vias, then shrinks them, which yields the clearances. - It adds J2 escape stubs and heals T-junctions. - It adds the bottom GND pour. 5. `kicad-cli pcb drc --schematic-parity --refill-zones hardware/kicad/plasma_dmd_psu.kicad_pcb`. The target is 0 errors. The 9 silkscreen warnings (TO-220 outline over the heatsink pins) are known. - Once the user starts hand-editing the schematic or PCB in KiCad, stop regenerating with the scripts. ## Gotchas learned the hard way - Bash heredocs passed through the tool can collapse `\\` and `\n` escapes. For Python with regexes or escapes, use the Write/Edit tools, not `python - <