FW16 psu and battery interactions

I have a FW16 AMD. Latest BIOS 3.0.5

Some observations.

  1. battery limit set in bios to 80%.
  2. psu plugged in.
  3. battery at 80%.
  4. bios battery limit changed 60%
  5. psu plugged in and laptop powered on.
    What should one expect to see when the FW16 is without a dGPU?

I expected:

  1. with the psu plugged in, I expected the battery to stay at 80%, and only when the psu was unplugged that it would drop to below 60%
  2. when the psu is plugged in again, it charge up to 60% limit.

What happend:

  1. with the psu plugged in, it discharged to 60% immediately.

With the charge now at 60%, what is it doing behind the scenes? It is taking all power from the psu and not touching the battery, or is it doing quick cycles, discharge a little, then recharge?
Edit: it is doing quick cycles.

It does seem odd to me.

I have found a way to stop it trying to charge or discharge the battery when you don’t want it to. With the psu plugged in:
ectool chargecontrol idle

This lets you monitor the battery so you can check it is not charging and staying steady:
ectool battery

Battery 0 info:
OEM name: NVT
Model number: FRANDBAT01
Chemistry : LION
Serial number: 0084
Design capacity: 5491 mAh
Last full charge: 5269 mAh
Design output voltage 15480 mV
Cycle count 70
Present voltage 16016 mV
Present current 0 mA
Remaining capacity 3145 mAh
Desired voltage 17800 mV
Desired current 5491 mA
Flags 0x0b AC_PRESENT BATT_PRESENT CHARGING

Note that the “Present current” is zero and that “Remaining Capacity” stays constant.
The FLAGs saying CHARGING don’t seem to be very accurate.
Present current > 0 == charging.
Present current < 0 == discharging.

Each time you unplug the psu, the “idle” changes to “normal”.
When you plug the psu back in, you have to re-type the idle one:
ectool chargecontrol idle

Anyway, at least I have a work around, so that it never messes with the battery when I have the psu plugged in now.

Fun new thing found.
If the charge limit is set to 60%.
If I put it to sleep with the psu connected , it happily goes charging above 60%.
Then when I resume the laptop, it self discharges back to 60%.
I then have to use the idle again to stop it messing about.
ectool chargecontrol idle

1 Like

I have taken a look at the EC source code, and the battery management code is not exactly easy to follow. The logic rules it follows is also unclear.
Its going to take a while to understand it.
It is not a 1) gather current state and parameters 2) make decisions to charge, discharge or idle 3) Do action.

There are also cases where it chooses to disconnect the psu even when it is plugged in and let’s the battery discharge instead. I don’t understand the use case for that.

Another observation.
Without charging the battery to max charge, the battery stats ‘level of last full charge’ seems to vary with different reads of the battery stats (ectool battery). I would have thought that figure would be constant until the next full charge.

Your ectool idle trick works. Automate it with udev:

echo ‘ACTION==“add”, SUBSYSTEM==“power_supply”, RUN+=“/usr/bin/ectool chargecontrol idle”’ | sudo tee /etc/udev/rules.d/99-battery-idle.rules

If you set the target to 60% and the battery is at more then 60% then it makes sense that it discharge the battery to reach the target even if the laptop is plugged in.

Oh well. That makes no sense to me. As a user, my expectation is that if the PSU is plugged in, the battery should not discharge at all.
Also, say if the hysteresis was set to a range of say 55% - 60%, the battery was charging up to 60%, then discharging to 55%, then charging to 60% is a continuous cycle with the PSU plugged in all the while.
If the PSU is plugged in, simple not discharging when the PSU is plugged in would be more sensible.