MustafaMulla29/rp2040-bldc-motor-controller-new

A USB‑C PD–powered RP2040 BLDC motor controller PCB with 3.3 V logic, MCT8329A sensorless commutation, three MOSFET half-bridges, protected power switching, USB data, controls, and motor connectors.

Version
0.3.82
License
unset
Stars
0

scripts/refresh-routing.mjs

// Run only one solver at a time. The saved plan is a candidate until check:routing passes.
import { Circuit } from "@tscircuit/core"
import { AutoroutingPipelineSolver9_PreloadedTraceGraph } from "@tscircuit/capacity-autorouter"
import { writeFileSync, mkdirSync } from "node:fs"
import Board from "../index.circuit.tsx"
const outputDir=".tscircuit/routing-candidate"
mkdirSync(outputDir,{recursive:true})
let stopped=false
const t0=Date.now()
const routingAlgorithm=async input=>{
  writeFileSync(`${outputDir}/input.json`,JSON.stringify(input,null,2))
  const solver=new AutoroutingPipelineSolver9_PreloadedTraceGraph({...input,minTraceToPadEdgeClearance:0.12,minViaEdgeToPadEdgeClearance:0.15,minViaHoleEdgeToViaHoleEdgeClearance:0.35},{effort:1})
  const events=new Map()
  return {
    on(n,fn){events.set(n,[...(events.get(n)??[]),fn])},
    stop(){stopped=true},
    start(){
      const emit=(n,e)=>{for(const f of events.get(n)??[])f(e)}
      let lastLog=0
      const tick=()=>{
        try{
          const until=Date.now()+30
          while(Date.now()<until && !solver.solved && !solver.failed && !stopped)solver.step()
          if(Date.now()-lastLog>10000){console.log(Math.round((Date.now()-t0)/1000)+'s',solver.getCurrentPhase(),solver.iterations);lastLog=Date.now()}
          if(solver.failed||stopped){emit('error',{error:new Error(solver.error??'Stopped')});return}
          if(solver.solved){const traces=solver.getOutputSimplifiedPcbTraces();writeFileSync(`${outputDir}/route-plan.json`,JSON.stringify({expectedInput:input,traces})+'\n');emit('complete',{traces});return}
          setTimeout(tick,0)
        }catch(error){emit('error',{error})}
      };tick()
    },
  }
}
const circuit=new Circuit({platform:{partsEngineDisabled:true,schematicDisabled:true}})
circuit.add(Board({routingAlgorithm}))
await circuit.renderUntilSettled()

const items=circuit.getCircuitJson();writeFileSync(`${outputDir}/circuit.json`,JSON.stringify(items,null,2))
const errors=items.filter(x=>x.type.endsWith('_error'));writeFileSync(`${outputDir}/errors.json`,JSON.stringify(errors,null,2))
console.log('elapsed',Math.round((Date.now()-t0)/1000),'seconds; errors',errors.length)
if(errors.length)process.exitCode=1

console.log(`Candidate saved under ${outputDir}; the active routing plan was not overwritten. Validate and review before replacing it.`)