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/OptionalEncoderSection.tsx

import { revisionPlacement } from "../mechanical/revision-placement";
import { Fragment } from "react";
import { AS5600_ASOM } from "../imports/AS5600_ASOM";
const section = { schSheetName: "position_alarm", schSectionName: "encoder" } as const;
const signal = { thickness: "0.15mm" } as const;
const supply = { thickness: "0.3mm" } as const;

/** Optional shaft sensor: footprint on the motor side, omitted from assembly. */
export const OptionalEncoderSection = () => <>
  <AS5600_ASOM name="U_ENCODER" doNotPlace layer="bottom" pcbX={0} pcbY={0}
    schWidth={2.05} schHeight={1.6} schX={-5} schY={0.439} noConnect={["OUT", "PGO"]} {...section}
    schPinStyle={{pin6: {marginTop: 0.3}, pin8: {marginTop: 0.2}, pin5: {marginTop: 1.0}}}
    schPinArrangement={{leftSide:{pins:[1,2,6,7,8],direction:"top-to-bottom"},rightSide:{pins:[3,5],direction:"top-to-bottom"},bottomSide:{pins:[4],direction:"left-to-right"}}} />
  <capacitor name="C_ENCODER" pcbRotation={180} capacitance="100nF" footprint="0402" supplierPartNumbers={{jlcpcb:["C1525"]}}
    layer="top" pcbX={2.5} pcbY={2.25} maxDecouplingTraceLength={8} schX={-3} schY={-5.5} schOrientation="vertical" {...section} schSectionName="feedback_supply"/>
  <capacitor name="C_ENCODER_BULK" pcbRotation={180} capacitance="1uF" footprint="0402" supplierPartNumbers={{jlcpcb:["C52923"]}}
    layer="top" pcbX={-4} pcbY={2.5} maxDecouplingTraceLength={8} schX={-1} schY={-5.5} schOrientation="vertical" {...section} schSectionName="feedback_supply"/>
  <resistor name="R_ENC_SDA" pcbRotation={0} resistance="4.7k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25900"]}}
    layer="top" pcbX={0.5} pcbY={7.5} schX={-11} schY={2.2} schOrientation="pos_bottom" {...section}/>
  <resistor name="R_ENC_SCL" resistance="4.7k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25900"]}}
    layer="top" {...revisionPlacement("R_ENC_SCL")} schX={-9} schY={2.2} schOrientation="pos_bottom" {...section}/>
  <trace name="ENCODER_SDA" from=".MCU > .U1 > .GPIO0" to=".U_ENCODER > .SDA" schDisplayLabel="ENC_SDA" {...signal}/>
  <trace name="ENCODER_SCL" from=".MCU > .U1 > .GPIO1" to=".U_ENCODER > .SCL" schDisplayLabel="ENC_SCL" {...signal}/>
  <trace name="ENCODER_SUPPLY" from=".MCU > .L_AVDD > .pin1" to=".U_ENCODER > .VDD3V3" schDisplayLabel="V3V3" {...supply}/>
  <trace name="ENCODER_3V3_MODE" from=".U_ENCODER > .VDD3V3" to=".U_ENCODER > .VDD5V" {...supply}/>
  <trace name="ENCODER_GND" from=".U_ENCODER > .GND" to="net.GND" {...supply}/>
  <trace name="ENCODER_DIRECTION" from=".U_ENCODER > .DIR" to="net.GND" {...signal}/>
  {["C_ENCODER","C_ENCODER_BULK"].map(name=><Fragment key={name}>
    <trace name={`${name}_VCC`} from={`.${name} > .pin1`} to=".U_ENCODER > .VDD3V3" schDisplayLabel="V3V3" {...supply}/>
    <trace name={`${name}_GND`} from={`.${name} > .pin2`} to="net.GND" {...supply}/>
  </Fragment>)}
  {[['R_ENC_SDA','SDA'],['R_ENC_SCL','SCL']].map(([name,pin])=><Fragment key={name}>
    <trace name={`${name}_SIGNAL`} from={`.${name} > .pin1`} to={`.U_ENCODER > .${pin}`} schDisplayLabel={`ENC_${pin}`} {...signal}/>
    <trace name={`${name}_VCC`} from={`.${name} > .pin2`} to=".U_ENCODER > .VDD3V3" schDisplayLabel="V3V3" {...signal}/>
  </Fragment>)}
</>;