手机20%突然关机?电量百分比是估的,SOC曲线4组实测

1 阅读5分钟

同一块 5000mAh 电池,25℃ 刷视频能撑到表显 5.7% 才关机;0℃ 户外、1.2A 负载下,表显 18.7% 就黑屏。

差的不是那 13 个百分点,是内阻在低温下多吃掉的那 0.1V 端电压。

我把这套关系做成了一个可拖动的网页实验室,四组场景跑完,关机点从 5.7% 拉到 18.7%。

图 1:常温 25℃、0.8A 刷视频,表显 100% 时端电压 4.136V

一、为什么值得看:电量百分比不是油量表

手机显示的不是油箱刻度。

它靠库仑计累计电流,再用开路电压做校正。

问题出在曲线尾部:20% 对应 3.62V,10% 只有 3.55V,0% 是 3.30V。

电压只差 0.07V,表显却差 10 个百分点。

带上负载后,端电压还要再减 I×R。

温度越低、电池越老,R 越大,端电压越早跌破保护阈值。

于是表显还有 18.7%,电芯其实已经放不出可用电压。

二、为什么我把这件事做成网页

口头解释很容易,拖动滑块看曲线怎么塌下去更直观。

我想回答三个问题:温度影响多大、老化影响多大、高负载影响多大。

这三个变量单独看都不难,叠在一起就容易把原因说错。

网页把开路电压曲线、端电压曲线和 3.40V 阈值画在同一张图上,关机点直接标出来。

码道有三种使用方式:WebUI(浏览器对话)、TUI(终端命令行)和桌面 IDE(IDE 插件)。本文用 WebUI 版。

三、这轮码道实际做了什么

我给码道的需求是一句话:做一个单文件手机电池实验室,能调温度、负载和健康度,实时画出端电压曲线。

它交付了一个 1165 行的 index.html,没有外部 CDN、字体和图片。

左侧是手机模型,右侧是 canvas 曲线,下面是四个场景卡片和对照表。

所有数字来自同一套函数,表格、卡片和曲线不会各算各的。

图 2:0℃ 户外、1.2A 负载,内阻 0.176Ω,关机点 18.7%

模型一共五行:

容量 = 5000mAh × 健康度
OCV(SOC) = 12 点表线性插值
V端 = OCV(SOC) - I × R
R = 0.08Ω × 温度系数 × 健康系数
关机阈值 = 3.40V

内阻基准取 25℃、健康 100% 时的 0.08Ω。

0℃ 乘 2.2,-10℃ 乘 3.2,40℃ 乘 0.85。

健康度 80% 再乘 1.8,容量同时按 4000mAh 算。

四、四组场景跑出来的关机点

四组参数共用一块 5000mAh 电芯,结果都来自页面里的同一个计算函数。

场景温度负载内阻关机表显 SOC关机时剩余容量预计时长
A 常温刷视频25℃0.8A0.080Ω5.7%285mAh5 小时 54 分
B 冬天户外0℃1.2A0.176Ω18.7%937mAh3 小时 23 分
C 两年老电池25℃1.2A0.144Ω13.2%530mAh2 小时 54 分
D 高负载游戏35℃2.5A0.072Ω14.3%714mAh1 小时 43 分

常温刷视频,端电压到 3.40V 时表显还剩 5.7%,对应 285mAh。

冬天户外,内阻从 0.080Ω 涨到 0.176Ω,关机点推到 18.7%,剩余 937mAh。

两年老电池,容量掉到 4000mAh,内阻 0.144Ω,关机点 13.2%。

高负载游戏,2.5A 把压降拉到 0.18V,关机点 14.3%。

图 3:35℃、2.5A 游戏场景,关机点 14.3%

注意 B 组剩余容量反而最多。

不是电芯没电,是端电压先扛不住了。

五、验证与踩坑:12 项断言和一次阈值修正

页面底部有 12 条断言,打开就自动跑。

12/12 全部通过。

第 10 条最能说明问题:关机瞬间端电压 3.400V,开路电压还有 3.611V。

也就是说,触发关机的是带载后的端电压,不是静态开路电压。

第一版我用的是 3.30V 阈值。

跑出来四组关机点是 2.1%、8.1%、6.1%、6.5%,和“20% 关机”的现象对不上。

查了一遍,3.30V 更接近电芯保护阈值,手机在负载下通常按 3.4~3.5V 截止。

把阈值改到 3.40V 后,B 组变成 18.7%,C、D 组 13%~14%,曲线和现象一致。

这次修正也暴露了一个事实:模型参数差 0.1V,结论会差十几个百分点。

另一个小问题是图表标签重叠。

3.40V 阈值文字压在关机预测点上,我把阈值标签挪到右侧,预测标签挪到点下方。

这类问题不影响计算,但截图里一眼就能看见。

图 4:场景对照表与 12 项自检结果,全部 PASS

失败路径也留了一个入口。

点“边界测试”会用 -25℃ 触发参数校验,页面弹出“参数超出模型适用范围,请检查后重试”,并保留上一次有效参数。

非法容量、负载大于 6A、温度越界都会走同一条回退逻辑。

图 5:边界测试触发中文错误提示,参数回退到上一次有效值

边界也要说清楚。

这是一个参数模型,不是对某台具体手机的实测。

开路电压表和内阻系数取的是常见锂离子电芯范围,真实机型还会有电量计算法、老化历史和保护板差异。

它能解释趋势,不能拿来给一台手机判健康度。

六、本地复现

整页只有一个 index.html。

在文件所在目录起一个静态服务:

python -m http.server 8080

浏览器打开 http://localhost:8080/index.html 就能跑。

五张截图都是 1920×1080,分别是常温、冬天、老化对照表、高负载和错误路径。

案例和源码放在公开仓库:gitcode.com/OPCTeam/dem…

打开后直接点场景卡片,不需要装依赖。

七、使用码道体会

这次最省事的是布局和交互。

一句话需求,码道把手机模型、canvas 曲线、滑块、卡片和表格都搭齐了。

需要我补的是物理参数和验收。

3.30V 到 3.40V 这一改,模型才和现象对上。

如果只看着页面“能跑”就发,数据会自相矛盾。

我的用法是:让码道做界面和计算骨架,自己盯住参数、断言和失败路径。

下一页想加的是电量计估算误差,把“表显 SOC”和“真实 SOC”分开画。

那一步更接近手机里的实际算法。

八、准备环境:进入码道 Web

浏览器打开码道 Web 版:devcloud.cn-north-4.huaweicloud.com/chat?source…

登录后就能在对话窗口输入需求,不需要装软件。

本文的页面就是用这条入口生成的。