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

schematic-pages.tsx

import { Fragment } from "react"

const pages = [
  [
    "usb-pd",
    "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."
  ],
  [
    "usb-pd-policy",
    "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."
  ],
  [
    "logic-power",
    "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."
  ],
  [
    "logic-backup",
    "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."
  ],
  [
    "logic-selection",
    "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."
  ],
  [
    "motor-power",
    "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."
  ],
  [
    "motion",
    "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."
  ],
  [
    "motion-enable",
    "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."
  ],
  [
    "bridge-a",
    "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."
  ],
  [
    "bridge-b",
    "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."
  ],
  [
    "brake",
    "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."
  ],
  [
    "brake-ovp",
    "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."
  ],
  [
    "mcu",
    "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."
  ],
  [
    "encoder",
    "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."
  ],
  [
    "usb-data",
    "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."
  ],
  null, // External machine inputs removed; preserve later sheet numbering.
  [
    "user-control",
    "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."
  ],
  null, // Removed interface sheet; retain subsequent approved sheet numbers.
  null, // Removed interface sheet; retain subsequent approved sheet numbers.
  null, // Removed interface sheet; retain subsequent approved sheet numbers.
  [
    "usb-logic",
    "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."
  ],
  [
    "telemetry",
    "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."
  ],
  [
    "phase-current",
    "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."
  ],
  [
    "driver-power",
    "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."
  ],
  [
    "indicators",
    "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."
  ],
  [
    "alarm",
    "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."
  ],
  [
    "pd-programming",
    "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."
  ]
  , ["brake-feedback", "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."]
] as const

export const SchematicPages = () => <>
  {pages.map((page, index) => { if (!page) return null; const [name, title, purpose, notes] = page; return <Fragment key={name}><schematicsheet name={name} displayName={title} sheetIndex={index + 1} sheetSize="A4">
    <schematictext schX={0} schY={9} fontSize={0.5} anchor="center" text={`${String(index + 1).padStart(2, "0")} / ${title}`} />
    <schematictext schX={0} schY={7.8} fontSize={0.23} anchor="center" text={purpose} />
    <schematictext schX={0} schY={7.1} fontSize={0.23} anchor="center" text={notes} />
  </schematicsheet></Fragment>})}
</>