imrishabh18/nema17-motor-controller-flex

An RP2040-based USB‑C/USB‑PD controller board that powers and drives a NEMA17 stepper via a DRV8825, with current/temperature/voltage monitoring, optional AS5600 encoder, buzzer/RGB status indicators, QSPI flash, and flexible motor/encoder connections.

Version
1.2.0
License
unset
Stars
0

schematic/OptionalEncoderSection.tsx

import { encoderPosition } from "../mechanical/flex-layout";
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;

/** Shaft sensor and bypasses populated on the top of the separate encoder island. */
export const OptionalEncoderSection = () => <>
  <AS5600_ASOM name="U_ENCODER" layer="top" pcbX={encoderPosition.x} pcbY={encoderPosition.y}
    schWidth={2.05} schHeight={1.6} 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" capacitance="100nF" footprint="0402" supplierPartNumbers={{jlcpcb:["C1525"]}}
    layer="top" maxDecouplingTraceLength={8} schOrientation="vertical" {...section} schSectionName="feedback_supply" pcbX={encoderPosition.x+3.65} pcbY={encoderPosition.y-2.8} pcbRotation={90} />
  <capacitor name="C_ENCODER_BULK" capacitance="1uF" footprint="0402" supplierPartNumbers={{jlcpcb:["C52923"]}}
    layer="top" maxDecouplingTraceLength={8} schOrientation="vertical" {...section} schSectionName="feedback_supply" pcbX={encoderPosition.x+3.65} pcbY={encoderPosition.y-0.6} pcbRotation={90} />
  <resistor name="R_ENC_SDA" resistance="4.7k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25900"]}}
    layer="top" schOrientation="pos_bottom" {...section} {...revisionPlacement("R_ENC_SDA")} />
  <resistor name="R_ENC_SCL" resistance="4.7k" footprint="0402" supplierPartNumbers={{jlcpcb:["C25900"]}}
    layer="top" {...revisionPlacement("R_ENC_SCL")} 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>)}
</>;