这个电池的道理其实是在遥控直升机的锂电池上学来的。
放到电脑上的锂电池也一样适用。只不过直升机上的电池
维护比较苛刻,放电电流很大(20C 以上),而且电池性能
的减弱对飞行性能影响很大。还有一点就是直升机电池
没有智能保护电路,因为放电电流很大,对电池的损伤
可以比较容易碰到,所以直升机电池维护比较仔细。
锂电池有两种情况会损伤电池容量。第一就是过渡放电,
放电超过 20% 就容易损伤容量。完全放干,低于 3.7V
一个 cell 就会严重损伤。这个我想大家都知道。
另一个就是长期储存高电量,这个会减少电池容量。
所以在直升机上最佳的电池使用方式是每次飞行前
充电,飞完把电都用掉。长期不用要放掉电,但是要
注意不要过度放电,低于20%。
所以笔记本长期插AC电源会减少电池寿命。
如果长期使用 AC,比较好的办法是吧电池放到 20% - 30%
左右,然后把电池拿出来。电池自己有轻微放电,然后
定期要冲放一下,例如几个月。
在 Linux 下面可以用 ACPI 接口直接看到电池的设计
容量和当前容量。可以比较精确衡量电池的损坏程度。
我用这种方法验证了的确长期使用 AC, 拿出电池对
容量的保护很好。
然后把电池放到 30% 拿出还有点烦,因为要经常看着。
我后来写了个放电程序,电池电量降低到 30% 就自动
关机。还挺好用。这里分享一下。
程序是 Python 写的,只能在 Linux 下用,需要用 root
权限,如果没有 root 会自动试图使用 sudo。
#!/usr/bin/python
import os
import sys
import glob
import time
if os.getuid() != 0:
print "Must be root, trying sudo"
os.execvp("sudo", ['sudo'] + sys.argv)
sys.exit(1)
def get_power_level(battery):
full, now = ( int(open(os.path.join(battery, f)).read()) for f in ['
energy_full', 'energy_now'])
# print full, now
return now * 100 / full
batterys = glob.glob('/sys/bus/acpi/drivers/battery/*/power_supply/*')
print batterys
print get_power_level(batterys[0])
while 1:
for bat in batterys:
level = get_power_level(bat)
print "Battery level", level
if level < 30:
os.system("shutdown --no-wall now")
time.sleep(60)