<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>电量与充电 on 栈外随记</title>
    <link>https://btio.cn/tags/%E7%94%B5%E9%87%8F%E4%B8%8E%E5%85%85%E7%94%B5/</link>
    <description>Recent content in 电量与充电 on 栈外随记</description>
    <image>
      <title>栈外随记</title>
      <url>https://btio.cn/images/logo-arong.svg</url>
      <link>https://btio.cn/images/logo-arong.svg</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-CN</language><lastBuildDate>Mon, 17 Aug 2026 15:18:41 +0800</lastBuildDate>
    <atom:link href="https://btio.cn/tags/%E7%94%B5%E9%87%8F%E4%B8%8E%E5%85%85%E7%94%B5/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>【中科蓝讯】耳机电量是怎样更新到手机的</title>
      <link>https://btio.cn/posts/2026/08/17/%E4%B8%AD%E7%A7%91%E8%93%9D%E8%AE%AF%E8%80%B3%E6%9C%BA%E7%94%B5%E9%87%8F%E6%98%AF%E6%80%8E%E6%A0%B7%E6%9B%B4%E6%96%B0%E5%88%B0%E6%89%8B%E6%9C%BA%E7%9A%84/</link>
      <pubDate>Mon, 17 Aug 2026 15:18:41 +0800</pubDate>
      <guid>https://btio.cn/posts/2026/08/17/%E4%B8%AD%E7%A7%91%E8%93%9D%E8%AE%AF%E8%80%B3%E6%9C%BA%E7%94%B5%E9%87%8F%E6%98%AF%E6%80%8E%E6%A0%B7%E6%9B%B4%E6%96%B0%E5%88%B0%E6%89%8B%E6%9C%BA%E7%9A%84/</guid>
      <description>&lt;p&gt;从功能表面看，耳机电量更新并不复杂：ADC 采到电池电压，再查表换算成百分比，手机就能显示。&lt;/p&gt;
