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.
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.