第二章 TWS耳机系统架构与功耗模型

做TWS耳机低功耗设计,第一件事是什么?

不是翻芯片手册,也不是调代码。你得先把系统架构吃透。我见过太多工程师,一上来就盯着某个外设的电流抠细节,结果整体功耗还是下不来。为什么?因为没搞明白功耗到底从哪来、怎么流。

硬件架构概览

先说说TWS耳机的硬件组成。说白了,就四大块:主控、蓝牙、音频、传感器。每一块都是耗电大户,但耗电的方式完全不同。

主控芯片

主控是耳机的“大脑”。现在主流方案有BES、高通、联发科、瑞昱这些。我个人习惯把主控的功耗分成三档:

  • 活跃模式:跑算法、处理音频,电流大概5-10mA
  • 睡眠模式:保持蓝牙连接,等待事件唤醒,电流约100-300μA
  • 深度睡眠:几乎关断所有时钟,只留RTC,电流能压到10μA以下

嗯,这里要注意:不同主控的睡眠模式定义差别很大。我在项目中遇到过,某款芯片标称深度睡眠5μA,结果实际测出来50μA。后来发现是GPIO没配置好,漏电了。

蓝牙射频

蓝牙是功耗大头,尤其是发射和接收的时候。典型数据:

操作 典型电流 持续时间
蓝牙发射(0dBm) 8-12mA 约80μs/包
蓝牙接收 8-10mA 约80μs/包
蓝牙空闲监听 1-3mA 持续

你想想看,蓝牙发射一次才80微秒,但空闲监听是一直在耗电的。所以低功耗的关键,不是减少发射次数,而是缩短监听窗口。

音频编解码与功放

音频这部分,我踩过不少坑。功放芯片的静态电流,有时候比主控还高。尤其是那些号称“高保真”的D类功放,静态电流轻松上2mA。

我曾经在一个项目里,为了省50μA的静态电流,把功放芯片换成了低功耗版本。结果音质差到客户退货。后来学乖了:音频功耗优化,不能只看电流,还得看效率。

传感器

现在的TWS耳机,传感器越来越多:入耳检测、触摸、加速度计、陀螺仪...每个传感器都有工作电流和待机电流。我建议的做法是:

  • 入耳检测:用红外或电容方案,待机电流控制在5μA以内
  • 触摸:用自容式,待机电流1μA左右
  • 加速度计:只在需要时开启,采样率设到最低

软件分层架构

硬件是骨架,软件是灵魂。低功耗设计,软件层面比硬件更考验功力。

应用层

应用层管的是用户体验:播放、暂停、切歌、通话、降噪模式切换。这一层的功耗优化,核心是“能不干活就不干活”。

举个例子:用户把耳机摘下来,应用层应该立刻暂停播放、关闭降噪、进入待机。但很多方案做不到“立刻”,因为要等操作系统调度。我习惯的做法是:在中断里直接处理,不经过应用层消息队列。

协议栈层

蓝牙协议栈是功耗优化的主战场。HCI层、L2CAP层、ATT层,每一层都有优化空间。

我记得有一次,客户反馈耳机待机时间短。查了半天,发现是协议栈的connection interval设得太短,导致蓝牙频繁唤醒。把interval从30ms调到50ms,待机电流直接降了40%。

驱动层

驱动层管的是硬件外设。这一层的优化,说白了就是“用完了就关”。

我见过最典型的错误:I2C总线用完了不释放,导致上拉电阻一直耗电。还有GPIO没配置成输入模式,漏电漏得飞起。

操作系统层

RTOS的功耗管理,核心是idle hook。在idle hook里,可以执行WFI(Wait For Interrupt)指令,让CPU进入睡眠状态。

但要注意:不是所有idle时间都能睡。有些外设的DMA传输还没完成,睡了就出问题。我建议的做法是:在idle hook里检查所有外设的状态,确认安全后再睡。

功耗模型建立方法

功耗模型,说白了就是“算账”。把每个模块的耗电算清楚,然后加起来。

静态功耗模型

静态功耗,就是耳机啥也不干时的耗电。包括:

  • 主控深度睡眠电流
  • 蓝牙待机电流
  • 传感器待机电流
  • 电源管理芯片静态电流

这些数据,芯片手册上都有。但实际测出来往往比手册高。为什么?因为手册给的是理想值,实际板子上还有漏电、走线电阻、电容漏电流。

动态功耗模型

动态功耗,就是耳机干活时的耗电。比如:

  • 播放音乐:主控跑算法 + 蓝牙发射 + 功放输出
  • 通话:主控跑算法 + 蓝牙收发 + 麦克风供电
  • 降噪:主控跑算法 + 麦克风供电 + 功放输出

我习惯的做法是:把每个场景拆成时间片,每个时间片算电流,然后积分。举个例子:

// 播放音乐场景功耗估算
// 时间片1: 蓝牙发射 (80μs, 10mA)
// 时间片2: 主控处理 (1ms, 5mA)
// 时间片3: 功放输出 (连续, 3mA)
// 时间片4: 空闲 (剩余时间, 1mA)

平均电流 = (80μs*10mA + 1ms*5mA + 连续*3mA + 空闲*1mA) / 总时间

实际测量与校准

模型建好了,得用实际测量来校准。我推荐用精密电阻采样法:在电池和耳机之间串一个10Ω电阻,用示波器测电阻两端的电压波形。

嗯,这里有个坑:示波器的探头地线要短,不然会引入噪声。我吃过这个亏,测出来的波形全是毛刺,根本没法看。

核心要点:功耗模型不是一次建成的。先建一个粗略模型,然后实测校准,再调整参数,反复迭代。我一般会迭代3-5轮,直到模型误差在5%以内。

个人经验:建功耗模型的时候,别忘了把“唤醒开销”算进去。每次从睡眠唤醒,都要重新初始化外设、恢复上下文,这部分电流虽然时间短,但峰值高。如果唤醒太频繁,平均电流会显著上升。

避坑指南:我曾经在一个项目里,模型算出来待机电流50μA,实际测出来200μA。查了三天,发现是蓝牙芯片的32kHz晶振没起振,导致主控一直用高频时钟跑。所以,模型里的每个参数,都要用实测数据验证。

好了,系统架构和功耗模型就讲到这里。下一章,我们会深入蓝牙连接的功耗优化,讲讲connection interval、sniff mode这些参数到底怎么调。到时候我会分享一个真实案例:怎么把一对耳机的待机功耗从300μA压到30μA。