AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c
A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.
- Version
- 0.1.0-prototype.19
- License
- unset
- Stars
- 0
lib/schematic-layout.ts
// Native A4 sheets use schematic units of 10 mm. Each functional sheet is
// kept within roughly 24 x 17 units, with space for net labels and IC notes.
export const schematicSheets = [
"MCU and decoupling",
"USB input and protection",
"Logic power and sensing",
"Flash and clock",
"Reset and debug",
"Driver power",
"Motion outputs",
"Limit inputs",
] as const
type SchematicPlacement = {
schX: number
schY: number
schSheetName: (typeof schematicSheets)[number]
}
const schematicPlacements: Record<string, SchematicPlacement> = {}
// 1. MCU and decoupling
schematicPlacements.U1 = { schX: -6, schY: 0, schSheetName: schematicSheets[0] }
schematicPlacements.C4 = { schX: 2, schY: 4, schSheetName: schematicSheets[0] }
schematicPlacements.C5 = { schX: 8, schY: 4, schSheetName: schematicSheets[0] }
schematicPlacements.C6 = {
schX: 3.4,
schY: 4,
schSheetName: schematicSheets[0],
}
schematicPlacements.C7 = {
schX: 4.8,
schY: 4,
schSheetName: schematicSheets[0],
}
schematicPlacements.C8 = {
schX: 2,
schY: 2.7,
schSheetName: schematicSheets[0],
}
schematicPlacements.C9 = {
schX: 9.4,
schY: 4,
schSheetName: schematicSheets[0],
}
schematicPlacements.C10 = {
schX: 3.4,
schY: 2.7,
schSheetName: schematicSheets[0],
}
schematicPlacements.C11 = {
schX: 4.8,
schY: 2.7,
schSheetName: schematicSheets[0],
}
schematicPlacements.C12 = {
schX: 2,
schY: 1.4,
schSheetName: schematicSheets[0],
}
schematicPlacements.C13 = {
schX: 10.8,
schY: 4,
schSheetName: schematicSheets[0],
}
// 2. USB input and protection
schematicPlacements.J1 = { schX: -8, schY: 0, schSheetName: schematicSheets[1] }
schematicPlacements.U4 = { schX: 1, schY: 0, schSheetName: schematicSheets[1] }
schematicPlacements.F1 = { schX: -8, schY: 6, schSheetName: schematicSheets[1] }
schematicPlacements.U5 = { schX: 1, schY: 6, schSheetName: schematicSheets[1] }
schematicPlacements.R1 = {
schX: -7,
schY: -6,
schSheetName: schematicSheets[1],
}
schematicPlacements.R2 = {
schX: -2,
schY: -6,
schSheetName: schematicSheets[1],
}
schematicPlacements.R3 = { schX: 7, schY: 0, schSheetName: schematicSheets[1] }
schematicPlacements.R4 = { schX: 7, schY: -4, schSheetName: schematicSheets[1] }
schematicPlacements.C1 = { schX: 7, schY: 6, schSheetName: schematicSheets[1] }
// 3. Logic power and sensing
schematicPlacements.U3 = { schX: -6, schY: 4, schSheetName: schematicSheets[2] }
schematicPlacements.C2 = {
schX: -10,
schY: 0,
schSheetName: schematicSheets[2],
}
schematicPlacements.C3 = { schX: -2, schY: 0, schSheetName: schematicSheets[2] }
schematicPlacements.LED1 = {
schX: 5,
schY: 4,
schSheetName: schematicSheets[2],
}
schematicPlacements.R9 = { schX: 5, schY: 0, schSheetName: schematicSheets[2] }
schematicPlacements.R24 = {
schX: 10,
schY: 4,
schSheetName: schematicSheets[2],
}
schematicPlacements.R25 = {
schX: 10,
schY: 0,
schSheetName: schematicSheets[2],
}
schematicPlacements.C19 = {
schX: 10,
schY: -4,
schSheetName: schematicSheets[2],
}
schematicPlacements.TP1 = {
schX: -9,
schY: -5,
schSheetName: schematicSheets[2],
}
schematicPlacements.TP2 = {
schX: -4,
schY: -5,
schSheetName: schematicSheets[2],
}
schematicPlacements.TP3 = {
schX: 1,
schY: -5,
schSheetName: schematicSheets[2],
}
schematicPlacements.TP4 = {
schX: 5,
schY: -5,
schSheetName: schematicSheets[2],
}
// 4. Flash and clock
schematicPlacements.U2 = { schX: -6, schY: 3, schSheetName: schematicSheets[3] }
schematicPlacements.SW1 = { schX: 5, schY: 3, schSheetName: schematicSheets[3] }
schematicPlacements.R5 = { schX: 0, schY: 3, schSheetName: schematicSheets[3] }
schematicPlacements.R6 = { schX: 5, schY: -1, schSheetName: schematicSheets[3] }
schematicPlacements.C14 = {
schX: -9,
schY: -3,
schSheetName: schematicSheets[3],
}
schematicPlacements.Y1 = {
schX: -3,
schY: -3,
schSheetName: schematicSheets[3],
}
schematicPlacements.R7 = { schX: 2, schY: -3, schSheetName: schematicSheets[3] }
schematicPlacements.C15 = {
schX: -5,
schY: -7,
schSheetName: schematicSheets[3],
}
schematicPlacements.C16 = {
schX: 0,
schY: -7,
schSheetName: schematicSheets[3],
}
// 5. Reset and debug
schematicPlacements.U9 = { schX: -7, schY: 4, schSheetName: schematicSheets[4] }
schematicPlacements.SW2 = { schX: 2, schY: 4, schSheetName: schematicSheets[4] }
schematicPlacements.R8 = { schX: -2, schY: 4, schSheetName: schematicSheets[4] }
schematicPlacements.C25 = {
schX: -7,
schY: -1,
schSheetName: schematicSheets[4],
}
schematicPlacements.TP9 = {
schX: -8,
schY: -6,
schSheetName: schematicSheets[4],
}
schematicPlacements.TP10 = {
schX: -2,
schY: -6,
schSheetName: schematicSheets[4],
}
schematicPlacements.TP11 = {
schX: 4,
schY: -6,
schSheetName: schematicSheets[4],
}
schematicPlacements.LED2 = {
schX: 8,
schY: 4,
schSheetName: schematicSheets[4],
}
schematicPlacements.R10 = { schX: 8, schY: 0, schSheetName: schematicSheets[4] }
// 6. Driver power
schematicPlacements.U8 = { schX: -7, schY: 4, schSheetName: schematicSheets[5] }
schematicPlacements.U7 = { schX: 4, schY: 4, schSheetName: schematicSheets[5] }
schematicPlacements.L1 = { schX: -1, schY: 4, schSheetName: schematicSheets[5] }
schematicPlacements.C26 = {
schX: -11,
schY: -1,
schSheetName: schematicSheets[5],
}
schematicPlacements.C21 = {
schX: 0,
schY: -1,
schSheetName: schematicSheets[5],
}
schematicPlacements.C24 = {
schX: 4,
schY: -1,
schSheetName: schematicSheets[5],
}
schematicPlacements.C22 = {
schX: 8,
schY: -1,
schSheetName: schematicSheets[5],
}
schematicPlacements.C23 = {
schX: 12,
schY: -1,
schSheetName: schematicSheets[5],
}
schematicPlacements.R29 = {
schX: -11,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R32 = {
schX: -7,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R33 = {
schX: -3,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R30 = {
schX: 1,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R26 = {
schX: 5,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R27 = {
schX: 9,
schY: -5,
schSheetName: schematicSheets[5],
}
schematicPlacements.R28 = {
schX: 9,
schY: -8,
schSheetName: schematicSheets[5],
}
schematicPlacements.R31 = {
schX: 5,
schY: -8,
schSheetName: schematicSheets[5],
}
// 7. Motion outputs
schematicPlacements.Q1 = { schX: -6, schY: 3, schSheetName: schematicSheets[6] }
schematicPlacements.Q2 = {
schX: -6,
schY: -1,
schSheetName: schematicSheets[6],
}
schematicPlacements.Q3 = { schX: 1, schY: 3, schSheetName: schematicSheets[6] }
schematicPlacements.Q4 = { schX: 8, schY: 3, schSheetName: schematicSheets[6] }
schematicPlacements.Q5 = { schX: 8, schY: -1, schSheetName: schematicSheets[6] }
schematicPlacements.J2 = { schX: -6, schY: 7, schSheetName: schematicSheets[6] }
schematicPlacements.J3 = { schX: 1, schY: 7, schSheetName: schematicSheets[6] }
schematicPlacements.J4 = { schX: 8, schY: 7, schSheetName: schematicSheets[6] }
schematicPlacements.R11 = {
schX: -11,
schY: 3,
schSheetName: schematicSheets[6],
}
schematicPlacements.R12 = {
schX: -11,
schY: 0,
schSheetName: schematicSheets[6],
}
schematicPlacements.R13 = {
schX: -11,
schY: -4,
schSheetName: schematicSheets[6],
}
schematicPlacements.R14 = {
schX: -6,
schY: -5,
schSheetName: schematicSheets[6],
}
schematicPlacements.R15 = {
schX: -2,
schY: 3,
schSheetName: schematicSheets[6],
}
schematicPlacements.R16 = {
schX: 1,
schY: -1,
schSheetName: schematicSheets[6],
}
schematicPlacements.R17 = { schX: 5, schY: 3, schSheetName: schematicSheets[6] }
schematicPlacements.R18 = {
schX: 4,
schY: -1,
schSheetName: schematicSheets[6],
}
schematicPlacements.R19 = {
schX: 8,
schY: -5,
schSheetName: schematicSheets[6],
}
schematicPlacements.TP5 = {
schX: -9,
schY: -8,
schSheetName: schematicSheets[6],
}
schematicPlacements.TP6 = {
schX: -3,
schY: -8,
schSheetName: schematicSheets[6],
}
schematicPlacements.TP7 = {
schX: 3,
schY: -8,
schSheetName: schematicSheets[6],
}
schematicPlacements.TP8 = {
schX: 9,
schY: -8,
schSheetName: schematicSheets[6],
}
// 8. Limit inputs
schematicPlacements.U6 = { schX: -6, schY: 3, schSheetName: schematicSheets[7] }
schematicPlacements.J5 = {
schX: -10,
schY: -3,
schSheetName: schematicSheets[7],
}
schematicPlacements.J6 = {
schX: -5,
schY: -3,
schSheetName: schematicSheets[7],
}
schematicPlacements.R20 = { schX: 0, schY: 3, schSheetName: schematicSheets[7] }
schematicPlacements.R21 = { schX: 5, schY: 3, schSheetName: schematicSheets[7] }
schematicPlacements.R22 = {
schX: 0,
schY: -2,
schSheetName: schematicSheets[7],
}
schematicPlacements.R23 = {
schX: 5,
schY: -2,
schSheetName: schematicSheets[7],
}
schematicPlacements.C17 = {
schX: 10,
schY: 3,
schSheetName: schematicSheets[7],
}
schematicPlacements.C18 = {
schX: 10,
schY: -2,
schSheetName: schematicSheets[7],
}
export function schematicPosition(name: string): SchematicPlacement {
const placement = schematicPlacements[name]
if (!placement) throw new Error(`No A4 schematic placement for ${name}`)
return placement
}
export const passiveSchematicPosition = schematicPosition
// Supported per-pin margins enlarge dense symbols without the deprecated
// schPinSpacing prop (the installed core intentionally ignores that prop).
export const mcuPinStyle = Object.fromEntries(
Array.from({ length: 57 }, (_, index) => [
`pin${index + 1}`,
{ marginTop: 0.1 },
]),
)
export const driverRegulatorPinStyle = Object.fromEntries(
Array.from({ length: 11 }, (_, index) => [
`pin${index + 1}`,
{ marginTop: 0.15 },
]),
)