4. LoRa技术原理:从扩频通信到速率自适应

各位同学好,今天我们聊LoRa。说实话,LoRa这名字在物联网圈子里已经快被说烂了,但真正把它吃透的人并不多。我见过太多项目,芯片选型时只看参数表,结果到现场一测,通信距离缩水一半,功耗还下不来。嗯,今天我们就从原理到实战,把LoRa这块硬骨头啃下来。

4.1 LoRa扩频通信机制

LoRa的核心技术,说白了就是扩频。什么叫扩频?我打个比方:你正常说话,别人在10米外能听清。但如果你把一句话重复说100遍,哪怕声音小一点,100米外的人也能拼凑出来。LoRa就是这么干的——它把信号扩展到很宽的频带上,用时间换距离。

具体到技术层面,LoRa用的是CSS(Chirp Spread Spectrum,啁啾扩频)。信号频率随时间线性变化,像鸟叫一样从低到高或从高到低扫过去。这种机制的好处是抗干扰能力极强,哪怕信噪比低到-20dB,照样能解调出数据。

我个人习惯把LoRa的扩频参数归纳为三个核心指标:

  • 扩频因子(SF):从SF7到SF12,数值越大,扩频增益越高,通信距离越远,但速率越慢。SF12的速率只有SF7的1/64左右。
  • 带宽(BW):常见125kHz、250kHz、500kHz。带宽越宽,速率越快,但灵敏度会下降。
  • 编码率(CR):4/5到4/8,编码率越低,纠错能力越强,但有效数据占比越小。

关键公式(心里有数就行):

数据速率 ≈ SF × (BW / 2^SF) × CR

你想想看,SF每增加1,速率直接减半。所以选参数时,别一味追求远距离,得看你的数据量有多大。

我在项目中遇到过一件事:有个客户非要用SF12传图片,结果一张10KB的图传了快3分钟,电池两天就耗光了。后来改成SF9,距离只少了200米,但速率快了8倍,电池撑了半年。这就是教训。

4.2 SX1278 vs SX126x芯片对比

这两款芯片,可以说是LoRa模块的两代主力。SX1278是老将,SX126x是新秀。我刚开始做LoRa项目时,清一色SX1278,现在新设计基本都转向SX126x了。为什么?看下表:

对比项 SX1278 SX126x
工作频段 137-525MHz 150-960MHz
最大发射功率 +20dBm(100mW) +22dBm(158mW)
接收灵敏度 -148dBm @ SF12 -148dBm @ SF12(实测略优)
功耗(接收模式) 约12mA 约4.6mA
调制方式 LoRa + (G)FSK + OOK LoRa + (G)FSK + MSK
接口 SPI SPI + 额外DIO
内置功能 基本 CAD、Duty Cycle、TCXO管理
封装 QFN 28 QFN 24(更小)
价格 约$2-3 约$3-5

看到区别了吗?SX126x的接收功耗只有SX1278的1/3不到,这对电池供电的设备来说太关键了。而且SX126x内置了TCXO管理,省掉了外部晶振温补电路,BOM成本反而能降下来。

我的选型建议:

如果是做低成本、大批量的简单传感器,SX1278完全够用。但如果你做的是需要长期待机、或者要过认证的产品,我建议直接上SX126x。别为了省几块钱,后面在功耗和认证上花更多冤枉钱。

另外,SX126x有个功能叫CAD(Channel Activity Detection,信道活动检测),可以快速检测信道是否被占用。我在做多节点组网时,这个功能帮了大忙——节点醒来后先CAD一下,发现信道忙就继续睡,避免无效碰撞。

4.3 LoRaWAN协议栈架构

LoRaWAN是LoRa物理层之上的MAC层协议。很多人把LoRa和LoRaWAN混为一谈,其实不对。LoRa只管怎么把比特发出去,LoRaWAN管的是谁什么时候发、发完怎么确认、要不要重传。

LoRaWAN的架构分三层:

  • 终端节点(End Device):就是你的传感器、控制器。分Class A/B/C三种模式。
  • 网关(Gateway):负责转发数据,本身不做任何处理。一个网关可以同时接收上千个节点的数据。
  • 网络服务器(Network Server):真正的"大脑",负责去重、解密、速率控制、确认应答。

我重点说说终端节点的三种Class:

  • Class A(最常用):节点主动发数据,发完后打开两个接收窗口等服务器回复。功耗最低,但服务器不能主动下发数据。
  • Class B:在Class A基础上,增加了定期接收窗口。服务器可以"预约"时间下发数据,适合需要定时同步的场景。
  • Class C:节点几乎一直处于接收状态,功耗最大,但服务器可以随时下发数据。适合执行器类设备。

注意:Class C虽然方便,但电池供电的设备千万别用。我见过有人把Class C用在电池供电的阀门控制器上,结果三天就得换一次电池。Class A才是电池设备的王道。

LoRaWAN还有一个关键机制——OTAA(Over-The-Air Activation,空中激活)ABP(Activation By Personalization,个性化激活)。OTAA需要节点和服务器之间完成Join流程,安全性更高;ABP是预置密钥,上电即用,但密钥泄露风险大。我个人的习惯是:能走OTAA就别用ABP,除非你的设备部署在完全受控的环境里。

4.4 ADR速率自适应

ADR(Adaptive Data Rate)是LoRaWAN里最聪明的设计之一。它的逻辑很简单:离网关近的节点用高速率(SF7),离得远的用低速率(SF12)。但怎么判断远近?靠的是信噪比和RSSI。

具体流程是这样的:

  1. 节点发送数据时,带上自己的信噪比和RSSI信息。
  2. 网络服务器收到后,根据信号质量计算最优的SF、BW、CR组合。
  3. 服务器通过MAC命令下发给节点,节点调整参数。

我举个例子:一个节点在SF12下发送,信噪比是+10dB。服务器一看,信号这么好,完全可以用SF7。于是下发指令,速率从0.3kbps直接跳到5kbps,空中时间缩短了16倍,功耗也大幅下降。

ADR的适用场景:

  • 静态节点(位置固定)——效果最好
  • 移动节点(如牲畜追踪)——效果一般,需要频繁调整
  • 深井、地下室等信号极差环境——建议关闭ADR,手动固定SF

我曾经在农业大棚项目里吃过ADR的亏。大棚里金属支架多,信号反射严重,RSSI忽高忽低。ADR一开,节点在SF7和SF12之间来回跳,数据包丢失率飙升到30%。后来我干脆把ADR关了,固定用SF9,丢包率降到2%以下。所以ADR不是万能的,得看现场环境。

另外,LoRaWAN 1.0.4版本之后,ADR算法有了改进,加入了链路自适应(Link Adaptation)机制,可以根据历史数据做更平滑的调整。如果你用的是较新的协议栈,建议开启这个功能。

小结

LoRa技术看起来简单,但真正用好需要理解背后的物理层原理和协议栈机制。扩频因子怎么选、芯片用哪款、Class选A还是C、ADR开还是关——每个决策都直接影响系统的性能和寿命。

下一章我们会聊LoRaWAN网关的部署和频段规划,到时候我会分享一些实际组网中的踩坑经验。嗯,今天就到这里,有问题随时交流。