[ltp] Measuring battery health (was: Suggestions for battery sources)

Henrique de Moraes Holschuh linux-thinkpad@linux-thinkpad.org
Tue, 25 May 2010 18:09:17 -0300

On Tue, 25 May 2010, Stefan Monnier wrote:
> Is this 11.34% estimate reliable if the battery never reaches a full
> charge (thanks for tp-smapi's setting of 70% in your case)?

It is accurate only after a gauge reset.  It tells you how much the last
full charge has deviated from the design full charge.

It is given by this formula:

deviation = (last_full_capacity)/(design_capacity)

and it CAN be above 1.00 on new batteries.

> More generally: how is the "last full capacity" computed?

You drain it as empty as it is safe to, and set the "current capacity" to
zero.  Then you start charging, and measure the voltage and current so that
you can integrate them into the charge flowing into the cells.  When you
stop charging because of one of the boundary conditions that detect a full
cell, you update "last full capacity".

Since you cannot measure power perfectly, the fuel gauge gets very
innacurate over time.  The only syncronization point available is the empty
level (where you can reset your idea of the current charge available to

The pack might well decide to update last_full_capacity without a gauge
reset, but the accumulated error will make that measurement iffy at best.

My SANYO T43 battery packs seem to update it every time I charge them to
full, BUT they signal a massive error margin (50%!) unless you did a gague
reset recently.  I don't think IBM took that error margin parameter very

I don't know if the stuff inside the newer Lenovo battery packs is any

> My impression is that it can only be modified when:
> - the battery reaches a full charge (in that case
>   it can do last_full_capacity = remaining_capacity).
> - the battery becomes completely empty (in which case it can do:
>   last_full_capacity -= remaining_capacity; remaining_capacity = 0).

It has to do the zero point first to be accurate, see above.  But it can
update last_full_capacity anytime it decides it is full...

> So unless there are other ways to adjust the estimate of
> remaining_capacity and last_full_capacity, that means that

The way to adjust those capacities is to force the battery to do a gague
reset, which it should do automatically if you drain it empty and then
charge it to full (make sure not to interrupt the charge process, the pack
uC might decide to abort the gague reset procedure).

My procedure for a gaugue reset is this: I use the laptop until it is nearly
empty (take the opportuntiy to set the stop-charge limit in a Lenovo to 100,
doesn't matter for IBM), then I reboot into the BIOS and leave it on until
it self-powers-off.  Then I plug it and leave it charging (still powered
off) until it decides it is full.

> Since such a use-case seems highly likely (after all, it's recommended
> if you want to maximize your battery's lifetime), I'd guess that there

Eh, you must do that sparingly, as a deep drain and full charge will wear
the cells a lot more than 30%-85% cycles.

  "One disk to rule them all, One disk to find them. One disk to bring
  them all and in the darkness grind them. In the Land of Redmond
  where the shadows lie." -- The Silicon Valley Tarot
  Henrique Holschuh