techmannih/nema34-mounted-stepper-controller
A 48 V USB‑C PD 3.1 EPR NEMA‑34 stepper controller PCB combining STM32/TMC5160 control, external MOSFET motor bridges, protected power and regenerative braking, USB data, telemetry, diagnostics, status LEDs, and buzzer alarms.
- Version
- 0.3.92
- License
- unset
- Stars
- 1
docs/checks/source-schematic.json
{
"generated_at": "2026-10-15T22:58:43.223Z",
"input": {
"path": "dist/index/circuit.json",
"sha256": "999b1d0370187bfe344e3491a3ad159e1495d6008c3f1c762bb9c79785c2a997",
"bytes": 4481278
},
"result": "PASS",
"failures": [],
"counts": {
"elements": 10174,
"sheets": 24,
"source_components": 277,
"source_ports": 965,
"connected_source_ports": 914,
"intentional_no_connect_ports": 51,
"source_nets": 163,
"minimum_ports_per_connected_net": 2,
"capacitors": 89,
"test_points": 19,
"annotations": 72,
"frame_point_violations": 0,
"frame_extent_violations": 0
},
"net_port_histogram": {
"2": 62,
"3": 61,
"4": 16,
"5": 4,
"6": 2,
"8": 2,
"9": 2,
"10": 3,
"12": 4,
"13": 2,
"18": 1,
"25": 1,
"43": 1,
"59": 1,
"228": 1
},
"usb_c": {
"connectors": [
"J1",
"J10"
],
"j1_pins": [
{
"pin": 1,
"name": "EH1",
"net": "GND"
},
{
"pin": 2,
"name": "EH2",
"net": "GND"
},
{
"pin": 3,
"name": "EH3",
"net": "GND"
},
{
"pin": 4,
"name": "EH4",
"net": "GND"
},
{
"pin": 5,
"name": "GND1",
"net": "GND"
},
{
"pin": 6,
"name": "GND2",
"net": "GND"
},
{
"pin": 7,
"name": "VBUS",
"net": "PD_VBUS"
},
{
"pin": 8,
"name": "VBUS2",
"net": "PD_VBUS"
},
{
"pin": 9,
"name": "CC2",
"net": "CC2_CONN"
},
{
"pin": 10,
"name": "SBU1",
"net": "NC"
},
{
"pin": 11,
"name": "DP2",
"net": "NC"
},
{
"pin": 12,
"name": "DM",
"net": "NC"
},
{
"pin": 13,
"name": "DP",
"net": "NC"
},
{
"pin": 14,
"name": "DN2",
"net": "NC"
},
{
"pin": 15,
"name": "CC1",
"net": "CC1_CONN"
},
{
"pin": 16,
"name": "SBU2",
"net": "NC"
},
{
"pin": 17,
"name": "VBUS3",
"net": "PD_VBUS"
},
{
"pin": 18,
"name": "VBUS4",
"net": "PD_VBUS"
},
{
"pin": 19,
"name": "GND3",
"net": "GND"
},
{
"pin": 20,
"name": "GND4",
"net": "GND"
}
],
"verified_chain": [
{
"ref": "J1",
"pin": 7,
"net": "PD_VBUS"
},
{
"ref": "J1",
"pin": 8,
"net": "PD_VBUS"
},
{
"ref": "J1",
"pin": 17,
"net": "PD_VBUS"
},
{
"ref": "J1",
"pin": 18,
"net": "PD_VBUS"
},
{
"ref": "J1",
"pin": 15,
"net": "CC1_CONN"
},
{
"ref": "J1",
"pin": 9,
"net": "CC2_CONN"
},
{
"ref": "J10",
"pin": 11,
"net": "USB_DP_CONN"
},
{
"ref": "J10",
"pin": 13,
"net": "USB_DP_CONN"
},
{
"ref": "J10",
"pin": 12,
"net": "USB_DM_CONN"
},
{
"ref": "J10",
"pin": 14,
"net": "USB_DM_CONN"
},
{
"ref": "U1",
"pin": 20,
"net": "PD_VBUS"
},
{
"ref": "U1",
"pin": 19,
"net": "VBUS_LV"
},
{
"ref": "U1",
"pin": 4,
"net": "CC1_CONN"
},
{
"ref": "U1",
"pin": 7,
"net": "CC1_CONN"
},
{
"ref": "U1",
"pin": 12,
"net": "CC1_PD"
},
{
"ref": "U2",
"pin": 24,
"net": "CC1_PD"
},
{
"ref": "U1",
"pin": 5,
"net": "CC2_CONN"
},
{
"ref": "U1",
"pin": 6,
"net": "CC2_CONN"
},
{
"ref": "U1",
"pin": 11,
"net": "CC2_PD"
},
{
"ref": "U2",
"pin": 25,
"net": "CC2_PD"
},
{
"ref": "D15",
"pin": 1,
"net": "USB_DP_CONN"
},
{
"ref": "R71",
"pin": 1,
"net": "USB_DP_CONN"
},
{
"ref": "R71",
"pin": 2,
"net": "USB_DP"
},
{
"ref": "U16",
"pin": 34,
"net": "USB_DP"
},
{
"ref": "D15",
"pin": 3,
"net": "USB_DM_CONN"
},
{
"ref": "R72",
"pin": 1,
"net": "USB_DM_CONN"
},
{
"ref": "R72",
"pin": 2,
"net": "USB_DM"
},
{
"ref": "U16",
"pin": 33,
"net": "USB_DM"
},
{
"ref": "J10",
"pin": 7,
"net": "USB_DATA_VBUS"
},
{
"ref": "J10",
"pin": 8,
"net": "USB_DATA_VBUS"
},
{
"ref": "J10",
"pin": 17,
"net": "USB_DATA_VBUS"
},
{
"ref": "J10",
"pin": 18,
"net": "USB_DATA_VBUS"
},
{
"ref": "J10",
"pin": 15,
"net": "DATA_CC1"
},
{
"ref": "J10",
"pin": 9,
"net": "DATA_CC2"
},
{
"ref": "R105",
"pin": 1,
"net": "DATA_CC1"
},
{
"ref": "R106",
"pin": 1,
"net": "DATA_CC2"
},
{
"ref": "R105",
"pin": 2,
"net": "GND"
},
{
"ref": "R106",
"pin": 2,
"net": "GND"
},
{
"ref": "R107",
"pin": 1,
"net": "USB_DATA_VBUS"
},
{
"ref": "U22",
"pin": 2,
"net": "VMOTOR"
},
{
"ref": "U6",
"pin": 5,
"net": "PD_VBUS"
},
{
"ref": "Q4",
"pin": 1,
"net": "PD_VBUS"
},
{
"ref": "Q4",
"pin": 5,
"net": "EFUSE_IN"
}
]
},
"intentional_no_connects": [
"J1.10:SBU1",
"J1.11:DP2",
"J1.12:DM",
"J1.13:DP",
"J1.14:DN2",
"J1.16:SBU2",
"J10.10:SBU1",
"J10.16:SBU2",
"U1.1:DP",
"U1.2:DM",
"U16.13:PA2",
"U16.14:PA3",
"U16.22:PB10",
"U16.25:PB13",
"U16.26:PB14",
"U16.27:PB15",
"U16.29:PA9",
"U16.2:PC14_OSC32_IN",
"U16.31:PC7",
"U16.32:PA10",
"U16.38:PD0",
"U16.39:PD1",
"U16.3:PC15_OSC32_OUT",
"U16.40:PD2",
"U16.41:PD3",
"U18.10:U",
"U18.8:W",
"U18.9:V",
"U2.10:N_I2Ct_IRQ",
"U2.21:NC",
"U2.28:PP5V1",
"U2.29:PP5V2",
"U23.4:NC",
"U24.4:NC",
"U25.4:NC",
"U26.4:NC",
"U27.4:NC",
"U28.4:FAULT",
"U30.2:ALERT",
"U31.4:NC",
"U32.4:NC",
"U34.4:PG",
"U35.13:N_INT",
"U37.1:NC",
"U6.11:MODE",
"U6.19:N_C6",
"U6.20:N_C5",
"U6.21:N_C4",
"U6.22:N_C3",
"U6.23:N_C2",
"U6.24:N_C1"
],
"test_points": [
{
"ref": "TP_SWD_3V3",
"net": "V3V3_MCU",
"total_ports_on_net": 12,
"non_testpoint_peers": 11
},
{
"ref": "TP_SWDIO",
"net": "SWDIO",
"total_ports_on_net": 2,
"non_testpoint_peers": 1
},
{
"ref": "TP_SWD_GND",
"net": "GND",
"total_ports_on_net": 228,
"non_testpoint_peers": 224
},
{
"ref": "TP_SWCLK",
"net": "SWCLK",
"total_ports_on_net": 2,
"non_testpoint_peers": 1
},
{
"ref": "TP_NRST",
"net": "NRST",
"total_ports_on_net": 5,
"non_testpoint_peers": 4
},
{
"ref": "TP_STATUS",
"net": "STATUS_GPIO",
"total_ports_on_net": 4,
"non_testpoint_peers": 3
},
{
"ref": "TP_ENC_3V3",
"net": "V3V3",
"total_ports_on_net": 59,
"non_testpoint_peers": 58
},
{
"ref": "TP_ENC_A",
"net": "ENC_A",
"total_ports_on_net": 2,
"non_testpoint_peers": 1
},
{
"ref": "TP_ENC_B",
"net": "ENC_B",
"total_ports_on_net": 2,
"non_testpoint_peers": 1
},
{
"ref": "TP_ENC_I",
"net": "ENC_I",
"total_ports_on_net": 2,
"non_testpoint_peers": 1
},
{
"ref": "TP_ENC_GND",
"net": "GND",
"total_ports_on_net": 228,
"non_testpoint_peers": 224
},
{
"ref": "TP_PD_VREF",
"net": "PD_3V3",
"total_ports_on_net": 25,
"non_testpoint_peers": 24
},
{
"ref": "TP_PD_GND",
"net": "GND",
"total_ports_on_net": 228,
"non_testpoint_peers": 224
},
{
"ref": "TP_EEP_SDA",
"net": "EEP_PROG_SDA",
"total_ports_on_net": 4,
"non_testpoint_peers": 3
},
{
"ref": "TP_EEP_SCL",
"net": "EEP_PROG_SCL",
"total_ports_on_net": 4,
"non_testpoint_peers": 3
},
{
"ref": "TP_PD_ISO",
"net": "EEP_LINK_EN",
"total_ports_on_net": 4,
"non_testpoint_peers": 3
},
{
"ref": "TP_PD_VBUS",
"net": "PD_VBUS",
"total_ports_on_net": 18,
"non_testpoint_peers": 17
},
{
"ref": "TP_VMOTOR",
"net": "VMOTOR",
"total_ports_on_net": 43,
"non_testpoint_peers": 42
},
{
"ref": "TP_PWR_GND",
"net": "GND",
"total_ports_on_net": 228,
"non_testpoint_peers": 224
}
],
"sheets": [
{
"index": 1,
"name": "usb-pd",
"display_name": "USB-C PD POWER",
"frame": [
297,
210
],
"annotations": [
"01 / USB-C PD POWER",
"J1: 48 V / 5 A EPR power only; USB DATA is on J10.",
"U1 protects CC/VBUS. Q1 controls protected VBUS; C1/C2 provide local bypass."
]
},
{
"index": 2,
"name": "usb-pd-policy",
"display_name": "PD Controller and EEPROM",
"frame": [
297,
210
],
"annotations": [
"02 / PD Controller and EEPROM",
"U2 TPS26750 negotiates EPR; U3 stores the board-specific TI configuration.",
"Q2/Q3 translate PD path control. TI image and powered qualification remain required."
]
},
{
"index": 3,
"name": "logic-power",
"display_name": "PD Backup Supply",
"frame": [
297,
210
],
"annotations": [
"03 / PD Backup Supply",
"U5 converts PD VBUS to V3V3_PD; L1 and its feedback/bypass network are shown here.",
"Input spans default USB 5 V through the specified 48 V EPR operating target."
]
},
{
"index": 4,
"name": "logic-backup",
"display_name": "Motor Backup Supply",
"frame": [
297,
210
],
"annotations": [
"04 / Motor Backup Supply",
"U22 converts VMOTOR to V3V3_MOTOR for brake-control backup after PD loss.",
"L2, feedback and local bypass remain on the motor supply domain."
]
},
{
"index": 5,
"name": "logic-selection",
"display_name": "Logic Supply Selection and Power Permit",
"frame": [
297,
210
],
"annotations": [
"05 / Logic Supply Selection and Power Permit",
"U23/U24 and R111 form the status-interlocked reverse-blocked board supply.",
"U4 combines PD path status with POWER_PERMIT to control the eFuse enable."
]
},
{
"index": 6,
"name": "motor-power",
"display_name": "Protected 48 V Motor Bus",
"frame": [
297,
210
],
"annotations": [
"06 / Protected 48 V Motor Bus",
"Q4/Q5 provide reverse blocking; U6 is the eFuse and input-current monitor.",
"Nominal 1x current limit 3.607 A. C22/C23 are motor bulk; R31-R33/C24 monitor voltage."
]
},
{
"index": 7,
"name": "motion",
"display_name": "Motion Controller",
"frame": [
297,
210
],
"annotations": [
"07 / Motion Controller",
"U7 TMC5160A drives the external bridges; nominal regulated driver supply is 12 V.",
"Bootstrap, charge-pump and local bypass parts are shown with the controller."
]
},
{
"index": 8,
"name": "motion-enable",
"display_name": "Onboard Motion and Hardware Enable",
"frame": [
297,
210
],
"annotations": [
"08 / Onboard Motion and Hardware Enable",
"STM32 commands U7 over SPI. U10/U11/U33 and Q14 retain hardware inhibits.",
"The driver remains inhibited until the hardware safety conditions permit motion."
]
},
{
"index": 9,
"name": "bridge-a",
"display_name": "Motor Phase A Power Bridge",
"frame": [
297,
210
],
"annotations": [
"09 / Motor Phase A Power Bridge",
"Q6/Q8 high-side and Q7/Q9 low-side switches form phase A; R109 is the Kelvin shunt.",
"J2 connects both motor windings. The 3.8 A RMS design ceiling is not a qualified setting."
]
},
{
"index": 10,
"name": "bridge-b",
"display_name": "Motor Phase B Power Bridge",
"frame": [
297,
210
],
"annotations": [
"10 / Motor Phase B Power Bridge",
"Q10/Q12 high-side and Q11/Q13 low-side switches form phase B.",
"R110 is the independent 33 mOhm shunt; preserve the Kelvin sense connections."
]
},
{
"index": 11,
"name": "brake",
"display_name": "Brake Reference and Turn-on Threshold",
"frame": [
297,
210
],
"annotations": [
"11 / Brake Reference and Turn-on Threshold",
"U12 is the 2.5 V reference. U13 commands braking at nominal 52.0 V.",
"External braking resistor and heatsink sizing depends on stored mechanical energy."
]
},
{
"index": 12,
"name": "brake-ovp",
"display_name": "Overvoltage Inhibit and Brake Driver",
"frame": [
297,
210
],
"annotations": [
"12 / Overvoltage Inhibit and Brake Driver",
"U14 inhibits motion at nominal 53.21 V; U15/Q16 switch the external J3 brake load.",
"Brake control remains powered from the protected motor bus through the backup supply."
]
},
{
"index": 13,
"name": "mcu",
"display_name": "MCU Clock Memory and Debug",
"frame": [
297,
210
],
"annotations": [
"13 / MCU Clock Memory and Debug",
"U16 STM32G0B1 commands the TMC5160 ramp generator over SPI; SW2 requests Start/Stop.",
"U17 is configuration storage. Y1, SW1 and the bare SWD/NRST pads support bring-up."
]
},
{
"index": 14,
"name": "encoder",
"display_name": "Optional Shaft Encoder",
"frame": [
297,
210
],
"annotations": [
"14 / Optional Shaft Encoder",
"U18 AS5047P is centered on bottom; C52/C53 are top-side. All are DNP.",
"SPI plus ABI test access; magnet interface for the ordered single-shaft motor is unqualified."
]
},
{
"index": 15,
"name": "usb-data",
"display_name": "USB DATA and Attach Sense",
"frame": [
297,
210
],
"annotations": [
"15 / USB DATA and Attach Sense",
"J10 supplies USB 2.0 DATA and independent MCU logic power; no PD on this port.",
"D15 protects D+/D-/CC. R107/R108/C72 sense DATA VBUS; DATA cannot feed VMOTOR."
]
},
{
"index": 17,
"name": "user-control",
"display_name": "Local Start and Stop",
"frame": [
297,
210
],
"annotations": [
"17 / Local Start and Stop",
"SW2 requests motion from the onboard STM32. R133 pulls the input to MCU logic power.",
"Debounce requires release before start; reset, power loss and faults never auto-start."
]
},
{
"index": 21,
"name": "usb-logic",
"display_name": "USB Logic Power",
"frame": [
297,
210
],
"annotations": [
"21 / USB Logic Power",
"U28 limits DATA power; U25 regulates V3V3_USB. U26/U27 reverse-block the MCU rail.",
"R119/R120 sense board supply on PB1. Industrial peripherals require board power."
]
},
{
"index": 22,
"name": "telemetry",
"display_name": "Temperature and Bus Diagnostics",
"frame": [
297,
210
],
"annotations": [
"22 / Temperature and Bus Diagnostics",
"U29 TMP102 senses temperature; U33 provides hardware inhibit. U30 ADS1115 monitors the bus.",
"Sensor addresses are 0x48 and 0x49. Temperature correlation requires load testing."
]
},
{
"index": 23,
"name": "phase-current",
"display_name": "Phase Current Diagnostics",
"frame": [
297,
210
],
"annotations": [
"23 / Phase Current Diagnostics",
"U31/U32 INA240A1 measure the two 5 mOhm inline shunts at 20 V/V.",
"Nominal 100 mV/A about 1.65 V; instantaneous diagnostics, not a short-circuit trip."
]
},
{
"index": 24,
"name": "driver-power",
"display_name": "Regulated Driver Supply",
"frame": [
297,
210
],
"annotations": [
"24 / Regulated Driver Supply",
"U34 is the 65 V buck supplying nominal 12 V to U7 VSA/12VOUT and U15.",
"TMC5160 external supply range is 10-13 V; ripple and startup require bench validation."
]
},
{
"index": 25,
"name": "indicators",
"display_name": "Status and Independent Power Indication",
"frame": [
297,
210
],
"annotations": [
"25 / Status and Independent Power Indication",
"U35 PCA9538 at 0x70; U37 buffers PC13 reset into PD_3V3 with default-low bias.",
"D17 shows board V3V3 independently of firmware; USB-only MCU power is distinct."
]
},
{
"index": 26,
"name": "alarm",
"display_name": "Audible Fault Alarm",
"frame": [
297,
210
],
"annotations": [
"26 / Audible Fault Alarm",
"BZ1 active buzzer is driven by Q26 with a gate pulldown and D18 clamp.",
"The alarm defaults off. Motor protection remains independent of the audible indication."
]
},
{
"index": 27,
"name": "pd-programming",
"display_name": "PD Programming and Power Probes",
"frame": [
297,
210
],
"annotations": [
"27 / PD Programming and Power Probes",
"U36 isolates both PD EEPROM I2Cc wires when TP_PD_ISO is grounded.",
"Use fixed 5 V fixture power and a 3.3 V open-drain programmer; VREF is sense-only."
]
},
{
"index": 28,
"name": "brake-feedback",
"display_name": "Brake Continuity Preflight",
"frame": [
297,
210
],
"annotations": [
"28 / Brake Continuity Preflight",
"R134-R136 sense J3 return on U30 AIN2 before motion; C98 filters the ADC input.",
"This check detects an absent resistor or stuck-on Q16; it does not prove braking current."
]
}
],
"sheet_bounds": [
{
"index": 1,
"name": "usb-pd",
"elements": 129,
"coordinate_points_checked": 276
},
{
"index": 2,
"name": "usb-pd-policy",
"elements": 243,
"coordinate_points_checked": 523
},
{
"index": 3,
"name": "logic-power",
"elements": 89,
"coordinate_points_checked": 203
},
{
"index": 4,
"name": "logic-backup",
"elements": 89,
"coordinate_points_checked": 213
},
{
"index": 5,
"name": "logic-selection",
"elements": 91,
"coordinate_points_checked": 185
},
{
"index": 6,
"name": "motor-power",
"elements": 237,
"coordinate_points_checked": 448
},
{
"index": 7,
"name": "motion",
"elements": 237,
"coordinate_points_checked": 433
},
{
"index": 8,
"name": "motion-enable",
"elements": 83,
"coordinate_points_checked": 160
},
{
"index": 9,
"name": "bridge-a",
"elements": 222,
"coordinate_points_checked": 384
},
{
"index": 10,
"name": "bridge-b",
"elements": 207,
"coordinate_points_checked": 365
},
{
"index": 11,
"name": "brake",
"elements": 79,
"coordinate_points_checked": 154
},
{
"index": 12,
"name": "brake-ovp",
"elements": 129,
"coordinate_points_checked": 271
},
{
"index": 13,
"name": "mcu",
"elements": 244,
"coordinate_points_checked": 432
},
{
"index": 14,
"name": "encoder",
"elements": 75,
"coordinate_points_checked": 139
},
{
"index": 15,
"name": "usb-data",
"elements": 143,
"coordinate_points_checked": 323
},
{
"index": 17,
"name": "user-control",
"elements": 14,
"coordinate_points_checked": 17
},
{
"index": 21,
"name": "usb-logic",
"elements": 114,
"coordinate_points_checked": 235
},
{
"index": 22,
"name": "telemetry",
"elements": 84,
"coordinate_points_checked": 155
},
{
"index": 23,
"name": "phase-current",
"elements": 98,
"coordinate_points_checked": 158
},
{
"index": 24,
"name": "driver-power",
"elements": 79,
"coordinate_points_checked": 194
},
{
"index": 25,
"name": "indicators",
"elements": 143,
"coordinate_points_checked": 269
},
{
"index": 26,
"name": "alarm",
"elements": 64,
"coordinate_points_checked": 126
},
{
"index": 27,
"name": "pd-programming",
"elements": 76,
"coordinate_points_checked": 143
},
{
"index": 28,
"name": "brake-feedback",
"elements": 34,
"coordinate_points_checked": 43
}
],
"checks": [
{
"ok": true,
"message": "source and schematic component counts match",
"details": {
"source": 277,
"schematic": 277
}
},
{
"ok": true,
"message": "every source component maps to exactly one schematic component",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "every schematic component belongs to a declared sheet",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "24 A4 schematic sheets including brake preflight",
"details": {
"actual": 24
}
},
{
"ok": true,
"message": "all schematic sheet names are unique"
},
{
"ok": true,
"message": "known fixed geometry for sheet usb-pd"
},
{
"ok": true,
"message": "usb-pd keeps sheet index 1"
},
{
"ok": true,
"message": "usb-pd keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "usb-pd has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"01 / USB-C PD POWER",
"J1: 48 V / 5 A EPR power only; USB DATA is on J10.",
"U1 protects CC/VBUS. Q1 controls protected VBUS; C1/C2 provide local bypass."
]
}
},
{
"ok": true,
"message": "usb-pd has numbered sheet heading"
},
{
"ok": true,
"message": "usb-pd explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet usb-pd-policy"
},
{
"ok": true,
"message": "usb-pd-policy keeps sheet index 2"
},
{
"ok": true,
"message": "usb-pd-policy keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "usb-pd-policy has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"02 / PD Controller and EEPROM",
"U2 TPS26750 negotiates EPR; U3 stores the board-specific TI configuration.",
"Q2/Q3 translate PD path control. TI image and powered qualification remain required."
]
}
},
{
"ok": true,
"message": "usb-pd-policy has numbered sheet heading"
},
{
"ok": true,
"message": "usb-pd-policy explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet logic-power"
},
{
"ok": true,
"message": "logic-power keeps sheet index 3"
},
{
"ok": true,
"message": "logic-power keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "logic-power has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"03 / PD Backup Supply",
"U5 converts PD VBUS to V3V3_PD; L1 and its feedback/bypass network are shown here.",
"Input spans default USB 5 V through the specified 48 V EPR operating target."
]
}
},
{
"ok": true,
"message": "logic-power has numbered sheet heading"
},
{
"ok": true,
"message": "logic-power explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet logic-backup"
},
{
"ok": true,
"message": "logic-backup keeps sheet index 4"
},
{
"ok": true,
"message": "logic-backup keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "logic-backup has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"04 / Motor Backup Supply",
"U22 converts VMOTOR to V3V3_MOTOR for brake-control backup after PD loss.",
"L2, feedback and local bypass remain on the motor supply domain."
]
}
},
{
"ok": true,
"message": "logic-backup has numbered sheet heading"
},
{
"ok": true,
"message": "logic-backup explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet logic-selection"
},
{
"ok": true,
"message": "logic-selection keeps sheet index 5"
},
{
"ok": true,
"message": "logic-selection keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "logic-selection has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"05 / Logic Supply Selection and Power Permit",
"U23/U24 and R111 form the status-interlocked reverse-blocked board supply.",
"U4 combines PD path status with POWER_PERMIT to control the eFuse enable."
]
}
},
{
"ok": true,
"message": "logic-selection has numbered sheet heading"
},
{
"ok": true,
"message": "logic-selection explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet motor-power"
},
{
"ok": true,
"message": "motor-power keeps sheet index 6"
},
{
"ok": true,
"message": "motor-power keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "motor-power has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"06 / Protected 48 V Motor Bus",
"Q4/Q5 provide reverse blocking; U6 is the eFuse and input-current monitor.",
"Nominal 1x current limit 3.607 A. C22/C23 are motor bulk; R31-R33/C24 monitor voltage."
]
}
},
{
"ok": true,
"message": "motor-power has numbered sheet heading"
},
{
"ok": true,
"message": "motor-power explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet motion"
},
{
"ok": true,
"message": "motion keeps sheet index 7"
},
{
"ok": true,
"message": "motion keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "motion has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"07 / Motion Controller",
"U7 TMC5160A drives the external bridges; nominal regulated driver supply is 12 V.",
"Bootstrap, charge-pump and local bypass parts are shown with the controller."
]
}
},
{
"ok": true,
"message": "motion has numbered sheet heading"
},
{
"ok": true,
"message": "motion explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet motion-enable"
},
{
"ok": true,
"message": "motion-enable keeps sheet index 8"
},
{
"ok": true,
"message": "motion-enable keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "motion-enable has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"08 / Onboard Motion and Hardware Enable",
"STM32 commands U7 over SPI. U10/U11/U33 and Q14 retain hardware inhibits.",
"The driver remains inhibited until the hardware safety conditions permit motion."
]
}
},
{
"ok": true,
"message": "motion-enable has numbered sheet heading"
},
{
"ok": true,
"message": "motion-enable explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet bridge-a"
},
{
"ok": true,
"message": "bridge-a keeps sheet index 9"
},
{
"ok": true,
"message": "bridge-a keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "bridge-a has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"09 / Motor Phase A Power Bridge",
"Q6/Q8 high-side and Q7/Q9 low-side switches form phase A; R109 is the Kelvin shunt.",
"J2 connects both motor windings. The 3.8 A RMS design ceiling is not a qualified setting."
]
}
},
{
"ok": true,
"message": "bridge-a has numbered sheet heading"
},
{
"ok": true,
"message": "bridge-a explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet bridge-b"
},
{
"ok": true,
"message": "bridge-b keeps sheet index 10"
},
{
"ok": true,
"message": "bridge-b keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "bridge-b has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"10 / Motor Phase B Power Bridge",
"Q10/Q12 high-side and Q11/Q13 low-side switches form phase B.",
"R110 is the independent 33 mOhm shunt; preserve the Kelvin sense connections."
]
}
},
{
"ok": true,
"message": "bridge-b has numbered sheet heading"
},
{
"ok": true,
"message": "bridge-b explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet brake"
},
{
"ok": true,
"message": "brake keeps sheet index 11"
},
{
"ok": true,
"message": "brake keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "brake has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"11 / Brake Reference and Turn-on Threshold",
"U12 is the 2.5 V reference. U13 commands braking at nominal 52.0 V.",
"External braking resistor and heatsink sizing depends on stored mechanical energy."
]
}
},
{
"ok": true,
"message": "brake has numbered sheet heading"
},
{
"ok": true,
"message": "brake explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet brake-ovp"
},
{
"ok": true,
"message": "brake-ovp keeps sheet index 12"
},
{
"ok": true,
"message": "brake-ovp keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "brake-ovp has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"12 / Overvoltage Inhibit and Brake Driver",
"U14 inhibits motion at nominal 53.21 V; U15/Q16 switch the external J3 brake load.",
"Brake control remains powered from the protected motor bus through the backup supply."
]
}
},
{
"ok": true,
"message": "brake-ovp has numbered sheet heading"
},
{
"ok": true,
"message": "brake-ovp explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet mcu"
},
{
"ok": true,
"message": "mcu keeps sheet index 13"
},
{
"ok": true,
"message": "mcu keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "mcu has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"13 / MCU Clock Memory and Debug",
"U16 STM32G0B1 commands the TMC5160 ramp generator over SPI; SW2 requests Start/Stop.",
"U17 is configuration storage. Y1, SW1 and the bare SWD/NRST pads support bring-up."
]
}
},
{
"ok": true,
"message": "mcu has numbered sheet heading"
},
{
"ok": true,
"message": "mcu explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet encoder"
},
{
"ok": true,
"message": "encoder keeps sheet index 14"
},
{
"ok": true,
"message": "encoder keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "encoder has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"14 / Optional Shaft Encoder",
"U18 AS5047P is centered on bottom; C52/C53 are top-side. All are DNP.",
"SPI plus ABI test access; magnet interface for the ordered single-shaft motor is unqualified."
]
}
},
{
"ok": true,
"message": "encoder has numbered sheet heading"
},
{
"ok": true,
"message": "encoder explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet usb-data"
},
{
"ok": true,
"message": "usb-data keeps sheet index 15"
},
{
"ok": true,
"message": "usb-data keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "usb-data has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"15 / USB DATA and Attach Sense",
"J10 supplies USB 2.0 DATA and independent MCU logic power; no PD on this port.",
"D15 protects D+/D-/CC. R107/R108/C72 sense DATA VBUS; DATA cannot feed VMOTOR."
]
}
},
{
"ok": true,
"message": "usb-data has numbered sheet heading"
},
{
"ok": true,
"message": "usb-data explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet user-control"
},
{
"ok": true,
"message": "user-control keeps sheet index 17"
},
{
"ok": true,
"message": "user-control keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "user-control has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"17 / Local Start and Stop",
"SW2 requests motion from the onboard STM32. R133 pulls the input to MCU logic power.",
"Debounce requires release before start; reset, power loss and faults never auto-start."
]
}
},
{
"ok": true,
"message": "user-control has numbered sheet heading"
},
{
"ok": true,
"message": "user-control explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet usb-logic"
},
{
"ok": true,
"message": "usb-logic keeps sheet index 21"
},
{
"ok": true,
"message": "usb-logic keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "usb-logic has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"21 / USB Logic Power",
"U28 limits DATA power; U25 regulates V3V3_USB. U26/U27 reverse-block the MCU rail.",
"R119/R120 sense board supply on PB1. Industrial peripherals require board power."
]
}
},
{
"ok": true,
"message": "usb-logic has numbered sheet heading"
},
{
"ok": true,
"message": "usb-logic explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet telemetry"
},
{
"ok": true,
"message": "telemetry keeps sheet index 22"
},
{
"ok": true,
"message": "telemetry keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "telemetry has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"22 / Temperature and Bus Diagnostics",
"U29 TMP102 senses temperature; U33 provides hardware inhibit. U30 ADS1115 monitors the bus.",
"Sensor addresses are 0x48 and 0x49. Temperature correlation requires load testing."
]
}
},
{
"ok": true,
"message": "telemetry has numbered sheet heading"
},
{
"ok": true,
"message": "telemetry explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet phase-current"
},
{
"ok": true,
"message": "phase-current keeps sheet index 23"
},
{
"ok": true,
"message": "phase-current keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "phase-current has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"23 / Phase Current Diagnostics",
"U31/U32 INA240A1 measure the two 5 mOhm inline shunts at 20 V/V.",
"Nominal 100 mV/A about 1.65 V; instantaneous diagnostics, not a short-circuit trip."
]
}
},
{
"ok": true,
"message": "phase-current has numbered sheet heading"
},
{
"ok": true,
"message": "phase-current explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet driver-power"
},
{
"ok": true,
"message": "driver-power keeps sheet index 24"
},
{
"ok": true,
"message": "driver-power keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "driver-power has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"24 / Regulated Driver Supply",
"U34 is the 65 V buck supplying nominal 12 V to U7 VSA/12VOUT and U15.",
"TMC5160 external supply range is 10-13 V; ripple and startup require bench validation."
]
}
},
{
"ok": true,
"message": "driver-power has numbered sheet heading"
},
{
"ok": true,
"message": "driver-power explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet indicators"
},
{
"ok": true,
"message": "indicators keeps sheet index 25"
},
{
"ok": true,
"message": "indicators keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "indicators has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"25 / Status and Independent Power Indication",
"U35 PCA9538 at 0x70; U37 buffers PC13 reset into PD_3V3 with default-low bias.",
"D17 shows board V3V3 independently of firmware; USB-only MCU power is distinct."
]
}
},
{
"ok": true,
"message": "indicators has numbered sheet heading"
},
{
"ok": true,
"message": "indicators explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet alarm"
},
{
"ok": true,
"message": "alarm keeps sheet index 26"
},
{
"ok": true,
"message": "alarm keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "alarm has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"26 / Audible Fault Alarm",
"BZ1 active buzzer is driven by Q26 with a gate pulldown and D18 clamp.",
"The alarm defaults off. Motor protection remains independent of the audible indication."
]
}
},
{
"ok": true,
"message": "alarm has numbered sheet heading"
},
{
"ok": true,
"message": "alarm explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet pd-programming"
},
{
"ok": true,
"message": "pd-programming keeps sheet index 27"
},
{
"ok": true,
"message": "pd-programming keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "pd-programming has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"27 / PD Programming and Power Probes",
"U36 isolates both PD EEPROM I2Cc wires when TP_PD_ISO is grounded.",
"Use fixed 5 V fixture power and a 3.3 V open-drain programmer; VREF is sense-only."
]
}
},
{
"ok": true,
"message": "pd-programming has numbered sheet heading"
},
{
"ok": true,
"message": "pd-programming explains component roles"
},
{
"ok": true,
"message": "known fixed geometry for sheet brake-feedback"
},
{
"ok": true,
"message": "brake-feedback keeps sheet index 28"
},
{
"ok": true,
"message": "brake-feedback keeps fixed 297 x 210 frame",
"details": {
"actual": [
297,
210
]
}
},
{
"ok": true,
"message": "brake-feedback has 3 explanatory annotations",
"details": {
"actual": 3,
"texts": [
"28 / Brake Continuity Preflight",
"R134-R136 sense J3 return on U30 AIN2 before motion; C98 filters the ADC input.",
"This check detects an absent resistor or stuck-on Q16; it does not prove braking current."
]
}
},
{
"ok": true,
"message": "brake-feedback has numbered sheet heading"
},
{
"ok": true,
"message": "brake-feedback explains component roles"
},
{
"ok": true,
"message": "72 high-level annotations on 24 sheets",
"details": {
"actual": 72
}
},
{
"ok": true,
"message": "all schematic coordinate points are inside fixed sheet frames",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "all component, shape, and estimated text extents are inside fixed sheet frames",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "163 named source nets including buffered indicator reset",
"details": {
"actual": 163
}
},
{
"ok": true,
"message": "every named source net has connected ports",
"details": {
"connected_groups": 163,
"source_nets": 163
}
},
{
"ok": true,
"message": "every connected net has at least two source ports",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "every connectivity key resolves to a named source net",
"details": {
"unknown_keys": []
}
},
{
"ok": true,
"message": "exactly two USB-C-standard connector exists",
"details": {
"refs": [
"J1",
"J10"
]
}
},
{
"ok": true,
"message": "PD J1 and DATA J10 use standard USB-C"
},
{
"ok": true,
"message": "exactly two connector MPN is USB/Type-C related",
"details": {
"refs": [
"J1",
"J10"
]
}
},
{
"ok": true,
"message": "Unsupported external control harnesses are removed"
},
{
"ok": true,
"message": "separate-port EPR, CC, D+/D-, protection, and MCU chains match",
"details": {
"mismatches": []
}
},
{
"ok": true,
"message": "PD J1 data pins are NC"
},
{
"ok": true,
"message": "DATA J10 SBU pins are NC"
},
{
"ok": true,
"message": "PD and DATA VBUS remain separate"
},
{
"ok": true,
"message": "89 capacitors including reset-buffer bypass and brake feedback filter",
"details": {
"actual": 89
}
},
{
"ok": true,
"message": "all capacitor pins connect to two distinct, shared nets",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "19 test points audited",
"details": {
"actual": 19
}
},
{
"ok": true,
"message": "every test point probes a shared functional net",
"details": {
"violations": []
}
},
{
"ok": true,
"message": "source no-connect set exactly matches the reviewed intentional allowlist",
"details": {
"expected": [
"J1.10:SBU1",
"J1.11:DP2",
"J1.12:DM",
"J1.13:DP",
"J1.14:DN2",
"J1.16:SBU2",
"J10.10:SBU1",
"J10.16:SBU2",
"U1.1:DP",
"U1.2:DM",
"U16.13:PA2",
"U16.14:PA3",
"U16.22:PB10",
"U16.25:PB13",
"U16.26:PB14",
"U16.27:PB15",
"U16.29:PA9",
"U16.2:PC14_OSC32_IN",
"U16.31:PC7",
"U16.32:PA10",
"U16.38:PD0",
"U16.39:PD1",
"U16.3:PC15_OSC32_OUT",
"U16.40:PD2",
"U16.41:PD3",
"U18.10:U",
"U18.8:W",
"U18.9:V",
"U2.10:N_I2Ct_IRQ",
"U2.21:NC",
"U2.28:PP5V1",
"U2.29:PP5V2",
"U23.4:NC",
"U24.4:NC",
"U25.4:NC",
"U26.4:NC",
"U27.4:NC",
"U28.4:FAULT",
"U30.2:ALERT",
"U31.4:NC",
"U32.4:NC",
"U34.4:PG",
"U35.13:N_INT",
"U37.1:NC",
"U6.11:MODE",
"U6.19:N_C6",
"U6.20:N_C5",
"U6.21:N_C4",
"U6.22:N_C3",
"U6.23:N_C2",
"U6.24:N_C1"
],
"actual": [
"J1.10:SBU1",
"J1.11:DP2",
"J1.12:DM",
"J1.13:DP",
"J1.14:DN2",
"J1.16:SBU2",
"J10.10:SBU1",
"J10.16:SBU2",
"U1.1:DP",
"U1.2:DM",
"U16.13:PA2",
"U16.14:PA3",
"U16.22:PB10",
"U16.25:PB13",
"U16.26:PB14",
"U16.27:PB15",
"U16.29:PA9",
"U16.2:PC14_OSC32_IN",
"U16.31:PC7",
"U16.32:PA10",
"U16.38:PD0",
"U16.39:PD1",
"U16.3:PC15_OSC32_OUT",
"U16.40:PD2",
"U16.41:PD3",
"U18.10:U",
"U18.8:W",
"U18.9:V",
"U2.10:N_I2Ct_IRQ",
"U2.21:NC",
"U2.28:PP5V1",
"U2.29:PP5V2",
"U23.4:NC",
"U24.4:NC",
"U25.4:NC",
"U26.4:NC",
"U27.4:NC",
"U28.4:FAULT",
"U30.2:ALERT",
"U31.4:NC",
"U32.4:NC",
"U34.4:PG",
"U35.13:N_INT",
"U37.1:NC",
"U6.11:MODE",
"U6.19:N_C6",
"U6.20:N_C5",
"U6.21:N_C4",
"U6.22:N_C3",
"U6.23:N_C2",
"U6.24:N_C1"
],
"missing": [],
"extra": []
}
},
{
"ok": true,
"message": "every intentional NC is represented by a schematic pin",
"details": {
"missing": []
}
},
{
"ok": true,
"message": "every intentional NC is represented by a PCB pad",
"details": {
"missing": []
}
},
{
"ok": true,
"message": "only the expected stacked duplicate pins are hidden in schematic symbols",
"details": {
"expected": [
"J1.17:VBUS3",
"J1.18:VBUS4",
"J1.19:GND3",
"J1.20:GND4",
"J1.2:EH2",
"J1.3:EH3",
"J1.4:EH4",
"J1.6:GND2",
"J1.8:VBUS2",
"J10.11:DP2",
"J10.14:DN2",
"J10.17:VBUS3",
"J10.18:VBUS4",
"J10.19:GND3",
"J10.20:GND4",
"J10.2:EH2",
"J10.3:EH3",
"J10.4:EH4",
"J10.6:GND2",
"J10.8:VBUS2",
"U1.6:RPD_G2",
"U1.7:RPD_G1"
],
"actual": [
"J1.17:VBUS3",
"J1.18:VBUS4",
"J1.19:GND3",
"J1.20:GND4",
"J1.2:EH2",
"J1.3:EH3",
"J1.4:EH4",
"J1.6:GND2",
"J1.8:VBUS2",
"J10.11:DP2",
"J10.14:DN2",
"J10.17:VBUS3",
"J10.18:VBUS4",
"J10.19:GND3",
"J10.20:GND4",
"J10.2:EH2",
"J10.3:EH3",
"J10.4:EH4",
"J10.6:GND2",
"J10.8:VBUS2",
"U1.6:RPD_G2",
"U1.7:RPD_G1"
],
"delta": []
}
},
{
"ok": true,
"message": "all hidden schematic pins are electrically connected; no NC is hidden"
}
]
}