Gallery › robotparts › 1-DOF rack wiring

1-DOF rack wiring

The parts of BAM's one-DoF test rack as a graph: the supply, regen clamp and XT30 junction feed the two moteus boards, the fdcanusb and PH-3 junction carry CAN to them, each board drives its motor, and the D405 sits beside it. Power, CAN and phase wires each keep their own colour; click a part for its ports, cables, Splice's voltage and current at load, and its findings.

robotpartsgraphtable4 views of one rack.json

The .base file and its data

Every tab above is one entry of this file; the views read these rows. ⋯ in the toolbar copies the current view as YAML.

# The 1-DOF rack's wiring: robotparts' Splice proof as rows (parts) plus edges (wires). Obsidian Bases grammar plus
# data-ui's graph keys (docs/CONTRACT.md §5). Check it: node bin/data-ui.mjs check <this file>
data: rack.json
properties:
  name: { displayName: Part }
  role: { displayName: Role }
  feeds: { displayName: Wires to }
  wire: { displayName: Carries }
views:
  - type: graph
    name: Wiring
    edges: { property: feeds, label: wire }
    layout: { algorithm: dagre, direction: LR }
    groupBy: { property: role, direction: ASC }
    groupOrder: [Power, CAN, Boards, Motors, Sensing]
    order: [model, v_load, current]
  - type: graph
    name: Power path
    filters: 'role != "CAN"'
    edges: { property: feeds, label: wire }
    layout: { algorithm: dagre, direction: TB }
    order: [v_load, current]
  - type: graph
    name: Flat
    edges: { property: feeds, label: wire }
    layout: { algorithm: dagre, direction: LR }
    order: [maker, model]
  - type: table
    name: Parts
    order: [name, role, kind, maker, model, v_load, current, feeds, wire, findings]
    groupBy: { property: role, direction: ASC }
    groupOrder: [Power, CAN, Boards, Motors, Sensing]
// rack.json: 10 rows, 10 KB; the first 3
{
 "id": "rack-wiring",
 "title": "1-DOF rack wiring",
 "titleProperty": "name",
 "linkProperty": "url",
 "source": "robotparts reports/media/rack/rack.splice.json + rack-analysis.json (release 2026.10.22.2, Splice engine @ 93b27023 (rack-analysis.json))",
 "properties": {
  "name": {
   "type": "text",
   "label": "Part",
   "width": 240
  },
  "role": {
   "type": "text",
   "label": "Role",
   "display": "badge",
   "colors": {
    "Power": 8,
    "CAN": 1,
    "Boards": 7,
    "Motors": 4,
    "Sensing": 3
   }
  },
  "kind": {
   "type": "text",
   "label": "Kind"
  },
  "maker": {
   "type": "text",
   "label": "Maker"
  },
  "model": {
   "type": "text",
   "label": "Model"
  },
  "category": {
   "type": "text",
   "label": "Category",
   "hidden": true
  },
  "part": {
   "type": "text",
   "label": "robotparts id",
   "hidden": true
  },
  "url": {
   "type": "text",
   "label": "robotparts.dev",
   "hidden": true
  },
  "ports": {
   "type": "list",
   "label": "Ports"
  },
  "v_load": {
   "type": "number",
   "label": "V at load",
   "unitText": "V",
   "decimals": 2
  },
  "current": {
   "type": "number",
   "label": "Current",
   "unitText": "A",
   "decimals": 2
  },
  "findings": {
   "type": "list",
   "label": "Splice findings"
  },
  "feeds": {
   "type": "list",
   "label": "Wires to",
   "readOnly": true
  },
  "wire": {
   "type": "list",
   "label": "Carries",
   "colors": {
    "power": 8,
    "CAN": 1,
    "phases": 4
   },
   "readOnly": true
  },
  "cables": {
   "type": "list",
   "label": "Cables"
  }
 },
 "rows": [
  {
   "id": "psu",
   "name": "CNCTOPBAOS 600 W 36 V supply",
   "role": "Power",
   "kind": "psu",
   "part": "acaproto-cnctopbaos-36v-600w-adj",
   "maker": "CNCTOPBAOS",
   "model": "CNCTOPBAOS 600W 36V",
   "category": "psu",
   "url": "https://robotparts.dev/psu/acaproto-cnctopbaos-36v-600w-adj/",
   "ports": [
    "dc_out (power, screw-terminal)"
   ],
   "v_load": {
    "value": 36,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario"
   },
   "current": {
    "value": 12.31,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario: load, pass-through or supply current"
   },
   "findings": [
    "warning: psu supplies 22.8 A in Peak (half the loads at peak at once) — rated 16.6 A (137.5 %).",
    "info: psu publishes no over-voltage trip window, so its fail-high ceiling over the boards' maximum is unknown."
   ],
   "feeds": [
    "clamp"
   ],
   "wire": [
    "power"
   ],
   "cables": [
    "p_psu: dc_out -> clamp.dc_in, 16 AWG, 1 m (assumed)"
   ]
  },
  {
   "id": "clamp",
   "name": "ODrive Regen Clamp",
   "role": "Power",
   "kind": "clamp",
   "part": "odrive-regen-clamp",
   "maker": "ODrive Robotics",
   "model": "Regen Clamp",
   "category": "power",
   "url": "https://robotparts.dev/power/odrive-regen-clamp/",
   "ports": [
    "dc_in (power, screw-terminal)",
    "dc_out (power, screw-terminal)"
   ],
   "v_load": {
    "value": 35.65,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario"
   },
   "current": {
    "value": 12.31,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario: load, pass-through or supply current"
   },
   "findings": [
    "warning: 22.8 A passes through clamp — its pass-through is rated 20 A in Peak (half the loads at peak at once)."
   ],
   "feeds": [
    "xt30_junction"
   ],
   "wire": [
    "power"
   ],
   "cables": [
    "p_clamp: dc_out -> xt30_junction.xt30_a, 16 AWG, 0.3 m (assumed)"
   ]
  },
  {
   "id": "xt30_junction",
   "name": "mjbots XT30 junction",
   "role": "Power",
   "kind": "splice",
   "part": "mjbots-xt30-junction",
   "maker": "mjbots",
   "model": "XT30 Junction PCB",
   "category": "connector",
   "url": "https://robotparts.dev/connector/mjbots-xt30-junction/",
   "ports": [
    "xt30_a (power, xt30)",
    "xt30_b (power, xt30)",
    "xt30_c (power, xt30)"
   ],
   "v_load": {
    "value": 35.48,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario"
   },
   "current": {
    "value": 12.31,
    "basis": "derived",
    "source": "Splice engine @ 93b27023 (rack-analysis.json)",
    "note": "continuous scenario: load, pass-through or supply current"
   },
   "findings": [
    "warning: 12.3 A through the XT30 on xt30_junction.xt30_a — rated 15 A continuous in Continuous.",
    "warning: 22.8 A passes through xt30_junction — its pass-through is rated 15 A in Peak (half the loads at peak at once)."
   ],
   "feeds": [
    "r4_11",
    "c1"
   ],
   "wire": [
    "power",
    "power"
   ],
   "cables": [
    "p_r4: xt30_b -> r4_11.power_a, 16 AWG, 0.5 m (assumed)",
    "p_c1: xt30_c -> c1.power, 18 AWG, 0.5 m (assumed)"
   ]
  }
 ]
}
README.md
# 1-DOF rack wiring

