50 次采样取中值 — 为什么 Ampere 要等 10 秒才显示读数
为什么不直接读一次
直接从 BMS 读取一个电流值然后显示 —— 看起来简单,但实际用起来会出问题:
插上充电器的一瞬间电流会跳变。刚插入 USB 时,充电器会尝试握手协商快充协议,电流会出现一个几十到几百毫安的尖峰。直接读这个值会让你误以为充电器真的能持续输出这么大的电流,但那只是瞬间值,稳定后电流会降到正常水平。
Ampere 的 10 秒等待就是在处理这个问题。
50-10-10 采样公式
Ampere 的采样处理逻辑来自官方描述:
- 连续读取 50 次 BMS 电流值
- 去掉最高的 10 个(过滤尖峰)
- 去掉最低的 10 个(过滤低谷)
- 剩下 30 个取算术平均 → 显示值
这个设计相当稳健:既不会被偶发的尖峰骗到,也不会被传感器短暂掉线拉低。
为什么等待时间是"大约"10 秒
等待时间不是精确固定的,取决于:
- BMS 传感器的刷新频率(手机差异很大,有的每秒 1 次,有的更快)
- Android 系统在当前电量状态下的 BMS 采样策略
- 充电器是否在协商快充协议(协商过程中电流会频繁变化,需要更长时间稳定)
实测下来大多数设备在 7~12 秒 之间出数。如果等了超过 20 秒还在"正在检测",大概率是兼容性问题,参见 检测卡住怎么办。
读数的稳定性 vs 准确性
Ampere 的读数相对稳定(同一条件下多次测量结果接近),但绝对不准确(和实验室仪器对比可能差 20% 以上)。它的设计目标就是"足够稳定用于对比",而不是"精确到毫安"。
官方原话:"The app is not meant to be mA accurate. It is only good for evaluating which charger / USB cable combo is working the best for you on the same device."
不要把它当作精密仪器用。但在同一台手机上做对比时,它的参考价值非常高 —— 因为误差来源(BMS 精度、系统策略)在对比组之间是相同的,所以对比结果依然可信。
读数会跳变怎么办
如果稳定后电流还在小幅上下波动(例如 1500 mA ↔ 1600 mA 之间来回),这属于正常现象 —— 手机在运行后台任务、屏幕亮度自动调节都会带来电流波动。取平均值即可,不要追求完美的固定数值。
大幅跳变(例如一瞬间从 2000 mA 降到 300 mA 又跳回去)就不正常了,可能是充电器握手问题或线材接触不良,参见 读数跳变不稳。