&lt;p&gt;但在实际项目中，电量更新并不是采样后直接查表：采样值要先经过滤波，查表得到的也只是参考电量，手机最终显示的还要由软件继续维护。先把实际电压、参考电量和显示电量这三个值分清楚，整条链路就容易理解了。&lt;/p&gt;
&lt;p&gt;先看完整链路：前 3 步把采样值处理成参考电量，后 3 步由软件维护显示值、完成双耳同步，最后上报手机。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;TWS 耳机电量更新六步流程&#34; loading=&#34;lazy&#34; src=&#34;https://btio.cn/images/csdn/163825929/%E7%94%B5%E9%87%8F%E6%9B%B4%E6%96%B0%E5%85%AD%E6%AD%A5%E6%B5%81%E7%A8%8B.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;电池电压是怎么采出来的&#34;&gt;电池电压是怎么采出来的？&lt;/h2&gt;
&lt;p&gt;顺着中科蓝讯 SDK 的调用关系看，系统会在 5ms 任务中检查 ADC 转换状态。转换完成后，读取电池通道和内部参考通道的 ADC 值。内部参考电压的已知值用于校准换算比例，再结合电池采样值和分压系数，得到实际电池电压。&lt;/p&gt;
&lt;h2 id=&#34;为什么采到电压后还不能直接使用&#34;&gt;为什么采到电压后还不能直接使用？&lt;/h2&gt;
&lt;p&gt;播放音乐或者蓝牙发射时，电池电压会短暂下降，负载变小后又会回升，所以一次采样不能直接拿来估算电量。&lt;/p&gt;
&lt;p&gt;结合耳机电压变化缓慢、但采样又容易受负载影响的特点，我更推荐用递推平均的方式更新电压：每来一个新采样值，只让平均电压向它靠近一小步。平均电压变化达到条件后，才更新稳定电压。下降条件更容易触发，上升条件更严格，可以减少电压回弹的影响。&lt;/p&gt;
&lt;h2 id=&#34;参考电量为什么不直接给手机&#34;&gt;参考电量为什么不直接给手机？&lt;/h2&gt;
&lt;p&gt;稳定电压通过“电压—电量对照表”换算成参考电量。它只用来判断当前显示偏高还是偏低，不是手机最终看到的电量。&lt;/p&gt;
&lt;p&gt;如果每次都用参考电量覆盖显示电量，负载变化仍然会造成百分比跳变。&lt;/p&gt;
&lt;h2 id=&#34;显示电量是怎么变化的&#34;&gt;显示电量是怎么变化的？&lt;/h2&gt;
&lt;p&gt;电量管理任务大约每 10 秒运行一次，并根据当前状态选择更新方式。&lt;/p&gt;
&lt;p&gt;放电时，参考电量低于显示电量，软件就让显示电量逐级下降，不会一次跳到参考值；电压短暂回升时，也不会把电量加回来。&lt;/p&gt;
&lt;p&gt;充电时，电压回升很快，不能直接用它增加百分比。软件根据充电电流和时间估算充入容量，再换算成显示电量；底层确认充满后，才显示 100%。&lt;/p&gt;
&lt;p&gt;温度决定当前能不能充电、使用多大的充电电流。低电提醒主要看显示电量，低压关机最终看实际电压。&lt;/p&gt;
&lt;h2 id=&#34;为什么内部电量和手机显示还可能不同&#34;&gt;为什么内部电量和手机显示还可能不同？&lt;/h2&gt;
&lt;p&gt;显示电量发生变化后会被保存，耳机下次开机可以从上次的结果继续计算。耳机内部按 1% 维护电量，当前 App 路径按 5% 一档显示。&lt;/p&gt;
&lt;p&gt;例如内部电量是 59%，手机仍然显示 60%；内部电量下降到 55% 后，手机才显示 55%。&lt;/p&gt;
&lt;h2 id=&#34;左右耳电量最后由谁上报&#34;&gt;左右耳电量最后由谁上报？&lt;/h2&gt;
&lt;p&gt;左右耳各自计算本耳电量，再通过 TWS 交换耳机和充电盒电量。主耳汇总左耳、右耳和充电盒数据后，统一上报给手机系统和配套 App。&lt;/p&gt;
&lt;p&gt;现在再看这条链路，重点就是分清三份数据：&lt;strong&gt;实际电压&lt;/strong&gt;反映电池状态，&lt;strong&gt;参考电量&lt;/strong&gt;判断变化方向，&lt;strong&gt;显示电量&lt;/strong&gt;负责最终呈现。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://blog.csdn.net/qq_56070244/article/details/163825929&#34;&gt;CSDN · 【中科蓝讯】耳机电量是怎样更新到手机的？&lt;/a&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>【中科蓝讯】耳机电量与充电问题复盘</title>
      <link>https://btio.cn/posts/2026/08/17/%E4%B8%AD%E7%A7%91%E8%93%9D%E8%AE%AF%E8%80%B3%E6%9C%BA%E7%94%B5%E9%87%8F%E4%B8%8E%E5%85%85%E7%94%B5%E9%97%AE%E9%A2%98%E5%A4%8D%E7%9B%98/</link>
      <pubDate>Mon, 17 Aug 2026 00:00:00 +0800</pubDate>
      <guid>https://btio.cn/posts/2026/08/17/%E4%B8%AD%E7%A7%91%E8%93%9D%E8%AE%AF%E8%80%B3%E6%9C%BA%E7%94%B5%E9%87%8F%E4%B8%8E%E5%85%85%E7%94%B5%E9%97%AE%E9%A2%98%E5%A4%8D%E7%9B%98/</guid>
      <description>&lt;p&gt;本文先整理电压采样的方案设计思路，再复盘下面五类电量与充电问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#section-1&#34;&gt;电压稳定方案的设计思路&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#section-2&#34;&gt;电量曲线&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#section-3&#34;&gt;温度采样&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#section-4&#34;&gt;上报精度&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#section-5&#34;&gt;电量管控&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#section-6&#34;&gt;状态刷新&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;section-1&#34;&gt;一、电压稳定方案的设计思路&lt;/h2&gt;
