如何根据电池统计数据计算功耗

如何根据电池统计数据计算功耗

arch我在我的新笔记本电脑上安装了linux msi prestige ps42。令我失望的是,电池寿命很快就恶化了。使用前 2 个月后,电池只能为笔记本电脑供电约 3 小时。

我自然想计算一下实际的功耗是多少。为此,我/sys/class/power_supply/BAT1使用 Python 守护进程记录了电池统计信息。主循环是这样的:

with open('/sys/class/power_supply/BAT1/current_now', 'r') as curFile:
    current = float(curFile.read().replace('\n', ''))
with open('/sys/class/power_supply/BAT1/voltage_now', 'r') as volFile:
    voltage = float(volFile.read().replace('\n', ''))
with open('/sys/class/power_supply/BAT1/charge_now', 'r') as charNowFile:
    chargeNow = float(charNowFile.read().replace('\n', ''))
timeNow = time.time()
# time|power|energy
print(timeNow - startTime, current*voltage*1e-12, chargeNow*voltage*1e-12)
time.sleep(1)

功效计算如下voltage*currentpower_now文件夹中缺少文件)并乘以1e-12这些数据应带有的micro单位。能量计算为voltage*charge并乘以1e-12。时间被记录在seconds.

结果我得到了这样的结果(时间|功率|能量):

0.0001957416534423828 7.868766 38.895102
1.1173264980316162 9.038664 38.895102
2.2340087890625 9.039228 38.897529
3.350689172744751 8.526364 38.897529
4.46724009513855 8.522639999999999 38.880539999999996
5.583956003189087 8.535461999999999 38.865978
6.69666862487793 10.040778 38.865978
7.810216903686523 9.999395999999999 38.705796
8.811989784240723 9.999395999999999 38.705796
9.81338357925415 8.591463 38.829572999999996
10.815097093582153 8.591463 38.829572999999996
...

接下来我计算了功率的能量依赖性:

calcEArray = np.empty(0, float)
calcEArray = np.append(calcEArray, array[0,2])
for prevStat, nextStat in zip(array[:-1], array[1:]):
    calcEArray = np.append(calcEArray, calcEArray[-1] - (nextStat[0]-prevStat[0])*prevStat[1])

正如代码所示:E_i = E_(i-1) - (time_i - time_(i-1))*power_(i-1)

当我比较计算的能量与记录的能量时,我得到了完全不同的曲线: 在此输入图像描述

第一个想法显然是单位是错误的,但我尝试了 10eX 单位的功率和能量的所有组合,但曲线不匹配。

第二个想法是时间跨度太大并且没有记录功率峰值。

您有这样记录电量的经历吗?

相关内容