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

engineering/reference-comparison.json

{
  "reviewed_date": "2026-10-11",
  "baseline_commit": "0a53acee2ff69f08097d9d3b2407c6b0b190f70f",
  "scope": "Design comparison, not hardware qualification or complete reference parity",
  "references": [
    {
      "package": "imrishabh18/rp2040-motor-controller",
      "version": "1.0.42",
      "release_id": "e8d285f7-c3d8-46f5-9a54-344fdde0124e",
      "url": "https://tscircuit.com/imrishabh18/rp2040-motor-controller",
      "files": [
        {
          "path": "README.md",
          "sha256": "88b05a6b8b9aaef9c2e7de6fc66305f0da271d848710434b3df651a401a34222",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=README.md"
        },
        {
          "path": "index.circuit.tsx",
          "sha256": "65391e3e5525c4b3968983c23327385fb903f9ab716d3b6c0b7d144472ee17b6",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=index.circuit.tsx"
        },
        {
          "path": "schematic/CurrentTelemetrySection.tsx",
          "sha256": "bc47e97af05fa0242867b21f5d461b529c0206fbdec111d5372670924b7456f8",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/CurrentTelemetrySection.tsx"
        },
        {
          "path": "schematic/FeedbackSection.tsx",
          "sha256": "1a18bccec9493fbb3c0d482115cb98028fc1d560c74c8b821530e251c1861f7b",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/FeedbackSection.tsx"
        },
        {
          "path": "schematic/MotorOutputsSection.tsx",
          "sha256": "a2b35e2b424d0c9cb37382f64d5655a68db2561c8d2d18c2c308c5c3f6e5ecef",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/MotorOutputsSection.tsx"
        },
        {
          "path": "schematic/OptionalEncoderSection.tsx",
          "sha256": "f7ec7a64be118c1fabd410887751bef18d9171d8e34c1105ba0c31a055181f71",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/OptionalEncoderSection.tsx"
        },
        {
          "path": "schematic/PdVoltageControlSection.tsx",
          "sha256": "b124c7f766a0c88e4a29fb1ca171a6b8b26ac94d0d85062766ea46214937acf2",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/PdVoltageControlSection.tsx"
        },
        {
          "path": "schematic/ProductionTestPoints.tsx",
          "sha256": "f4351066df642e7fe65a01835b69c25c751efc518e24fd19fdad4f8afce1e939",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/ProductionTestPoints.tsx"
        },
        {
          "path": "schematic/StatusLedSection.tsx",
          "sha256": "bbcc172f1a8b43874c0bb441fab5a61aad9219fe4c92f0ec8ce08cd2f773e4e1",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/StatusLedSection.tsx"
        },
        {
          "path": "schematic/ThermalProtectionSection.tsx",
          "sha256": "8688b7c59a7ce98bb18aa6e4a8a77394ef0d1bae52eca0ab937f2712c59977ec",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=e8d285f7-c3d8-46f5-9a54-344fdde0124e&file_path=schematic/ThermalProtectionSection.tsx"
        }
      ]
    },
    {
      "package": "imrishabh18/nema-23-stepper-controller",
      "version": "1.3.2",
      "release_id": "ce2edb82-bc7a-4eb3-9cbd-280f173e6dcd",
      "url": "https://tscircuit.com/imrishabh18/nema-23-stepper-controller",
      "files": [
        {
          "path": "README.md",
          "sha256": "ef0e74239e4d940161187105c3d7a9c906366edc5e17b3d87770e31d4c78930c",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=ce2edb82-bc7a-4eb3-9cbd-280f173e6dcd&file_path=README.md"
        },
        {
          "path": "feature-parity.tsx",
          "sha256": "18280e2035b824b5d87b46d869c0be97425f84370a51996cb9295a8e1539b848",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=ce2edb82-bc7a-4eb3-9cbd-280f173e6dcd&file_path=feature-parity.tsx"
        },
        {
          "path": "index.circuit.tsx",
          "sha256": "5c2e528de893e435b0b52491b9de0c8eeed371b22e63ddaf5db29884f564b73c",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=ce2edb82-bc7a-4eb3-9cbd-280f173e6dcd&file_path=index.circuit.tsx"
        },
        {
          "path": "usb-pd-power.tsx",
          "sha256": "5da8e6792a7288011e9ef503d2a89cc6dac8342d785981bfd4cedc8da9c71c3a",
          "url": "https://registry-api.tscircuit.com/package_files/get?package_release_id=ce2edb82-bc7a-4eb3-9cbd-280f173e6dcd&file_path=usb-pd-power.tsx"
        }
      ]
    }
  ],
  "features": [
    {
      "id": "separate_usb",
      "feature": "Separate POWER and DATA ports",
      "status": "implemented",
      "evidence": "docs/usb-pd-architecture.md",
      "detail": "J1 EPR power; J10 independent USB DATA/MCU supply. Two CC Rd on DATA. Physical compliance remains a separate gate."
    },
    {
      "id": "pd_voltage",
      "feature": "Software-selectable PD voltage",
      "status": "intentional_difference",
      "evidence": "docs/pd-configuration.json",
      "detail": "References select 5\u201320 V / 5\u201328 V. This motor design is fixed 48 V / 5 A EPR; firmware rejects other contracts. No arbitrary-voltage UI is promised. TI image remains missing."
    },
    {
      "id": "power_protection",
      "feature": "Input protection and reverse blocking",
      "status": "implemented",
      "evidence": "engineering/power-audit.json",
      "detail": "eFuse, independent power permit, reverse-blocked logic supplies and motor-side brake backup. Limits use this board\u2019s own ratings."
    },
    {
      "id": "driver",
      "feature": "Motor driver and local thermal paths",
      "status": "implemented",
      "evidence": "docs/native-decoupling-check.json",
      "detail": "Retained TMC5160A/external bridges by user decision; 12 V VSA supply and 58 filled/capped via-in-pad locations. Target-current thermal qualification is open."
    },
    {
      "id": "motor_connector",
      "feature": "Keyed motor connector and mating cable",
      "status": "implemented",
      "evidence": "docs/motor-harness.md",
      "detail": "JST VH retained for higher-current target. VHR-4N, SVH-41T-P1.1 and 16 AWG pigtails defined; actual harness not built/tested."
    },
    {
      "id": "temperature",
      "feature": "Temperature readout and motor inhibition",
      "status": "implemented",
      "evidence": "firmware/README.md",
      "detail": "TMP102 + U33 hardware inhibit; missing/stale sensor blocks firmware. NEMA17 has software-only board-temperature response; do not remove our independent inhibit."
    },
    {
      "id": "phase_current",
      "feature": "Actual signed winding-current readings",
      "status": "implemented",
      "evidence": "docs/critical-copper-check.json",
      "detail": "INA240A1 \u00d72, 5 m\u03a9 telemetry shunts, 100 mV/A nominal. Independent 33 m\u03a9 regulation shunts. Calibration and PWM sampling remain open."
    },
    {
      "id": "rgb",
      "feature": "Visible multicolor status",
      "status": "implemented",
      "evidence": "docs/indicators.md",
      "detail": "D16 common-anode RGB, U35 reset-controlled PCA9538 sinks and current limiting. U37 buffers PC13 reset into PD_3V3; host-tested fault/power/suspend behavior. Optical and powered qualification remain open."
    },
    {
      "id": "buzzer",
      "feature": "Audible fault alert",
      "status": "implemented",
      "evidence": "docs/indicators.md",
      "detail": "BZ1 active buzzer, Q26 low-side driver, gate pulldown, clamp and local bulk supply. Reset or communication failure silences the driver. Audible/current qualification remains open."
    },
    {
      "id": "power_indicator",
      "feature": "Independent logic-power indication",
      "status": "implemented",
      "evidence": "docs/indicators.md",
      "detail": "D17 and R128 independently indicate board V3V3; USB-only MCU power does not light it. Included in the additional 75 mA logic-rail allocation."
    },
    {
      "id": "power_probes",
      "feature": "Dedicated PD / VMOTOR / GND measurement pads",
      "status": "implemented",
      "evidence": "docs/pd-programming.md",
      "detail": "Top TP_PD_VBUS, TP_VMOTOR and TP_PWR_GND added with five EEPROM fixture pads; total 19 service pads. Fixture construction and physical probe access remain to be qualified."
    },
    {
      "id": "encoder",
      "feature": "Centered underside optional encoder",
      "status": "implemented",
      "evidence": "docs/assembly-check.json",
      "detail": "U18 at (0,0) alone on bottom, C52/C53 on top; all three DNP, excluded from fitted BOM/CPL/paste. AS5047P SPI retained instead of AS5600 I2C."
    },
    {
      "id": "encoder_mechanics",
      "feature": "Shaft magnet / holder / working gap",
      "status": "open",
      "evidence": "docs/motor-assembly.md",
      "detail": "Single-shaft 34HS31-6004S1 has no documented rear rotating-shaft attachment. DNP footprint is complete; usable shaft feedback is not."
    },
    {
      "id": "programming",
      "feature": "MCU reset and programming recovery",
      "status": "implemented",
      "evidence": "firmware/README.md",
      "detail": "STM32 internal flash, SWD/NRST service pads and SW1; RP2040 BOOTSEL/UF2 circuitry is not copied. USB CDC setup is not a firmware flasher."
    },
    {
      "id": "pd_programming",
      "feature": "Blank PD EEPROM programming and approved image",
      "status": "open",
      "evidence": "docs/pd-programming.md",
      "detail": "U36 isolates both controller I2Cc wires. EEPROM-side SDA/SCL, VREF, GND and isolation pads plus a fixed-5 V blank-board procedure are implemented. TI full-flash image, built fixture and readback/APP-boot evidence remain missing."
    },
    {
      "id": "industrial",
      "feature": "Retain only defined external functions",
      "status": "open",
      "evidence": "docs/connector-harnesses.md",
      "detail": "J7 and remaining STEP/DIR/enable/home/limit stages removed from current TSX. Onboard SPI ramp and local START/STOP replace the undefined external command equipment; native copper refresh pending."
    },
    {
      "id": "mechanics",
      "feature": "Motor mounting, holes and cable/tool access",
      "status": "open",
      "evidence": "docs/motor-assembly-check.json",
      "detail": "Four PCB drills and exact motor-axis alignment retained. Unsupported front-post/adapter/clamp hardware withdrawn; no rear fastener dimensions invented. Alignment-only preview, physical mounting and retention unverified."
    },
    {
      "id": "thermal",
      "feature": "Heatsink, enclosure and brake load",
      "status": "open",
      "evidence": "docs/power-validation.md",
      "detail": "References\u2019 thermal vias/clearance method applies; their motor current, bulk capacitor and heatsink assumptions do not. Qualified thermal envelope and external brake cooling are missing."
    },
    {
      "id": "firmware",
      "feature": "Executable motor / interface application",
      "status": "open",
      "evidence": "firmware/README.md",
      "detail": "Executable bounded local START/STOP/internal SPI ramp path implemented and host-tested; shipped STM32 binary remains locked pending TI image and powered qualification. Reference READMEs include no executable motion firmware."
    },
    {
      "id": "markings",
      "feature": "Visible labels, branding and net names",
      "status": "implemented",
      "evidence": "board-markings.tsx",
      "detail": "Knockout POWER/DATA labels, connector markings and explicit route net identities already checked; every new service pad needs its own visible label."
    },
    {
      "id": "fabrication",
      "feature": "Sourcing, assembly files and routed DRC",
      "status": "open",
      "evidence": "docs/verification.json",
      "detail": "Current source ECO invalidates older native routing/release evidence. New route, full review and stock approval are pending; no orderable release."
    }
  ],
  "review_lines": [
    {
      "id": "encoder_bottom_dnp",
      "request": "Small encoder on bottom, doNotPlace",
      "features": [
        "encoder"
      ]
    },
    {
      "id": "reference_boards",
      "request": "Use Rishabh\u2019s reference boards",
      "features": [
        "separate_usb",
        "pd_voltage",
        "power_protection",
        "driver",
        "motor_connector",
        "temperature",
        "phase_current",
        "rgb",
        "buzzer",
        "power_indicator",
        "power_probes",
        "encoder",
        "encoder_mechanics",
        "programming",
        "pd_programming",
        "industrial",
        "mechanics",
        "thermal",
        "firmware",
        "markings",
        "fabrication"
      ]
    },
    {
      "id": "encoder_center",
      "request": "Perfectly centered, correct motor encoder arrangement",
      "features": [
        "encoder",
        "encoder_mechanics"
      ]
    },
    {
      "id": "justify_connectors",
      "request": "Explain J7, J2 and every additional connector",
      "features": [
        "motor_connector",
        "industrial",
        "thermal"
      ]
    },
    {
      "id": "specified_interfaces",
      "request": "Only specified interfaces",
      "features": [
        "separate_usb",
        "motor_connector",
        "industrial"
      ]
    },
    {
      "id": "assembly_motor_connection",
      "request": "More assembly work; actual motor connection",
      "features": [
        "motor_connector",
        "mechanics",
        "encoder_mechanics"
      ]
    },
    {
      "id": "discover_other_issues",
      "request": "Carefully discover and resolve remaining issues before renewed review",
      "features": [
        "rgb",
        "buzzer",
        "power_indicator",
        "power_probes",
        "pd_programming",
        "firmware",
        "thermal",
        "mechanics"
      ]
    },
    {
      "id": "review_paused",
      "request": "Review paused until issues addressed",
      "features": [
        "rgb",
        "buzzer",
        "power_indicator",
        "power_probes",
        "pd_programming",
        "firmware",
        "thermal",
        "mechanics",
        "encoder_mechanics"
      ]
    }
  ]
}