The parts of BAM's one-DoF test rack as a graph: the supply, regen clamp and XT30 junction feed the two moteus
boards, the fdcanusb and PH-3 junction carry CAN to them, each board drives its motor, and the D405 sits beside it.
Power, CAN and phase wires each keep their own colour; click a part for its ports, cables, Splice's voltage and
current at load, and its findings.

- **App:** robotparts
- **Replaces:** Splice's hand-drawn rack canvas (robotparts `reports/media/rack/splice-rack-2026-10-22.png`) for
  browsing the wiring. Not its analysis: the voltages, currents and findings here are Splice's own results, copied.
- **Shows:** the graph view (React Flow + dagre) with `edges: {property: feeds, label: wire}`, `groupBy` as
  subflows (Power, CAN, Boards, Motors, Sensing), a top-to-bottom power path from a filter, edge colours from the
  `wire` column's `colors`, rich cells (derived V and A with their source) on the node cards, and the same rows as
  a table. In a part's peek, "Wires to" links to the parts it feeds: follow them and the peek keeps the trail
  (supply › regen clamp › XT30 junction), as Notion's side peek does.
- **Data:** `rack.json`, written by `source/build.py` from robotparts' `rack.splice.json` and `rack-analysis.json`
  (target layout, release 2026.10.22.2, Splice engine @ 93b27023). The motors come from the analysis's
  `rack.motors`; the D405 has no wire because none is recorded.

The original UI it replaces

Splice's hand-drawn rack canvas (robotparts reports/media/rack/splice-rack-2026-10-22.png) for browsing the wiring. Not its analysis: the voltages, currents and findings here are Splice's own results, copied.

What it shows

the graph view (React Flow + dagre) with edges: {property: feeds, label: wire}, groupBy as subflows (Power, CAN, Boards, Motors, Sensing), a top-to-bottom power path from a filter, edge colours from the wire column's colors, rich cells (derived V and A with their source) on the node cards, and the same rows as a table. In a part's peek, "Wires to" links to the parts it feeds: follow them and the peek keeps the trail (supply › regen clamp › XT30 junction), as Notion's side peek does.

Data

rack.json, written by source/build.py from robotparts' rack.splice.json and rack-analysis.json (target layout, release 2026.10.22.2, Splice engine @ 93b27023). The motors come from the analysis's rack.motors; the D405 has no wire because none is recorded.