【中科蓝讯】耳机电量是怎样更新到手机的

从功能表面看,耳机电量更新并不复杂:ADC 采到电池电压,再查表换算成百分比,手机就能显示。 但在实际项目中,电量更新并不是采样后直接查表:采样值要先经过滤波,查表得到的也只是参考电量,手机最终显示的还要由软件继续维护。先把实际电压、参考电量和显示电量这三个值分清楚,整条链路就容易理解了。 先看完整链路:前 3 步把采样值处理成参考电量,后 3 步由软件维护显示值、完成双耳同步,最后上报手机。 电池电压是怎么采出来的? 顺着中科蓝讯 SDK 的调用关系看,系统会在 5ms 任务中检查 ADC 转换状态。转换完成后,读取电池通道和内部参考通道的 ADC 值。内部参考电压的已知值用于校准换算比例,再结合电池采样值和分压系数,得到实际电池电压。 为什么采到电压后还不能直接使用? 播放音乐或者蓝牙发射时,电池电压会短暂下降,负载变小后又会回升,所以一次采样不能直接拿来估算电量。 结合耳机电压变化缓慢、但采样又容易受负载影响的特点,我更推荐用递推平均的方式更新电压:每来一个新采样值,只让平均电压向它靠近一小步。平均电压变化达到条件后,才更新稳定电压。下降条件更容易触发,上升条件更严格,可以减少电压回弹的影响。 参考电量为什么不直接给手机? 稳定电压通过“电压—电量对照表”换算成参考电量。它只用来判断当前显示偏高还是偏低,不是手机最终看到的电量。 如果每次都用参考电量覆盖显示电量,负载变化仍然会造成百分比跳变。 显示电量是怎么变化的? 电量管理任务大约每 10 秒运行一次,并根据当前状态选择更新方式。 放电时,参考电量低于显示电量,软件就让显示电量逐级下降,不会一次跳到参考值;电压短暂回升时,也不会把电量加回来。 充电时,电压回升很快,不能直接用它增加百分比。软件根据充电电流和时间估算充入容量,再换算成显示电量;底层确认充满后,才显示 100%。 温度决定当前能不能充电、使用多大的充电电流。低电提醒主要看显示电量,低压关机最终看实际电压。 为什么内部电量和手机显示还可能不同? 显示电量发生变化后会被保存,耳机下次开机可以从上次的结果继续计算。耳机内部按 1% 维护电量,当前 App 路径按 5% 一档显示。 例如内部电量是 59%,手机仍然显示 60%;内部电量下降到 55% 后,手机才显示 55%。 左右耳电量最后由谁上报? 左右耳各自计算本耳电量,再通过 TWS 交换耳机和充电盒电量。主耳汇总左耳、右耳和充电盒数据后,统一上报给手机系统和配套 App。 现在再看这条链路,重点就是分清三份数据:实际电压反映电池状态,参考电量判断变化方向,显示电量负责最终呈现。 原文:CSDN · 【中科蓝讯】耳机电量是怎样更新到手机的?

【中科蓝讯】耳机电量与充电问题复盘

本文先整理电压采样的方案设计思路,再复盘下面五类电量与充电问题: 电压稳定方案的设计思路 电量曲线 温度采样 上报精度 电量管控 状态刷新 一、电压稳定方案的设计思路 电量计算不会直接使用一次 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% 区间的续航恢复到要求范围内。 三、温度采样 问题现象 ...