自制笔记本电池
开发时间2023年8月-10月,未完成,已实现基本功能
开发背景
我的联想Y50-70笔记本坏了,想买台支持Libreboot等自由引导程序的笔记本,我选了比较便宜的ThinkPad X200,卖家说电池待机时间只有20-30分钟,买块新电池至少要60元,网上搜到说大多数笔记本电池换电芯断电后就锁定了,一种方法是换电芯时并联新电池再断开旧电池。
我想出了另一种方法,能不能自己做块保护板,单片机里面的程序用自己写的自由软件,这样就不会被锁定了。还能添加自己想要的功能。
所以我打算自己做笔记本电池,还要完全不用原来电池的任何材料,这样可以做多个电池,再做一个独立充电器,就能两块电池轮换使用了。还想要当充电宝使用,实现一块电池多种用途。
开发过程
- 为了做保护板,要能与笔记本电脑通信,我看到StackExchange上的一个问题,有一个回答说是用SmartBattery(SBS)协议。
- hackaday上有一个开源ThinkPad电池,但是笔记本型号是ThinkPad T420,我也参考了一下,用的是SBS协议。
- 拆解原装电池时PCB突然冒烟了,我立马剪断PCB与电池连接。拆下来保护板好像已经坏了,发现保护板上有个单片机(型号:M37512FC),里面肯定有程序,没有提供源代码的程序一定是非自由的。笔记本的BIOS都刷成自由的Libreboot了,我想这些专有软件也应该尽可能的替换掉。保护板上的芯片资料不全,这种单片机型号我也没有接触过,我使用通用单片机CH32V103C8T6与笔记本进行通信。
- AFE前端,最终选择了SH367303(规格书可以在这个页面下载到)。SH366000A虽然直接提供SBS协议,但内部有专有固件且不可修改,没有采用。SH367303不是专门用于笔记本电池的前端芯片,网上描述为电动工具锂电保护管理IC,但为了自由我就采用没有内置算法的AFE芯片。
- 8月18日代码所在的文件系统崩溃了,我使用恢复出来的部分源代码重建了工程,立马备份。
- 原来的保护板单片机还没有损坏,连接到树莓派I2C上,i2cdump返回数据看起来像SBS协议。我就用单片机I2C实现SBS协议,返回一些自定义数据,接到笔记本的电池接口上,操作系统中显示出了这些信息。但笔记本不给电池充电,只能放电,如果电池需要拔下来充电就很麻烦。
- 我实现了PEC校验,复制ThinkPad T420工程中的数据,全部复制后能充电了,多次测试部分换成自定义数据后能否充电,发现关键数据在ManufacturerAccess(0x00)
- 开发板上的单片机损坏了两次,可能是GPIO误碰到BATT+。自制保护板上的单片机也损坏了两次,第一次剪掉脚直接换了上去,第二次PCB焊盘损坏了,只好换一块PCB,我还买了很便宜的热风枪来拆QFP封装的SH367303芯片,换到另一块PCB了。幸好SH367303芯片从来没有损坏过,我只买了一块SH367303。
- 买来的接口高度比原装电池接口低,装上去经常突然显示电量0%,还会自动关机,推一下电池才会恢复,好像是接触不好。我尝试把引脚弯曲伸出去,用热熔胶把接口固定在外壳上,再用热熔胶把电池固定到笔记本上,问题仍然出现。于是我只能用电线将PCB与接口连接,电池位置有些向后,居然还出现这个问题,我觉得不是接触问题,后来发现是一个bug(已于commit 125c57c修复)
- 11月我去搞显微切片机了,这个项目被暂停了,还有一些功能没有实现。
本文当时没有及时记录,在11月22-23日靠回忆和一些现存资料编写,可能有错误和疏漏。
项目仓库
参考资料
Copyright © 2023 徐瑞骏
本页面使用知识共享 署名-相同方式共享 4.0 协议国际版(CC BY-SA 4.0)授权。