【中科蓝讯】耳机电量与充电问题复盘
本文先整理电压采样的方案设计思路,再复盘下面五类电量与充电问题: 电压稳定方案的设计思路 电量曲线 温度采样 上报精度 电量管控 状态刷新 一、电压稳定方案的设计思路 电量计算不会直接使用一次 ADC 采样结果。播放音乐、蓝牙发射和负载切换都会造成短时波动,因此在进入电量估算前,需要先得到一份相对稳定的电压。 这里先分清三个值: 数据 含义 新采样电压 ADC 本次换算得到的电压,每次都可能变化 平均电压 经过滤波后缓慢上升或下降的中间值 稳定电压 达到更新条件后才改变,提供给后续电量算法使用 稳定电压不是手机显示的百分比,也不是永远固定不变。它只是在平均电压没有达到更新条件时保持原值。 方案一:去极值后取平均值 先连续采集一组电压,去掉其中几个最大值和最小值,再对剩余数据求平均。偶发的异常高值和异常低值不会直接影响结果,适合 ADC 容易出现尖峰干扰的场景。 这种方案的优点是抗单点异常能力强,思路也比较直观。缺点是需要保存一组采样数据,还要完成极值查找或排序,会占用更多内存和计算资源。采样窗口越长,结果越稳定,但输出延迟也越大,真实电压发生变化时不容易及时跟上。 方案二:递推平均加更新阈值 递推平均不需要保存整组数据。每得到一个有效采样值,就让原来的平均电压向新采样值移动一小步。新采样值低于旧平均值时向下移动,高于旧平均值时向上移动,每次移动的大小由两者差值和递推系数决定。 这种方案的优点是内存和计算开销小,适合持续采样,也可以通过调整递推系数改变响应速度。缺点是它不会自动剔除异常值,一个突发尖峰会影响后续一段时间;系数过小,电压变化跟得慢,系数过大,又容易把短时波动带进结果。 以递推系数 1/32 为例: 当前平均电压和稳定电压都是 4000mV。 本次新采样电压为 3800mV,与平均电压相差 200mV。 本次只向下移动差值的 1/32,也就是 6.25mV,新的平均电压约为 3993.75mV。 新的平均电压再与稳定电压比较。两者向下相差约 6.25mV,达到当前项目的下降更新条件,稳定电压才更新。 如果旧平均电压低于新采样电压,处理方向相反:旧平均电压加上两者差值的 1/32,得到新的平均电压。无论差值大小,每次采样都会参与递推;更新阈值只负责决定稳定电压是否改变。 当前项目在平均电压下降约 5mV 时允许更新稳定电压,向上则需要变化约 10mV。下降阈值更小,可以及时反映放电趋势;上升阈值更大,可以减少负载解除后电压回弹带来的影响。 对于 TWS 耳机这种电压变化缓慢、需要持续采样的设备,递推平均占用资源少,也方便调整响应速度,当前 SDK 采用的就是第二种方案。如果还会出现明显的异常采样,可以先剔除异常值,再进入递推平均。 二、电量曲线 问题现象 耳机从满电持续播放音乐时,有些 10% 很快掉完,有些区间长时间不变化;左右耳在同一电量区间的续航也可能相差较大。总续航接近要求,但百分比曲线不均匀。 问题原因 这次问题的直接原因是软件仍使用旧电池的电压—电量表,与当前电芯的充放电曲线不匹配,导致各百分比区间对应的实际续航不均匀。左右耳的主从角色还会带来功耗差异,因此双耳验证时也要把主从切换考虑进去。 处理结果 根据当前电芯的实测充放电数据更新电量表,同时调整电量相关的主从切换逻辑。修改后分别在 ANC 开启和关闭场景下完成整轮放电验证,各 10% 区间的续航恢复到要求范围内。 三、温度采样 问题现象 ...