1. 功耗优化工程导论
在 Nordic nRF 系列无线产品中,功耗优化不是“把某个参数调小”这么简单,而是一项贯穿硬件、协议栈、应用逻辑与测试验证的系统工程。nRF52/nRF53/nRF54 等 SoC 内部集成了 Cortex-M 内核、2.4 GHz 无线电、RTC、定时器、GPIO、ADC、温度传感器以及多种外设,任何一路时钟、外设或射频活动都会叠加到整机电流上。若把电池寿命当作最终交付指标,就必须先建立“功耗来源—工作状态—续航模型—工程约束”的完整认知。
一、功耗从哪里来:静态、动态与射频三本账
nRF 器件的电流消耗可以拆成三部分:静态漏电与基础运行、动态开关与时钟、射频收发。静态部分包括深度睡眠(System OFF / System ON sleep)下的漏电流、RAM 保持、GPIO 漏电和外部传感器待机电流;动态部分来自 CPU 主频、外设时钟、Flash/RRAM 读写以及定时唤醒;射频部分则集中在广播、扫描、连接事件、发射功率和接收窗口。以 nRF52832 为例,System OFF 典型电流约 0.3 µA,System ON + RTC 约 1.5 µA,CPU 运行 64 MHz 时约 3.7 mA,而 0 dBm 发射峰值可达 5~6 mA,接收约 5 mA。这些数量级差异说明:真正决定续航的往往不是“跑得多快”,而是“多久醒一次、每次醒多久、醒着时开了哪些外设”。
因此,功耗优化的第一原则是让系统尽可能长时间停留在低功耗状态,并压缩每次唤醒的活动时间。这要求开发者能区分“必须常开”和“可以按需开启”的资源:RTC、看门狗、低频时钟通常需要保留;高频时钟、ADC、SPI、UART、传感器供电则应按需打开,用完立即关闭。
二、续航指标怎么定义:平均电流与电池寿命
续航不能只看“睡眠电流多低”,而要看一个完整工作周期内的平均电流。设周期为 T,系统在睡眠、唤醒、射频、处理等状态下的电流分别为 I₁…Iₙ,对应时间为 t₁…tₙ,则平均电流为:
I_avg = (I1×t1 + I2×t2 + ... + In×tn) / T
T_battery ≈ C_battery / I_avg
例如,某 nRF52840 信标产品使用 220 mAh 纽扣电池,广播间隔 1 s,每次广播事件约 3 ms、平均 6 mA,其余时间处于 System ON + RTC 睡眠约 2 µA。则一个周期平均电流约为 (6 mA × 0.003 s + 0.002 mA × 0.997 s) / 1 s ≈ 0.020 mA,理论寿命约 220 / 0.020 ≈ 11000 小时,约 1.25 年。若把广播间隔改为 100 ms,平均电流会上升到约 0.18 mA,寿命缩短到约 1200 小时。这个示例说明:连接/广播间隔、单次事件时长和睡眠电流共同决定续航,其中间隔往往是最敏感的杠杆。
三、优化目标:在约束下寻找最小平均电流
工程上不能无限降低功耗,因为还要满足实时性、可靠性、成本与体积约束。优化目标可以表述为:在满足连接间隔、响应延迟、数据吞吐、射频距离和电池容量限制的前提下,使平均电流最小。常见手段包括:降低发射功率(如从 +4 dBm 降到 0 dBm 甚至 -8 dBm)、增大连接间隔、使用从设备延迟(Slave Latency)、缩短广播/扫描窗口、关闭未用外设、降低 CPU 主频、使用 DMA 减少 CPU 唤醒、把高频时钟切换为低频时钟、以及用 GPIO 控制传感器供电。每一项都要在“省电”和“功能可用”之间做权衡。
四、工程约束:不能只看平均电流
实际项目中,以下约束会直接改变优化策略:第一,协议约束——BLE 连接间隔、广播信道、从设备延迟由协议和对端设备共同决定,不能随意设成极大值;第二,实时性约束——工业传感器可能要求 50 ms 内响应,此时不能把连接间隔拉到 1 s;第三,电源约束——纽扣电池内阻较大,射频峰值电流可能造成电压跌落,需要加去耦电容或限制发射功率;第四,测试约束——平均电流必须用高精度电流表或 Nordic Power Profiler Kit 在真实工作周期下测量,不能只靠数据手册估算;第五,认证约束——发射功率和占空比还要满足地区无线电法规。
因此,一个可执行的功耗优化流程通常包括:明确电池容量与目标寿命 → 列出所有工作状态及电流/时间 → 计算平均电流 → 找出占比最大的状态 → 针对该状态调整参数或硬件 → 重新测量并迭代。只有把“来源—指标—目标—约束”四者放在同一张图上,才能避免局部优化导致整体续航不达标。