ShiboSoftwareDev/nema8-20mm-dual-usbc-stepper-controller

A compact 4-layer USB‑C PD stepper-motor controller PCB using a CH32X035 MCU, TMC2209 driver, dual USB‑C ports, power protection/regulation, ESD/TVS diodes, current-sense resistors, and NEMA‑8 motor connector.

Version
1.0.13
License
unset
Stars
0

scripts/search-v5-top.mjs

import fs from "node:fs"
import { runAllRoutingChecks } from "@tscircuit/checks"
const base=JSON.parse(fs.readFileSync("dist/index/circuit.json","utf8")).filter(e=>!String(e.type).endsWith("error"))
const trace=base.find(e=>e.type==="pcb_trace"&&e.pcb_trace_id==="source_net_26_mst1_0"),start=trace.route[0],end=trace.route.at(-1)
const wire=(x,y)=>({route_type:"wire",x,y,layer:"top",width:0.1})
const makeCircuit=(x,y,mode)=>{const route=mode===0?[{...start,width:0.1},wire(x,start.y),wire(x,y),wire(end.x,y),{...end,width:0.1}]:[{...start,width:0.1},wire(start.x,y),wire(x,y),wire(x,end.y),{...end,width:0.1}];return base.flatMap(e=>e.type==="pcb_via"&&e.pcb_trace_id===trace.pcb_trace_id?[]:e.type==="pcb_trace"&&e.pcb_trace_id===trace.pcb_trace_id?[{...e,route}]:[e])}
if(process.argv.length>=4){const errors=await runAllRoutingChecks(makeCircuit(Number(process.argv[2]),Number(process.argv[3]),Number(process.argv[4]??0)));console.log(errors.length);console.log(errors.map(e=>e.message).join("\n"));process.exit(0)}
let best={count:Infinity};for(let x=-9;x<=3+1e-9;x+=0.5)for(let y=-8;y<=4+1e-9;y+=0.5)for(let mode=0;mode<2;mode++){const errors=await runAllRoutingChecks(makeCircuit(x,y,mode));if(errors.length<best.count){best={count:errors.length,x,y,mode,errors};console.log("best",best.count,x,y,mode)}if(errors.length<=6){console.log(JSON.stringify({count:errors.length,x,y,mode}));console.log(errors.map(e=>e.message).join("\n"));process.exit(0)}}console.log(JSON.stringify(best,null,2))