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-segment-shift.mjs
import fs from "node:fs"
import { runAllRoutingChecks } from "@tscircuit/checks"
const [traceId, startArg, endArg] = process.argv.slice(2)
if (!traceId) throw new Error("usage: node search-segment-shift.mjs TRACE START END")
const lo = Number(startArg); const hi = Number(endArg)
const forcedWidth = process.argv[5] ? Number(process.argv[5]) : undefined
const base = JSON.parse(fs.readFileSync("dist/index/circuit.json", "utf8"))
.filter((element) => !String(element.type).endsWith("error"))
const moved = (dx, dy) => base.map((element) => {
if (element.type !== "pcb_trace" || element.pcb_trace_id !== traceId) return element
return { ...element, route: element.route.map((point, index) =>
index >= lo && index <= hi && point.route_type === "wire"
? { ...point, x: point.x + dx, y: point.y + dy, ...(forcedWidth ? { width: forcedWidth } : {}) }
: point) }
})
let best = { count: Infinity }
for (let dx = -0.6; dx <= 0.6 + 1e-9; dx += 0.05) for (let dy = -0.6; dy <= 0.6 + 1e-9; dy += 0.05) {
const cx = Number(dx.toFixed(3)); const cy = Number(dy.toFixed(3)); const errors = await runAllRoutingChecks(moved(cx, cy))
if (errors.length < best.count) { best = { count: errors.length, dx: cx, dy: cy, errors }; console.log("best", best.count, best.dx, best.dy) }
if (errors.length <= 6) { console.log(JSON.stringify({ count: errors.length, dx: cx, dy: cy })); console.log(errors.map((e) => e.message).join("\n")); process.exit(0) }
}
console.log(JSON.stringify(best, null, 2))