shibosoftwaredev/f1c100s-linux-nema17-stepper-controller
A four-layer NEMA 17 motor-controller PCB combining an Allwinner F1C100S Linux computer, USB‑PD/buck power system, W5500 Ethernet, STM32 real-time motion control, DRV8825 stepper driver, protection/temperature/current telemetry, USB interfaces, and local LED/buzzer diagnostics.
- Version
- 0.4.56
- License
- unset
- Stars
- 0
scripts/scan-current-input-detour.py
"""Verify alternate same-width outer-layer input-feed corridors, not netlist hacks."""
from route_geometry import *
from shapely.strtree import STRtree
c=load_circuit('routing/review-placement.circuit.json');root=connectivity(c)
m=json.loads(Path('routing/net-map.json').read_text())['roots']
ports={e['pcb_port_id']:e for e in c if e['type']=='pcb_port'}
cu=json.loads(Path('routing/software-current-partial-physical-candidate.json').read_text())
ob=[]
for e in c:
if e['type'] in ['pcb_smtpad','pcb_plated_hole'] and 'bottom' in e.get('layers',[e.get('layer')]):
p=ports.get(e.get('pcb_port_id'));n=m.get(root(p['source_port_id'])) if p else None
if n!='N101':ob.append(geometry(e,'outer_' if e['type']=='pcb_plated_hole' else ''))
for w in cu['wires']:
if w['layer']=='bottom' and w['net']!='N101':ob.append(LineString(w['points']).buffer(w['width']/2))
for v in cu['vias']:
if v['net']!='N101':ob.append(Point(v['x'],v['y']).buffer(.225))
tree=STRtree(ob);good=[]
for ix in range(22,65):
for iy in range(-124,-94):
x,y=ix/10,iy/10
path=[(6.4,-13.55),(x,-13.55),(x,y),(-2.7,y),(-2.7,-12.55)]
g=LineString(path).buffer(.25)
if all(g.distance(ob[int(j)])>=.1002 for j in tree.query(g.buffer(.1003))):good.append(path)
Path('reports/current-input-detours.json').write_text(json.dumps(good,indent=2)+'\n')
print(json.dumps(dict(clearPaths=len(good),rightmost=sorted(good,key=lambda a:-a[1][0])[:8])))