1、功耗问题的本质:为什么BLE设备会耗电?从射频发射、接收、睡眠电流三个维度理解功耗模型

做BLE开发的朋友,十有八九都被功耗问题折磨过。我自己刚入行那会儿,拿着万用表测电流,看着示波器上的波形一头雾水——明明芯片手册上写的睡眠电流才1µA,怎么整机一跑就几十mA?

其实,功耗问题没那么玄乎。说白了,BLE设备的耗电就三个来源:射频发射、射频接收、睡眠漏电。把这三个维度搞清楚,排查思路就清晰了。

1.1 射频发射:最猛的“电老虎”

发射电流是BLE功耗的大头。我见过不少工程师,一上来就盯着睡眠电流调,结果折腾半天发现,真正吃电的是发射那几毫秒。

发射功耗取决于三个因素:

  • 发射功率:每增加3dBm,电流大约翻倍。0dBm时典型电流约8-10mA,+8dBm时能飙到30mA以上。
  • 发射时长:数据包越长、重传次数越多,发射时间越长。
  • 发射间隔:连接间隔或广播间隔越短,单位时间内发射次数越多。

关键公式:发射平均电流 = 发射峰值电流 × 发射占空比

占空比 = (发射时间 × 发射次数) / 总时间

举个例子。我做过一个穿戴项目,客户说续航只有8小时。一测才发现,广播间隔设成了20ms,每次广播包长度还塞了31字节。算下来,发射占空比高达3%,平均电流直接多了2mA。后来把广播间隔拉到100ms,续航立刻翻倍。

我的习惯:调试时先看发射占空比。如果超过1%,就得考虑优化了。用逻辑分析仪抓一下射频使能引脚,一看便知。

1.2 射频接收:被忽视的“隐形耗电”

很多人以为接收不费电。其实,接收电流和发射电流差不多,甚至更高。以Nordic nRF52840为例,接收电流约5-6mA,发射0dBm时也就5-7mA。

接收功耗的关键在于:

  • 接收窗口时长:每次连接事件,接收窗口打开的时间。窗口越长,耗电越多。
  • 接收窗口频率:连接间隔越短,接收次数越频繁。
  • 空闲监听:有些芯片在无数据时也会保持接收状态,白白耗电。
场景 接收电流(典型) 说明
连接事件接收 5-8 mA 每次连接间隔打开一次
广播扫描 8-12 mA 持续监听广播信道
空闲监听 3-5 mA 芯片未进入睡眠

我曾经踩过一个坑:设备在连接状态下,主机每30ms发一次空包,从机每次都要打开接收窗口。结果接收占空比高达2%,平均电流多了0.15mA。后来把连接间隔拉到100ms,问题解决。

注意:接收窗口不是越短越好。窗口太短可能导致丢包,触发重传,反而更耗电。我一般留够150-200µs的余量。

1.3 睡眠电流:魔鬼在细节里

睡眠电流是BLE设备待机时的“底噪”。理论上,现代BLE芯片的睡眠电流可以做到1µA以下。但实际产品中,我见过睡眠电流跑到50µA的——问题全出在外围电路。

睡眠电流的构成:

  • 芯片自身漏电:包括IO口漏电、内部稳压器漏电、RTC运行电流。
  • 外围器件漏电:传感器、LED、电源芯片的静态电流。
  • PCB漏电:潮湿环境下的表面漏电、助焊剂残留。

避坑指南:我曾经遇到一个案例,睡眠电流始终降不到3µA以下。排查了两天,最后发现是GPIO上拉电阻没关——一个10kΩ电阻在3.3V下就贡献了0.33mA。关掉后,睡眠电流直接降到0.8µA。

睡眠电流的排查顺序,我建议这样来:

  1. 先测芯片最小系统(只焊芯片和必要电容)的睡眠电流。
  2. 再逐个焊接外围器件,每焊一个测一次。
  3. 最后检查PCB清洁度和环境湿度。

1.4 三个维度的综合模型

把这三个维度放在一起,就构成了BLE设备的完整功耗模型:

平均功耗 = 发射平均电流 + 接收平均电流 + 睡眠电流

其中:

  • 发射平均电流 = 发射峰值电流 × 发射占空比
  • 接收平均电流 = 接收峰值电流 × 接收占空比
  • 睡眠电流 = 芯片睡眠电流 + 外围漏电

这个模型虽然简单,但非常实用。每次排查功耗问题,我都会先算一遍这三个值,看看哪个占比最大,然后集中精力优化那个维度。

BLE功耗模型三维度 BLE设备总功耗 射频发射 射频接收 睡眠漏电 发射功率 发射时长 发射间隔 接收窗口 连接间隔 空闲监听 芯片漏电 外围漏电 PCB漏电 核心公式 平均功耗 = 发射平均电流 + 接收平均电流 + 睡眠电流 排查时先算占比,再针对性优化

1.5 实际排查中的优先级

搞清楚了三个维度,排查顺序就明确了。我个人习惯这样排优先级:

  1. 先看发射占空比——这是最容易出问题的地方,也是优化空间最大的地方。
  2. 再看接收占空比——很多人忽略这里,但连接间隔设得太短,接收电流占比会很高。
  3. 最后查睡眠电流——如果前两项都正常,但待机功耗还是高,那一定是漏电了。

一个小技巧:用电流探头测整机电流波形,一眼就能看出哪个阶段耗电最多。发射阶段是尖峰,接收阶段是平顶,睡眠阶段是底噪。哪个阶段宽度异常,就查哪个维度。

嗯,这一章就讲到这里。记住这个三维模型,后面的排查方法都是围绕它展开的。你遇到的具体问题,无非是这三个维度中的一个或多个出了问题。