astra/nema17-stepper-motor-controller-spring-clamp-rp2040
A 4-layer RP2040 controller board that negotiates USB‑C PD motor power and drives a NEMA17 stepper via a DRV8825, with current sensing, thermal shutdown, RGB status LED, buzzer alarm, optional AS5600 encoder, protection/filtering, and test points.
- Version
- 1.4.0
- License
- unset
- Stars
- 0
schematic/MotorOutputsSection.tsx
import { motorTrace, schematicSections, schematicSheets } from "./config";
// WAGO 2601-1104, manufacturer drawing dated 2023-07-02.
// Four independent potentials; two solder tails per potential, 5 mm apart.
// 3.5 mm pole pitch, 1.2 mm finished drills, 15.5 x 16.58 mm envelope; 12.75 mm installed height.
export const MotorOutputConnectors = () => (
<connector name="J1" allowOffBoard
manufacturerPartNumber="2601-1104"
supplierPartNumbers={{jlcpcb:["C7472748"]}}
cadModel={{
objUrl: "https://modelcdn.tscircuit.com/easyeda_models/assets/C7472748.obj?uuid=22ce918216fc4a618b4f2399cefec1f6",
stepUrl: "https://modelcdn.tscircuit.com/easyeda_models/assets/C7472748.step?uuid=22ce918216fc4a618b4f2399cefec1f6",
pcbRotationOffset: 0,
// Supplier model origin, relative to the existing eight-tail footprint.
modelOriginPosition: { x: -0.8514994, y: 6.202823, z: 1.573692 },
}}
pinLabels={{pin1:["A_PLUS"],pin2:["A_MINUS"],pin3:["B_PLUS"],pin4:["B_MINUS"],pin5:["A_PLUS_TAIL"],pin6:["A_MINUS_TAIL"],pin7:["B_PLUS_TAIL"],pin8:["B_MINUS_TAIL"]}}
internallyConnectedPins={[[1,5],[2,6],[3,7],[4,8]]}
pcbPinLabels={{pin1:"A+",pin2:"A-",pin3:"B+",pin4:"B-"}}
pcbX={21.525} pcbY={11.64} pcbRotation={90}
schX={9} schY={-1.5}
schPinArrangement={{leftSide:{pins:[1,2,3,4,5,6,7,8],direction:"top-to-bottom"}}}
schSheetName={schematicSheets.motorDriver}
schSectionName={schematicSections.motorOutputs}
footprint={
<footprint insertionDirection="from_y_neg">
{[-5.25,-1.75,1.75,5.25].flatMap((x,i) => [-2.5,2.5].map(y => (
<platedhole pcbX={x} pcbY={y} portHints={[String(i+1+(y<0?4:0))]}
shape="circle" holeDiameter={1.2} outerDiameter={2.2} />
)))}
<silkscreenrect pcbX={0.06} pcbY={-1.64} width={15.5} height={16.58} strokeWidth={0.15}/>
<courtyardrect pcbX={0.06} pcbY={-1.64} width={16} height={17.08}/>
{[-5.25,-1.75,1.75,5.25].map((x,i) => (
<silkscreentext pcbX={x} pcbY={8.8} text={["A+","A-","B+","B-"][i]} fontSize={0.8}/>
))}
<silkscreentext pcbX={8.1} pcbY={1.575} pcbRotation={-90} text="LEVER" fontSize={0.65}/>
</footprint>
}
/>
);
export const MotorOutputTraces = () => (
<>
{/* Reserve room for the wider motor routes before the remaining signals. */}
<trace
name="MOTOR_A_PLUS"
from=".DRIVER > .AOUT1"
to=".R_PHASE_A > .pin1"
schDisplayLabel="A_DRIVE"
{...motorTrace}
/>
<trace
name="MOTOR_A_MINUS"
from=".DRIVER > .AOUT2"
to=".J1 > .pin2"
schDisplayLabel="A-"
{...motorTrace}
/>
<trace
name="MOTOR_B_PLUS"
from=".DRIVER > .BOUT1"
to=".R_PHASE_B > .pin1"
schDisplayLabel="B_DRIVE"
{...motorTrace}
/>
<trace
name="MOTOR_B_MINUS"
from=".DRIVER > .BOUT2"
to=".J1 > .pin4"
schDisplayLabel="B-"
{...motorTrace}
/>
</>
);