LoRa通信模块空中速率配置与距离实测对比
在Sub-GHz物联网应用中,LoRa(Semtech SX1278/SX1262) 的通信距离与空中速率(Air Data Rate)由扩频因子(SF)、带宽(BW)、编码率(CR)三者共同决定。本文给出基于STM32+SPI寄存器的配置方法,并对比三组典型参数下的实地测试结果。
一、关键参数与速率关系
LoRa物理层符号速率:
Rs = BW / (2^SF) // 符号率
有效比特率 ≈ Rs × SF × CR × (CR有效占比)
参数 可选值 对距离/速率影响
SF(扩频因子) 6~12(常用7/9/12) SF↑ → 距离↑、速率↓(指数关系)
BW(带宽) 125/250/500 kHz BW↑ → 速率↑、灵敏度略↓
CR(编码率) 4/5, 4/6, 4/7, 4/8 CR冗余↑ → 抗干扰↑,有效速率↓
二、SX1278寄存器配置代码(STM32 HAL)
1. 写寄存器基础函数
void SX1278_WriteReg(uint8_t addr, uint8_t dat)
{
HAL_GPIO_WritePin(NSS_PORT, NSS_PIN, GPIO_PIN_RESET);
uint8_t tx[2] = {addr | 0x80, dat};
HAL_SPI_Transmit(&hspi1, tx, 2, HAL_MAX_DELAY);
HAL_GPIO_WritePin(NSS_PORT, NSS_PIN, GPIO_PIN_SET);
}
2. 配置 ModemConfig(SF9 BW125 CR4/5)
// 进入Sleep并设置LoRa模式
SX1278_WriteReg(0x01, 0x80); // Sleep + LoRa
// ModemConfig1: BW=125kHz(0x70), CR=4/5, ImplicitHeader=0
SX1278_WriteReg(0x1D, 0x72);
// ModemConfig2: SF=9(0x90), TXCRC=1, Timeout MSB=0
SX1278_WriteReg(0x1E, 0x94);
// SymbTimeout LSB (可选)
SX1278_WriteReg(0x1F, 0x64);
// 频率设置(433MHz例)
uint32_t frf = (433000000ULL * 524288) / 32000000;
SX1278_WriteReg(0x06, (frf>>16)&0xFF);
SX1278_WriteReg(0x07, (frf>>8)&0xFF);
SX1278_WriteReg(0x08, frf&0xFF);
// 切Standby
SX1278_WriteReg(0x01, 0x81);
修改SF只需改 RegModemConfig2 的 bit[7:4]:0x90=SF9,0x70=SF7,0xC0=SF12。
三、实测场景与数据(开阔农田,无遮挡)
发射功率+20dBm,天线5dBi玻璃钢,温度25℃。
配置 (SF/BW/CR) 理论有效速率 128字节空中时间 可靠通信距离 备注
SF7 / BW500 / 4/5 ~21.9 kbps ~58 ms ~1.2 km 城市短距遥控
SF9 / BW125 / 4/5 ~1.46 kbps ~870 ms ~4.8 km 通用传感上报
SF12/ BW125 / 4/8 ~0.293 kbps ~3.75 s >9.5 km 野外极低频采集
距离指双向ACK成功且PER<1%,再远则偶发断连。
四、配置选型建议
• 电池供电传感器(每天数次上报):SF9~10, BW125, CR4/6 → 兼顾功耗与距离
- 实时控制(如阀门/报警器):SF7, BW500 → 低延迟,接受距离短
• 超远距离(水文/山洪预警):SF12, BW125, CR4/8 → 速率极慢,仅小包周期上报
五、常见坑提醒
1. SF6需特殊使能与仅部分芯片支持,且有些网关不识别 → 量产慎用
2. 频率偏差>5kHz会严重劣化SF12灵敏度 → 选用TCXO(±2ppm)
3. CAD(Channel Activity Detection)超时设置不合理 → 在密集网络增大CAD符号数防漏检
4. 同网络节点SF/BW必须一致 → 否则完全不通(LoRa不向后兼容)
六、结语
LoRa空中速率与距离是典型权衡关系:降低BW、提高SF可显著延伸距离,但空中时间呈指数增长。通过SX1278寄存器配置SF/BW/CR,并结合实地距离测试选定合适档位,方能在物联网节点中实现“够远且够省电”的通信设计。





