project
Adom Custom Electronic Load
Public Made by Adomby adom
Two-layer digitally controlled electronic-load prototype. Compact R11 is under active electrical, cooling and probe-access review; not a manufacturing release.
← Commit history
Record gentle fan hero demonstration and reconcile accepted copper plan
6 files changed
+535−60
design/pour-spec-reconciliation.jsonadded+401@@ -0,0 +1,401 @@+{+ "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a",+ "scope": "Declared planned zone boundaries reconciled to accepted native board; not a filled-connectivity or thermal proof",+ "before": [+ {+ "net": "GND",+ "layers": [+ "B.Cu"+ ],+ "priority": 0,+ "connection": "solid",+ "name": "Power return and signal reference",+ "polygon": [+ [+ 98.3,+ 30.3+ ],+ [+ 161.7,+ 30.3+ ],+ [+ 161.7,+ 101.7+ ],+ [+ 98.3,+ 101.7+ ]+ ]+ },+ {+ "net": "GND",+ "layers": [+ "F.Cu"+ ],+ "priority": 0,+ "connection": "solid",+ "name": "Top return and shield",+ "polygon": [+ [+ 98.3,+ 30.3+ ],+ [+ 161.7,+ 30.3+ ],+ [+ 161.7,+ 101.7+ ],+ [+ 98.3,+ 101.7+ ]+ ]+ },+ {+ "name": "D1 heat spread front",+ "net": "LOAD_POS",+ "layers": [+ "F.Cu"+ ],+ "polygon": [+ [+ 106.5,+ 87.5+ ],+ [+ 114.5,+ 87.5+ ],+ [+ 114.5,+ 95+ ],+ [+ 106.5,+ 95+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "D1 heat spread back",+ "net": "LOAD_POS",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 106.5,+ 87.5+ ],+ [+ 114.5,+ 87.5+ ],+ [+ 114.5,+ 95+ ],+ [+ 106.5,+ 95+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Shunt positive spread front",+ "net": "SHUNT_P",+ "layers": [+ "F.Cu"+ ],+ "polygon": [+ [+ 134.5,+ 84.7+ ],+ [+ 138,+ 84.7+ ],+ [+ 138,+ 88+ ],+ [+ 134.5,+ 88+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Shunt positive spread back",+ "net": "SHUNT_P",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 134.5,+ 84.7+ ],+ [+ 138,+ 84.7+ ],+ [+ 138,+ 88+ ],+ [+ 134.5,+ 88+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ }+ ],+ "after": [+ {+ "name": "Top return and shield",+ "net": "GND",+ "layers": [+ "F.Cu"+ ],+ "polygon": [+ [+ 98.3,+ 30.3+ ],+ [+ 161.7,+ 30.3+ ],+ [+ 161.7,+ 101.7+ ],+ [+ 98.3,+ 101.7+ ]+ ],+ "priority": 0,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "D1 relocated heat spread front",+ "net": "LOAD_POS",+ "layers": [+ "F.Cu"+ ],+ "polygon": [+ [+ 114.0,+ 88.0+ ],+ [+ 121.8,+ 88.0+ ],+ [+ 121.8,+ 94.8+ ],+ [+ 114.0,+ 94.8+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Shunt positive spread front",+ "net": "SHUNT_P",+ "layers": [+ "F.Cu"+ ],+ "polygon": [+ [+ 134.5,+ 84.7+ ],+ [+ 138.0,+ 84.7+ ],+ [+ 138.0,+ 88.0+ ],+ [+ 134.5,+ 88.0+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Shunt positive spread back",+ "net": "SHUNT_P",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 134.5,+ 84.7+ ],+ [+ 138.0,+ 84.7+ ],+ [+ 138.0,+ 88.0+ ],+ [+ 134.5,+ 88.0+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Power return and signal reference",+ "net": "GND",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 98.3,+ 30.3+ ],+ [+ 161.7,+ 30.3+ ],+ [+ 161.7,+ 101.7+ ],+ [+ 98.3,+ 101.7+ ]+ ],+ "priority": 0,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "D1 relocated heat spread back",+ "net": "LOAD_POS",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 114.0,+ 88.0+ ],+ [+ 121.8,+ 88.0+ ],+ [+ 121.8,+ 94.8+ ],+ [+ 114.0,+ 94.8+ ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "Q1 source to shunt current spread back",+ "net": "SHUNT_P",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 124.2,+ 82.8+ ],+ [+ 125.6,+ 82.4+ ],+ [+ 127.0,+ 82.8+ ],+ [+ 133.8,+ 82.8+ ],+ [+ 135.4,+ 84.8+ ],+ [+ 135.4,+ 85.4+ ],+ [+ 133.5,+ 85.2+ ],+ [+ 126.0,+ 85.2+ ],+ [+ 124.2,+ 83.6+ ]+ ],+ "priority": 4,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ }+ ]+}
design/spec.json+112−59@@ -141,13 +141,11 @@ "hotMaxRiseC": 35, "pours": [ {+ "name": "Top return and shield", "net": "GND", "layers": [- "B.Cu"+ "F.Cu" ],- "priority": 0,- "connection": "solid",- "name": "Power return and signal reference", "polygon": [ [ 98.3,@@ -165,57 +163,63 @@ 98.3, 101.7 ]- ]+ ],+ "priority": 0,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25 }, {- "net": "GND",+ "name": "D1 relocated heat spread front",+ "net": "LOAD_POS", "layers": [ "F.Cu" ],- "priority": 0,- "connection": "solid",- "name": "Top return and shield", "polygon": [ [- 98.3,- 30.3+ 114.0,+ 88.0 ], [- 161.7,- 30.3+ 121.8,+ 88.0 ], [- 161.7,- 101.7+ 121.8,+ 94.8 ], [- 98.3,- 101.7+ 114.0,+ 94.8 ]- ]+ ],+ "priority": 3,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25 }, {- "name": "D1 heat spread front",- "net": "LOAD_POS",+ "name": "Shunt positive spread front",+ "net": "SHUNT_P", "layers": [ "F.Cu" ], "polygon": [ [- 106.5,- 87.5+ 134.5,+ 84.7 ], [- 114.5,- 87.5+ 138.0,+ 84.7 ], [- 114.5,- 95+ 138.0,+ 88.0 ], [- 106.5,- 95+ 134.5,+ 88.0 ] ], "priority": 3,@@ -224,27 +228,27 @@ "minThickness": 0.25 }, {- "name": "D1 heat spread back",- "net": "LOAD_POS",+ "name": "Shunt positive spread back",+ "net": "SHUNT_P", "layers": [ "B.Cu" ], "polygon": [ [- 106.5,- 87.5+ 134.5,+ 84.7 ], [- 114.5,- 87.5+ 138.0,+ 84.7 ], [- 114.5,- 95+ 138.0,+ 88.0 ], [- 106.5,- 95+ 134.5,+ 88.0 ] ], "priority": 3,@@ -253,27 +257,56 @@ "minThickness": 0.25 }, {- "name": "Shunt positive spread front",- "net": "SHUNT_P",+ "name": "Power return and signal reference",+ "net": "GND", "layers": [- "F.Cu"+ "B.Cu" ], "polygon": [ [- 134.5,- 84.7+ 98.3,+ 30.3 ], [- 138,- 84.7+ 161.7,+ 30.3 ], [- 138,- 88+ 161.7,+ 101.7 ], [- 134.5,- 88+ 98.3,+ 101.7+ ]+ ],+ "priority": 0,+ "connection": "solid",+ "clearance": 0.2,+ "minThickness": 0.25+ },+ {+ "name": "D1 relocated heat spread back",+ "net": "LOAD_POS",+ "layers": [+ "B.Cu"+ ],+ "polygon": [+ [+ 114.0,+ 88.0+ ],+ [+ 121.8,+ 88.0+ ],+ [+ 121.8,+ 94.8+ ],+ [+ 114.0,+ 94.8 ] ], "priority": 3,@@ -282,30 +315,50 @@ "minThickness": 0.25 }, {- "name": "Shunt positive spread back",+ "name": "Q1 source to shunt current spread back", "net": "SHUNT_P", "layers": [ "B.Cu" ], "polygon": [ [- 134.5,- 84.7+ 124.2,+ 82.8 ], [- 138,- 84.7+ 125.6,+ 82.4 ], [- 138,- 88+ 127.0,+ 82.8 ], [- 134.5,- 88+ 133.8,+ 82.8+ ],+ [+ 135.4,+ 84.8+ ],+ [+ 135.4,+ 85.4+ ],+ [+ 133.5,+ 85.2+ ],+ [+ 126.0,+ 85.2+ ],+ [+ 124.2,+ 83.6 ] ],- "priority": 3,+ "priority": 4, "connection": "solid", "clearance": 0.2, "minThickness": 0.25
docs/build-clips.md+6@@ -120,3 +120,9 @@ as a preview fixture. Recorder timing must not be treated as an engineering stop ## 9 October USB routing actions Two new raw recordings capture the actual ESD/link relocation and copper landing (`window-400958-20261009-124230.mp4`, 3.6 s) and trace-stub removal (`window-465474-20261009-124749.mp4`, very short take). The first has been sampled visually; both decode. The second still needs editorial review. Value-property cleanup happened after the first recording. These have not yet been cut into the final film. Automatic routing/thermal checkpoint recordings contain static review time and must not be presented as original copper construction.++## Gentle fan states and connector harness, 9 October++[Watch the labeled fan-state demonstration](../videos/fan-hero/window-5969372-20261009-163213.mp4). The actual canonical viewer shows a stopped rotor, smooth spin-up, steady rotation, smooth spin-down and rest. Wires and the added Adom connector stay still. This is simulated, deliberately slowed rotation, not hardware feedback. The Sunon factory variant has bare-ended wires; the Harwin termination is an added assembly.++The clip passed a full decode and contact-sheet review. The published wiki hero was separately checked through its full 20-second loop and animation-off mode. Native KiCad accepted the connector symbols and footprint. This does not establish physical mating, crimp strength, airflow or cooling qualification.
mechanical/cooling-body-audit.json+1−1@@ -1,5 +1,5 @@ {- "boardSha256": "347fc37404eff3e81dfb3211f06e3da4fe036657e130fec4f0f64a7e6f494f09",+ "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a", "method": "Conservative transformed fitted STEP bounding boxes, board XY with Z above top copper; zero local model transforms only", "sinkEnvelopeMm": [ 112,
tools/reconcile_pour_spec.pyadded+15@@ -0,0 +1,15 @@+"""Reconcile declared pour boundaries to the accepted native board; no copper edits."""+from pathlib import Path+import hashlib,json+import sexp+P=Path(__file__).resolve().parents[1];board=P/'kicad/adom-custom-electronic-load.kicad_pcb';raw=board.read_bytes();expected='653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a';assert hashlib.sha256(raw).hexdigest()==expected+b=sexp.parse(raw.decode());zones=[]+for z in sexp.find(b,'zone'):+ assert not sexp.first(z,'keepout')+ n=sexp.first(z,'name')[1];net=sexp.first(z,'net')[1];layer=sexp.first(z,'layer')[1];connect=sexp.first(z,'connect_pads');assert connect[1]=='yes'+ points=[[float(x[1]),float(x[2])]for x in sexp.find(sexp.first(sexp.first(z,'polygon'),'pts'),'xy')]+ zones.append({'name':n,'net':net,'layers':[layer],'polygon':points,'priority':int((sexp.first(z,'priority')or['priority',0])[1]),'connection':'solid','clearance':float(sexp.first(connect,'clearance')[1]),'minThickness':float(sexp.first(z,'min_thickness')[1])})+assert len(zones)==7+f=P/'design/spec.json';j=json.loads(f.read_text());before=j['pours'];j['pours']=zones;f.write_text(json.dumps(j,indent=2)+'\n')+(P/'design/pour-spec-reconciliation.json').write_text(json.dumps({'boardSha256':expected,'scope':'Declared planned zone boundaries reconciled to accepted native board; not a filled-connectivity or thermal proof','before':before,'after':zones},indent=2)+'\n')+print('Reconciled seven existing native zone boundaries. Board unchanged.')
videos/fan-hero/window-5969372-20261009-163213.mp4added⋯ 1 unchanged line ⋯