&lt;p&gt;电量计算不会直接使用一次 ADC 采样结果。播放音乐、蓝牙发射和负载切换都会造成短时波动，因此在进入电量估算前，需要先得到一份相对稳定的电压。&lt;/p&gt;
&lt;p&gt;这里先分清三个值：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;数据&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;新采样电压&lt;/td&gt;
					&lt;td&gt;ADC 本次换算得到的电压，每次都可能变化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;平均电压&lt;/td&gt;
					&lt;td&gt;经过滤波后缓慢上升或下降的中间值&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;稳定电压&lt;/td&gt;
					&lt;td&gt;达到更新条件后才改变，提供给后续电量算法使用&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;稳定电压不是手机显示的百分比，也不是永远固定不变。它只是在平均电压没有达到更新条件时保持原值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案一：去极值后取平均值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先连续采集一组电压，去掉其中几个最大值和最小值，再对剩余数据求平均。偶发的异常高值和异常低值不会直接影响结果，适合 ADC 容易出现尖峰干扰的场景。&lt;/p&gt;
&lt;p&gt;这种方案的优点是抗单点异常能力强，思路也比较直观。缺点是需要保存一组采样数据，还要完成极值查找或排序，会占用更多内存和计算资源。采样窗口越长，结果越稳定，但输出延迟也越大，真实电压发生变化时不容易及时跟上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案二：递推平均加更新阈值&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;递推平均不需要保存整组数据。每得到一个有效采样值，就让原来的平均电压向新采样值移动一小步。新采样值低于旧平均值时向下移动，高于旧平均值时向上移动，每次移动的大小由两者差值和递推系数决定。&lt;/p&gt;
&lt;p&gt;这种方案的优点是内存和计算开销小，适合持续采样，也可以通过调整递推系数改变响应速度。缺点是它不会自动剔除异常值，一个突发尖峰会影响后续一段时间；系数过小，电压变化跟得慢，系数过大，又容易把短时波动带进结果。&lt;/p&gt;
&lt;p&gt;以递推系数 &lt;code&gt;1/32&lt;/code&gt; 为例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当前平均电压和稳定电压都是 &lt;code&gt;4000mV&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;本次新采样电压为 &lt;code&gt;3800mV&lt;/code&gt;，与平均电压相差 &lt;code&gt;200mV&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;本次只向下移动差值的 &lt;code&gt;1/32&lt;/code&gt;，也就是 &lt;code&gt;6.25mV&lt;/code&gt;，新的平均电压约为 &lt;code&gt;3993.75mV&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;新的平均电压再与稳定电压比较。两者向下相差约 &lt;code&gt;6.25mV&lt;/code&gt;，达到当前项目的下降更新条件，稳定电压才更新。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果旧平均电压低于新采样电压，处理方向相反：旧平均电压加上两者差值的 &lt;code&gt;1/32&lt;/code&gt;，得到新的平均电压。无论差值大小，每次采样都会参与递推；更新阈值只负责决定稳定电压是否改变。&lt;/p&gt;
&lt;p&gt;当前项目在平均电压下降约 &lt;code&gt;5mV&lt;/code&gt; 时允许更新稳定电压，向上则需要变化约 &lt;code&gt;10mV&lt;/code&gt;。下降阈值更小，可以及时反映放电趋势；上升阈值更大，可以减少负载解除后电压回弹带来的影响。&lt;/p&gt;
&lt;p&gt;对于 TWS 耳机这种电压变化缓慢、需要持续采样的设备，递推平均占用资源少，也方便调整响应速度，当前 SDK 采用的就是第二种方案。如果还会出现明显的异常采样，可以先剔除异常值，再进入递推平均。&lt;/p&gt;
&lt;h2 id=&#34;section-2&#34;&gt;二、电量曲线&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;问题现象&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;耳机从满电持续播放音乐时，有些 &lt;code&gt;10%&lt;/code&gt; 很快掉完，有些区间长时间不变化；左右耳在同一电量区间的续航也可能相差较大。总续航接近要求，但百分比曲线不均匀。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题原因&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这次问题的直接原因是软件仍使用旧电池的电压—电量表，与当前电芯的充放电曲线不匹配，导致各百分比区间对应的实际续航不均匀。左右耳的主从角色还会带来功耗差异，因此双耳验证时也要把主从切换考虑进去。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;处理结果&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;根据当前电芯的实测充放电数据更新电量表，同时调整电量相关的主从切换逻辑。修改后分别在 ANC 开启和关闭场景下完成整轮放电验证，各 &lt;code&gt;10%&lt;/code&gt; 区间的续航恢复到要求范围内。&lt;/p&gt;
&lt;h2 id=&#34;section-3&#34;&gt;三、温度采样&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;问题现象&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
