← Commit history

Control panel pair updated to V2.1.0: viewers, specifications and models

Caleb ·45d4b8928d ·13d ago ·parent bd4a820
6 files changed +202−193
Control_Panel_Scaffold_v2.1.0.glbadded
⋯ 1 unchanged line ⋯
Control_Panel_Workcell_v2.1.0.glbadded
⋯ 1 unchanged line ⋯
README.html+165−145
@@ -62,6 +62,8 @@ img { max-width: 100%; border-radius: 6px; display: block; margin: 0 0 16px; }  <p>It is a two-board pair that mate at a blade dock. One half stays with the workcell, the other rides on the base scaffold with the project.</p> +<p><strong>Current revision:</strong> Control Panel: Workcell V2.1.0 and Control Panel: Scaffold V2.1.0. Every function on this page was exercised on the bench in the V2.1.0 test campaign; measured values are quoted where they matter.</p>+ <h2>The Pair</h2>  <table>@@ -95,7 +97,7 @@ if (typeof V === &#x27;undefined&#x27;) { wrap.remove(); } else {   try {     const viewer = V.init(wrap, { zUp: true, showViewCube: true, showGround: true });-    viewer.loadModel(&#x27;https://wiki.adom.inc/api/pages/adom/base-scaffold-control-panel/files/models/workcell-q.glb?v=608c90f7&#x27;).then(() =&gt; {+    viewer.loadModel(&#x27;https://wiki.adom.inc/api/pages/adom/base-scaffold-control-panel/files/models/workcell-q.glb?v=v210a&#x27;).then(() =&gt; {       viewer.frameModel();       try { if (viewer.toggleAxes) viewer.toggleAxes(&#x27;world&#x27;, false); } catch (e) {}       document.getElementById(&#x27;fb&#x27;).remove();@@ -125,63 +127,66 @@ else {         dBtn.onclick = () =&gt; { tipsOn = !tipsOn; dBtn.classList.toggle(&#x27;on&#x27;, tipsOn); if (!tipsOn) tip.style.display = &#x27;none&#x27;; };          const HDR = {-          pwr: &#x27;Supply inputs (PS1\u2013PS4)&#x27;,+          pwr: &#x27;Supply inputs (PS1–PS4)&#x27;,           meter: &#x27;Rail metering&#x27;,           usb: &#x27;USB ports&#x27;,           wifi: &#x27;M.2 Wi-Fi slot&#x27;,           cm5: &#x27;Workcell controller&#x27;,           ring: &#x27;ADOM LED ring&#x27;,           sens: &#x27;Sensing&#x27;,-          probe: &#x27;PiProbe (N1)&#x27;,-          dock: &#x27;ET60T dock&#x27;,+          probe: &#x27;Debug probe&#x27;,+          dock: &#x27;Blade dock&#x27;,           led: &#x27;Status LEDs&#x27;,-          jmp: &#x27;Ground bonds&#x27;,-          board: &#x27;Control Panel: Workcell&#x27;,+          jmp: &#x27;Configuration jumpers&#x27;,+          board: &#x27;Control Panel: Workcell V2.1.0&#x27;,         };         const T = {-          pwr: [HDR.pwr, &#x27;Bench supplies land on WAGO terminals: PS1 0\u201360 V / 12 A (variable), PS2 5 V / 10 A (switched), PS3 user rail, PS4 internal 5 V. Every rail is metered.&#x27;],-          meter: [HDR.meter, &#x27;INA228 20-bit monitors \u2014 one per rail \u2014 feed live V / A / W to the Control Panel Dashboard.&#x27;],-          ps2sw: [HDR.pwr, &#x27;TPS22990 load switch \u2014 the PS2 rail enable, 3 ms controlled ramp. Switching PS2 off also drops USB VBUS.&#x27;],-          usba: [HDR.usb, &#x27;USB-A 3.0 SuperSpeed host, power delivery; VBUS from PS2. Its USB 2.0 lanes are muxed with Bluetooth \u2014 mutually exclusive.&#x27;],-          usbc: [HDR.usb, &#x27;USB-C 3.0 SuperSpeed host (G-Switch GT-USB-7052), power delivery 3.0 A; VBUS from PS2.&#x27;],-          mux: [HDR.usb, &#x27;TMUXHS221 high-speed mux \u2014 routes the shared USB 2.0 lane to Bluetooth or USB-A.&#x27;],-          efuse: [HDR.usb, &#x27;TPS25940 smart eFuse \u2014 protected VBUS path (5 A limit, back-feed block).&#x27;],-          cc: [HDR.usb, &#x27;TUSB321 Type-C CC controller.&#x27;],+          pwr: [HDR.pwr, &#x27;Bench supplies land on push-in terminals: PS1 0–60 V / 12 A (variable), PS2 5 V / 10 A (switched), PS3 spare user rail (0–24 V), PS4 5 V board supply.&#x27;],+          meter: [HDR.meter, &#x27;20-bit INA228 monitor — bus voltage, current, power and temperature, live in the Control Panel Dashboard. Bench accuracy within 0.04 % across 5–60 V.&#x27;],+          ps2sw: [HDR.pwr, &#x27;PS2 rail switch — soft start (≈ 0.4 ms rise) on the way to the scaffold and the USB ports. Switching PS2 off also drops USB VBUS.&#x27;],+          iso: [HDR.pwr, &#x27;Isolated command path for the PS2 switch, so each user rail’s return can float up to ±2.5 V.&#x27;],+          usba: [HDR.usb, &#x27;USB-A 3.0 SuperSpeed host, 5 V VBUS from PS2 at 1.5 A behind a latching eFuse. Its USB 2.0 lanes are shared with Bluetooth — mutually exclusive.&#x27;],+          usbc: [HDR.usb, &#x27;USB-C 3.0 SuperSpeed host, 5 V VBUS from PS2 at 3.0 A behind a latching eFuse.&#x27;],+          mux: [HDR.usb, &#x27;High-speed switch — routes the shared USB 2.0 lane to Bluetooth or the USB-A port.&#x27;],+          efuse: [HDR.usb, &#x27;Latching eFuse on a USB VBUS path — trips on overload and stays off until reset.&#x27;],+          cc: [HDR.usb, &#x27;USB Type-C attach and orientation controller.&#x27;],           esd: [HDR.usb, &#x27;USB ESD protection.&#x27;],-          wifi: [HDR.wifi, &#x27;M.2 Key-E slot for the AX210-class module: Wi-Fi 6E (2.4 / 5 / 6 GHz, 160 MHz, 2\u00d72 MIMO to ~2.4 Gbps) + Bluetooth 5.3. Wi-Fi on PCIe, Bluetooth on USB.&#x27;],-          cm5: [HDR.cm5, &#x27;Raspberry Pi CM5 (system side) \u2014 runs metering, switching and the Control Panel Dashboard. No user wiring lands here.&#x27;],-          sd: [HDR.cm5, &#x27;micro-SD \u2014 CM5 storage.&#x27;],-          net: [HDR.cm5, &#x27;RJ45 \u2014 workcell network uplink (system side).&#x27;],-          ring: [HDR.ring, &#x27;18 blue LEDs (0402, C130724) around the logo \u2014 verification for vision-system reliability. The chase animation mirrors the real behavior.&#x27;],-          bme: [HDR.sens, &#x27;BME690 environmental sensor slot \u2014 temperature \u221240..+85 \u00b0C, 0\u2013100 %RH, 300\u20131100 hPa, gas/IAQ.&#x27;],-          bmi: [HDR.sens, &#x27;BMI270 inertial sensor slot \u2014 accel \u00b12\u201316 g, gyro \u00b1125\u20132000 \u00b0/s.&#x27;],-          mic: [HDR.sens, &#x27;MEMS microphone module (N3) \u2014 IM72D128 on I2S, acoustic capture for the dashboard.&#x27;],-          sj: [HDR.sens, &#x27;Sensor jumper \u2014 drops in to connect a sensor slot.&#x27;],-          probe: [HDR.probe, &#x27;Onboard debug probe \u2014 flashes and halts the scaffold\u2019s user MCU over SWD (stock openocd / picotool).&#x27;],-          dock: [HDR.dock, &#x27;Delivers PS1\u2013PS3 + returns, USB 2.0, SWD/UART debug and MCU boot/reset across the blade dock to the scaffold.&#x27;],-          ledR: [HDR.led, &#x27;Red status indicator (0402, C130719).&#x27;],-          ledG: [HDR.led, &#x27;Green status indicator (0402, C130723).&#x27;],-          jmp: [HDR.jmp, &#x27;Ground-bond jumper.&#x27;],-          mcL: [HDR.dock, &#x27;Large machine contact \u2014 ~20.8 A (80% derated), mates 14 AWG solid core.&#x27;],-          mc: [HDR.board, &#x27;Machine contact \u2014 medium ~6.4 A, solderless press-fit.&#x27;],-          sw: [HDR.board, &#x27;SW1 \u2014 service button (SKRPACE010).&#x27;],-          ghost: [&#x27;Control Panel: Scaffold (ghost)&#x27;, &#x27;The scaffold half shown mated below \u2014 user power + I/O dock.&#x27;],-          board: [HDR.board, &#x27;CM5 carrier and smart power-distribution hub \u2014 the system half of the control panel.&#x27;],+          wifi: [HDR.wifi, &#x27;M.2 Key-E slot for the AX210-class module: Wi-Fi 6E (2.4 / 5 / 6 GHz, 160 MHz, 2×2 MIMO) + Bluetooth 5.3. Wi-Fi on PCIe, Bluetooth on USB.&#x27;],+          cm5: [HDR.cm5, &#x27;Raspberry Pi CM5 (system side) — runs metering, switching and the Control Panel Dashboard. No user wiring lands here.&#x27;],+          sd: [HDR.cm5, &#x27;microSD — controller storage.&#x27;],+          net: [HDR.cm5, &#x27;Workcell network uplink (system side).&#x27;],+          sw: [HDR.cm5, &#x27;Power button for the workcell controller.&#x27;],+          ring: [HDR.ring, &#x27;18 blue LEDs around the logo — a visual reference for vision-system checks. The chase animation mirrors the real behavior.&#x27;],+          bme: [HDR.sens, &#x27;BME690 environmental sensor slot — temperature −40..+85 °C, 0–100 %RH, 300–1100 hPa, gas/IAQ.&#x27;],+          bmi: [HDR.sens, &#x27;BMI270 inertial sensor slot — accel ±2–16 g, gyro ±125–2000 °/s.&#x27;],+          mic: [HDR.sens, &#x27;MEMS microphone module — digital audio capture for the dashboard.&#x27;],+          sj: [HDR.sens, &#x27;Sensor jumper — drops in to connect a sensor slot.&#x27;],+          probe: [HDR.probe, &#x27;Onboard debug probe — flashes, halts and resets the scaffold’s user MCU over SWD (verified to 31 MHz), plus a UART console.&#x27;],+          dock: [HDR.dock, &#x27;Delivers PS1–PS3 + returns, 5 V and 3.3 V logic, SWD/UART debug, MCU boot/reset and the ID bus across the blade dock to the scaffold.&#x27;],+          ledR: [HDR.led, &#x27;Red status indicator.&#x27;],+          ledG: [HDR.led, &#x27;Green status indicator.&#x27;],+          jmp: [HDR.jmp, &#x27;Configuration jumper.&#x27;],+          mcL: [HDR.dock, &#x27;Large machine contact — ~20.8 A (80% derated), mates 14 AWG solid core.&#x27;],+          mc: [HDR.board, &#x27;Machine contact — medium ~6.4 A, solderless press-fit.&#x27;],+          ghost: [&#x27;Control Panel: Scaffold (ghost)&#x27;, &#x27;The scaffold half shown mated below — user power + I/O dock.&#x27;],+          board: [HDR.board, &#x27;CM5 carrier and smart power-distribution hub — the system half of the control panel.&#x27;],         };         const NAME_RULES = [           [/^GHOST/, &#x27;ghost&#x27;],           [/^BME690/, &#x27;bme&#x27;], [/^BMI270/, &#x27;bmi&#x27;],-          [/^J2$/, &#x27;dock&#x27;],-          [/^N3$/, &#x27;mic&#x27;], [/^N1$/, &#x27;probe&#x27;],+          [/^J1$/, &#x27;dock&#x27;],+          [/^N2$/, &#x27;mic&#x27;], [/^N1$/, &#x27;probe&#x27;],           [/^SJ\d/, &#x27;sj&#x27;],-          [/^(D2|D23)($|_glow|_cone)/, &#x27;ledR&#x27;],-          [/^(D3|D4)($|_glow|_cone)/, &#x27;ledG&#x27;],-          [/^(D\d+)($|_glow|_cone)/, &#x27;ring&#x27;],-          [/^(U1|U2|U3|U4)$/, &#x27;meter&#x27;],-          [/^U7$/, &#x27;ps2sw&#x27;], [/^U13$/, &#x27;mux&#x27;], [/^U17$/, &#x27;efuse&#x27;], [/^U18$/, &#x27;cc&#x27;],-          [/^J9$/, &#x27;usba&#x27;], [/^J10$/, &#x27;usbc&#x27;], [/^J8$/, &#x27;wifi&#x27;],-          [/^(J4|J7)$/, &#x27;cm5&#x27;], [/^J5$/, &#x27;sd&#x27;], [/^J6$/, &#x27;net&#x27;],-          [/^(J1|J3)$/, &#x27;pwr&#x27;],+          [/^(D2|D23)_(glow|cone)$/, &#x27;ledR&#x27;], [/^LED(2|22|23)$/, &#x27;ledR&#x27;],+          [/^(D3|D4)_(glow|cone)$/, &#x27;ledG&#x27;], [/^LED(1|3)$/, &#x27;ledG&#x27;],+          [/^D\d+_(glow|cone)$/, &#x27;ring&#x27;], [/^LED\d+$/, &#x27;ring&#x27;],+          [/^(U1|U3|U5|U7)$/, &#x27;meter&#x27;],+          [/^U4$/, &#x27;ps2sw&#x27;], [/^U2$/, &#x27;iso&#x27;],+          [/^(U13|U19)$/, &#x27;mux&#x27;], [/^(U17|U23)$/, &#x27;efuse&#x27;], [/^U18$/, &#x27;cc&#x27;],+          [/^(U8|U9|U11|U12|U20|U21|U22|U24|U25)$/, &#x27;esd&#x27;],+          [/^J10$/, &#x27;usba&#x27;], [/^J9$/, &#x27;usbc&#x27;], [/^J8$/, &#x27;wifi&#x27;],+          [/^(J5|J7)$/, &#x27;cm5&#x27;], [/^J6$/, &#x27;sd&#x27;], [/^J4$/, &#x27;net&#x27;],+          [/^J2$/, &#x27;pwr&#x27;],           [/^SW1$/, &#x27;sw&#x27;],           [/^(JP\d|JMP|Adom_Jumper|GNDSPACER)/, &#x27;jmp&#x27;],           [/^MpinContact_Large/, &#x27;mcL&#x27;],@@ -189,18 +194,19 @@ else {           [/^(ETT|ETS)/, &#x27;dock&#x27;],         ];         const REGIONS = [-          [0.163, 0.184, -0.105, -0.087, &#x27;wifi&#x27;],-          [0.138, 0.159, -0.126, -0.111, &#x27;usba&#x27;],-          [0.159, 0.177, -0.126, -0.111, &#x27;usbc&#x27;],-          [0.105, 0.162, -0.093, -0.070, &#x27;cm5&#x27;],-          [0.060, 0.0755, -0.1015, -0.086, &#x27;ring&#x27;],-          [0.115, 0.136, -0.124, -0.107, &#x27;mic&#x27;],-          [0.100, 0.1155, -0.127, -0.113, &#x27;bme&#x27;],-          [0.087, 0.100, -0.127, -0.113, &#x27;bmi&#x27;],-          [0.040, 0.104, -0.126, -0.100, &#x27;dock&#x27;],-          [0.018, 0.051, -0.087, -0.071, &#x27;meter&#x27;],-          [0.040, 0.090, -0.076, -0.050, &#x27;pwr&#x27;],-          [0.246, 0.267, -0.175, -0.157, &#x27;probe&#x27;],+          [0.161, 0.184, -0.101, -0.092, &#x27;wifi&#x27;],+          [0.141, 0.155, -0.122, -0.115, &#x27;usba&#x27;],+          [0.162, 0.173, -0.122, -0.116, &#x27;usbc&#x27;],+          [0.114, 0.153, -0.094, -0.070, &#x27;cm5&#x27;],+          [0.063, 0.078, -0.1005, -0.086, &#x27;ring&#x27;],+          [0.118, 0.133, -0.123, -0.108, &#x27;mic&#x27;],+          [0.106, 0.117, -0.123, -0.111, &#x27;bme&#x27;],+          [0.093, 0.105, -0.123, -0.111, &#x27;bmi&#x27;],+          [0.079, 0.108, -0.107, -0.086, &#x27;probe&#x27;],+          [0.028, 0.080, -0.135, -0.109, &#x27;dock&#x27;],+          [0.018, 0.049, -0.090, -0.074, &#x27;meter&#x27;],+          [0.027, 0.070, -0.069, -0.049, &#x27;pwr&#x27;],+          [0.094, 0.111, -0.074, -0.052, &#x27;net&#x27;],         ];         const inv = new window.BABYLON.Matrix();         const root = scene.transformNodes.concat(scene.meshes).find(n =&gt; (n.name||&#x27;&#x27;).indexOf(&#x27;control-panel_workcell&#x27;) === 0);@@ -283,7 +289,7 @@ if (typeof V === &#x27;undefined&#x27;) { wrap.remove(); } else {   try {     const viewer = V.init(wrap, { zUp: true, showViewCube: true, showGround: true });-    viewer.loadModel(&#x27;https://wiki.adom.inc/api/pages/adom/base-scaffold-control-panel/files/models/scaffold-q.glb?v=608c90f7&#x27;).then(() =&gt; {+    viewer.loadModel(&#x27;https://wiki.adom.inc/api/pages/adom/base-scaffold-control-panel/files/models/scaffold-q.glb?v=v210a&#x27;).then(() =&gt; {       viewer.frameModel();       try { if (viewer.toggleAxes) viewer.toggleAxes(&#x27;world&#x27;, false); } catch (e) {}       document.getElementById(&#x27;fb&#x27;).remove();@@ -313,55 +319,63 @@ else {          const HDR = {           mini: &#x27;RP2350A Mini (user MCU)&#x27;,-          usbc: &#x27;USB-C (J1)&#x27;,+          usbc: &#x27;USB-C&#x27;,           usb: &#x27;USB VBUS power path&#x27;,-          bulk: &#x27;VBUS bulk capacitance&#x27;,-          pwr: &#x27;Power contact field (MC1\u2013MC30)&#x27;,-          io: &#x27;USER_IO contact field (MC31\u2013MC56)&#x27;,+          id: &#x27;ID EEPROM&#x27;,+          pwr: &#x27;Power contacts (MC1–MC12, MC20–MC28)&#x27;,+          io: &#x27;USER_IO contact field (MC29–MC54)&#x27;,+          usbmc: &#x27;USB contacts (MC17–MC19)&#x27;,           led: &#x27;Power LED&#x27;,           jmp: &#x27;Rail ground bonds&#x27;,-          dock: &#x27;ET60T blade dock&#x27;,-          board: &#x27;Control Panel: Scaffold&#x27;,+          dock: &#x27;Blade dock&#x27;,+          board: &#x27;Control Panel: Scaffold V2.1.0&#x27;,         };         const T = {-          mini: [HDR.mini, &#x27;RP2350A: dual Cortex-M33 / RISC-V @ 150 MHz, 520 KB SRAM, PIO; W25Q16JV 2 MB flash. 26 USER_IO (PWM, PIO, 4\u00d7 ADC), USB 2.0 FS dual-role.&#x27;],-          miniSW: [HDR.mini, &#x27;SW1 \u2014 SKRPACE010 boot select button.&#x27;],-          miniD1: [HDR.mini, &#x27;D1 \u2014 red 0402 power LED (LCSC C130719).&#x27;],-          miniD2: [HDR.mini, &#x27;D2 \u2014 blue 0402 status LED on GPIO25 (LCSC C130724).&#x27;],-          usbc: [HDR.usbc, &#x27;G-Switch GT-USB-7090C (LCSC C3019716). USB 2.0 dual-role, power delivery 3.0 A; VBUS sourced from PS2 \u2014 PD unavailable while PS2 floats.&#x27;],-          u1: [HDR.usb, &#x27;U1 \u2014 TPS25940ARVCR smart eFuse: 2.7\u201318 V, 5 A current limit, reverse-current block on VBUS.&#x27;],-          u3: [HDR.usb, &#x27;U3 \u2014 TUSB321RWBR Type-C CC controller (attach + role detect).&#x27;],-          u4: [HDR.usb, &#x27;U4 \u2014 TPD2EUSB30DRTR 2-channel USB ESD clamp.&#x27;],-          q1: [HDR.usb, &#x27;Q1 \u2014 AO3401A P-FET: blocks VBUS back-feed in device role.&#x27;],-          rEfuse: [HDR.usb, &#x27;eFuse set resistor \u2014 UVLO / OVP / ILIM divider for the TPS25940.&#x27;],-          rCc: [HDR.usb, &#x27;CC / configuration resistor for the Type-C controller.&#x27;],-          rCd: [HDR.usb, &#x27;R11 \u2014 5.1 k\u03a9 Rd pull-down (UFP role).&#x27;],-          cDec: [HDR.usb, &#x27;100 nF decoupling.&#x27;],-          bulk: [HDR.bulk, &#x27;C5 150 \u00b5F electrolytic + C4 47 \u00b5F ceramic on the switched 5 V rail.&#x27;],-          ps1: [HDR.pwr, &#x27;PS1 \u2014 variable rail, 0\u201360 V / 12 A from dock blade P1. + and \u2212 land on medium contacts (~6.4 A each, 80% derated).&#x27;],-          ps2: [HDR.pwr, &#x27;PS2 \u2014 switched 5 V / 10 A rail from blade P2. Isolated return may float up to \u00b12.5 V unless bonded at JP2.&#x27;],-          ps3: [HDR.pwr, &#x27;PS3 \u2014 user rail from blade P3. Medium contacts, ~6.4 A each.&#x27;],-          gndmc: [HDR.io, &#x27;MC57\u2013MC65 \u2014 ground return contacts interleaved with the USER_IO rows.&#x27;],-          jp1: [HDR.jmp, &#x27;JP1 \u2014 large machine-pin jumper: bonds the PS1 return to ground. Remove to float PS1.&#x27;],-          jp2: [HDR.jmp, &#x27;JP2 \u2014 bonds the PS2 isolated return to ground; floated it may ride to \u00b12.5 V.&#x27;],-          jp3: [HDR.jmp, &#x27;JP3 \u2014 bonds the PS3 return to ground. Remove to float PS3.&#x27;],-          jp4: [HDR.jmp, &#x27;JP4 \u2014 ground bond for the USB return path.&#x27;],-          posts: [HDR.jmp, &#x27;12\u00d76 machine-pin jumper stock for the rail ground bonds.&#x27;],-          ccj: [HDR.dock, &#x27;CCJ \u2014 place when VBUS is broken out through machine pins without CC termination satisfied.&#x27;],-          led: [HDR.led, &#x27;D1 \u2014 red 0402 (LCSC C130719), scaffold power indicator.&#x27;],-          rLed: [HDR.led, &#x27;R5 \u2014 10 k\u03a9 series resistor for D1.&#x27;],-          dock: [HDR.dock, &#x27;Samtec ET60T blade set: PS1/PS2/PS3 + returns, USB 2.0, SWD/UART debug, MCU boot/reset \u2014 mates to the workcell each dock.&#x27;],+          mini: [HDR.mini, &#x27;RP2350A: dual Cortex-M33 / RISC-V @ 150 MHz, 520 KB SRAM, PIO, 2 MB flash. 26 USER_IO (PWM, PIO, 4× ADC), USB 2.0 full-speed dual-role. Programmed, reset and booted from the workcell over the dock.&#x27;],+          miniSW: [HDR.mini, &#x27;Boot select button on the RP2350A Mini.&#x27;],+          miniD1: [HDR.mini, &#x27;Red power indicator on the RP2350A Mini.&#x27;],+          miniD2: [HDR.mini, &#x27;Blue user status LED on the RP2350A Mini.&#x27;],+          usbc: [HDR.usbc, &#x27;USB 2.0 dual-role (host or device). In host role it sources 5 V VBUS from PS2 at 3.0 A; unavailable while PS2 floats.&#x27;],+          efuse: [HDR.usb, &#x27;Latching eFuse on VBUS — 3.0 A continuous, trips at 3.3 A (bench) and stays off until reset; clamps overvoltage at 5.7 V.&#x27;],+          cc: [HDR.usb, &#x27;Type-C controller — attach, orientation and host/device role detect.&#x27;],+          esd: [HDR.usb, &#x27;USB data-line ESD protection.&#x27;],+          q1: [HDR.usb, &#x27;Back-to-back VBUS blocking switch — in device role nothing back-feeds into PS2 (0 V measured at the PS2 contacts).&#x27;],+          id: [HDR.id, &#x27;Identification memory with a factory 128-bit serial number, read by the workcell over the dock — tells the dashboard which scaffold is docked.&#x27;],+          bulk: [HDR.usb, &#x27;Bulk capacitance on the switched 5 V VBUS rail.&#x27;],+          ps1: [HDR.pwr, &#x27;PS1 — variable rail, 0–60 V / 12 A: + on MC1–MC4, isolated return on MC20–MC22, bonded to ground by JP1.&#x27;],+          ps2: [HDR.pwr, &#x27;PS2 — switched 5 V / 10 A rail: + on MC5–MC8, isolated return on MC23–MC25, bonded by JP2. Floated, the return may sit up to ±2.5 V from ground.&#x27;],+          ps3: [HDR.pwr, &#x27;PS3 — spare user rail, 0–24 V / 10 A: + on MC9–MC12, isolated return on MC26–MC28, bonded by JP3.&#x27;],+          gndmc: [HDR.io, &#x27;Ground return contact (MC15, MC16, MC55–MC63).&#x27;],+          spare: [HDR.dock, &#x27;Spare signal contact — a general-purpose line from the workcell controller, through the dock.&#x27;],+          jp1: [HDR.jmp, &#x27;JP1 — large machine-pin jumper: bonds the PS1 return to ground. Remove to float PS1.&#x27;],+          jp2: [HDR.jmp, &#x27;JP2 — bonds the PS2 return to ground; floated it may ride to ±2.5 V.&#x27;],+          jp3: [HDR.jmp, &#x27;JP3 — bonds the PS3 return to ground. Remove to float PS3.&#x27;],+          jp4: [HDR.usbmc, &#x27;JP4 — USB CC override: enables VBUS at MC17 for a device without CC wiring.&#x27;],+          posts: [HDR.jmp, &#x27;12×6 machine-pin jumper stock for the rail ground bonds.&#x27;],+          ccj: [HDR.usbmc, &#x27;CC jumper — place when VBUS is broken out through machine pins without CC termination satisfied.&#x27;],+          usbmc: [HDR.usbmc, &#x27;MC17 USB VBUS, MC18 / MC19 USB D+ / D− from the RP2350A — USB at the contact field.&#x27;],+          led: [HDR.led, &#x27;Scaffold power indicator.&#x27;],+          dock: [HDR.dock, &#x27;Blade dock: PS1/PS2/PS3 + returns, 5 V and 3.3 V logic, SWD/UART debug, MCU boot/reset and the ID bus — mates to the workcell each dock.&#x27;],           ghost: [&#x27;Control Panel: Workcell (ghost)&#x27;, &#x27;The workcell half shown mated above: CM5 carrier and power-distribution hub.&#x27;],           board: [HDR.board, &#x27;User power and I/O dock board for the base scaffold.&#x27;],         };         function ioOf(mc) {+          if (mc &gt;= 1 &amp;&amp; mc &lt;= 4) return T.ps1;+          if (mc &gt;= 5 &amp;&amp; mc &lt;= 8) return T.ps2;+          if (mc &gt;= 9 &amp;&amp; mc &lt;= 12) return T.ps3;+          if (mc === 13 || mc === 14) return T.spare;+          if (mc === 15 || mc === 16 || (mc &gt;= 55 &amp;&amp; mc &lt;= 63)) return T.gndmc;+          if (mc &gt;= 17 &amp;&amp; mc &lt;= 19) return T.usbmc;+          if (mc &gt;= 20 &amp;&amp; mc &lt;= 22) return T.ps1;+          if (mc &gt;= 23 &amp;&amp; mc &lt;= 25) return T.ps2;+          if (mc &gt;= 26 &amp;&amp; mc &lt;= 28) return T.ps3;           let io = null, adc = false;-          if (mc &gt;= 31 &amp;&amp; mc &lt;= 34) { io = 29 - (mc - 31); adc = true; }-          else if (mc &gt;= 35 &amp;&amp; mc &lt;= 38) io = 25 - (mc - 35);-          else if (mc &gt;= 39 &amp;&amp; mc &lt;= 46) io = 19 - (mc - 39);-          else if (mc &gt;= 47 &amp;&amp; mc &lt;= 56) io = 9 - (mc - 47);-          if (io === null) return T.gndmc;-          return [HDR.io, &#x27;MC&#x27; + mc + &#x27; \u2192 USER_IO&#x27; + io + &#x27; \u2014 digital I/O, PWM, PIO&#x27; + (adc ? &#x27;, ADC-capable&#x27; : &#x27;&#x27;) + &#x27;. Medium contact ~6.4 A.&#x27;];+          if (mc &gt;= 29 &amp;&amp; mc &lt;= 32) { io = 29 - (mc - 29); adc = true; }+          else if (mc &gt;= 33 &amp;&amp; mc &lt;= 36) io = 25 - (mc - 33);+          else if (mc &gt;= 37 &amp;&amp; mc &lt;= 44) io = 19 - (mc - 37);+          else if (mc &gt;= 45 &amp;&amp; mc &lt;= 54) io = 9 - (mc - 45);+          if (io === null) return null;+          return [HDR.io, &#x27;MC&#x27; + mc + &#x27; → USER_IO&#x27; + io + &#x27; — 3.3 V digital I/O, PWM, PIO&#x27; + (adc ? &#x27;, ADC-capable&#x27; : &#x27;&#x27;) + &#x27;. Medium contact ~6.4 A.&#x27;];         }         const NAME_RULES = [           [/^GHOST/, &#x27;ghost&#x27;],@@ -370,38 +384,34 @@ else {           [/^(MINI_D2|mini-D2)/, &#x27;miniD2&#x27;],           [/^(U2$|Molecule_RP2350A_Mini)/, &#x27;mini&#x27;],           [/^J1$/, &#x27;usbc&#x27;],-          [/^U1$/, &#x27;u1&#x27;], [/^U3$/, &#x27;u3&#x27;], [/^U4$/, &#x27;u4&#x27;], [/^Q1$/, &#x27;q1&#x27;],-          [/^(R1|R2|R3|R4|R10)$/, &#x27;rEfuse&#x27;],-          [/^(R6|R7|R8|R9)$/, &#x27;rCc&#x27;],-          [/^R11$/, &#x27;rCd&#x27;],-          [/^R5$/, &#x27;rLed&#x27;],-          [/^(C4|C5)$/, &#x27;bulk&#x27;],-          [/^(C1|C2|C3|C6)$/, &#x27;cDec&#x27;],+          [/^U1$/, &#x27;efuse&#x27;], [/^U3$/, &#x27;cc&#x27;], [/^U4$/, &#x27;id&#x27;], [/^U5$/, &#x27;esd&#x27;], [/^Q1$/, &#x27;q1&#x27;],           [/^JP1/, &#x27;jp1&#x27;], [/^JP2/, &#x27;jp2&#x27;], [/^JP3/, &#x27;jp3&#x27;], [/^JP4/, &#x27;jp4&#x27;],           [/^(JMP|Adom_Jumper|GNDSPACER)/, &#x27;posts&#x27;],           [/^CCJ/, &#x27;ccj&#x27;],-          [/^(D1$|D1_glow|D1_cone)/, &#x27;led&#x27;],-          [/^(WIRE_MC|MC)(\d+)$/, (m) =&gt; { const k = +m[2]; return k &gt;= 57 ? T.gndmc : (k &gt;= 31 ? ioOf(k) : null); }],+          [/^(LED1$|D1_glow|D1_cone)/, &#x27;led&#x27;],+          [/^(WIRE_MC|MC)(\d+)$/, (m) =&gt; ioOf(+m[2])],           [/^(ETT|ETS|J2)/, &#x27;dock&#x27;],         ];         const REGIONS = [-          [0.1135, 0.1260, -0.0880, -0.0760, &#x27;usbc&#x27;],-          [0.1100, 0.1180, -0.0930, -0.0880, &#x27;jp4&#x27;],-          [0.0520, 0.0660, -0.0840, -0.0760, &#x27;jp1&#x27;],-          [0.0700, 0.0840, -0.0840, -0.0760, &#x27;jp2&#x27;],-          [0.0880, 0.1020, -0.0840, -0.0760, &#x27;jp3&#x27;],-          [0.0850, 0.0970, -0.1360, -0.1240, &#x27;ccj&#x27;],-          [0.0930, 0.1460, -0.0630, -0.0450, &#x27;dock&#x27;],-          [0.1220, 0.1280, -0.0710, -0.0640, &#x27;led&#x27;],-          [0.1230, 0.1370, -0.0770, -0.0610, &#x27;u1&#x27;],-          [0.1030, 0.1110, -0.0870, -0.0770, &#x27;bulk&#x27;],-          [0.1600, 0.1800, -0.0860, -0.0500, &#x27;mini&#x27;],-          [0.0430, 0.0680, -0.0950, -0.0760, &#x27;ps1&#x27;],-          [0.0680, 0.0860, -0.0950, -0.0760, &#x27;ps2&#x27;],-          [0.0860, 0.1020, -0.0950, -0.0760, &#x27;ps3&#x27;],-          [0.1020, 0.1960, -0.0950, -0.0830, &#x27;io&#x27;],+          [0.1145, 0.1250, -0.0855, -0.0790, &#x27;usbc&#x27;],+          [0.1120, 0.1160, -0.0920, -0.0865, &#x27;jp4&#x27;],+          [0.0540, 0.0640, -0.0830, -0.0775, &#x27;jp1&#x27;],+          [0.0720, 0.0820, -0.0830, -0.0775, &#x27;jp2&#x27;],+          [0.0900, 0.1000, -0.0830, -0.0775, &#x27;jp3&#x27;],+          [0.0930, 0.1450, -0.0620, -0.0320, &#x27;dock&#x27;],+          [0.1230, 0.1262, -0.0675, -0.0652, &#x27;led&#x27;],+          [0.1270, 0.1300, -0.0655, -0.0625, &#x27;efuse&#x27;],+          [0.1260, 0.1330, -0.0725, -0.0670, &#x27;q1&#x27;],+          [0.1290, 0.1315, -0.0765, -0.0745, &#x27;cc&#x27;],+          [0.1780, 0.1815, -0.0540, -0.0503, &#x27;id&#x27;],+          [0.1520, 0.1880, -0.0780, -0.0575, &#x27;mini&#x27;],+          [0.0480, 0.0660, -0.0915, -0.0775, &#x27;ps1&#x27;],+          [0.0660, 0.0840, -0.0915, -0.0775, &#x27;ps2&#x27;],+          [0.0840, 0.0960, -0.0915, -0.0775, &#x27;ps3&#x27;],+          [0.1100, 0.1222, -0.0915, -0.0865, &#x27;usbmc&#x27;],+          [0.1222, 0.1910, -0.0915, -0.0865, &#x27;io&#x27;],         ];-        T.io = [HDR.io, &#x27;26 RP2350 USER_IO lines on MC31\u2013MC56; interleaved MC57\u2013MC65 are ground returns.&#x27;];+        T.io = [HDR.io, &#x27;26 RP2350 USER_IO lines on MC29–MC54 (3.3 V, 12 mA per pin); interleaved ground returns on MC15, MC16 and MC55–MC63.&#x27;];         const inv = new window.BABYLON.Matrix();         const root = scene.transformNodes.concat(scene.meshes).find(n =&gt; (n.name||&#x27;&#x27;).indexOf(&#x27;control-panel_scaffold&#x27;) === 0);         function describe(pick) {@@ -470,62 +480,56 @@ else {  <img src="/api/pages/adom/base-scaffold-control-panel/files/docs/mated-assembly.gif" alt="Mated control panel assembly"> -<h2>Block Diagrams</h2>--<img src="/api/pages/adom/base-scaffold-control-panel/files/diagrams/workcell-block-diagram-user.png" alt="Control Panel: Workcell — Block Diagram (User)">--<img src="/api/pages/adom/base-scaffold-control-panel/files/diagrams/scaffold-block-diagram-user.png" alt="Control Panel: Scaffold — Block Diagram (User)">- <h2>Input power</h2> -<p>Four independent bench-supply input to the workcell control panel. Every rail is individually metered at 20-bit precision with <strong>INA228</strong>.</p>+<p>Four independent bench-supply inputs land on the workcell control panel. The user rails are individually metered at 20-bit precision with <strong>INA228</strong>; on the bench the meter reads within <strong>0.04 %</strong> of a reference meter across 5–60 V and drifts under 0.2 % over a 20-minute, 10 A soak.</p>  <table> <tr><th>Rail</th><th>Rating</th><th>Description</th></tr> <tr><td><strong>PS1</strong></td><td>0–60 V / 12 A</td><td>User variable power supply with full control</td></tr>-<tr><td><strong>PS2</strong></td><td>5 V / 10 A</td><td>User enabled static supply. Isolated return may float up to <strong>±2.5 V</strong> from common</td></tr>-<tr><td><strong>PS3</strong></td><td>—</td><td>User supply</td></tr>-<tr><td><strong>PS4</strong></td><td>5 V</td><td>Internal 5 V rail</td></tr>+<tr><td><strong>PS2</strong></td><td>5 V / 10 A (4.75–5.25 V)</td><td>User-enabled switched supply with soft start; also sources USB VBUS. Held 9 A for 20 minutes on the bench</td></tr>+<tr><td><strong>PS3</strong></td><td>0–24 V / 10 A</td><td>Spare user rail, passed through to the scaffold</td></tr>+<tr><td><strong>PS4</strong></td><td>5.0–5.25 V</td><td>Board supply for the workcell controller and logic; typically 0.9 A idle, 1.3 A under load</td></tr> </table> -<p>All user power supplies may be isolated by removing ground jumpers as indicated on the scaffold control panel.</p>+<p><strong>Input limits.</strong> PS2 and PS4 must not exceed <strong>5.5 V</strong>; neither input tolerates more.</p> -<p><strong>Ground scheme.</strong> Large machine-pin jumpers bond a single return-to-ground per rail (default: bridged), so each rail's grounding is an explicit, per-project choice rather than a fixed assumption.</p>+<p><strong>Isolation and ground scheme.</strong> Each user rail's return is isolated and may sit up to <strong>±2.5 V</strong> from ground when its bond is removed. Large machine-pin jumpers on the scaffold bond a single return-to-ground per rail (default: bridged), so each rail's grounding is an explicit, per-project choice rather than a fixed assumption.</p>  <h2>I/O available to the project</h2> -<p>The user is given full control of the nested <strong>RP2350A</strong>, with <strong>26 available I/O</strong> (<a href="https://wiki.adom.inc/adom/rp2350a-mini" target="_blank" rel="noopener">RP2350A Mini</a>) and <strong>USB 2.0</strong> capable of dual data roles and power delivery. Further, the workcell side of the control panel offers <strong>two USB-SS ports</strong> capable of 3.0 protocol and power delivery.</p>+<p>The user is given full control of the nested <strong>RP2350A</strong>, with <strong>26 available I/O</strong> (<a href="https://wiki.adom.inc/adom/rp2350a-mini" target="_blank" rel="noopener">RP2350A Mini</a>) and <strong>USB 2.0</strong> capable of dual data roles. Further, the workcell side of the control panel offers <strong>two USB 3.0 SuperSpeed host ports</strong>.</p> -<p><strong>Wireless.</strong> AX210-class module provides Wi-Fi 6E across all three bands (2.4 / 5 / 6 GHz) with 160 MHz channel width and 2×2 MIMO for link rates to ~2.4 Gbps, plus Bluetooth 5.3. Wi-Fi runs on PCIe and Bluetooth on USB.</p>+<p><strong>Wireless.</strong> AX210-class module provides Wi-Fi 6E across all three bands (2.4 / 5 / 6 GHz) with 160 MHz channel width and 2×2 MIMO for link rates to ~2.4 Gbps, plus Bluetooth 5.3. Wi-Fi runs on PCIe and Bluetooth on USB. Measured on the bench: <strong>636 / 815 Mbit/s</strong> over 6 GHz.</p>  <p><strong>Sensing.</strong> The panel carries on-board environmental sensing (temperature, relative humidity, barometric pressure and air quality) and 6-axis motion sensing (3-axis accelerometer + 3-axis gyroscope), both available to the project through the Control Panel Dashboard. A digital microphone is also fitted for acoustic capture.</p>  <h3>User MCU I/O</h3> -<p>26 user I/O reach the machine-contact field. Every line supports digital input/output, PWM and the MCU's programmable I/O; four are additionally analog-capable.</p>+<p>26 user I/O reach the machine-contact field at <strong>3.3 V logic</strong> (−0.3 to 3.6 V absolute, 12 mA per pin). Every line supports digital input/output, PWM and the MCU's programmable I/O; four are additionally analog-capable. All 26 lines were verified toggling at 250 kHz, full swing.</p>  <table> <tr><th>Machine contacts</th><th>User I/O</th><th>Capabilities</th></tr>-<tr><td>MC31–MC34</td><td>IO29, IO28, IO27, IO26</td><td>Digital I/O, PWM, programmable I/O, <strong>ADC (4 analog channels)</strong>, I²C / SPI / UART alternate functions</td></tr>-<tr><td>MC35–MC38</td><td>IO25, IO24, IO23, IO22</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr>-<tr><td>MC39–MC46</td><td>IO19 … IO12</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr>-<tr><td>MC47–MC56</td><td>IO9 … IO0</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr>+<tr><td>MC29–MC32</td><td>IO29, IO28, IO27, IO26</td><td>Digital I/O, PWM, programmable I/O, <strong>ADC (4 analog channels)</strong>, I²C / SPI / UART alternate functions</td></tr>+<tr><td>MC33–MC36</td><td>IO25, IO24, IO23, IO22</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr>+<tr><td>MC37–MC44</td><td>IO19 … IO12</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr>+<tr><td>MC45–MC54</td><td>IO9 … IO0</td><td>Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions</td></tr> </table>  <h3>USB</h3>  <table> <tr><th>Port</th><th>Side</th><th>Protocol</th><th>Data role</th><th>Power</th><th>Availability</th></tr>-<tr><td><strong>USB-C</strong></td><td>Scaffold (user)</td><td>USB 2.0</td><td><strong>Dual-role</strong> — host or device</td><td>Power delivery, 3.0 A; VBUS sourced from PS2</td><td><strong>PD unavailable while PS2 is floating</strong> (isolated by removing its ground jumper)</td></tr>-<tr><td><strong>USB-C</strong></td><td>Workcell</td><td>USB 3.0 SuperSpeed</td><td>Host</td><td>Power delivery, 3.0 A; VBUS sourced from PS2</td><td><strong>PD unavailable while PS2 is floating</strong></td></tr>-<tr><td><strong>USB-A</strong></td><td>Workcell</td><td>USB 3.0 SuperSpeed</td><td>Host</td><td>Power delivery; VBUS sourced from PS2</td><td><strong>PD unavailable while PS2 is floating.</strong> Its USB 2.0 lanes are muxed with Bluetooth and are <strong>mutually exclusive</strong> — USB-A is unavailable while Bluetooth is in use</td></tr>+<tr><td><strong>USB-C</strong></td><td>Scaffold (user)</td><td>USB 2.0</td><td><strong>Dual-role</strong> — host or device</td><td>5 V VBUS from PS2, <strong>3.0 A</strong>; latching eFuse trips at 3.3 A</td><td><strong>VBUS unavailable while PS2 is floating</strong> (isolated by removing its ground jumper)</td></tr>+<tr><td><strong>USB-C</strong></td><td>Workcell</td><td>USB 3.0 SuperSpeed (5 Gb/s)</td><td>Host</td><td>5 V VBUS from PS2, <strong>3.0 A</strong>; latching eFuse trips at 3.3 A</td><td><strong>VBUS unavailable while PS2 is floating</strong></td></tr>+<tr><td><strong>USB-A</strong></td><td>Workcell</td><td>USB 3.0 SuperSpeed (5 Gb/s)</td><td>Host</td><td>5 V VBUS from PS2, <strong>1.5 A</strong>; latching eFuse trips at 1.5 A</td><td><strong>VBUS unavailable while PS2 is floating.</strong> Its USB 2.0 lanes are muxed with Bluetooth and are <strong>mutually exclusive</strong> — USB-A is unavailable while Bluetooth is in use</td></tr> </table> -<p><strong>USB behavior.</strong> In host role the board sources VBUS from the switched 5 V (PS2) rail through a protected path; in device role (for example, plugged into a PC) VBUS sourcing is off and back-feed into the supply is blocked. If VBUS is broken out through machine pins and CC termination is not satisfied, the CC jumper must be placed.</p>+<p><strong>USB behavior.</strong> In host role the board sources VBUS from the switched 5 V (PS2) rail through a protected path; a latching eFuse turns the port off on overload until it is reset. In device role (for example, plugged into a PC) VBUS sourcing is off and back-feed into the supply is blocked — 0 V measured at the PS2 contacts with a PC attached. If VBUS is broken out through machine pins and CC termination is not satisfied, the CC jumper must be placed.</p>  <h2>Debug and control across the dock</h2> -<p>The dock carries the facilities needed to program and control the project's MCU without opening anything up: <strong>SWD and UART debug</strong>, plus boot and reset control of the user MCU, and low-voltage service rails. A <strong>companion dashboard application</strong> provides live control and telemetry — meter all four rails, set PS1 like a bench supply, switch rails, drive the scaffold I/O, and program the user MCU.</p>+<p>The dock carries the facilities needed to program and control the project's MCU without opening anything up: <strong>SWD and UART debug</strong>, plus boot and reset control of the user MCU, and low-voltage service rails. Bench results: SWD clean to <strong>31 MHz</strong>, UART to <strong>3 Mbaud</strong>, and boot/reset control 20 of 20 cycles. An <strong>ID EEPROM</strong> with a factory 128-bit serial number tells the workcell which scaffold is docked. A <strong>companion dashboard application</strong> provides live control and telemetry — meter the rails, set PS1 like a bench supply, switch rails, drive the scaffold I/O, and program the user MCU.</p>  <h2>Machine contacts</h2> @@ -541,9 +545,25 @@ else {  <p>Both ratings are <strong>contact-limited</strong> — the mating pin can carry more, so the contact sets the figure — and are quoted at 80 % derating for margin.</p> +<h3>Contact field map</h3>++<p>The scaffold carries 63 machine contacts.</p>++<table>+<tr><th>Machine contacts</th><th>Function</th></tr>+<tr><td>MC1–MC4 / MC20–MC22</td><td>PS1 + / isolated return (bonded by JP1)</td></tr>+<tr><td>MC5–MC8 / MC23–MC25</td><td>PS2 + / isolated return (bonded by JP2)</td></tr>+<tr><td>MC9–MC12 / MC26–MC28</td><td>PS3 + / isolated return (bonded by JP3)</td></tr>+<tr><td>MC13, MC14</td><td>Spare signals from the workcell controller</td></tr>+<tr><td>MC15, MC16, MC55–MC63</td><td>Ground</td></tr>+<tr><td>MC17</td><td>USB VBUS (JP4 enables it for a device without CC wiring)</td></tr>+<tr><td>MC18, MC19</td><td>USB D+ / D− (RP2350A)</td></tr>+<tr><td>MC29–MC54</td><td>USER_IO, see above</td></tr>+</table>+ <h2>Environmental</h2> -<p>The base scaffold and its control panel operate in a <strong>controlled 20 – 25 °C</strong> environment.</p>+<p>The base scaffold and its control panel operate in a <strong>controlled 20 – 25 °C</strong> environment. The workcell electronics are rated <strong>−20 to +70 °C</strong>.</p>  <p>On-board sensing spans a considerably wider envelope:</p> 
README.md+37−48
@@ -4,6 +4,8 @@ The control panel is the electrical front door of the Base Scaffold System: it c  It is a two-board pair that mate at a blade dock. One half stays with the workcell, the other rides on the base scaffold with the project. +**Current revision:** Control Panel: Workcell V2.1.0 and Control Panel: Scaffold V2.1.0. Every function on this page was exercised on the bench in the V2.1.0 test campaign; measured values are quoted where they matter.+ ## The Pair  | Half | Role |@@ -15,91 +17,63 @@ It is a two-board pair that mate at a blade dock. One half stays with the workce  ![Control panel — workcell side](diagrams/viewer-workcell.png) - ### Scaffold side  ![Control panel — scaffold side](diagrams/viewer-scaffold.png) - ### Mated — how the pair comes together  The two halves mate coplanar at the blade dock, with the project's molecules, jumpers and wires dropping into place:  ![Mated control panel assembly](docs/mated-assembly.gif) -## Block Diagrams--![Control Panel: Workcell — Block Diagram (User)](diagrams/workcell-block-diagram-user.png)--![Control Panel: Scaffold — Block Diagram (User)](diagrams/scaffold-block-diagram-user.png)- ## Input power -Four independent bench-supply input to the workcell control panel. Every rail is-individually metered at 20-bit precision with **INA228**.+Four independent bench-supply inputs land on the workcell control panel. The user rails are individually metered at 20-bit precision with **INA228**; on the bench the meter reads within **0.04 %** of a reference meter across 5–60 V and drifts under 0.2 % over a 20-minute, 10 A soak.  | Rail | Rating | Description | |---|---|---| | **PS1** | 0–60 V / 12 A | User variable power supply with full control |-| **PS2** | 5 V / 10 A | User enabled static supply. Isolated return may float up to **±2.5 V** from common |-| **PS3** | — | User supply |-| **PS4** | 5 V | Internal 5 V rail |+| **PS2** | 5 V / 10 A (4.75–5.25 V) | User-enabled switched supply with soft start; also sources USB VBUS. Held 9 A for 20 minutes on the bench |+| **PS3** | 0–24 V / 10 A | Spare user rail, passed through to the scaffold |+| **PS4** | 5.0–5.25 V | Board supply for the workcell controller and logic; typically 0.9 A idle, 1.3 A under load | -All user power supplies may be isolated by removing ground jumpers as indicated on the-scaffold control panel.+**Input limits.** PS2 and PS4 must not exceed **5.5 V**; neither input tolerates more. -**Ground scheme.** Large machine-pin jumpers bond a single return-to-ground per rail-(default: bridged), so each rail's grounding is an explicit, per-project choice rather than-a fixed assumption.+**Isolation and ground scheme.** Each user rail's return is isolated and may sit up to **±2.5 V** from ground when its bond is removed. Large machine-pin jumpers on the scaffold bond a single return-to-ground per rail (default: bridged), so each rail's grounding is an explicit, per-project choice rather than a fixed assumption.  ## I/O available to the project -The user is given full control of the nested **RP2350A**, with **26 available I/O**-([RP2350A Mini](https://wiki.adom.inc/adom/rp2350a-mini)) and **USB 2.0** capable of dual-data roles and power delivery. Further, the workcell side of the control panel offers-**two USB-SS ports** capable of 3.0 protocol and power delivery.+The user is given full control of the nested **RP2350A**, with **26 available I/O** ([RP2350A Mini](https://wiki.adom.inc/adom/rp2350a-mini)) and **USB 2.0** capable of dual data roles. Further, the workcell side of the control panel offers **two USB 3.0 SuperSpeed host ports**. -**Wireless.** AX210-class module provides Wi-Fi 6E across all three bands (2.4 / 5 / 6 GHz)-with 160 MHz channel width and 2×2 MIMO for link rates to ~2.4 Gbps, plus Bluetooth 5.3.-Wi-Fi runs on PCIe and Bluetooth on USB.+**Wireless.** AX210-class module provides Wi-Fi 6E across all three bands (2.4 / 5 / 6 GHz) with 160 MHz channel width and 2×2 MIMO for link rates to ~2.4 Gbps, plus Bluetooth 5.3. Wi-Fi runs on PCIe and Bluetooth on USB. Measured on the bench: **636 / 815 Mbit/s** over 6 GHz. -**Sensing.** The panel carries on-board environmental sensing (temperature, relative-humidity, barometric pressure and air quality) and 6-axis motion sensing (3-axis-accelerometer + 3-axis gyroscope), both available to the project through the Control Panel-Dashboard. A digital microphone is also fitted for acoustic capture.+**Sensing.** The panel carries on-board environmental sensing (temperature, relative humidity, barometric pressure and air quality) and 6-axis motion sensing (3-axis accelerometer + 3-axis gyroscope), both available to the project through the Control Panel Dashboard. A digital microphone is also fitted for acoustic capture.  ### User MCU I/O -26 user I/O reach the machine-contact field. Every line supports digital input/output, PWM-and the MCU's programmable I/O; four are additionally analog-capable.+26 user I/O reach the machine-contact field at **3.3 V logic** (−0.3 to 3.6 V absolute, 12 mA per pin). Every line supports digital input/output, PWM and the MCU's programmable I/O; four are additionally analog-capable. All 26 lines were verified toggling at 250 kHz, full swing.  | Machine contacts | User I/O | Capabilities | |---|---|---|-| MC31–MC34 | IO29, IO28, IO27, IO26 | Digital I/O, PWM, programmable I/O, **ADC (4 analog channels)**, I²C / SPI / UART alternate functions |-| MC35–MC38 | IO25, IO24, IO23, IO22 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |-| MC39–MC46 | IO19 … IO12 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |-| MC47–MC56 | IO9 … IO0 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |+| MC29–MC32 | IO29, IO28, IO27, IO26 | Digital I/O, PWM, programmable I/O, **ADC (4 analog channels)**, I²C / SPI / UART alternate functions |+| MC33–MC36 | IO25, IO24, IO23, IO22 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |+| MC37–MC44 | IO19 … IO12 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |+| MC45–MC54 | IO9 … IO0 | Digital I/O, PWM, programmable I/O, I²C / SPI / UART alternate functions |  ### USB  | Port | Side | Protocol | Data role | Power | Availability | |---|---|---|---|---|---|-| **USB-C** | Scaffold (user) | USB 2.0 | **Dual-role** — host or device | Power delivery, 3.0 A; VBUS sourced from PS2 | **PD unavailable while PS2 is floating** (isolated by removing its ground jumper) |-| **USB-C** | Workcell | USB 3.0 SuperSpeed | Host | Power delivery, 3.0 A; VBUS sourced from PS2 | **PD unavailable while PS2 is floating** |-| **USB-A** | Workcell | USB 3.0 SuperSpeed | Host | Power delivery; VBUS sourced from PS2 | **PD unavailable while PS2 is floating.** Its USB 2.0 lanes are muxed with Bluetooth and are **mutually exclusive** — USB-A is unavailable while Bluetooth is in use |+| **USB-C** | Scaffold (user) | USB 2.0 | **Dual-role** — host or device | 5 V VBUS from PS2, **3.0 A**; latching eFuse trips at 3.3 A | **VBUS unavailable while PS2 is floating** (isolated by removing its ground jumper) |+| **USB-C** | Workcell | USB 3.0 SuperSpeed (5 Gb/s) | Host | 5 V VBUS from PS2, **3.0 A**; latching eFuse trips at 3.3 A | **VBUS unavailable while PS2 is floating** |+| **USB-A** | Workcell | USB 3.0 SuperSpeed (5 Gb/s) | Host | 5 V VBUS from PS2, **1.5 A**; latching eFuse trips at 1.5 A | **VBUS unavailable while PS2 is floating.** Its USB 2.0 lanes are muxed with Bluetooth and are **mutually exclusive** — USB-A is unavailable while Bluetooth is in use | -**USB behavior.** In host role the board sources VBUS from the switched 5 V (PS2) rail-through a protected path; in device role (for example, plugged into a PC) VBUS sourcing is-off and back-feed into the supply is blocked. If VBUS is broken out through machine pins and-CC termination is not satisfied, the CC jumper must be placed.+**USB behavior.** In host role the board sources VBUS from the switched 5 V (PS2) rail through a protected path; a latching eFuse turns the port off on overload until it is reset. In device role (for example, plugged into a PC) VBUS sourcing is off and back-feed into the supply is blocked — 0 V measured at the PS2 contacts with a PC attached. If VBUS is broken out through machine pins and CC termination is not satisfied, the CC jumper must be placed.  ## Debug and control across the dock -The dock carries the facilities needed to program and control the project's MCU without-opening anything up: **SWD and UART debug**, plus boot and reset control of the user MCU,-and low-voltage service rails. A **companion dashboard application** provides live control-and telemetry — meter all four rails, set PS1 like a bench supply, switch rails, drive the-scaffold I/O, and program the user MCU.+The dock carries the facilities needed to program and control the project's MCU without opening anything up: **SWD and UART debug**, plus boot and reset control of the user MCU, and low-voltage service rails. Bench results: SWD clean to **31 MHz**, UART to **3 Mbaud**, and boot/reset control 20 of 20 cycles. An **ID EEPROM** with a factory 128-bit serial number tells the workcell which scaffold is docked. A **companion dashboard application** provides live control and telemetry — meter the rails, set PS1 like a bench supply, switch rails, drive the scaffold I/O, and program the user MCU.  ## Machine contacts @@ -117,9 +91,24 @@ needle, or a bare solid-core wire. Both ratings are **contact-limited** — the mating pin can carry more, so the contact sets the figure — and are quoted at 80 % derating for margin. +### Contact field map++The scaffold carries 63 machine contacts.++| Machine contacts | Function |+|---|---|+| MC1–MC4 / MC20–MC22 | PS1 + / isolated return (bonded by JP1) |+| MC5–MC8 / MC23–MC25 | PS2 + / isolated return (bonded by JP2) |+| MC9–MC12 / MC26–MC28 | PS3 + / isolated return (bonded by JP3) |+| MC13, MC14 | Spare signals from the workcell controller |+| MC15, MC16, MC55–MC63 | Ground |+| MC17 | USB VBUS (JP4 enables it for a device without CC wiring) |+| MC18, MC19 | USB D+ / D− (RP2350A) |+| MC29–MC54 | USER_IO, see above |+ ## Environmental -The base scaffold and its control panel operate in a **controlled 20 – 25 °C** environment.+The base scaffold and its control panel operate in a **controlled 20 – 25 °C** environment. The workcell electronics are rated **−20 to +70 °C**.  On-board sensing spans a considerably wider envelope: 
models/scaffold-q.glb
⋯ 1 unchanged line ⋯
models/workcell-q.glb
⋯ 1 unchanged line ⋯