From d49a5299b036fc078fbc79e87bca809c97efe4a3 Mon Sep 17 00:00:00 2001 From: Niel Nielsen Date: Sat, 29 Aug 2026 19:10:08 +0200 Subject: [PATCH] Refine low battery shutdown conditions Update low battery shutdown logic to require corroboration from both voltage and SoC. Signed-off-by: Niel Nielsen --- armsrc/bwm_charger.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/armsrc/bwm_charger.c b/armsrc/bwm_charger.c index e52a46ac3..89834e5bb 100644 --- a/armsrc/bwm_charger.c +++ b/armsrc/bwm_charger.c @@ -456,8 +456,11 @@ void bwm_lowbatt_check(void) { // Critical: voltage-primary, SoC secondary. Require BWM_SHUTDOWN_CONFIRMATIONS // consecutive sub-floor polls, then latch power off (same release as the // long-press shutdown; a button press powers back on, in hardware). - if ((mv <= BWM_SHUTDOWN_MV) || (soc <= BWM_SHUTDOWN_SOC_PCT)) { - if (++crit >= BWM_SHUTDOWN_CONFIRMATIONS) { + // voltage-primary; SoC can only *corroborate* (it over-reads on an + // uncalibrated gauge - e.g. <3% reported at 3.6 V). Never let SoC alone + // trigger power-off: require the pack to also be in the low-batt zone. + if ((mv <= BWM_SHUTDOWN_MV) || + ((soc <= BWM_SHUTDOWN_SOC_PCT) && (mv <= BWM_LOWBATT_MV))) { if (++crit >= BWM_SHUTDOWN_CONFIRMATIONS) { bwm_beep_low_batt(); // final audible warning before cut-off LEDsoff(); Gpio_ARM_Power_ON_Low();