imrishabh18/rp2040-motor-controller

An RP2040-based NEMA17 stepper-motor controller with USB-C programming and PD motor-power negotiation, DRV8825 dual H-bridge drive, current/temperature telemetry, protected power filtering, status RGB LED, buzzer alarm, and optional magnetic encoder.

Version
1.0.42
License
unset
Stars
3

schematic/Drv8825Support.tsx

import { revisionPlacement } from "../mechanical/revision-placement";
import { Fragment } from "react";
import { schematicSheets, schematicSections } from "./config";

const sch = { schSheetName: schematicSheets.motorDriver, schSectionName: schematicSections.driverCore };


/** TI DRV8825, sections 6/8/10: charge pump, local supplies and 1 A reference.
 * V3P3OUT is an isolated driver reference supply, NOT the RP2040 3.3 V rail.
 * 3.3 * 2k/(2.4k+2k) = 1.5 V; I_FS = 1.5/(5*0.3) = 1 A.
 * Divider + MODE2 + both reference inputs remain below V3P3OUT's 1 mA limit.
 */
export const Drv8825Support = () => <>
  <capacitor name="C_CP" schRotation={0} capacitance="10nF" maxVoltageRating="50V" footprint="0402"
    supplierPartNumbers={{jlcpcb:["C15195"]}} {...sch} {...revisionPlacement("C_CP", {x:-5.625,y:-8.25})} />
  <capacitor name="C_VCP" schOrientation="vertical" capacitance="100nF" maxVoltageRating="50V" footprint="0402"
    supplierPartNumbers={{jlcpcb:["C960916"]}} {...sch} {...revisionPlacement("C_VCP", {x:-5.625,y:-8.25})} />
  <resistor name="R_VCP" resistance="1M" footprint="0402" supplierPartNumbers={{jlcpcb:["C26083"]}} {...sch} {...revisionPlacement("R_VCP", {x:-5.625,y:-8.25})} />
  <capacitor name="C_VMA" maxDecouplingTraceLength={4} capacitance="100nF" maxVoltageRating="50V" footprint="0402"
    supplierPartNumbers={{jlcpcb:["C960916"]}} {...sch} schOrientation="vertical" {...revisionPlacement("C_VMA", {x:-5.625,y:-8.25})} />
  <capacitor name="C_DRV_3V3" maxDecouplingTraceLength={4.5} capacitance="470nF" maxVoltageRating="16V" footprint="0402"
    supplierPartNumbers={{jlcpcb:["C480644"]}} {...sch} schOrientation="vertical" {...revisionPlacement("C_DRV_3V3", {x:-5.625,y:-8.25})} />
  <resistor name="R_DRV_REF_TOP" resistance="2.4k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25882"]}} {...sch} schOrientation="pos_bottom" {...revisionPlacement("R_DRV_REF_TOP", {x:-5.625,y:-8.25})} />
  <resistor name="R_DRV_REF_BOTTOM" resistance="2k" footprint="0402" supplierPartNumbers={{jlcpcb:["C4109"]}} {...sch} schOrientation="vertical" {...revisionPlacement("R_DRV_REF_BOTTOM", {x:-5.625,y:-8.25})} />
  <capacitor name="C_DRV_REF" capacitance="100nF" maxVoltageRating="16V" footprint="0402"
    supplierPartNumbers={{jlcpcb:["C1525"]}} {...sch} schOrientation="vertical" {...revisionPlacement("C_DRV_REF", {x:-5.625,y:-8.25})} />
  <resistor name="R_DRV_ENABLE_PU" resistance="10k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25744"]}} {...sch} schOrientation="vertical" {...revisionPlacement("R_DRV_ENABLE_PU", {x:-5.625,y:-8.25})} />
  {([
    ["CP1", ".DRIVER > .CP1", ".C_CP > .pin1", "CP1"],
    ["CP2", ".DRIVER > .CP2", ".C_CP > .pin2", "CP2"],
    ["VCP", ".DRIVER > .VCP", ".C_VCP > .pin1", "VCP"],
    ["VCP_CAP_VM", ".C_VCP > .pin2", ".DRIVER > .VMA", "VMOTOR"],
    ["VCP_PULL", ".R_VCP > .pin1", ".DRIVER > .VCP", "VCP"],
    ["VCP_PULL_VM", ".R_VCP > .pin2", ".DRIVER > .VMA", "VMOTOR"],
    ["VMB", ".DRIVER > .VMB", ".DRIVER > .VMA", "VMOTOR", "0.8mm"],
    ["VMA_CAP", ".C_VMA > .pin1", ".DRIVER > .VMA", "VMOTOR", "0.4mm"],
    ["VMA_CAP_GND", ".C_VMA > .pin2", "net.GND", "GND", "0.3mm"],
    ["GND2", ".DRIVER > .GND2", ".DRIVER > .EP", "GND", "0.3mm"],
    ["V3P3", ".DRIVER > .V3P3OUT", ".C_DRV_3V3 > .pin1", "DRV_3V3"],
    ["V3P3_GND", ".C_DRV_3V3 > .pin2", "net.GND", "GND"],
    ["REF_SUPPLY", ".R_DRV_REF_TOP > .pin1", ".DRIVER > .V3P3OUT", "DRV_3V3"],
    ["REF_DIVIDER", ".R_DRV_REF_TOP > .pin2", ".R_DRV_REF_BOTTOM > .pin1", "DRV_VREF"],
    ["REF_A", ".R_DRV_REF_BOTTOM > .pin1", ".DRIVER > .AVREF", "DRV_VREF"],
    ["REF_B", ".DRIVER > .AVREF", ".DRIVER > .BVREF", "DRV_VREF"],
    ["REF_CAP", ".C_DRV_REF > .pin1", ".DRIVER > .AVREF", "DRV_VREF"],
    ["REF_CAP_GND", ".C_DRV_REF > .pin2", "net.GND", "GND"],
    ["REF_GND", ".R_DRV_REF_BOTTOM > .pin2", "net.GND", "GND"],
    ["MODE0", ".DRIVER > .MODE0", "net.GND", "GND"],
    ["MODE1", ".DRIVER > .MODE1", "net.GND", "GND"],
    ["MODE2", ".DRIVER > .MODE2", ".DRIVER > .V3P3OUT", "DRV_3V3"],
    ["EN_PULLUP", ".DRIVER > .nENBL", ".R_DRV_ENABLE_PU > .pin1", "DRIVER_ENABLE_N"],
    ["EN_PULLUP_SUPPLY", ".R_DRV_ENABLE_PU > .pin2", ".MCU > .L_AVDD > .pin1", "V3V3"],
  ] as const).map(([name,from,to,label,width]) => <Fragment key={name}><trace name={`DRV_${name}`} from={from} to={to}
    schDisplayLabel={label} thickness={width ?? "0.15mm"} /></Fragment>)}
</>;