1. 从一次失控的固定翼飞行说起
去年秋天,我带着一架自己组装的固定翼去郊外飞场。起飞、爬升、转弯都正常,直到我拉杆准备做一个大坡度盘旋时,飞机突然像断了线的风筝一样,姿态僵住,然后一头扎进了远处的草丛。捡回来一看,机翼折断,机身变形。事后复盘,问题出在遥控链路上——我用的还是几年前的旧协议,在飞场附近有高压线和大功率设备干扰的情况下,信号丢包严重,接收机进入了失控保护,而失控保护的设置又恰好是保持最后姿态。
那次事故之后,我开始认真研究遥控协议这件事。也就是在那段时间,我第一次接触到ExpressLRS。说实话,一开始我是抱着怀疑态度的:一个开源项目,能比那些大厂闭源的协议更可靠?但当我真正把一套 915MHz 的 ExpressLRS 模块装到飞机上,飞到之前出事的同一片空域,看着遥控器上的信号质量指示稳稳地保持在 90% 以上时,我意识到,这套协议背后做的事情,远比我想象的要深。
ExpressLRS 的核心,是一套基于LoRa调制技术的开源遥控协议。它跑在ESP32这类低成本芯片上,用CRSF协议和飞控通信,把遥控链路的延迟压到了毫秒级,同时把传输距离拉到了几十公里。这不是简单的"开源版某某协议",而是从通信底层重新设计的一套方案。它解决的核心问题是:在同样的发射功率和频段下,如何让遥控信号既快又远又稳。适合谁来了解?如果你玩穿越机、固定翼、车模、船模,或者你在做无人机、机器人这类需要远距离低延迟遥控的项目,这套东西值得你花时间搞明白。
接下来我会从通信原理、硬件选型、固件配置、实测调参、常见坑这几个角度,把 ExpressLRS 这套东西拆开讲清楚。不是照搬官方文档,而是把我自己踩过的坑、调过的参数、验证过的结论分享出来。
2. LoRa 调制为什么能同时做到远和快
2.1 扩频通信的基本逻辑
要理解 ExpressLRS 为什么强,得先理解LoRa到底是什么。LoRa 的全称是 Long Range,中文一般叫"远距离无线电",它属于扩频通信的一种。传统遥控协议用的是窄带调制,比如把信号集中在很窄的一段频率上发射,这样速率可以做得高,但抗干扰能力差,一旦这个窄带被干扰,整个链路就废了。
LoRa 走的是另一条路:它把信号"扩"到一个很宽的频带上,用扩频因子(Spreading Factor,简称 SF)来控制扩频的程度。你可以这样理解:窄带通信像是在一条窄巷子里喊话,声音传得远但容易被堵;LoRa 像是把同样一句话用不同的音调、在不同的时间点重复喊很多遍,接收方只要凑齐足够多的片段就能还原出原话。即使有一部分片段被噪声淹没,剩下的片段仍然能拼出完整信息。
这就是 LoRa 的核心优势:处理增益。扩频因子每增加 1,处理增益大约增加 3dB,意味着接收灵敏度提升,能解调更弱的信号。代价是传输速率下降,因为同样的信息需要用更多的时间来发送。
2.2 ExpressLRS 在速率和距离之间的取舍
ExpressLRS 提供多种速率模式,常见的有 500Hz、250Hz、150Hz、50Hz 等。这里的 Hz 指的是遥控数据包的发送频率,也就是每秒发多少个控制包。500Hz 意味着每 2 毫秒发一包,延迟极低,适合穿越机这种需要快速响应的场景;50Hz 则是每 20 毫秒一包,延迟高一些,但每个包可以占用更长的时间,用更高的扩频因子,从而获得更远的距离和更强的抗干扰能力。
这里有个关键点很多人搞混:速率模式影响的不只是延迟,还有灵敏度和抗干扰能力。我实测下来,同样一套 915MHz 的硬件,在 500Hz 模式下,开阔地可靠距离大概在 10 公里左右;切到 50Hz 模式,同样的发射功率,距离能拉到 30 公里以上。这不是玄学,而是物理规律——你把能量集中在更少的数据包上,每个包就能获得更多的处理增益。
| 速率模式 | 包间隔 | 适用场景 | 实测可靠距离(100mW) |
|---|---|---|---|
| 500Hz | 2ms | 穿越机竞速 | 8-12km |
| 250Hz | 4ms | 花飞、固定翼 | 15-20km |
| 150Hz | 6.7ms | 远航 | 20-25km |
| 50Hz | 20ms | 超远航、复杂环境 | 30km+ |
注意:上表距离是在开阔无干扰环境下测得的,城市或复杂电磁环境会大幅缩短。另外,接收机的天线质量对距离的影响,往往比发射功率更大。
2.3 和传统协议的对比
传统遥控协议,比如某些大厂的 2.4GHz 方案,走的是跳频加窄带调制。跳频的意思是发射机和接收机按照约定的序列在多个频点之间快速切换,这样即使某个频点被干扰,也能跳到干净的频点继续通信。这套机制在 2.4GHz 频段很有效,因为 2.4GHz 频段虽然拥挤,但干扰通常是局部的、窄带的。
但 2.4GHz 有个物理限制:频率越高,绕射能力越差,穿透力越弱。在视距内没问题,一旦有遮挡,比如飞到你身后、穿过树林、低空飞行,信号衰减会非常快。而 915MHz(或 868MHz)频段波长更长,绕射和穿透能力明显更好,这也是为什么 ExpressLRS 主推 915MHz 和 2.4GHz 双频方案——低频段保距离和穿透,高频段保精度和天线小型化。
ExpressLRS 的聪明之处在于,它没有死守某一个频段,而是让你可以根据场景选择。远航用 915MHz,竞速用 2.4GHz,甚至可以用双频接收机同时接收两个频段的信号,哪个好用哪个。这种灵活性,是闭源协议很难做到的。
3. 硬件选型:ESP32 和射频芯片怎么搭
3.1 ESP32 在 ExpressLRS 里的角色
ExpressLRS 的发射机和接收机,核心控制器基本都是ESP32系列芯片。为什么选 ESP32?原因很实际:它便宜、性能够用、自带 WiFi 和蓝牙、开发环境成熟、社区支持好。一颗 ESP32 芯片十几块钱,却能跑完整的遥控协议栈,这在几年前是不可想象的。
ESP32 在 ExpressLRS 里主要负责几件事:运行协议栈、处理 CRSF 串口数据、控制射频芯片收发、管理 WiFi 配置界面。它不直接产生射频信号,射频部分由外挂的射频芯片完成,比如 SX1276、SX1262、SX1280 这些。ESP32 通过 SPI 总线和这些射频芯片通信,把要发的数据交给射频芯片,射频芯片负责调制和发射。
这里有个容易忽略的细节:ESP32 的 SPI 时钟频率和射频芯片的匹配。我遇到过有人自己画板子,SPI 走线太长,时钟拉到 10MHz 就各种丢包,降到 4MHz 就稳了。官方推荐的模块都是经过验证的,自己画板的话,SPI 走线尽量短,时钟先保守一点,跑通了再往上调。
3.2 射频芯片的选择:SX1276 vs SX1262 vs SX1280
ExpressLRS 支持的射频芯片主要有三款,各有各的适用场景:
SX1276是最早支持的一批,工作在 915MHz/868MHz 频段,成熟稳定,但功耗和灵敏度相比新一代略逊一筹。很多早期的 ExpressLRS 模块用的就是它。
SX1262是 SX1276 的升级版,同样工作在 Sub-GHz 频段,但接收灵敏度更高、功耗更低、抗干扰能力更强。现在主流的 915MHz ExpressLRS 模块基本都用它。我对比过同一位置、同一天线,SX1262 的接收信号强度比 SX1276 平均高 3-5dB,别小看这个数字,在远距离边缘,这就是能不能稳定控制的差别。
SX1280工作在 2.4GHz 频段,支持更高的速率和更低的延迟,适合竞速和近距离高精度场景。它的天线可以做得很小,适合空间受限的机型。
| 射频芯片 | 频段 | 优势 | 劣势 | 典型用途 |
|---|---|---|---|---|
| SX1276 | 915/868MHz | 成熟、便宜 | 灵敏度一般 | 入门远航 |
| SX1262 | 915/868MHz | 灵敏度高、功耗低 | 价格略高 | 主流远航 |
| SX1280 | 2.4GHz | 延迟低、天线小 | 穿透差 | 竞速、室内 |
3.3 发射机和接收机的硬件搭配
发射机这边,常见的有两种形态:一种是内置模块,直接装进遥控器里,通过遥控器的扩展仓供电和通信;另一种是外置模块,插在遥控器背面的 JR 仓里。内置模块更整洁,但需要遥控器支持;外置模块通用性好,但多一个凸起。
接收机这边,选择就更多了。有带 PWM 输出的,可以直接接舵机;有带 CRSF 输出的,接飞控;还有带 WiFi 的,方便无线调参。我个人的经验是,远航机用带 CRSF 的接收机接飞控,这样飞控能拿到完整的链路质量数据,可以在 OSD 上显示信号强度、信噪比这些信息,方便判断什么时候该返航。
提示:买接收机的时候注意看射频芯片型号和天线接口。有些便宜模块用的是 SX1276 配劣质天线,标称距离很远,实际飞个几公里就丢信号。天线这东西,真的是一分钱一分货。
4. 固件配置:从刷写到调参的完整流程
4.1 刷写固件前的准备工作
ExpressLRS 的固件刷写,官方推荐用ExpressLRS Configurator这个工具。它把编译和刷写流程都图形化了,不用自己搭编译环境。但有几个前置条件得先满足:
第一,安装好 USB 转串口驱动。ESP32 模块常用的串口芯片有 CP2102、CH340 这些,驱动装不对,电脑认不到设备,后面全白搭。我建议先在设备管理器里确认能看到串口,再打开 Configurator。
第二,确认模块的刷写方式。有些模块支持 WiFi 刷写,有些只能通过串口刷写。WiFi 刷写方便,但第一次刷写通常还是得用串口,因为出厂固件可能不支持 WiFi 更新。串口刷写需要把模块的 BOOT 引脚拉低再上电,进入下载模式。
第三,选对目标版本。Configurator 里要选对硬件版本和频段。选错了频段,比如 915MHz 的模块刷了 868MHz 的固件,轻则距离短,重则根本连不上。
4.2 发射机和接收机的配对逻辑
ExpressLRS 的配对,官方叫Bind,逻辑和传统协议不太一样。传统协议通常有个物理按键,按住就进入对码模式。ExpressLRS 也支持按键对码,但更常用的是自动配对:发射机和接收机在同一个频段、同一个速率模式下,上电后会自动搜索并绑定。
这里有个坑我踩过:发射机和接收机的固件版本必须匹配。我有一次发射机刷了 3.x 的固件,接收机还是 2.x,结果怎么都对不上。后来把两边都刷到同一个版本,秒配对。所以刷固件的时候,发射机和接收机最好一起刷,版本号保持一致。
配对成功后,接收机会记住发射机的信息,下次上电自动连接。如果要换发射机,需要重新配对。有些接收机支持多次配对记忆,但为了稳定,我一般只保留一个绑定。
4.3 关键参数的含义和调整
ExpressLRS 的参数不少,但真正影响飞行体验的主要是这几个:
Packet Rate(包速率):前面说过,500Hz 到 50Hz,根据场景选。穿越机选 500Hz 或 250Hz,远航选 150Hz 或 50Hz。
Telemetry Ratio(回传比例):控制回传数据占用的带宽比例。回传数据包括信号质量、电压、GPS 信息等。比例越高,回传越及时,但留给控制信号的带宽就越少。我一般设 1:64 或 1:128,远航时设 1:128,保证控制信号优先。
Switch Mode(开关模式):控制遥控器开关通道的传输方式。有 Wide 和 Hybrid 两种。Wide 模式每个包都传所有开关状态,延迟低但占用带宽;Hybrid 模式只在开关变化时传,省带宽但可能有延迟。竞速用 Wide,远航用 Hybrid。
Model Match(模型匹配):开启后,接收机只响应特定模型 ID 的信号,防止飞错模型。这个功能强烈建议开启,我见过太多因为飞错模型导致的炸机。
| 参数 | 推荐值(远航) | 推荐值(竞速) | 说明 |
|---|---|---|---|
| Packet Rate | 50-150Hz | 250-500Hz | 速率越低距离越远 |
| Telemetry Ratio | 1:128 | 1:64 | 回传比例 |
| Switch Mode | Hybrid | Wide | 开关传输方式 |
| Model Match | 开启 | 开启 | 防止飞错模型 |
注意:改参数的时候一次只改一个,改完实测一下再改下一个。同时改多个参数,出了问题很难定位是哪个参数导致的。
5. 实测调参:天线、功率和环境的博弈
5.1 天线选型对距离的影响
很多人把注意力放在发射功率上,觉得功率越大距离越远。但实际上,天线增益和极化方式对距离的影响,往往比功率更大。我做过一组对比测试:同样 100mW 发射功率,用原装小天线,可靠距离 8 公里;换了一根高增益定向天线,同样功率,可靠距离拉到 20 公里以上。
天线有几个关键参数:增益、极化方式、驻波比。增益越高,能量越集中,但覆盖角度越窄。定向天线适合固定方向远航,全向天线适合自由飞行。极化方式要匹配,发射和接收都是垂直极化,或者都是水平极化,混用会导致信号大幅衰减。
驻波比这个参数容易被忽略。驻波比高,说明天线和射频芯片阻抗不匹配,能量反射回芯片,不仅距离短,还可能烧芯片。我建议买天线的时候看一下驻波比,最好在 1.5 以下。
5.2 发射功率的设置和法规边界
ExpressLRS 支持动态功率调整,可以根据链路质量自动调整发射功率。链路好时降低功率省电,链路差时提高功率保连接。这个功能很实用,但要注意功率上限的设置。
不同地区对无线电发射功率有不同的规定。我在这里不展开具体法规,但你要知道,超过规定功率发射是不合规的,而且高功率带来的干扰和发热问题也不容忽视。我一般把最大功率设在 250mW 以内,远航时靠天线增益和低频段来补距离,而不是一味堆功率。
动态功率的另一个好处是省电。发射机功率从 250mW 降到 10mW,电流消耗可能从几百毫安降到几十毫安,对遥控器续航有明显帮助。
5.3 环境干扰的识别和应对
飞场环境对遥控链路的影响,怎么强调都不过分。我遇到过几种典型的干扰场景:
高压线附近:高压线会产生强烈的电磁场,对 Sub-GHz 频段有宽频干扰。这种环境下,LoRa 的扩频优势能体现出来,但距离还是会明显缩短。应对方法是尽量远离,或者切到 2.4GHz 频段试试。
城市楼宇间:多径效应严重,信号在建筑物之间反射,到达接收机时可能相位相反,互相抵消。这种环境下,跳频和扩频都有帮助,但最好的办法还是飞高一点,保持视距。
其他遥控器同时使用:多个遥控器在同一频段工作,会互相干扰。ExpressLRS 有跳频机制,但频道拥挤时还是会影响。我一般会问一下同场飞友用的什么频段,尽量错开。
提示:ExpressLRS 的 OSD 上可以显示信噪比(SNR)和信号强度(RSSI)。SNR 低于 0dB 时就要警惕了,低于 -5dB 基本就到边缘了。养成看这些数据的习惯,比凭感觉判断靠谱得多。
6. 那些官方文档不会告诉你的坑
6.1 固件版本不匹配导致的玄学问题
前面提过版本要匹配,但这里展开说一下具体表现。版本不匹配时,可能出现:能配对但距离极短、回传数据乱码、偶尔失控、开关通道响应延迟。这些问题看起来像硬件故障,实际上是固件协议不一致。
我的做法是:每次升级,发射机和所有接收机一起升。升级前记下当前版本号,升级后确认版本号一致。如果升级后出现问题,先回退到上一个稳定版本,再逐个排查。
6.2 供电不足引发的重启和丢包
ESP32 和射频芯片在发射瞬间电流需求很大,如果供电不足,电压会瞬间跌落,导致芯片重启或工作异常。我遇到过接收机在发射回传数据时突然重启,查了半天才发现是飞控的 5V 供电能力不够。
解决办法:接收机尽量用独立的 BEC 供电,或者确认飞控的 5V 输出能提供足够电流。发射机这边,遥控器的电池电压要够,老遥控器电池老化后,发射时电压跌落也会导致问题。
6.3 天线接口和线缆的隐性损耗
SMA 接口看起来都一样,但质量差别很大。劣质接口接触不良,引入额外损耗。天线馈线也是,越长越细,损耗越大。我建议馈线尽量短,接口拧紧,定期检查有没有氧化。
还有一个容易被忽略的点:天线附近的金属和碳纤维。碳纤维机身对射频信号有屏蔽作用,天线如果贴着碳纤维板安装,距离会大幅缩短。天线要尽量远离金属和碳纤维,最好伸出机身外面。
6.4 温度对射频性能的影响
极端温度会影响射频芯片的性能。夏天暴晒后,模块温度可能到六七十度,接收灵敏度下降;冬天低温下,电池电压下降,发射功率也会受影响。我一般会在极端天气下缩短飞行距离,留足余量。
7. 从 CRSF 到飞控:数据链路的最后一公里
7.1 CRSF 协议在 ExpressLRS 里的位置
ExpressLRS 接收机和飞控之间的通信,用的是CRSF协议。CRSF 是 Crossfire 的缩写,原本是 TBS 家的协议,后来被广泛采用,成了开源飞控生态里的通用遥控协议。它是一根串口线,波特率通常 420k 或 115200,双向通信,飞控可以通过它给接收机发指令,接收机也可以把链路质量、GPS 信息回传给飞控。
ExpressLRS 接收机输出 CRSF 信号,飞控端要设置对应的串口为 CRSF 协议。这个设置在不同飞控固件里位置不一样,Betaflight 里在 Ports 标签页设置,INAV 里在 Serial 设置里。设错了,飞控收不到遥控信号,或者收得到但回传数据不对。
7.2 飞控端的关键设置
飞控端有几个设置和 ExpressLRS 配合密切:
串口协议:接收机接哪个串口,就把那个串口设为 CRSF。注意 TX 和 RX 要交叉接,接收机的 TX 接飞控的 RX,接收机的 RX 接飞控的 TX。
失控保护:ExpressLRS 支持通过 CRSF 传递失控保护设置。飞控端要设置失控保护的动作,比如切断电机、打开降落伞、返航等。这个设置因机型而异,但一定要设,而且要测试。
遥测数据:CRSF 可以回传链路质量、RSSI、SNR、GPS 坐标等。飞控端要开启对应的遥测项,OSD 上才能显示。我一般会显示 RSSI、SNR、电压、距离,这几个信息对判断链路状态最有用。
7.3 链路质量数据的解读
ExpressLRS 回传的链路质量数据里,RSSI是信号强度,SNR是信噪比,LQ是链路质量百分比。这三个数据要结合起来看:
RSSI 高但 SNR 低,说明信号强但噪声也强,可能是环境干扰大;RSSI 低但 SNR 高,说明信号弱但环境干净,可能是距离远;LQ 下降是最直接的预警,低于 80% 就要注意,低于 50% 就要准备返航了。
我个人的经验是,不要等到 LQ 掉到很低才返航。远航时,去程和回程的链路条件可能不一样,去程顺风、回程逆风,或者去程远离干扰源、回程靠近干扰源。留足余量,LQ 掉到 70% 左右就该考虑往回走了。
8. 写在最后:一些个人体会
玩 ExpressLRS 这一年多,最大的感受是:它把遥控链路的黑盒打开了。以前用闭源协议,信号不好只能换天线、换位置,不知道为什么不好。现在能看到 RSSI、SNR、LQ 这些数据,能根据数据判断问题出在哪里,是距离太远、环境干扰、还是硬件问题。
另一个感受是,开源生态的迭代速度真的快。ExpressLRS 的固件更新很频繁,新功能、新优化不断出来。社区里有人分享配置、有人反馈问题、有人贡献代码,这种活力是闭源协议很难比的。
当然,开源也意味着你要自己承担更多。硬件选型、固件刷写、参数调优,每一步都可能踩坑。但踩坑的过程也是学习的过程,搞明白之后,你对整个遥控链路的理解会比用闭源协议深得多。
如果你刚开始接触,我的建议是:先买一套成熟的模块,按照官方文档刷好固件,在开阔场地飞一飞,感受一下链路质量数据的变化。然后逐步调整参数,观察每个参数对飞行的影响。不要一上来就追求极限距离,先把基础打牢,把安全余量留足。飞行这件事,稳比远重要。