Add 8HP layout with fully automated routing pipeline

- Update PCB to 8HP format (40x100mm) with v2 component placement
- Add automated routing scripts (autoroute.py runs full pipeline headlessly)
- Update panel spec and SVG for 8HP dimensions
- Board routes in <1 second with 0 unconnected pads

Scripts:
- autoroute.py: Full CLI pipeline (place → export → route → import → DRC)
- autoroute_full.py: Same pipeline for KiCad scripting console
- place_8hp.py: Component placement only
- route.sh/freeroute.sh: Routing helpers
This commit is contained in:
2026-01-23 07:59:50 +01:00
parent cd337b8718
commit 1ae49dc1bb
13 changed files with 15205 additions and 1905 deletions
+48 -57
View File
@@ -1,10 +1,10 @@
# SN-L00 Panel Specification
## Eurorack 6HP Panel Dimensions
## Eurorack 8HP Panel Dimensions
| Parameter | Value | Notes |
|-----------|-------|-------|
| Width | 30.00mm | 6 × 5.08mm (6HP) |
| Width | 40.30mm | 8 × 5.08mm (8HP) |
| Height | 128.50mm | 3U standard |
| Thickness | 1.5-2.0mm | Aluminum or PCB |
| Corner radius | 0mm | Square corners |
@@ -16,9 +16,9 @@ Eurorack standard mounting rail positions:
| Hole | X | Y | Diameter | Notes |
|------|---|---|----------|-------|
| Top Left | 7.5mm | 3.0mm | 3.2mm | Horizontal slot optional |
| Top Right | 22.5mm | 3.0mm | 3.2mm | Horizontal slot optional |
| Top Right | 32.8mm | 3.0mm | 3.2mm | Horizontal slot optional |
| Bottom Left | 7.5mm | 125.5mm | 3.2mm | Horizontal slot optional |
| Bottom Right | 22.5mm | 125.5mm | 3.2mm | Horizontal slot optional |
| Bottom Right | 32.8mm | 125.5mm | 3.2mm | Horizontal slot optional |
**Note**: Slots (elongated holes) of 3.2mm × 4mm allow for rail tolerance.
@@ -26,47 +26,47 @@ Eurorack standard mounting rail positions:
| Component | X | Y | Diameter | Notes |
|-----------|---|---|----------|-------|
| OLED cutout | 15.0mm | 25.0mm | 28×12mm rect | Rectangular window |
| Button | 15.0mm | 45.0mm | 7.0mm | For 6mm tactile + cap |
| LED (power) | 24.0mm | 45.0mm | 3.0mm | For 3mm LED or light pipe |
| Jack TRIG | 7.5mm | 95.0mm | 6.0mm | Thonkiconn PJ398SM |
| Jack RETURN | 22.5mm | 95.0mm | 6.0mm | Thonkiconn PJ398SM |
| OLED cutout | 20.15mm | 25.0mm | 28×12mm rect | Rectangular window |
| Button | 20.15mm | 50.0mm | 7.0mm | For 6mm tactile + cap |
| LED (status) | 32.0mm | 50.0mm | 3.0mm | For 3mm LED or light pipe |
| Jack RETURN | 10.0mm | 95.0mm | 6.0mm | Thonkiconn PJ398SM |
| Jack TRIG | 30.0mm | 95.0mm | 6.0mm | Thonkiconn PJ398SM |
## Panel Layout Drawing
```
←───── 30.00mm ─────→
←─────── 40.30mm ───────→
┌─────────────────────┐ ─┬─ 0.00mm
│ │ 3.00mm (mounting holes)
│ │ │
│ SubModular │ │ 12.00mm
│ │ │
───────────────┐ │ │
│ │ │
OLED │ │ 19-31mm (display window)
DISPLAY │ │
│ │ │
───────────────┘ │ │
│ │ │
│ SN-L00 │ │ 38.00mm
│ │ │
• │ │ 45.00mm (button + LED)
│ BTN PWR │ │
│ │ │
│ │ │
│ │ │
│ ┌───┐ ┌───┐ │ │
│ │ │ │ │ │ │
│ │ ○ │ │ ○ │ │ │ 95.00mm (jacks)
│ │ │ │ │ │ │
│ └───┘ └───┘ │ │
TRIG RETURN │ │ 105.00mm (labels)
│ │ │
│ LATENCY TESTER │ │ 115.00mm
│ │ │
│ │ 125.50mm (mounting holes)
└─────────────────────┘ ─┴─ 128.50mm
┌───────────────────────────┐ ─┬─ 0.00mm
○ │ │ 3.00mm (mounting holes)
│ │
SubModular │ │ 12.00mm
│ │
┌─────────────────┐ │ │
│ │
OLED │ │ 19-31mm (display window)
DISPLAY │ │
│ │
└─────────────────┘ │ │
│ │
SN-L00 │ │ 42.00mm
│ │
• │ │ 50.00mm (button + LED)
BTN PWR │ │
│ │
│ │
│ │
┌───┐ ┌───┐ │ │
│ │ │ │ │ │
│ ○ │ │ ○ │ │ │ 95.00mm (jacks)
│ │ │ │ │ │
└───┘ └───┘ │ │
RETURN TRIG │ │ 105.00mm (labels)
│ │
LATENCY TESTER │ │ 115.00mm
│ │
○ │ │ 125.50mm (mounting holes)
└───────────────────────────┘ ─┴─ 128.50mm
```
## OLED Display Window
@@ -79,7 +79,7 @@ The 0.91" 128×32 OLED module dimensions:
| Active area | ~22 × 6mm |
| Mounting | Pin header on edge |
**Panel cutout**: 28mm × 10mm rectangle, centered at (15.0, 25.0)
**Panel cutout**: 28mm × 10mm rectangle, centered at (20.15, 25.0)
Alternatively, a slightly larger window (30 × 12mm) gives tolerance for module alignment.
@@ -124,17 +124,11 @@ Soldermask: Black (or custom color)
| Element | Position | Size | Font |
|---------|----------|------|------|
| "SubModular" | Top center, Y=12mm | 2.5mm | Bold sans-serif |
| "SN-L00" | Above button, Y=38mm | 3.0mm | Bold |
| "TRIG" | Below left jack, Y=105mm | 2.0mm | Regular |
| "RETURN" | Below right jack, Y=105mm | 2.0mm | Regular |
| "SN-L00" | Above button, Y=42mm | 3.0mm | Bold |
| "RETURN" | Below left jack, Y=105mm | 2.0mm | Regular |
| "TRIG" | Below right jack, Y=105mm | 2.0mm | Regular |
| "LATENCY TESTER" | Bottom, Y=115mm | 1.5mm | Light |
### Icon Ideas
- Small waveform graphic near jacks
- Clock/timer icon
- Sub-Net logo (if available)
## Hole Tolerances
| Hole Type | Nominal | Tolerance |
@@ -144,14 +138,11 @@ Soldermask: Black (or custom color)
| Button | 7.0mm | +0.2/-0.0 |
| LED | 3.0mm | +0.1/-0.0 |
## Files to Create
## Files
For manufacturing:
1. **DXF/DWG** - For laser cutting (aluminum/acrylic)
2. **KiCad PCB** - For PCB panel
3. **SVG** - For graphics reference
4. **PDF** - Dimensional drawing
- **PANEL_SPEC.md** - This file
- **SN-L00_panel.svg** - Vector graphic for manufacturing
- **SN-L00_panel.kicad_pcb** - PCB panel (if using FR4)
## Assembly
+24 -24
View File
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
width="30mm" height="128.5mm"
viewBox="0 0 30 128.5">
width="40.30mm" height="128.5mm"
viewBox="0 0 40.30 128.5">
<title>SN-L00 Eurorack Panel</title>
<desc>6HP Eurorack panel for SN-L00 Latency Tester</desc>
<desc>8HP Eurorack panel for SN-L00 Latency Tester</desc>
<defs>
<style>
@@ -20,53 +20,53 @@
</defs>
<!-- Panel background -->
<rect class="panel" x="0" y="0" width="30" height="128.5"/>
<rect class="panel" x="0" y="0" width="40.30" height="128.5"/>
<!-- Mounting holes (3.2mm) - RED for drill -->
<!-- Top mounting holes -->
<circle class="hole" cx="7.5" cy="3" r="1.6"/>
<circle class="hole" cx="22.5" cy="3" r="1.6"/>
<circle class="hole" cx="32.8" cy="3" r="1.6"/>
<!-- Bottom mounting holes -->
<circle class="hole" cx="7.5" cy="125.5" r="1.6"/>
<circle class="hole" cx="22.5" cy="125.5" r="1.6"/>
<circle class="hole" cx="32.8" cy="125.5" r="1.6"/>
<!-- OLED display window (28x10mm rectangle) - GREEN for cutout -->
<rect class="cutout" x="1" y="20" width="28" height="10" rx="0.5"/>
<rect class="cutout" x="6.15" y="20" width="28" height="10" rx="0.5"/>
<!-- Button hole (7mm) -->
<circle class="hole" cx="15" cy="45" r="3.5"/>
<circle class="hole" cx="20.15" cy="50" r="3.5"/>
<!-- LED hole (3mm) -->
<circle class="hole" cx="24" cy="45" r="1.5"/>
<circle class="hole" cx="32" cy="50" r="1.5"/>
<!-- Jack holes (6mm) -->
<circle class="hole" cx="7.5" cy="95" r="3"/>
<circle class="hole" cx="22.5" cy="95" r="3"/>
<circle class="hole" cx="10" cy="95" r="3"/>
<circle class="hole" cx="30" cy="95" r="3"/>
<!-- Text labels - WHITE silkscreen -->
<text class="text text-medium" x="15" y="12" text-anchor="middle">SubModular</text>
<text class="text text-medium" x="20.15" y="12" text-anchor="middle">SubModular</text>
<text class="text text-large" x="15" y="38" text-anchor="middle" font-weight="bold">SN-L00</text>
<text class="text text-large" x="20.15" y="42" text-anchor="middle" font-weight="bold">SN-L00</text>
<text class="text text-small" x="15" y="52" text-anchor="middle">BTN</text>
<text class="text text-small" x="24" y="52" text-anchor="middle">PWR</text>
<text class="text text-small" x="20.15" y="57" text-anchor="middle">BTN</text>
<text class="text text-small" x="32" y="57" text-anchor="middle">PWR</text>
<text class="text text-small" x="7.5" y="105" text-anchor="middle">TRIG</text>
<text class="text text-small" x="22.5" y="105" text-anchor="middle">RETURN</text>
<text class="text text-small" x="10" y="105" text-anchor="middle">RETURN</text>
<text class="text text-small" x="30" y="105" text-anchor="middle">TRIG</text>
<text class="text text-small" x="15" y="115" text-anchor="middle">LATENCY TESTER</text>
<text class="text text-small" x="20.15" y="115" text-anchor="middle">LATENCY TESTER</text>
<!-- Decorative elements -->
<!-- Jack nut indicators (circles around jacks) -->
<circle class="silkscreen" cx="7.5" cy="95" r="5"/>
<circle class="silkscreen" cx="22.5" cy="95" r="5"/>
<circle class="silkscreen" cx="10" cy="95" r="5"/>
<circle class="silkscreen" cx="30" cy="95" r="5"/>
<!-- Display frame -->
<rect class="silkscreen" x="0.5" y="19.5" width="29" height="11" rx="0.5"/>
<rect class="silkscreen" x="5.65" y="19.5" width="29" height="11" rx="0.5"/>
<!-- Horizontal lines for visual separation -->
<line class="silkscreen" x1="2" y1="55" x2="28" y2="55"/>
<line class="silkscreen" x1="2" y1="85" x2="28" y2="85"/>
<line class="silkscreen" x1="2" y1="110" x2="28" y2="110"/>
<line class="silkscreen" x1="4" y1="60" x2="36.30" y2="60"/>
<line class="silkscreen" x1="4" y1="85" x2="36.30" y2="85"/>
<line class="silkscreen" x1="4" y1="110" x2="36.30" y2="110"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB