Drogheda/03-Architecture-Hardware/2026-09-09_Drogheda_Backup-LowPower-DutyCycle_Design-Brief_v1.0.md

9.5 KiB
Raw Blame History

tags project author date status
project-drogheda
firmware
power
battery
thermal
Project Drogheda Helgen CTO 2026-09-09 Draft — design proposal

Backup mode: duty-cycled low power, and what it does to the charging problem

Bottom line: yes, do the duty-cycle. But the wake interval barely matters — the sleep floor is everything. 10 min vs 60 min changes runtime by 2 %. Dropping the sleeping draw from 150 mW to 20 mW changes it by 5.5×. And the payoff is bigger than runtime: at ~1.5 Wh/day the pack needs ~10 minutes of charging a day, which the narrow cool window we already have can supply. The duty-cycle largely dissolves the temperature problem — that is the real reason to do it.


1. "Can't we just move the charge temperature?"

The threshold is ours (RNTB). The limit is the cell's. Charging an NMC/LCO 18650 at 55 °C is not a tuning choice — it is accelerated SEI growth, gas generation and a safety liability inside a sealed IP67 box in full sun. Not something to ship on 30 units.

What you can legitimately buy, without changing the cell:

  • Lower the float. Damage rate is temperature × voltage × time. You are already at 4.00 V rather than 4.20 V, which is most of the win. JP3/JP4 → F1=0/F0=0 gives 3.95 V and a little more margin. That justifies nudging the hot pause to maybe 48–50 °C if the cell's datasheet supports it. A few degrees, not fifteen.
  • Anything beyond that needs a cell rated for it — see the high-temp LFP note.

But read §3 before deciding any of this.


2. Duty-cycled backup — the numbers

Pack ~43 Wh, 85 % usable = 36.5 Wh. Boost efficiency 88 %.

Today, continuous: ~2.5 W at the 5 V rail → ~13 h; with the fan running, ~8 h.

Duty-cycled, wake = 10 s at 1.5 W (modem held in PSM, no re-attach):

sleep floor 10 min 30 min 60 min
150 mW 7.7 d 8.5 d 8.7 d
100 mW 10.7 d 12.4 d 12.9 d
50 mW 17.9 d 23.0 d 24.7 d
20 mW 29.8 d 47.3 d 55.5 d
10 mW 38.3 d 73.1 d 94.6 d

If the carrier will not give us PSM and every wake is a full LTE re-attach (~35 s):

sleep floor 10 min 30 min 60 min
150 mW 5.6 d 7.5 d 8.1 d
50 mW 9.7 d 16.9 d 20.8 d
20 mW 12.5 d 27.3 d 38.8 d

Read the rows, not the columns. Your 10-minute instinct costs 20–50 % against 30 min and buys the operator nothing they need. Go 30 min, and spend the effort on the floor.


3. 🔴 The part that matters most — it also fixes the charging

Duty cycle Daily energy Charging needed at 2.42 A
30 min wake, 50 mW sleep 1.59 Wh/day ~10 min/day
30 min wake, 20 mW sleep 0.77 Wh/day ~5 min/day
10 min wake, 100 mW sleep 3.41 Wh/day ~22 min/day

Today the pack must replace ~30 Wh after a long outage and we give it a charge window that closes at 42 °C. At 1.6 Wh/day you need ten minutes of cool weather. Port nights drop well below 40 °C — the existing window is already enough.

So the ordering changes: do the firmware work first. It is free, it ships to the installed fleet over the existing update path, and it may retire the cell question entirely. Keep the high-temp LFP option open — but stop treating it as the first move.

It also means the 43 Wh pack is oversized. At 1.6 Wh/day a single 12 Wh cell gives 6+ days — cheaper, cooler, smaller, easier to keep topped up.


4. What actually sets the sleep floor

Ranked by what I expect to find on the bench. All of these need measuring, not assuming.

Suspect Est. Fix
U17 AMS1117-3.3 — quiescent 5 mA typ / 11 mA max, and it burns 1.7 V × I as heat 25–55 mW Swap for a low-Iq LDO. U21 (AP2112K, 55 µA) is already in the BOM; a TPS7A02-class part is ~1 µA. This is probably the single biggest item and it is a one-part change
K1 coil — ~30 mA from SYS5V while the MCU is inserted 150 mW See §5
LTC4040 boost at very light load — light-load efficiency and its own Iq 10–40 mW? Measure. If bad, this caps everything and needs a rethink
Battery gauge LEDs PB12–15, D17, D18, DB1–4, D4G1 50–150 mW All off in backup, or one 50 ms blink per wake
U12 MP1584 → /3V3_ETH + W5500 (~130 mA) 400+ mW Ethernet is useless on battery — disable U12, hold W5500 in reset
MAX3232 charge pump, SP3485, SC16IS752 5–15 mW Shutdown pins / disable
U18 V_BCKP 0.15 mW ✅ already right — see §6
MCU in STOP + LSE RTC 0.1–0.2 mW Achievable; today it is ~165 mW because loop() never stops

⚠ Today's SLEEP state is not a low-power state. It cuts PWR_CTRL and then keeps spinning loop() at 84 MHz with Serial, I²C polling and the gauge alive. Real STOP-mode

  • RTC wake is the substantive firmware change here. Y4 (32.768 kHz) is on the board, so LSE-driven RTC wake is available.

5. K1 — reverse the earlier call

The Firmware v3.1 brief said: "bobina ~30 mA de SYS5V … se queda insertado; 30 mA contra 12 Ah es ruido." That was correct for a 13-hour continuous budget. It is wrong for a duty-cycled one — 150 mW against a 20–50 mW target is 3–7× the entire rest of the floor, and it alone would cap you at 8 days no matter what else you fix.

New rule: BYP_CTRL low between wakes, high only during the TX window. 150 mW × 10 s per 30 min = 0.8 mW average — it disappears. The fail-safe semantics are unchanged (de-energised = F9P→modem direct), and between wakes there is nothing to inject anyway.

Longer term, a latching relay (G6K-class, pulse to switch, zero hold) removes the question permanently. Worth pricing for the v6 BOM.


6. Don't chase position — you already have the right parts

The machine is parked. Its position does not change during an outage, so re-acquiring a fix every wake is pure waste.

  • V_BCKP is already wired (/3V3 via 1 kΩ + Schottky, 45 µA) and keeps ephemeris, so when you do want a fix it is a hot start (~2–5 s), not a 30 s cold start. Good design, already done.
  • Report the stored position with a pwr=BATT flag and a staleness marker. Take a real fix only every N-th wake (e.g. every 2 h) as an anti-theft check.
  • U26 (SC7A20 accelerometer) is on the v6 board. Wire its interrupt to a wake-capable pin and you get motion-triggered wake for free: asleep while the machine is still, awake within a second if someone moves it. That is strictly better than polling GNSS. ⚠ U26 does not appear in any of the v6 briefs — confirm what it was placed for and that its INT line reaches an EXTI/wake pin before counting on this.

7. Modem: PSM before power-cycling

Power-cycling the modem every 10 minutes means paying a full network attach every 10 minutes — 20–30 s at 100–300 mA with 2 A bursts. 3GPP PSM keeps the module registered while it sleeps at tens of µA, with no re-attach cost; eDRX is the lighter variant.

  • The A7670SA (Cat-1bis) supports PSM. Whether you get it is a Telcel question, not a module question — it depends on the APN/plan and the network granting the requested TAU. Verify this early; the whole table in §2 hinges on which column you land in.
  • Fall back to MODEM_PWR_EN power-cycling only if PSM is refused — and then stretch the interval to 30–60 min so the attach cost amortises.

⚠ Inrush risk. You already tripped the LTC4040 PFI at 4.60 V on LTE inrush with no pack connected. Duty-cycling means taking that 2 A / 7.6 W burst repeatedly, at low SoC, on a hot or aged pack. Hold the ≥ 470 µF modem bulk, and bench the worst case: coldest SoC × hottest pack × attach burst. This is the most likely way the design fails in the field.


8. Proposed state machine

RUNNING ──(5V_SENSE PA4 falls, debounced)──► BACKUP_ENTRY
  BACKUP_ENTRY:  hot-start fix (or use last) → $PHLG{pwr=BATT, evt=POWER_LOSS} → TX now
                 (operators care most in the first minute — do not make them wait 30)
  → BACKUP_SLEEP: PWR_CTRL low · MODEM→PSM · BYP_CTRL low · U12/W5500 off
                  transceivers shutdown · LEDs off · fan off · MCU STOP + RTC(T)
  → wake on RTC(T) or accelerometer INT or PA4 rising:
       read vbat/tbat → if vbat < BAT_CRITICAL: TX final "shutting down" → deep off
       else: BYP_CTRL high → modem wake → TX heartbeat → back to BACKUP_SLEEP
  → PA4 rising: full wake, resume RUNNING

Adaptive cadence (cheap, and better product behaviour): 15 min for the first hour, 30 min to 24 h, 60 min after. Include the drain rate in $PHLG so ops can see how long the unit has left rather than guessing.

Fan: off in backup, full stop. A 5 V fan is 0.75–1.25 W — it would consume the entire budget in hours. If the box is too hot to sit idle without a fan, that is a thermal problem, not a power-management one.


9. Do these three first

  1. Measure the sleeping current on a v5.5 board with PWR_CTRL low, MCU in STOP, and the loads in §4 disabled one at a time. That single number decides everything in §2.
  2. Ask Telcel about PSM/eDRX on the current APN and plan. It sets which table applies.
  3. Pull the tbat/tntc fleet histogram — with §3's 10 min/day figure in hand, the question is no longer "is it ever cool enough" but "is it cool enough for ten minutes", which is a much easier bar and may already be met.