Files
orin-nano-env-setup/docs/impl/plans/POWER.md
T
mikkeli fe284ce540 Plan: ride through cranking, shut down at ignition off
UPS input comes from the ignition-switched socket via a 15 V PD
trigger, so input loss means cranking or ignition off. The INA219
(monitor-only) gives the battery current sign; a host service would mark
cranks, then after a grace period close the recording and power off,
with a voltage floor as backstop. Records the open hardware problem:
after poweroff the UPS keeps the board powered, so it drains and
doesn't auto-start at ignition on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:10:51 +09:00

54 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: plan
status: active
updated: 2026-10-09
---
# Car Power: Ride Through Cranking, Shut Down at Ignition Off
## Power chain
```
cigarette socket (ignition-switched, 65 W class, crank-sensitive)
→ USB-C PD charger → 15 V PD trigger (15 V / 3 A) → DC jack
→ Waveshare UPS Power Module (C), 3S 21700, 15–19 V in, pass-through
→ Orin Nano carrier
```
Socket power is ignition-switched, so **UPS input loss = ignition off or cranking**. The UPS rides through cranking
(bench: ≥ 20 s holdover across a supply swap). See [BOM](../../BOM.md#waveshare-ups-power-module-c).
## Detection
INA219 on I²C bus 7, `0x41`, monitor-only (the UPS has no control lines). Battery current from the shunt-voltage register (0x01, 10 µV/LSB):
about 0 or positive (charging) with input present, **clearly negative** (discharging) when input is lost. Battery voltage (0x02) is the backstop.
To confirm on the bench: the sign convention and the discharge magnitude at the Orin's real load (pull the UPS input and read).
## Policy (to build)
A small host service polling the INA219 about every 1 s:
| State | Condition | Action |
|---|---|---|
| on input | current ≥ about 0 | nothing |
| on battery | discharging, < grace | publish `system/power` "on battery"; **a short episode that recovers is a crank**: stamp it into the recording |
| ignition off | discharging continuously for grace (start at 60 s; tune after the car crank test) | publish "shutting down" → stop capture (close the session cleanly) → optional parked-at-home step → `systemctl poweroff` |
| battery low | voltage below a floor (around 10.5 V for 3S, to confirm), at any time | `systemctl poweroff` immediately |
Optional parked-at-home step: if home WiFi/LAN is reachable at ignition off, stay up long enough to copy recordings off over the LAN
(same LAN-only rule as map sync, project-yukart decision 10), within a hard time cap, then shut down.
## Open: getting the Orin back on at ignition on
After `poweroff` the UPS keeps supplying the board from its battery:
1. **Standby drain:** the halted Orin still draws some power, so the pack drains while parked, until the UPS's over-discharge protection cuts out.
2. **No auto-start:** the dev kit powers on when power *appears*. If the UPS output never dropped, ignition on doesn't boot the Orin.
Candidate fixes (hardware, to evaluate):
- Cut the UPS output after shutdown (a latching relay or a timer on the output), so the next ignition-on is a real power-up.
- Pulse the carrier's power-button header from a small circuit when socket power returns.
- Suspend (SC7) instead of poweroff, with wake on a GPIO tied to socket power. Untested on this board, and still drains.
Until this is solved, ignition-off shutdown leaves the car unit off until someone power-cycles it.