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

BAT54C dual Schottky diode in a 3-pin SMD package, with two anodes and a shared cathode.

Version
1.0.14
License
unset
Stars
0

scripts/search-cc1-replacement.mjs

import fs from "node:fs"
import { runAllRoutingChecks } from "@tscircuit/checks"

const base = JSON.parse(fs.readFileSync("dist/index/circuit.json", "utf8"))
  .filter((element) => !String(element.type).endsWith("error"))
const trace = base.find((element) => element.type === "pcb_trace" && element.pcb_trace_id === "source_net_7_0")
const prefix = trace.route.slice(0, 9); const start = prefix.at(-1); const end = trace.route.at(-1)
const oldVia = base.find((element) => element.type === "pcb_via" && element.pcb_via_id === "pcb_via_57")
const wire = (x, y, layer) => ({ route_type: "wire", x, y, layer, width: 0.1 })
const via = (x, y) => ({ route_type: "via", x, y, from_layer: "bottom", to_layer: "inner1", via_diameter: 0.45, via_hole_diameter: 0.3 })
const makeCircuit = (x, y, mode) => {
  const middle = mode === 0
    ? [wire(x, start.y, "inner1"), wire(x, y, "inner1")]
    : [wire(start.x, y, "inner1"), wire(x, y, "inner1")]
  const route = [...prefix, ...middle, via(x,y), wire(x,y,"bottom"), { ...end, width: 0.1 }]
  return base.flatMap((element) => {
    if (element.type === "pcb_via" && element.pcb_trace_id === trace.pcb_trace_id && element.pcb_via_id !== "pcb_via_56") {
      return element.pcb_via_id === "pcb_via_57" ? [{ ...oldVia, x, y, layers: ["bottom","inner1"] }] : []
    }
    if (element.type === "pcb_trace" && element.pcb_trace_id === trace.pcb_trace_id) return [{ ...element, route }]
    return [element]
  })
}
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=-2.6;x<=-1.0+1e-9;x+=0.2)for(let y=-1.8;y<=0.8+1e-9;y+=0.2)for(let mode=0;mode<2;mode++){
 const cx=Number(x.toFixed(3)),cy=Number(y.toFixed(3)),errors=await runAllRoutingChecks(makeCircuit(cx,cy,mode));
 if(errors.length<best.count){best={count:errors.length,x:cx,y:cy,mode,errors};console.log("best",best.count,best.x,best.y,best.mode)}
 if(errors.length<=5){console.log(JSON.stringify({count:errors.length,x:cx,y:cy,mode}));console.log(errors.map(e=>e.message).join("\n"));process.exit(0)}
}
console.log(JSON.stringify(best,null,2))