这几年做低功耗IoT节点产品,总有人问我同一个问题:LoRa到底为什么能传几公里,待机还能做到微安级?我早期用蓝牙和Wi-Fi也做过类似方案,后来发现一个很无奈的事实——距离和功耗永远在打架。省了电就丢了距离,保住距离电池又扛不住。真正让我把这事想明白的,是LoRa这条通信技术路线,再加上SiP系统级封装的器件。 LoRa、SiP、IoT Node、低功耗,这几个词凑在一起,本身就是一个非常典型的物联网终端节点设计命题。这篇文章我不会只讲概念,而是把这几年从选型、画板、调功耗到跑产线积累下来的东西,按一个完整项目的思路捋一遍。适合正在做环境监测、智能表计、资产追踪、智慧农业这类产品的硬件工程师,也适合打算从零搭建一个低功耗LoRa节点的嵌入式开发者。
1. LoRa凭什么能“省着电传得远”:无线链路选型背后的物理账
1.1 低功耗IoT节点的无线选型困局
先摆一个很多新手容易忽视的现实:IoT节点的功耗大头,通常不在传感器,也不在MCU,而在无线射频链路。做节点选型时,可选项翻来覆去就是那几样:蓝牙BLE、Wi-Fi、Zigbee、NB-IoT、LoRa,各有各的使用场景,但只有搞清楚它们的物理机制,才知道为什么LoRa在“低功耗+远距离”这个组合上格外突出。
| 无线技术 | 典型通信距离 | 节点待机功耗 | 网关/基站复杂度 | 适用场景 |
|---|---|---|---|---|
| BLE | 10~100 m | 极低(uA级待机) | 低(手机直连) | 可穿戴、短距传感 |
| Wi-Fi | 30~100 m | 较高(mA级待机) | 低(路由器) | 智能家居、视频流 |
| Zigbee | 10~100 m | 低(uA级待机) | 中(协调器) | 楼宇自动、组网传感 |
| NB-IoT | 1~10 km | 低,但依赖运营商网络 | 高(运营商基站) | 广域抄表、停车位检测 |
| LoRa | 2~15 km(视环境) | 极低(uA级待机) | 低(私有网关,可自建) | 智慧农业、资产追踪、工业传感 |
这张表里,BLE和Zigbee距离有限,Wi-Fi功耗做不低,NB-IoT虽然距离远,但节点需要频繁和运营商基站保持连接,很多场景下不能完全自己掌控功耗节奏。LoRa的优势在于:通信距离由物理层扩频增益和接收灵敏度决定,而功耗主要由射频收发器的工作状态决定。也就是说,LoRa可以在“不需要发送的时候彻底休眠,需要发送的时候一次把数据打完”,这个机制天然适合低功耗IoT节点。
1.2 LoRa物理层的省电逻辑
很多人以为LoRa省电是因为“发射功率低”,其实这只是表面。LoRa真正厉害的地方在于它的扩频调制机制。它通过把信号扩展到更宽的频带上,换取了极强的抗干扰能力和接收灵敏度。典型参数下,采用SF12扩频因子、125kHz带宽时,接收灵敏度能做到-137dBm左右,而常见的BLE芯片通常只能做到-95dBm上下。这意味着同样的发射功率,LoRa能覆盖的距离远得多。
这种灵敏度优势对低功耗的意义在于:节点可以用很小的发射功率完成远距离通信。举个实际例子,在城市环境做10公里级别的链路预算,用SF12时链路预算能达到150dB以上,而SF7时大概在136dB左右。链路预算越大,信号穿墙、绕射、抗遮挡的能力越强。再加上LoRa支持很高的扩频因子和编码率配置,工程师完全可以在“速率”和“灵敏度”之间做取舍:对低速数据采集节点,选高扩频因子,通信更稳,功耗也更可控。
1.3 LoRaWAN协议栈的功耗基调
硬件上有了LoRa射频收发器,上层协议栈也直接决定节点功耗。目前LoRa设备最常用的是LoRaWAN协议,它定义了Class A、Class B、Class C三种工作模式。Class A是最省电的:节点主动发送上行数据后,在随后的短暂时间窗口打开接收机,接收网关下发的下行数据,其余时间射频完全休眠。Class B增加了周期性接收窗口,Class C则几乎一直处于接收状态。对电池供电的IoT节点,绝大多数场景都应该优先考虑Class A,因为它把“接收功耗”这个看不见的成本压到了最低。
我见过不少项目为了“实时性”选Class C,结果电池寿命从两年直接掉到两个月。Class C这种模式适合有持续供电的网关卡设备,不适合节点。这里有个很实用的经验:在设计节点时,尽量把业务逻辑压缩成“数据主动上报”,少依赖实时下行控制。这样既能用Class A的省电机制,又能简化整个数据链路的设计。
2. 从分立到SiP:封装本身就在节省功耗和面积
2.1 分立方案的隐性射频损耗
很多工程师拿到一颗LoRa收发器芯片,习惯性地按老办法画板子:主控MCU放一侧,射频芯片放另一侧,中间走SPI或者UART,然后在射频芯片输出端按照数据手册搭匹配网络,再走一段微带线到天线。这套做法不是不行,但隐藏的坑非常多。
首先是射频匹配网络。LoRa收发器输出的引脚通常不是标准的50欧姆接口,需要额外的电容、电感做匹配。这些分立器件的精度、温漂、焊盘尺寸,都会影响最终的输出功率和接收灵敏度。哪怕只差0.5dB的插损,在链路预算上就可能是几百米的覆盖差别。其次是晶振。LoRa的频偏和晶振的温漂有直接关系,用外置晶振时必须做温度补偿校准,否则低温环境下信号质量会明显下降。然后是射频走线的阻抗控制。在双层板上做50欧姆阻抗走线并不难,但在寸土寸金的物联网节点板上,旁边往往还排着传感器、电源、按键,任何过近的地线或铺铜都可能改变射频特性。
2.2 SiP把哪些东西“藏”进了封装里
SiP(System in Package,系统级封装)解决的就是上面的问题。它的思路很直接:把射频收发器、匹配网络、滤波电路、晶振、甚至部分MCU闪存,都封装在同一个模块内部。对外暴露出来的引脚数量比一颗独立射频芯片还少,用户只需要按参考设计接电源、天线,就可以完成一个LoRa节点。
这种封装方式的第一个好处是射频一致性。匹配网络在封装内部已经用高精度元件调好,你拿到手的每一颗模块,射频参数都一样稳定,不会因为生产批次或手工焊料的差异导致输出功率漂移。第二个好处是功耗优化。晶振和匹配电路都在模块内部,减少了板级走线带来的泄漏和寄生电容,接收和发射的电流曲线会更干净,sleep模式的漏电也能控制得更低。第三个好处是面积。一个LoRa SiP模块的传统分立方案相比,占板面积可以少三分之一甚至一半。对小型化IoT产品来说,这直接决定了外壳能不能做小、电池能不能塞更大。
2.3 SiP给量产带来的隐性红利
从研发到量产,SiP方案的价值还会进一步放大。分立方案做射频调试,几乎每个项目都要经历“反复调整匹配网络—重新打样—测试灵敏度”的循环,而且在过认证时,射频性能一致性差会导致每一台样机数据都不一样,非常熬人。SiP模块本身已经完成了大部分射频性能的验证,整机设计时只要天线部分不犯大错,灵敏度普遍都能达到模块标称的水平。
这一点在中小团队尤其关键。一个二十人的硬件团队,通常没有专门的射频工程师去逐颗调匹配、调天线,用SiP可以省掉大量射频调试时间,把精力放在电源管理、传感器融合和应用功能上。我个人做项目时会建议:如果你不是以射频为专业壁垒的产品,LoRa链路优先考虑SiP模组,把时间花在更核心的业务上。
2.4 蹭个知识点:SiP封装和SIP协议别搞混
搜索“SiP”的时候很容易串到另一个东西——SIP会话初始协议,它在VoIP通信、语音网关里很常见。做LoRa节点时,我经常收到同事转来的链接,点开一看是光猫里的SIP语音配置,完全不是一回事。两个词拼写太像了,查资料时务必确认是“System in Package”还是“Session Initiation Protocol”。类似的坑还有LoRa和AI领域的LoRA微调,前者是无线的Long Range,后者是Low-Rank Adaptation模型训练方法,搜索的时候记得加“射频”“无线”这类限定词。
3. 从SiP器件到产品级节点:电源、唤醒与外设预算
3.1 电源设计:静态电流是隐形杀手
LoRa SiP器件的待机电流可以做到微安级,但如果电源拓扑设计不合理,整机待机电流可能直接被拉高几十倍。最常见的问题就是把一颗静态电流本身就很大的低压差线性稳压器(LDO)放在电源前端,或者用直流变换器(DCDC)时没有选轻载效率高的型号。很多标称“静态电流1uA”的LDO,厂家给的参数是在空载、25摄氏度的条件下测出来的,实际带负载后,静态电流可能飙升到几十微安。
这里分享一个我的经验:节点待机时,不仅要关注LoRa SiP芯片的电流,还要计算整个电源链路、传感器漏电、单片机深度睡眠电流这几项的总和。很多参考设计会把LDO直接挂在电池上,如果LDO静态电流本身就有5uA,那你的低功耗就白做了。更合理的做法是:电池前端用一颗静态电流极低的电源开关或LDO,按需给LoRa模块、传感器分别供电,不用的时候直接切断。这种“分段供电”策略,通常能把整机待机电流压到3uA以内。
3.2 唤醒策略:不是所有时刻都要“醒着”
低功耗节点的第二个核心设计是唤醒策略。LoRa节点不需要时刻在线,大部分时间都处于睡眠状态,只有到了设定时间或者检测到事件时才唤醒工作。常见的唤醒方式有三种:
- 定时唤醒:MCU内部的RTC或外置RTC定时触发,适合周期性数据采集。比如每10分钟采集一次温湿度,上报间隔固定。
- 事件唤醒:通过GPIO外部中断唤醒,适合门磁检测、运动检测、按钮触发这类场景,传感器本身是事件源。
- 射频唤醒:用LoRa的CAD通道检测功能,周期性地监听信道里有没有带特定前导码的信号,有信号才进入完整接收流程。
这三种方式可以结合使用。比如一个资产追踪器,平时用加速度计检测运动,静止时定时上报一次定位;如果检测到搬动,立即唤醒GNSS模块并上报。事件唤醒的优势在于:没有事件时系统可以一直睡,整体功耗几乎只取决于漏电流,这是延长电池寿命的关键。
3.3 外设功耗预算:传感器同样不能漏算
很多人在计算节点功耗时,只关心无线射频消耗,却把传感器的功耗给忽略了。实际上,一个气压传感器在测量模式下电流可能到几十微安,一个温湿度传感器带加热功能时甚至能到毫安级。如果数据采集频率很高,传感器的能耗甚至可能超过LoRa发射本身。
所以做外设功耗预算时,要有两张表:一张是“单次动作电流表”,记录每次传感器采样、数据发射、接收窗口分别用了多少电流、持续多少时间;另一张是“时间占比表”,统计每个动作每天发生多少次。把两张表相乘后累加,才能得到真正的平均电流。这个预算表做出来,电池寿命大致是多少,就已经能估出来了。
3.4 示例:10分钟上报一次的温湿度节点怎么算功耗
举一个我实际调过很多次的例子:一个基于LoRa SiP的温湿度采集节点,每10分钟唤醒一次,采集温湿度并上报,同时打开Class A接收窗口等待下行命令。传感器是常见的SHT系列,MCU在sleep模式下约1.5uA,LoRa SiP在sleep模式下约0.8uA,电源链路漏电约2uA。
节点每次工作过程大概是这样:MCU醒来,传感器上电并测量,耗时约20ms,平均电流约300uA;LoRa模块进入发送模式,发射功率选择+14dBm,电流约30mA,发送耗时约30ms;随后进入两个接收窗口,每个窗口约5ms,电流约5mA;然后回到sleep,整个动作约60ms。用这个数据算下来,单次动作的等效电量大概是0.3mA0.02s + 30mA0.03s + 5mA0.01s,约等于1毫安秒。一天下来,144次动作的总能耗只有0.4mAh左右。待机部分每天约3uA24h = 0.072mAh。一天总消耗约0.5mAh。如果用一块850mAh的锂电池,理论续航可以到四五年,扣除电池自放电和低温影响,实际用三年问题不大。
这个计算过程很简单,但很多项目翻车就翻在没算这么细,凭感觉选大电池,结果成本和体积都上去了,寿命还未必达标。
4. 实测LoRa模组的CAD模式功耗波形:从示波器到电池寿命
4.1 测电流的工具怎么搭
理论算完,还是要用实测来验证。我在调LoRa节点功耗时,最常用的是示波器加电流探头,或者更简单的采样电阻法。电流探头使用方便,但价格不便宜;采样电阻法成本低,精度也足够。具体做法是:在电源输入端串一只10欧姆的采样电阻,用示波器测电阻两端的电压,电流就等于电压除以10。选择10欧姆而不是1欧姆,是为了在微安级电流时也能看到可分辨的电压信号;但要注意,10欧姆本身会带来约1mV/uA的压降,对系统供电电压影响不大,对低压LDO可能需要注意。
为了串入采样电阻,PCB上一定要预留电流测试点。我第一版设计时没留,结果每次量功耗都要飞线,非常痛苦。建议在每个关键供电支路(MCU电源、LoRa模块电源、传感器电源)上都预留0欧姆电阻或跳线位,调试时取下0欧姆电阻,串入采样电阻,问题就能快速定位。
4.2 CAD模式波形一帧一帧看
CAD模式是LoRa SiP节点非常实用的功能。它的原理是让接收机周期性地进入一种“浅侦听”状态,用很低的电流检测信道上是否存在LoRa前导码。如果检测到有效信号,就进入完整的接收流程;如果没检测到,立即回到睡眠状态。这个机制对低功耗节点特别有用,因为接收机完整接收的电流远大于CAD检测电流,用CAD代替盲目的周期性全接收,能显著降低节点功耗。
实测波形大概分几个阶段。第一段是睡眠期,电流在微安级甚至亚微安级的底部,波形几乎是一条直线。第二段是MCU启动,寄存器初始化,电流出现一个小尖峰。第三段是CAD检测窗口,电流稳定在几毫安,波形是一个平坦的矩形平台,平台宽度和扩频因子相关,SF越大,CAD时间越长。第四段有两种可能:如果没有检测到前导码,电流直接掉回睡眠底;如果检测到前导码,会进入完整的RX接收窗口,电流进一步升高,然后进入TX发射阶段,发射脉冲电流可能到几十毫安,最后回到睡眠。这样一帧波形看下来,节点在哪里耗电、耗电多久,一目了然。
4.3 从波形倒推电池寿命
拿到波形之后,就可以把每个阶段的电流和时间标定出来,输入功耗计算表。比如我实测过一个LoRa节点,sleep电流2.2uA,CAD检测电流3.8mA,CAD窗口持续20ms,每天唤醒120次,一天的CAD能耗就是3.8mA * 0.02s * 120 / 3600,大约0.0025mAh,几乎可以忽略。真正的大头在于发射电流和接收窗口,这两段波形明显高一大截。
把波形里的数值代入计算,得到真实平均电流后,再和电池容量对比。电池寿命 = 电池容量 / 总平均电流,然后乘以放电效率。锂亚电池、磷酸铁锂、锂电池的效率不太一样,叠加自放电和低温影响后,实际寿命一般要按理论值的60%~80%来估算。如果实测结果和预期差距过大,不要急着怀疑电池,先把波形里每个阶段单独拿出来看,往往问题出在某一段上:可能是传感器没有完全断电,可能是GPIO没有配置成低功耗状态,也可能是接收窗口开得过于频繁。
4.4 波形异常意味着什么
调功耗时我最常遇到两种异常波形。第一种是睡眠基线过高,正常应该2uA左右,结果一测是50uA。这种问题基本可以锁定在某颗外设芯片没有真正进入睡眠模式,或者是MCU某个GPIO悬空,导致芯片漏电。解决办法是逐个外设断电排除,缩小范围后再看具体是哪颗芯片。第二种是发射脉冲后电流掉不下来,停在几毫安的位置。这种情况经常是射频功放之后有器件没来得及关闭,或者是一次发射过程中异常触发了重发机制。如果遇到这类情况,先查软件流程,看看是不是发射完成后忘记关闭射频模块,或者接收窗口定时器没有正常关闭。
5. 从原型到量产:LoRa SiP节点落地的几道暗沟
5.1 天线设计:SiP再强,天线拉胯也不行
SiP模块虽然集成了射频匹配,但它对外仍然需要一个合格的天线。很多原型板直接把弹簧天线焊在模块输出引脚附近,什么净空区都不留,结果实测灵敏度比模块手册低了10dB以上。LoRa天线的设计关键是净空区和参考地:天线下方不要铺大面积地铜,天线周围不要放金属外壳、排针、螺丝柱,否则天线方向图会被严重破坏。
如果产品外壳是金属的,情况就更复杂。我踩过一次很深的坑:塑料外壳测试时覆盖距离能到5公里,换了金属外壳后直接掉到1.5公里。这个差距不是因为模块性能变了,而是天线被金属外壳屏蔽了。量产金属外壳产品时,一定要预留外置天线或者在外壳上开非金属区域,并且提前去打样测试,别等整机定型了才发现。
5.2 电池不是理想电压源
LoRa节点发射瞬间,电流会突然从几微安跳到几十毫安。这个动态范围对电池是个不小的考验。碱性电池、锂亚电池在低温和大电流脉冲下,电压跌落非常明显,严重的会在发射瞬间把系统电压拉到MCU复位阈值以下。我遇到过一个项目,节点在常温下测试一切正常,一到冬天就频繁重启,排查到最后发现是锂亚电池在-20摄氏度时,脉冲放电能力大幅下降,发射瞬间电压跌到2.0V以下,整个系统掉电重启。
解决办法有几个:一是选用脉冲放电能力更强的电池型号,比如锂亚电池加超级电容组合,或者使用锂离子电池;二是在软件上把发射时间尽量缩短,避免长时间高占空比;三是在电源入口加一个大容量的储能电容,比如100uF甚至470uF的陶瓷电容或钽电容,用来平滑发射瞬间的大电流脉冲。
5.3 占空比限制、并发碰撞和频谱占用
LoRa虽然是低功耗技术,但无线频谱并不是想发就能发的。在中频段采用LoRaWAN协议时,各地区对占空比有明确的限制,比如典型限值是1%甚至0.1%。这意味着一小时里,节点实际发射的时间不能超过36秒或3.6秒。如果业务场景要求频繁上报,这个限制会直接卡住整个系统的数据量。
除了法规限制,还有多设备并发的问题。一个网关上接了成百上千个节点,所有节点都按整点上报,发射时间必然冲突,碰撞率飙升。解决思路是用伪随机化:每个节点的上报时刻在设定间隔基础上加一个随机偏移量,让发射时隙自然错开。这个偏移量不用很复杂,MCU的随机数发生器就能完成,重点是必须在设计初期就考虑进去,别等网关实测丢包了再临时加。
5.4 产测与认证的提前量
LoRa节点的生产测试和射频认证,同样要提前规划。产测环节至少需要测三样东西:发射功率、发射频偏、接收灵敏度。好消息是SiP模块的射频性能一致性高,产测可以通过射频测试座一次性完成,不需要逐台做复杂的温度校准。这比分立方案省了很多产线工时。
认证方面,SiP模块通常已经拿到了射频模块级的认证,整机认证时可以引用模块的测试报告,减少部分测试项目。但整机的EMC、天线性能波动、外壳屏蔽效果仍然需要单独测。所以哪怕用了SiP,也不意味着可以不做天线验证。我一般会在产品立项时就把认证测试项列进项目计划,预留至少两个月,越早发现问题,改版成本越低。
5.5 再补一刀:搜索这些关键词时别跑偏
顺带提醒一下,和“LoRa”相关的搜索很容易串到AI绘画领域的“LoRA模型”,比如搜索“lora模型网站”“lora微调”出来的其实是Stable Diffusion那套低秩适配技术,跟无线通信八竿子打不着。另外“IoT Node”这个关键词也容易撞到Node.js、Node安装配置之类的内容。如果你真的是在查LoRa无线节点,建议搜索时带上“射频”“LoRaWAN”“扩频”“Semtech”等限定词,效率和准确率都会高很多。
从我自己的实践来看,LoRa SiP方案最打动我的地方在于:它把射频链路里最容易出幺蛾子的部分封装成黑盒,让做节点的人可以把精力集中在低功耗策略、传感器融合和产品形态上。调过Cadence波形、算过电池寿命、踩过天线的坑之后,再回头看这个方案,它的确是目前低功耗IoT节点里投入产出比很不错的解法。最后再分享一个压箱底的小技巧:画PCB的时候,记得在电池正极到LDO之间留一个“BOD”(battery on board)焊盘,做功耗测试时直接断开这个焊盘串电流表,不用破坏任何走线。这个习惯帮我省了太多调试时间。