Reviewd and fixed deadman architecture

This commit is contained in:
2026-09-10 23:53:27 +02:00
parent 31b3595ac0
commit f8d111ef5c
15 changed files with 304 additions and 305 deletions
+17 -9
View File
@@ -99,15 +99,23 @@ f.note('Sensor output is the sensors signal pin. Both ADC channels use +3V3_A
chain('dac-output','Optional analogue-output provision','IO_ARCHITECTURE.md: Analogue-output provision',['MCU DAC','Rail-to-rail buffer','Protection /\nseries impedance','Connector'],'Provision only; final electrical range, load and protection remain to be defined.')
f=Figure('deadman-inputs','Deadman contacts and observations','IO_MODULES/DEAD_MAN.md: Logic domains',1040,650)
for i,c in enumerate('AB'):
y=100+i*245
f.node(c+'s','Protected 5 V\nIndependent NO contact '+c,30,y,260,80,'power')
f.node(c+'p','Protected input '+c+'\nOwn filter + default-low bias',370,y,290,80,'signal')
f.node(c+'h','DEADMAN_A_HELD\n5 V · non-inverting' if c=='A' else 'DEADMAN_B_RELEASED\n5 V · inverting',750,y,260,80,'signal')
f.node(c+'d','DEADMAN_'+c+'_STATUS\n3.3 V · held = high → MCU',370,y+120,330,75,'device')
f.edge(c+'s',c+'p'); f.edge(c+'p',c+'h'); f.edge(c+'p',c+'d',exit=(.5,1),entry=(.5,0))
f.note('Separate harness paths. MCU status observations are diagnostic; the 5 V signals feed the permit gates.',575);f.save()
f=Figure('deadman-inputs','Parallel switches · one ECU deadman input','IO_MODULES/DEAD_MAN.md: Steering-wheel wiring and ECU input',1040,750)
f.node('supply','Protected 5 V',30,200,220,80,'power')
f.node('left','Left NO switch\nHeld = closed',340,90,230,80,'device')
f.node('right','Right NO switch\nHeld = closed',340,300,230,80,'device')
f.node('shared','DEADMAN_IN\nJoined at steering wheel',740,200,270,80,'signal')
f.edge('supply','left',points=[(290,240),(290,130)])
f.edge('supply','right',points=[(290,240),(290,340)])
f.edge('left','shared',points=[(660,130),(660,240)])
f.edge('right','shared',points=[(660,340),(660,240)])
f.note('Switches are physically in parallel. Either held → asserted; both released → deasserted.',390)
f.node('input','DEADMAN_IN\nOne ECU signal pin',30,490,240,80)
f.node('conditioning','Protection + filter\nDefault-low bias',340,490,270,80)
f.node('ok','DEADMAN_OK\n5 V · hardware gates',740,490,270,80)
f.node('status','DEADMAN_STATUS\n3.3 V → one MCU input',340,630,310,80,'device')
f.edge('input','conditioning');f.edge('conditioning','ok')
f.edge('conditioning','status',exit=(.5,1),entry=(.5,0))
f.save()
for name,title,part,pin,load,ground,source in [
('ignition-power','Ignition power path','VBG08H-E','HVC','Coil primary','IGN_PGND','IGNITION'),