Control Panel: Workcell
Public Unreviewedby Caleb
Control Panel: Workcell — Raspberry Pi CM5 carrier and smart power-distribution hub for Adom workcells. Four metered supply inputs (4× INA228, 20-bit) feed a switched, isolation-capable rail set delivered to the docked Control Panel: Scaffold over a Samtec ET60 blade dock with SWD/UART debug and RP2350 boot/reset control. On board: gigabit Ethernet, M.2 Wi-Fi + Bluetooth, USB-C/USB-A 3.0 with eFuse-protected VBUS, CAN FD, an 18-LED camera-feedback ring, and nested molecule slots for a PiProbe v1
Control-Panel Workcell V2.0.1 — Board Capabilities
A Raspberry Pi Compute Module 5 carrier and smart power-distribution hub for Adom workcells. It takes four bench/PSU inputs, meters every rail with 20-bit precision, switches power and debug out to a docked Scaffold board (RP2350 + user breakouts), and provides the workcell's network, USB, CAN-FD, wireless, sensing, and indicator infrastructure.
| Project | control-panel_workcell rev V2.0.1 (KiCad, 7 hierarchical sheets) |
| Compute | Raspberry Pi CM5 (CM5 Lite assumed — microSD boot, nRPIBOOT not broken out) |
| Board | 172 × 72 mm, 6-layer (F / In1–In4 / B) |
| Status | DRC clean — 0 violations, 0 unconnected pads (report 2026-06-10) |
| Open hardware | OSHW logo on root sheet |
1. Power input & distribution
Four independent supply inputs land on J1 (WAGO 2604-1108, 8-position, dual contacts per pole) and are individually metered. Three of them are delivered to the docked Scaffold board through J2 (Samtec ET60S-S03 — three 60 A-class power blades + 25 signal pins).
Rail plan (root-sheet table, IPC-2152 minimums @20 °C)
| Rail | Voltage | Current | Function | Path |
|---|---|---|---|---|
| PS1 | 0–60 V | 12 A (controlled) | USER — variable rail to Scaffold | J1 → 13 mΩ shunt → J2 blade P1 |
| PS2 | 5 V | 10 A (relayed) | USER — switched rail to Scaffold | J1 → 16 mΩ shunt → TPS22990 load switch → J2 blade P2 |
| PS3 | spare (rated 24 V) | spare | USER — future rail | J1 → (shunt unpopulated) → J2 blade P3 |
| PS4 | 5 V | 10 A (7 A realistic) | CONTROL — powers this board + CM5 | J1 → 6.3 A fuse (Littelfuse Nano2 045106.3MRL) → 16 mΩ shunt → CM5 / regulators |
| +3v3 | 3.3 V | 3 A | Board logic | AP3441 buck (U5) from PS4, enabled by CM5 VBUS_EN (pin 111) |
| M.2 3.3 V | 3.3 V | 3 A max | M.2 Key-E slot | AP3441 buck (U14) from PS4, enabled by CM5 PCIE_PWR_EN (pin 106) |
PS2 switching ("relay"): CM5 CAM_GPIO1 (pin 100) → NSi8210 digital isolator (U6) →
TPS22990 10 A load switch (3.9 mΩ RON, controlled 3 ms slew). The isolator lets PS2's
return (-PS2) float up to 2.5 V from common ground. Readback channel senses the switched state.
Grounding: machine-pin jumpers select the scheme — jumper installed: common GND is bonded to EGND; uninstalled: supply grounds float. PS1/PS2/PS3 returns are carried as separate nets to the J2 blades.
Protection: PS4 — 6.3 A fuse + SMBJ6.0A TVS (D1) + PTVS7V5 on the protected node. USB VBUS — TPS25940 eFuse (see §4).
Power telemetry — 4× INA228 (20-bit, ±0.05 %)
All four on CM5 I2C1 (PWR_I2C-1, GPIO2/3), alert pins unused; Kelvin-sensed
2512 3 W 1 % shunts with 0 Ω sense links and RC filtering:
| Device | Rail | Address | Shunt | Range / resolution |
|---|---|---|---|---|
| U2 | PS1 | 0x45 |
13 mΩ | 0–12.6 A, floor 24 µA, 1.87 W @12 A |
| U3 | PS2 | 0x44 |
16 mΩ | 0–10.24 A, floor 19.5 µA, 1.6 W @10 A |
| U4 | PS3 | 0x41 |
(fit with PS3) | bus-voltage monitoring ready |
| U1 | PS4 | 0x40 |
16 mΩ | 0–10.24 A |
Each INA228 also reads its rail's bus voltage (0–85 V capable — covers PS1's 60 V range).
2. Compute — CM5 socket
- Two Hirose-style 100-pin connectors (J4 = pins 1–100, J7 = pins 101–200). Full pin map: see CM5_Pinout_Tree.md.
- microSD (Molex 503398-1892, J5) on the SDIO bus — SDR25 @50 MHz. SD power gated by an
RT9742 current-limited switch (
SD_PWR_ON). SD signals only exist on CM5 Lite (no eMMC); nRPIBOOT is not broken out, so plan on Lite modules + SD imaging. - Power button (SW1), buffered power LED (Q1), activity LED, EEPROM write-protect jumper (JP5).
- No RTC backup battery (VBAT n.c.); HDMI, MIPI CSI/DSI, and fan header are unused — headless box.
- CM5 5 V input budget: CPU peak ~2.5 A, GPU unused (designer note).
3. Networking
| Interface | Implementation |
|---|---|
| Gigabit Ethernet | CM5 PHY direct to HR911130A integrated-magnetics RJ45 (J6) with green/yellow speed LEDs + activity LED. Length-tuned (400 ps rule, critical length ≈33 mm). |
| Wi-Fi (PCIe) | M.2 Key-E slot (J8): PCIe Gen2 x1 (90 Ω matched), CLKREQ/WAKE/PERST, dedicated 3.3 V buck, M2×1.5 standoff. Intended module: Intel AX210-class. |
| Bluetooth (USB) | AX210 BT runs over USB2: CM5 USB3-1 D± is routed through a TMUXHS221 2:1 mux — NC = Bluetooth, NO = USB-A connector. GPIO27 selects, GPIO17 enables. USB-A USB2 and Bluetooth are mutually exclusive. |
| CAN FD | MCP251863 (U15 — MCP2518FD controller + ATA6563 transceiver, 40 MHz crystal) on CM5 SPI4 (GPIO5–11, three interrupt lines). CANH/L exit on J3 (WAGO 2060-452, dual contacts per pole for daisy-chaining) with split-termination jumper JP6 (open = unterminated). |
4. USB
| Port | Lanes | Power | Notes |
|---|---|---|---|
| USB-C (J10) | CM5 USB3-0 SS pair via HD3SS3212 orientation mux + D± | Source: PS2 → TPS25940 eFuse (ILIM 4.45 A, OVP 5.68 V, UVLO 4.29 V) → Q2 P-FET | TUSB321 CC controller strapped DFP (host), 3.0 A advertised; CM5 USB_OTG strapped host. ESD on all pairs. |
| USB-A 3.0 (J9) | CM5 USB3-1 SS pair direct; D± via TMUXHS221 (shared with Bluetooth) | VBUS from the same TPS25940 output | Full SuperSpeed regardless of mux; USB2 only when mux is set to NO |
| USB 2.0 (internal) | CM5 dedicated USB2 port (pins 103/105) | — | Hard-wired to the on-board PiProbe debug molecule |
5. Scaffold dock (J2 — Samtec ET60S-S03)
The board's purpose: dock a Scaffold board carrying an RP2350 and user breakouts.
- Power blades: P1 = PS1 (0–60 V metered), P2 = PS2 (5 V, CM5-switched), P3 = PS3 (spare). Five contacts per blade polarity, separate returns.
- Debug: SWD (
DEBUG_SWD/DEBUG_SWCLK) and UART (DEBUG_TX/DEBUG_RX) from the on-board PiProbe — the CM5 can flash/debug the Scaffold RP2350 with stockopenocd/picotooltooling.MCU_BOOT(CAM_GPIO0) andMCU_RST(GPIO21) give the CM5 direct boot-strap/reset control of the RP2350. - Spare GPIO: 4 lines (GPIO0/4/14/15) to J2 via jumpers JP1–JP4 — GPIO14/15 can instead be
the Linux serial console (
enable_uart=1). - Rails out: +3v3 and +PS4 (5 V) service pins, plus grounds.
6. Embedded molecules (Adom standard slots)
| Slot | Molecule | Bus | Function |
|---|---|---|---|
| N1 | PiProbe v1.2 (RP2040, footprint-identical to the Raspberry Pi Debug Probe) | CM5 USB2 | CMSIS-DAP SWD + UART bridge to the Scaffold RP2350; its own BOOTSEL/RST are CM5-controlled (GPIO22/23) so the CM5 can re-flash the probe itself |
| N2, N4 | 8×8 mm Bosch-standard sensor slots (swappable — e.g. BME690 gas/T/H/P, BMA accelerometer) | SENSOR_I2C-2 (GPIO12/13) + shared INT (GPIO16) |
Environmental / motion sensing; any 8×8 molecule with the standard VCC/SCL/GND/SDA/INT1/INT2 pad ring fits |
| N3 | I2S MEMS microphone carrier (mono, SEL = GND) | MIC_I2S-0 (GPIO18/19/20) |
Audio capture |
7. Indicators
- TCA6424A 24-bit I2C expander (U16, addr
0x22, on I2C0 /LED_I2C-0, reset from ID_SC). - Drives 18 blue LEDs arranged in a ring (placement angles −155°…170° — designer note: "pulse LEDs in cycle to view camera functionality") plus 4 status LEDs (2 red, 2 green: power/system states). 6 expander ports spare.
- RJ45 bezel LEDs driven directly by the CM5 Ethernet LED pins.
8. I2C / bus map (CM5 side)
| Bus | CM5 pins | Devices |
|---|---|---|
I2C0 (LED_I2C-0) |
SCL0/SDA0 (80/82) | TCA6424A @0x22, CM5 ID EEPROM domain |
I2C1 (PWR_I2C-1) |
GPIO2/3 (56/58, internal 1.8 k pulls) | INA228 ×4 @0x40/0x41/0x44/0x45 |
I2C (SENSOR_I2C-2) |
GPIO12/13 + INT GPIO16 | Sensor molecule slots N2/N4 |
SPI4 (CAN_SPI-4) |
GPIO5–11 | MCP251863 CAN-FD |
I2S0 (MIC_I2S-0) |
GPIO18/19/20 | MEMS mic slot N3 |
| USB2 | 103/105 | PiProbe |
| Free GPIO | GPIO26 only (pin 24) | — |
9. Review notes (V2.0.1)
- Ethernet pair 2 polarity — pin 9 (
Pair2_N) →TRD2_P, pin 11 (Pair2_P) →TRD2_N. Benign in practice (GbE PHYs auto-correct per-pair polarity), but worth normalizing. Input Power.kicad_schis orphaned — present in the project folder but no longer in the sheet hierarchy (superseded byInput_Sense). Its INA228 address notes ("+5V_CAN", "+5V_DED", "VARIABLE") survive as stale text. Consider deleting to avoid confusion.- No RTC battery / no nRPIBOOT — fine for CM5 Lite + SD workflow, but eMMC modules can't be provisioned in-system and the RTC won't keep time across power loss.
- PS3 shunt deliberately unpopulated — schematic note: "Add PS3 shunt when supply is populated." Document in the build/BOM notes so telemetry isn't silently dead on PS3.
- DRC: clean (NPTH-in-courtyard, footprint-type and library-mismatch checks ignored by config).
Companion documents: CM5_Pinout_Tree.md (full 200-pin tree + tables),
cm5_pinout_tree.html (interactive), Control-Panel_Workcell_V2.0.1_Spec.pdf (shareable spec).
# Control-Panel Workcell V2.0.1 — Board Capabilities
**A Raspberry Pi Compute Module 5 carrier and smart power-distribution hub for Adom workcells.**
It takes four bench/PSU inputs, meters every rail with 20-bit precision, switches power and
debug out to a docked Scaffold board (RP2350 + user breakouts), and provides the workcell's
network, USB, CAN-FD, wireless, sensing, and indicator infrastructure.
| | |
|---|---|
| Project | `control-panel_workcell` rev **V2.0.1** (KiCad, 7 hierarchical sheets) |
| Compute | Raspberry Pi **CM5** (CM5 Lite assumed — microSD boot, nRPIBOOT not broken out) |
| Board | 172 × 72 mm, **6-layer** (F / In1–In4 / B) |
| Status | DRC clean — 0 violations, 0 unconnected pads (report 2026-06-10) |
| Open hardware | OSHW logo on root sheet |
---
## 1. Power input & distribution
Four independent supply inputs land on **J1** (WAGO 2604-1108, 8-position, dual contacts
per pole) and are individually metered. Three of them are delivered to the docked Scaffold
board through **J2** (Samtec ET60S-S03 — three 60 A-class power blades + 25 signal pins).
### Rail plan (root-sheet table, IPC-2152 minimums @20 °C)
| Rail | Voltage | Current | Function | Path |
|------|---------|---------|----------|------|
| **PS1** | 0–60 V | 12 A (controlled) | USER — variable rail to Scaffold | J1 → 13 mΩ shunt → J2 blade P1 |
| **PS2** | 5 V | 10 A (relayed) | USER — switched rail to Scaffold | J1 → 16 mΩ shunt → TPS22990 load switch → J2 blade P2 |
| **PS3** | spare (rated 24 V) | spare | USER — future rail | J1 → (shunt unpopulated) → J2 blade P3 |
| **PS4** | 5 V | 10 A (7 A realistic) | CONTROL — powers this board + CM5 | J1 → 6.3 A fuse (Littelfuse Nano2 045106.3MRL) → 16 mΩ shunt → CM5 / regulators |
| +3v3 | 3.3 V | 3 A | Board logic | AP3441 buck (U5) from PS4, enabled by CM5 `VBUS_EN` (pin 111) |
| M.2 3.3 V | 3.3 V | 3 A max | M.2 Key-E slot | AP3441 buck (U14) from PS4, enabled by CM5 `PCIE_PWR_EN` (pin 106) |
**PS2 switching ("relay"):** CM5 `CAM_GPIO1` (pin 100) → NSi8210 digital isolator (U6) →
TPS22990 10 A load switch (3.9 mΩ R<sub>ON</sub>, controlled 3 ms slew). The isolator lets PS2's
return (`-PS2`) float up to 2.5 V from common ground. Readback channel senses the switched state.
**Grounding:** machine-pin jumpers select the scheme — jumper installed: common GND is
bonded to EGND; uninstalled: supply grounds float. PS1/PS2/PS3 returns are carried as
separate nets to the J2 blades.
**Protection:** PS4 — 6.3 A fuse + SMBJ6.0A TVS (D1) + PTVS7V5 on the protected node.
USB VBUS — TPS25940 eFuse (see §4).
### Power telemetry — 4× INA228 (20-bit, ±0.05 %)
All four on CM5 **I2C1** (`PWR_I2C-1`, GPIO2/3), alert pins unused; Kelvin-sensed
2512 3 W 1 % shunts with 0 Ω sense links and RC filtering:
| Device | Rail | Address | Shunt | Range / resolution |
|--------|------|---------|-------|--------------------|
| U2 | PS1 | `0x45` | 13 mΩ | 0–12.6 A, floor 24 µA, 1.87 W @12 A |
| U3 | PS2 | `0x44` | 16 mΩ | 0–10.24 A, floor 19.5 µA, 1.6 W @10 A |
| U4 | PS3 | `0x41` | (fit with PS3) | bus-voltage monitoring ready |
| U1 | PS4 | `0x40` | 16 mΩ | 0–10.24 A |
Each INA228 also reads its rail's bus voltage (0–85 V capable — covers PS1's 60 V range).
---
## 2. Compute — CM5 socket
- Two Hirose-style 100-pin connectors (**J4** = pins 1–100, **J7** = pins 101–200).
Full pin map: see *CM5_Pinout_Tree.md*.
- **microSD** (Molex 503398-1892, J5) on the SDIO bus — SDR25 @50 MHz. SD power gated by an
RT9742 current-limited switch (`SD_PWR_ON`). *SD signals only exist on CM5 Lite (no eMMC);
nRPIBOOT is not broken out, so plan on Lite modules + SD imaging.*
- Power button (SW1), buffered power LED (Q1), activity LED, EEPROM write-protect jumper (JP5).
- No RTC backup battery (VBAT n.c.); HDMI, MIPI CSI/DSI, and fan header are unused — headless box.
- CM5 5 V input budget: CPU peak ~2.5 A, GPU unused (designer note).
---
## 3. Networking
| Interface | Implementation |
|-----------|----------------|
| **Gigabit Ethernet** | CM5 PHY direct to HR911130A integrated-magnetics RJ45 (J6) with green/yellow speed LEDs + activity LED. Length-tuned (400 ps rule, critical length ≈33 mm). |
| **Wi-Fi (PCIe)** | M.2 **Key-E** slot (J8): PCIe Gen2 x1 (90 Ω matched), CLKREQ/WAKE/PERST, dedicated 3.3 V buck, M2×1.5 standoff. Intended module: Intel **AX210**-class. |
| **Bluetooth (USB)** | AX210 BT runs over USB2: CM5 USB3-1 D± is routed through a TMUXHS221 2:1 mux — **NC = Bluetooth, NO = USB-A connector**. GPIO27 selects, GPIO17 enables. *USB-A USB2 and Bluetooth are mutually exclusive.* |
| **CAN FD** | MCP251863 (U15 — MCP2518FD controller + ATA6563 transceiver, 40 MHz crystal) on CM5 **SPI4** (GPIO5–11, three interrupt lines). CANH/L exit on J3 (WAGO 2060-452, dual contacts per pole for daisy-chaining) with split-termination jumper **JP6** (open = unterminated). |
---
## 4. USB
| Port | Lanes | Power | Notes |
|------|-------|-------|-------|
| **USB-C (J10)** | CM5 **USB3-0** SS pair via HD3SS3212 orientation mux + D± | Source: PS2 → TPS25940 eFuse (I<sub>LIM</sub> 4.45 A, OVP 5.68 V, UVLO 4.29 V) → Q2 P-FET | TUSB321 CC controller strapped **DFP (host), 3.0 A advertised**; CM5 `USB_OTG` strapped host. ESD on all pairs. |
| **USB-A 3.0 (J9)** | CM5 **USB3-1** SS pair direct; D± via TMUXHS221 (shared with Bluetooth) | VBUS from the same TPS25940 output | Full SuperSpeed regardless of mux; USB2 only when mux is set to NO |
| **USB 2.0 (internal)** | CM5 dedicated USB2 port (pins 103/105) | — | Hard-wired to the on-board **PiProbe** debug molecule |
---
## 5. Scaffold dock (J2 — Samtec ET60S-S03)
The board's purpose: dock a **Scaffold board** carrying an RP2350 and user breakouts.
- **Power blades:** P1 = PS1 (0–60 V metered), P2 = PS2 (5 V, CM5-switched), P3 = PS3 (spare).
Five contacts per blade polarity, separate returns.
- **Debug:** SWD (`DEBUG_SWD`/`DEBUG_SWCLK`) and UART (`DEBUG_TX`/`DEBUG_RX`) from the
on-board PiProbe — the CM5 can flash/debug the Scaffold RP2350 with stock `openocd`/`picotool`
tooling. `MCU_BOOT` (CAM_GPIO0) and `MCU_RST` (GPIO21) give the CM5 direct boot-strap/reset
control of the RP2350.
- **Spare GPIO:** 4 lines (GPIO0/4/14/15) to J2 via jumpers JP1–JP4 — GPIO14/15 can instead be
the Linux serial console (`enable_uart=1`).
- **Rails out:** +3v3 and +PS4 (5 V) service pins, plus grounds.
---
## 6. Embedded molecules (Adom standard slots)
| Slot | Molecule | Bus | Function |
|------|----------|-----|----------|
| N1 | **PiProbe v1.2** (RP2040, footprint-identical to the Raspberry Pi Debug Probe) | CM5 USB2 | CMSIS-DAP SWD + UART bridge to the Scaffold RP2350; its own BOOTSEL/RST are CM5-controlled (GPIO22/23) so the CM5 can re-flash the probe itself |
| N2, N4 | **8×8 mm Bosch-standard sensor slots** (swappable — e.g. BME690 gas/T/H/P, BMA accelerometer) | `SENSOR_I2C-2` (GPIO12/13) + shared INT (GPIO16) | Environmental / motion sensing; any 8×8 molecule with the standard VCC/SCL/GND/SDA/INT1/INT2 pad ring fits |
| N3 | **I2S MEMS microphone carrier** (mono, SEL = GND) | `MIC_I2S-0` (GPIO18/19/20) | Audio capture |
---
## 7. Indicators
- **TCA6424A** 24-bit I2C expander (U16, addr `0x22`, on I2C0 / `LED_I2C-0`, reset from ID_SC).
- Drives **18 blue LEDs arranged in a ring** (placement angles −155°…170° — designer note:
*"pulse LEDs in cycle to view camera functionality"*) plus 4 status LEDs
(2 red, 2 green: power/system states). 6 expander ports spare.
- RJ45 bezel LEDs driven directly by the CM5 Ethernet LED pins.
---
## 8. I2C / bus map (CM5 side)
| Bus | CM5 pins | Devices |
|-----|----------|---------|
| I2C0 (`LED_I2C-0`) | SCL0/SDA0 (80/82) | TCA6424A @0x22, CM5 ID EEPROM domain |
| I2C1 (`PWR_I2C-1`) | GPIO2/3 (56/58, internal 1.8 k pulls) | INA228 ×4 @0x40/0x41/0x44/0x45 |
| I2C (`SENSOR_I2C-2`) | GPIO12/13 + INT GPIO16 | Sensor molecule slots N2/N4 |
| SPI4 (`CAN_SPI-4`) | GPIO5–11 | MCP251863 CAN-FD |
| I2S0 (`MIC_I2S-0`) | GPIO18/19/20 | MEMS mic slot N3 |
| USB2 | 103/105 | PiProbe |
| Free GPIO | GPIO26 only (pin 24) | — |
---
## 9. Review notes (V2.0.1)
1. **Ethernet pair 2 polarity** — pin 9 (`Pair2_N`) → `TRD2_P`, pin 11 (`Pair2_P`) → `TRD2_N`.
Benign in practice (GbE PHYs auto-correct per-pair polarity), but worth normalizing.
2. **`Input Power.kicad_sch` is orphaned** — present in the project folder but no longer in the
sheet hierarchy (superseded by `Input_Sense`). Its INA228 address notes ("+5V_CAN",
"+5V_DED", "VARIABLE") survive as stale text. Consider deleting to avoid confusion.
3. **No RTC battery / no nRPIBOOT** — fine for CM5 Lite + SD workflow, but eMMC modules can't
be provisioned in-system and the RTC won't keep time across power loss.
4. **PS3 shunt deliberately unpopulated** — schematic note: "Add PS3 shunt when supply is
populated." Document in the build/BOM notes so telemetry isn't silently dead on PS3.
5. DRC: clean (NPTH-in-courtyard, footprint-type and library-mismatch checks ignored by config).
---
*Companion documents: `CM5_Pinout_Tree.md` (full 200-pin tree + tables),
`cm5_pinout_tree.html` (interactive), `Control-Panel_Workcell_V2.0.1_Spec.pdf` (shareable spec).*