SoC, State of Charge, stuck at low value after cold weather

Hi John

rickkas7 is right, Since Device OS 1.5.0, the system force-sleeps the MAX17043 during System.sleep(), freezing the ModelGauge algorithm. On wake, you get a stale SoC from however many minutes/hours ago. If your wake window is short (which it is, because you're trying to save battery), the model never catches up. Cold weather compounds it because Device OS doesn't update RCOMP for temperature either.

I've been dealing with this since 2020. I even asked Particle directly to add an option to keep the fuel gauge awake during sleep: Put Electron to sleep but keep fuel gauge awake on 1.5.0 . Never
got a response. Six years later, here's rickkas7 guessing at the same problem.

To add insult to injury, I was forced to upgrade to Device OS 3.3.1 because the cellular modem on my Electron is not supported by older versions.

The "fix": call fuel.quickStart() after every wake. It forces a fresh OCV measurement and resets the model from scratch. Works well if you do it before the modem powers up (low load = VCELL is close to true OCV). I also built a voltage-to-SoC sanity table that detects when the gauge is lying and triggers quickStart() automatically.

The real question remains: why is Device OS sleeping a 50 µA chip to save power while keeping a 10 mA cellular modem in network standby? The math doesn't math. But I'm sure we'll get an answer any year now.

1 Like