无电池BLE信标:能量收集驱动的低功耗物联网节点设计全解析 最近做了一款无电池的节能信标模块把 Battery-Free、Energy-Harvesting 这两个词从概念变成了能跑的量产原型靠室内弱光收集能量直接驱动 BLE 广播与传感器采集核心控制器用的是 nRF51822 SoC。它解决的问题很明确——你不想给上百个传感器节点换电池又没法在每个节点旁边拉电线于是让节点自己“捡”能量。今天我从能量预算、硬件设计到软件流程完整拆一遍这套方案适合正在做低功耗物联网节点的硬件工程师或者对能量收集技术感兴趣的朋友。1. 项目核心思路拆解为什么“无电池BLE”能成立1.1 能量收集不是“新能源”而是重新分配用电时间很多人一听“能量收集”第一反应是“这玩意儿功率太小能干嘛”。这其实是把思路搞反了。能量收集的本质不是让设备像电网供电一样持续运行而是把用电时间重新分配平时把环境中微弱、分散的能量一点点攒起来攒到足够跑一轮任务就瞬间用完然后继续攒下一轮。这个模型和电池供电完全不同。电池供电时能量密度高、功率充足系统可以随时唤醒、随时干活能量收集系统则更像“靠天吃饭”光照、温差、振动都是时有时无的所以必须设计成“不干活的时候就彻底断电攒够了能量再干活”。这套模块的核心工作模式就是能量管理芯片把太阳能板或热电片的输出升压后灌入超级电容电容电压缓慢上升升到预设阈值约3.3V时系统上电启动nRF51822快速完成温湿度采集、BLE广播任务结束立即掉电关机。下一轮循环等电容重新充满。整个过程不需要任何电池也没有人给它充电。理解了这套模式你就明白为什么很多传统低功耗设计经验在这里不适用你不能让设备睡眠等待定时唤醒因为电容电压会持续下跌睡眠本身也是耗电的。更合适的方式是“工作在瞬间休息在断电”。1.2 为什么选择BLE而不是其他无线协议无线通信协议的选择在这个项目里相当关键。常见的候选有 Wi-Fi、ZigBee、LoRa、BLE。我仔细对比过一轮结论很明确BLE 是这种微型能量收集节点的最优解之一。Wi-Fi 的峰值电流动辄一两百毫安虽然能直接上云但能量收集系统根本提供不了这种瞬时功率除非超级电容做得非常大那体积又没法接受。ZigBee 和 BLE 同属 2.4GHz 频段功耗量级接近但手机和电脑原生支持 BLE调试和接入的成本低得多。LoRa 的通信距离远、灵敏度高但模块价格和唤醒功耗并不占优而且网关部署比 BLE 麻烦。BLE 的“广播-扫描-连接”模型特别契合这种间歇式供电节点节点醒来后只需广播一帧数据网关或手机扫描到即可不需要建立连接整个过程可以压到几十毫秒以内。还有一点很关键BLE 的峰值电流大约只有 10mA 级别用一个大一点的低ESR电容就能撑过广播瞬间这对无电池系统来说是决定性的优势。如果是 Wi-Fi电容体积会膨胀到不可接受。1.3 nRF51822 这颗“过气明星”为什么还能打nRF51822 是 Nordic 在 2012 年发布的 SoC搁现在看已经是老古董了。但做无电池模块我反而更愿意选它而不是直接用 nRF52 系列。先说配置nRF51822 内置 ARM Cortex-M0 核心工作主频 16MHz我用的版本是 256KB Flash / 16KB RAM支持 BLE 4.0通过 SoftDevice S130 协议栈实现从机功能。这规格在 2020 年代肯定不够看但在小数据量传感器节点场景下绰绰有余。它真正吸引我的是功耗特性0dBm 发射功率下射频发射峰值电流约 10.5mA如果开启片上 DC-DC 转换器还能压到 5~6mA。System OFF 模式下电流低至 0.6µA这意味着如果系统不是完全断电而是短时间待机漏电也几乎可以忽略。另一个优势是它成熟到骨子里了——Keil、GCC 工具链、SDK 示例、社区资料一大堆踩坑成本极低。当然nRF52840 等新款芯片性能更强、支持更多协议但它的功耗优势在这个场景中并没有本质差别而价格和设计复杂度却更高。无电池模块的瓶颈从来不是算力而是能量预算。挑一颗“够用且功耗低”的芯片远比“算力强”重要。2. 能量收集方案选型与储能设计2.1 收集源的对比光伏、热电、射频、振动能量收集的“原料”有好几种选哪种完全取决于应用场景。我把主流方案整理成了表格方便对比收集源典型能量密度稳定程度适用场景工程难度室内光伏10~100 µW/cm²白天稳定夜间为零智能家居、办公传感器低室外光伏1~10 mW/cm²受天气影响大农业监测、资产追踪低热电TEG10~500 µW/cm²持续稳定有温差即发电工业管道、人体穿戴中射频收集0.1~10 µW/cm²依赖周围发射源标签唤醒、辅助供电高振动/压电1~100 µW/cm³依赖机械振动频率电机健康监测高这款模块我选的是室内光伏。原因很朴素办公和家居环境普遍有稳定的光照太阳能板便宜而且输出特性好预测。热电方案虽然稳定但需要较大的温差普通场景很难提供射频收集能量密度太低只能用来做唤醒信号指望它给电容充满电不太现实压电更适合有持续振动的工业环境。如果你做的是工业设备监测可以考虑把光伏板换成 TEG 热电模块整体电路架构不用变只需要调整储能电压阈值和启动逻辑。2.2 电源管理芯片与冷启动细节能量收集系统中电源管理芯片(PMC)是灵魂它负责把光伏板或热电片那点微弱电压升到能用的水平。我用的 BQ25504 是 TI 的经典方案支持最低约 330mV 的冷启动电压。这个参数很关键——光伏板在弱光下输出很可能只有 0.3~0.5V如果 PMC 不能在这个电压下启动系统就永远跑不起来。除了 BQ25504e-peas 的 AEM10941 也是个很好的选择它的静态功耗更低、冷启动阈值约 380mV而且集成了 MPPT 逻辑不需要像 BQ25504 那样在软件里配置开路电压比例。国内也有类似芯片比如上海南芯、微源半导体的能量收集 PMIC性价比更高但资料和案例少一些。PMC 还承担了 MPPT最大功率点跟踪的任务。光伏板的输出不是线性的它的工作电压会显著影响输出功率。BQ25504 的做法是通过外部电阻分压设定一个开路电压比例典型值选 60%~80% 的 Voc这样在光照突变时也能大概率工作在最大功率点附近。我实测下来室内光照下固定 70% 左右的点就已经足够好没必要做动态扰动寻优。2.3 能量预算计算从收集到发送的算术题这个项目里我最重视的就是能量预算。不做这道算术题就贸然选电容和配置广播间隔后面一定会翻车。我用的场景参数是室内桌面光照约 200lux2cm² 的非晶硅光伏板输出功率大约 60~80µW。储能采用 1F 超级电容工作电压窗口设 2.2V 到 3.3V。可用能量 E 0.5 × C × (V_high² - V_low²) 0.5 × 1 × (3.3² - 2.2²) ≈ 3.0J。单次工作循环的能耗大概是这样的nRF51822 启动并跑完初始化约 100ms平均电流 3mA能耗约 0.9mJSHT30 温湿度传感器测量一次约 50ms平均电流 0.5mA能耗约 0.075mJBLE 广播一帧约 2ms发射电流按 10mA 算能耗约 0.06mJ。加上外设漏电单次总能耗不超过 1.5mJ。拿 3.0J 除以 1.5mJ理论上充满一次电容可以连续跑 2000 次广播。但实际上你不可能把 3J 能量一次性用完因为电压会不断下降工作逻辑会要求在低阈值时停止。更合理的做法是按每天收集到的总能量来规划频率每天阳台或桌面的光照时间按 8 小时算收集能量 60µW × 8 × 3600s ≈ 1.7J留 70% 的效率余量约 1.2J 可分配给无线任务折合每天可以执行 800 次左右的完整采集广播。按这个数来广播间隔设成几分钟完全够用。我设计时选择广播间隔 30 秒但实际上能量还有富余后续可以加密到 10 秒。如果把超级电容换成 5F则可用的能量缓冲更大系统能扛过连续阴天等低能量期。2.4 超级电容 vs 薄膜电池为什么我选超容储能元件是这套系统另一个核心决策点。候选有三种超级电容、薄膜锂电池、可充电纽扣电池。超级电容的优势是循环寿命长充放电次数可以达到几十万次基本不用考虑寿命问题充放电管理也简单只要限制电压上限就行没有复杂的恒流恒压充电曲线。缺点是能量密度低、自放电率偏高充满后放一周可能掉掉 10%~20%。薄膜电池能量密度高得多但价格贵、充电电流小而且在满电状态下长期浮充会有衰减风险。可充电纽扣电池介乎两者之间但对过充过放都比较敏感。考虑到这个模块的目标是“装上就不管”我选了 1F/3.3V 的超级电容。它在成本和可靠性上最均衡。这里有一个我要特别提醒的坑超级电容的漏电流参数在选型时一定要看劣质超容的漏电流可能达到几十微安这会直接从光伏板上“偷”走大部分能量导致电容白天也充不满。3. nRF51822 硬件与软件设计实操3.1 最小系统硬件设计的关键点nRF51822 的最小系统本身不复杂无电池场景下有几个地方必须专门处理。电源设计上nRF51822 内部集成了 DC-DC 转换器需要一颗 10µH 左右的功率电感接到 VDD 引脚。开启 DC-DC 后发射电流能从 10.5mA 降到 5~6mA对能量收集系统的收益非常明显。同时VDD 引脚旁边必须放低ESR的去耦电容我用了 1µF 0.1µF 组合这样能有效抑制广播瞬间的电压跌落。时钟上nRF51822 需要 16MHz 主晶振和 32.768kHz 低频晶振。低频晶振千万别省直接用外部晶振而不是内部 RC。BLE 协议栈对时序精度有要求内部 RC 的频率误差较大会导致广播事件偏移、丢包甚至连接失败。32.768kHz 晶振的负载电容选择也要留意我用的晶振推荐匹配 6pF 外部电容误差能控制在 ±20ppm 以内。天线部分我用的是 2.4GHz 陶瓷贴片天线走线需要保证 50 欧姆阻抗。陶瓷天线对 PCB 净空区非常敏感天线正下方和周围一圈不能铺铜否则辐射效率会大幅下降。之前第一批样板就是天线附近铺了地实测广播距离从设计的 30 米掉到了不到 10 米后来把净空区挖掉重新做才恢复。3.2 软件功耗管理从 SoftDevice 到应用层软件层面协议栈我用了 SoftDevice S130它支持外设和主机角色足够扩展出更复杂的功能。nRF51822 只有 16KB RAMS130 协议栈会占用一部分留给应用的空间需要提前规划好。这里的软件设计其实是无电池系统最考验功力的一部分。系统每次上电后代码必须“极简且迅速”地跑完任务然后主动触发断电。我的主流程大致如下上电后先等电源管理芯片的 VBAT_OK 信号稳定避免电压纹波影响初始化初始化 GPIO、UART调试用量产固件里关掉、I2C、时钟和 SoftDevice读取温湿度传感器数据放到一个 32 位变量里配置并启动广播广播数据包中包含电池电压和温湿度广播完成后立即进入 System OFF 模式外部 PMIC 检测到电压低于阈值时手动拉低系统使能引脚彻底断电// 广播参数配置的关键代码简化 ble_gap_adv_params_t adv_params; memset(adv_params, 0, sizeof(adv_params)); adv_params.type BLE_GAP_ADV_TYPE_ADV_IND; adv_params.interval MSEC_TO_UNITS(5000, UNIT_0_625_MS); // 5秒广播间隔 adv_params.timeout 0; // 持续广播直到系统断电 adv_params.channel_mask {0};这里有个细节广播时间不应该无限持续。系统在能量有限的情况下应该算好“最多广播 N 秒然后强制关机”否则电容电量耗尽时芯片会在低电压下跑着跑着自己掉电复位反复启动会非常伤状态。我在代码里用了一个软件定时器广播 3 秒后强制进入 System OFF。3.3 能量监测与状态判断策略无电池系统需要时刻知道“我还有多少电”否则就会出现一种尴尬情况系统以为电容里还有电半路广播失败回头再做一次初始化白白浪费能量。我用的是 BQ25504 的 VBAT_OK 输出引脚接到 nRF51822 的一个 GPIO。这个引脚的阈值可以通过电阻分压设定我配成高阈值 3.3V、低阈值 2.2V。也就是电容充到 3.3V 时 VBAT_OK 变高系统开始工作电压掉到 2.2V 时 VBAT_OK 变低系统应主动关机。软件里对应逻辑很简单每次任务开始前读 VBAT_OK如果已经是低电平说明电容剩余能量不足那就干脆不初始化协议栈直接调用 System OFF用掉电代替等待。这样可以避免“开机-初始化一半-掉电-重启”的死循环。还有一个很重要的细节超级电容电压采样不要直接用 ADC 去接电容两端因为电容本身没有经过稳压电压波动比较大直接采样可能被瞬时负载干扰。更好的办法是采 PMC 输出的 VBAT_OK 阈值状态或者在电容后加一个简单的分压加 RC 滤波再进 ADC。4. 模块实测与调试中的坑4.1 上电时序与复位循环问题第一批样机做出来后最常见的故障是系统反复重启。现象是电容电压慢慢升到 3.3V模块启动然后瞬间电压又掉到 2V 以下回不到 3.3V一直处于“启动-掉电-启动-掉电”的震荡状态。排查后发现有两个原因叠加。第一超级电容的等效串联电阻ESR偏高启动瞬间 nRF51822 拉了几毫安的电流ESR 上的压降直接把电压拖垮了。第二PMC 的 VBAT_OK 阈值回差设置过小导致“刚触发启动又立刻投降”。解决办法也很直接换了一颗低ESR的超级电容并把 VBAT_OK 高阈值调到 3.3V、低阈值调到 2.2V形成 1V 多的回差。这样一旦启动电容必须掉到 2.2V 以下才断电避免临界震荡。如果还出现启动瞬间电压跌落可以在超容后面加一个 10µF 的陶瓷电容专门扛启动峰值电流。4.2 能量收集器的负载匹配问题另一个坑在光伏板与 PMC 的匹配上。我最初选了一块 5V 开路的非晶硅光伏板接上去之后发现在 200lux 光照下输出功率只有预期的三分之一左右。原因是光伏板的工作电压被 PMC 拉到 1V 左右离最大功率点太远。BQ25504 对 MPPT 的配置是通过两个电阻分压设定参考电压值公式为 Vref 0.5 × Voc_ratio。我把 Voc_ratio 设成 0.7 之后输出功率明显提升。更准确的做法是先测量光伏板在不同照度下的开路电压曲线再选一个折中点。室内环境下光伏板开路电压通常在 4~5V但工作电压只需要 2V 左右别被开路电压骗了。4.3 无线性能调试与天线影响无电池系统的无线性能调试比普通电池供电系统更麻烦因为不能长时间保持供电得等电容充电。我最后做了一个小改进在测试板上留了一个外接电池的跳线调试时可以直接接电源不用反复等电容充电。正式样品再把这个跳线去掉节约体积。天线匹配方面如果发现广播距离偏短先不要急着改天线可以先用网络分析仪看一下 S11 回波损耗。我遇到过陶瓷天线周围的阻焊层颜色差异导致介电常数变化频率偏移了差不多 40MHz这种问题肉眼根本看不出来必须实测。调整匹配电感后S11 降到 -15dB 以下距离恢复。另外BLE 广播的发送功率可以按需调整。nRF51822 支持 -20 到 4dBm 多档功率。无电池系统在近距离室内场景完全不需要 0dBm调到 -4dBm 甚至 -8dBm 能省不少能量。我测试了 -8dBm 在室内仍能覆盖一个 20 平米房间比最高功率省了大约 5mW 的瞬时功耗。4.4 常见问题速查表现象可能原因处理方法模块一直无法启动光伏板输出功率不足测量短路电流和开路电压检查 MPPT 配置启动后反复重启超级电容 ESR 过高 / 阈值回差过小换低ESR超容增大 VBAT_OK 回差广播距离太短天线净空区不够 / 阻抗失配检查 PCB 净空用网分测 S11 并调匹配广播一帧后就不工作任务耗时过长电压跌落触发关机缩短采集时间降低广播功率电容电压升得特别慢光弱 / PMC 静态电流过大 / 超容漏电测光照、换低静态电流 PMIC、换高质超容连接时间久或丢包32.768kHz 晶振误差大换精度更高的晶振检查负载电容5. 这套方案的扩展方向与个人心得抛砖引玉做完这套无电池 BLE 模块之后我最大的体会是能量收集系统设计的核心不是“无线”也不是“MCU”而是整条能量链路——从收集、存储、管理到消耗每一个环节的损耗都必须精确掌控。一个看似不起眼的漏电流、一颗高速晶振的功耗、一段多余的调试代码都可能在能量预算表上放大十倍。我后续打算做两个方向的扩展。一是把光伏板换到 5cm² 左右电容从 1F 提升到 5F让模块在完全无光的环境下也能靠此前存储的能量多撑几天。二是把通信方式从纯广播改为可连接模式配合手机 App 做 OTA 固件升级。BLE 的广播通道毕竟只是单向通道能实现连接和读写才称得上完整的物联网节点。nRF51822 的 SoftDevice S130 支持可连接广播后续软件升级空间是够的。最后再分享一个小技巧做能量收集产品别一上来就做整机先搭一个“能量平台评估板”——光伏板、PMC、超级电容、电压监测点都独立引出来配合一个可调电子负载先把“能攒多少电、能扛多少负载”这个问题量化清楚再决定 MCU 和传感器选型。我见过太多人把 MCU、传感器都定好了才发现能量不够用回头改选型浪费两周时间。如果你也在做类似的无电池设备记住一句话把能源当常量把功耗当变量一切设计围绕能量预算转这条路就对了。