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

A compact 4-layer USB‑C PD/data controller board using a CH32X035 MCU and TMC2209 driver to power and control a NEMA‑8 stepper motor, with 3.3‑V regulation, USB ESD/reverse-polarity/TVS protection, current sensing, and boot control.

Version
1.0.12
License
unset
Stars
0

scripts/search-mcu-position.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")),id="pcb_component_12",component=base.find(e=>e.type==="pcb_component"&&e.pcb_component_id===id),pads=base.filter(e=>e.type==="pcb_smtpad"&&e.pcb_component_id===id),ports=new Set(pads.map(p=>p.pcb_port_id))
const moved=(dx,dy)=>base.map(e=>{if(e.pcb_component_id===id){if(e.type==="pcb_component")return{...e,center:{x:e.center.x+dx,y:e.center.y+dy}};if(typeof e.x==="number"&&typeof e.y==="number")return{...e,x:e.x+dx,y:e.y+dy};if(e.center)return{...e,center:{x:e.center.x+dx,y:e.center.y+dy}}}if(e.type==="pcb_trace")return{...e,route:e.route.map((p,i)=>{const port=i===0?p.start_pcb_port_id:i===e.route.length-1?p.end_pcb_port_id:undefined;return port&&ports.has(port)?{...p,x:p.x+dx,y:p.y+dy}:p})};return e})
if(process.argv.length>=4){const errors=await runAllRoutingChecks(moved(Number(process.argv[2]),Number(process.argv[3])));console.log(errors.length);console.log(errors.map(e=>e.message).join("\n"));process.exit(0)}
let best={count:Infinity};for(let dx=-2;dx<=2+1e-9;dx+=0.25)for(let dy=-2;dy<=2+1e-9;dy+=0.25){const errors=await runAllRoutingChecks(moved(dx,dy));if(errors.length<best.count){best={count:errors.length,dx,dy,errors};console.log("best",best.count,dx,dy)}if(errors.length<7){console.log(JSON.stringify({count:errors.length,dx,dy}));console.log(errors.map(e=>e.message).join("\n"));process.exit(0)}}console.log(JSON.stringify(best,null,2))