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/plan-review-ethernet-escape.py
"""Author the two measured layer changes through the retained copper maze."""
from route_geometry import *
plan=json.loads(Path('routing/bulk-top-continued-plan.json').read_text())
retained=json.loads(Path(plan['retained']).read_text())
job=plan['jobs'][0];assert job['source']=='source_trace_381'
waypoints=[(6.908352939769912,-7.2425295),(9.403702240948999,-9.75999247397015)]
for i,(x,y) in enumerate(waypoints):
retained.append(dict(type='pcb_trace',pcb_trace_id=f'authored_ethernet_layer_change_{i}',source_trace_id=job['source'],
route=[dict(route_type='via',x=x,y=y,from_layer='top',to_layer='bottom',via_diameter=.45,via_hole_diameter=.3)]))
nodes=[(15.9,-5.95),*waypoints,(-7.196846,-12.067678)]
jobs=[]
for i,l in enumerate(['inner2','inner1','inner2']):
a,b=nodes[i:i+2]
jobs.append(dict(source=job['source'],start=dict(x=a[0],y=a[1],layers=LAYERS,pcb_port_id=f'ethernet_escape_{i}'),
target=dict(x=b[0],y=b[1],layers=LAYERS,pcb_port_id=f'ethernet_escape_{i+1}',connected_tree=False),
constraints=dict(min_trace_thickness=.15,allowed_layers=[l])))
Path('routing/bulk-top-ethernet-retained.json').write_text(json.dumps(retained,indent=2)+'\n')
Path('routing/bulk-top-ethernet-plan.json').write_text(json.dumps({**plan,'retained':'routing/bulk-top-ethernet-retained.json','jobs':jobs+plan['jobs'][1:]},indent=2)+'\n')
Path('routing/review-ethernet-waypoints.json').write_text(json.dumps(dict(wires=[],vias=[dict(net='N152',x=x,y=y) for x,y in waypoints]),indent=2)+'\n')