简介:这份资料包面向无人机、航模及无线图传方向的嵌入式开发者,围绕RX5808 5.8G双接收模块与RTC6705时钟芯片,提供从硬件原理到固件源码的完整开发参考。包内共426个文件,以214个xml器件描述、55个h头文件、49个cpp源文件为主,辅以pdf数据手册、jpg/png实物与电路图、md说明文档及ino、pde等工程文件,压缩包约13.72MB,覆盖STM32/ARM平台下的射频接收、频道切换与实时时钟配置。其中rx5808-pro-diversity开发源件包含原理图与源代码,便于自定义双接收分集逻辑;RTC6705手册与参考设计则帮助理解时钟同步与事件触发机制。已有1230人学习下载,适合希望掌握5.8G图传接收链路、提升单片机编程与嵌入式硬件设计能力的中高级开发者。
1. RX5808 5.8G双接收资料包:从RTC6705手册到分集原理图,这套东西到底怎么用
如果你手头正好有一包rx5808-pro-diversity的开发源件,里面塞着 RTC6705 手册和参考设计原理图,却不知道从哪一页开始翻,这篇就是写给你的。RX5808 是 5.8G 图传接收模块里被玩得最透的一颗,双接收分集(diversity)方案则是把两路 RX5808 同时收,谁信号好用谁,专门治 FPV 场景里天线方向一变就雪花的老毛病。资料包的价值不在“有源码”,而在于它把 RTC6705 这颗射频前端芯片的寄存器手册、参考设计原理图和分集切换逻辑放在了一起,让你能顺着“射频前端 → 基带切换 → 固件控制”这条线走通。适合做图传接收、地面站、FPV 眼镜改造的硬件和嵌入式工程师,也适合想从原理图层面吃透 5.8G 接收链路的人。下面按“先看懂芯片、再跑通分集、最后调参数”的顺序拆。
2. RTC6705 与 RX5808 的硬件底子:先看懂原理图再谈代码
2.1 RTC6705 在 RX5808 里到底管什么
RTC6705 是一颗 5.8G 频段的射频收发前端芯片,在 RX5808 模块上它主要承担接收通道的射频下变频和增益控制。你翻资料包里的 RTC6705 手册,重点不是从头读到尾,而是盯住三块:寄存器映射、SPI 时序、以及 RSSI 输出特性。RX5808 模块把 RTC6705 的 SPI 接口引出来,外部 MCU 通过三线 SPI(CLK、DATA、LE)写寄存器来设定接收频率和带宽。分集方案里,两路 RX5808 各自独立调频,MCU 分别读两路的 RSSI,再决定切哪一路音频/视频输出。
参考设计原理图里,你要确认的第一个点是 RTC6705 的供电和滤波。5.8G 接收对电源噪声极敏感,原理图上通常会有多级 LC 滤波和独立 LDO。第二个点是 RSSI 引脚的引出方式,有些模块 RSSI 是模拟电压直接出,有些经过运放缓冲。第三个点是音频/视频输出的切换电路,分集方案常用模拟开关(比如 CD4053 或类似器件)做切换,原理图里会标出切换控制脚接哪个 GPIO。
提示:不同批次的 RX5808 模块,RTC6705 的寄存器初始化值可能有差异,别直接抄网上一份代码就烧,先对着手册确认频率合成公式。
2.2 从原理图里提取分集切换的硬件约束
分集的核心动作是“读两路 RSSI → 比较 → 切模拟开关”。原理图决定了这个动作的时序边界。你要在图上找到模拟开关的切换时间参数,以及 RSSI 从射频变化到电压稳定的建立时间。常见做法是:MCU 每 1~5ms 轮询一次两路 RSSI,做滑动平均,避免单次采样抖动导致频繁切换。切换本身有延迟,如果切得太勤,音频会出现“咔哒”声,视频会闪。
原理图里还要注意两路 RX5808 的 SPI 片选是否独立。如果共用 LE 而只靠 CLK/DATA 分时,代码里必须严格保证两路寄存器写入不交错。我一般会在原理图上用不同颜色标出“射频路径”“控制路径”“音频/视频路径”,这样写固件时脑子不乱。
2.3 用万用表和逻辑分析仪做上电前检查
在写第一行代码之前,先做三件事。第一,用万用表测 RTC6705 的供电脚,确认是 3.3V 还是 5V,别搞错。第二,用逻辑分析仪抓一次已知能工作的 RX5808 模块的 SPI 波形,记下 CLK 频率和 LE 脉冲宽度,作为自己代码的参考。第三,给两路模块分别供电,测 RSSI 静态电压,通常在 0.5V~2.5V 之间随信号强度变化。
# 用逻辑分析仪抓 SPI 的典型接线(以常见 8 通道分析仪为例) # CH0 -> CLK # CH1 -> DATA # CH2 -> LE # 采样率设 4MHz 以上,触发设在 LE 上升沿这段不是代码,是抓波形的接线约定。逻辑说明:RTC6705 的 SPI 是“先数据后锁存”,LE 上升沿把移位寄存器里的值锁进目标寄存器。参数说明:CLK 频率一般不超过 10MHz,LE 高电平宽度至少 20ns,实际留 100ns 余量更稳。抓不到波形就先查模块供电和地线,别急着怀疑芯片坏。
3. 把 rx5808-pro-diversity 源码跑起来:编译、烧录与最小验证
3.1 源码结构里先看哪几个文件
rx5808-pro-diversity这类工程,通常包含:RTC6705 驱动层(SPI 写寄存器)、RSSI 采样与滤波、分集状态机、以及主循环。你拿到源码后,先找RTC6705或rx5808字样的文件,那是频率设置的核心。再看diversity或switch字样的文件,那是切换逻辑。不要一上来就改主循环,先把驱动层的寄存器写入函数读明白。
常见做法是:驱动层提供一个RX5808_set_frequency(uint16_t freq_mhz)函数,内部根据 RTC6705 手册的公式算出合成器寄存器值,再通过 SPI 写入。分集层调用两次这个函数,分别设两路频率,然后循环读 RSSI。
3.2 编译环境与烧录步骤
这类工程多数面向 AVR 或 STM32。以 AVR 为例,用avr-gcc加avrdude就能编译烧录。先确认Makefile里的 MCU 型号和熔丝位,别把 16MHz 的板子当 8MHz 烧。
# 典型 AVR 编译烧录流程 make clean make # 确认生成的 .hex 文件 ls -l *.hex # 烧录,注意 -p 后的型号和 -c 后的编程器 avrdude -p m328p -c usbasp -U flash:w:rx5808_pro_diversity.hex:i逻辑说明:make根据 Makefile 调用编译器,生成 hex。avrdude把 hex 写进 MCU flash。参数说明:-p m328p是芯片型号,换成你的实际型号;-c usbasp是编程器类型,用其他编程器要改;-U flash:w:表示写 flash。烧录后如果没反应,先查熔丝位是否设了外部晶振,再查复位电路。
3.3 最小验证:只收一路,确认频率能设对
在跑分集之前,先让一路 RX5808 工作。写一个最小程序:初始化 SPI,设频率到 5800MHz,然后串口打印 RSSI 电压。如果 RSSI 随信号源靠近而升高,说明射频和 SPI 都通了。
// 最小验证:设频并读 RSSI(伪代码,按实际 MCU 改) void main(void) { spi_init(); rx5808_init(); rx5808_set_frequency(5800); // 单位 MHz while (1) { uint16_t rssi = adc_read(RSSI_CH); uart_print("RSSI: "); uart_print_num(rssi); delay_ms(100); } }逻辑说明:rx5808_set_frequency内部按 RTC6705 手册算寄存器值并写 SPI。adc_read读 RSSI 引脚电压。参数说明:频率 5800 对应 5.8G 频段中心,实际图传常用 5645、5740、5800 等,按你的图传发射频率设。RSSI 阈值后面分集要用,先记录“无信号”和“强信号”两个值。
4. 分集切换逻辑与参数调优:RSSI 滤波、切换阈值、防抖
4.1 RSSI 采样与滑动平均怎么做
RSSI 是模拟量,直接比较两路瞬时值会因噪声误切。常见做法是每路各做 8~16 次采样,去掉最大最小后取平均,或者用一阶低通滤波。采样周期建议 1ms 一次,8 次就是 8ms 更新一次比较结果。
// 一阶低通滤波 RSSI #define ALPHA 0.2f float rssi_filtered[2] = {0}; void update_rssi(int ch, float raw) { rssi_filtered[ch] = ALPHA * raw + (1 - ALPHA) * rssi_filtered[ch]; }逻辑说明:ALPHA越小越平滑但响应越慢。参数说明:ALPHA=0.2在 1ms 采样下时间常数约 5ms,适合大多数 FPV 场景。如果切换太慢,加大ALPHA;如果抖动,减小ALPHA。
4.2 切换阈值与滞回比较
不能简单“谁大选谁”,否则两路接近时会反复切。要加滞回:当前路 RSSI 比另一路低超过HYST才切。HYST一般取 3~8 个 ADC 码值,具体看你的 ADC 位数和 RSSI 斜率。
// 滞回切换 #define HYST 5 int current_ch = 0; void diversity_switch(float rssi0, float rssi1) { if (current_ch == 0) { if (rssi1 > rssi0 + HYST) current_ch = 1; } else { if (rssi0 > rssi1 + HYST) current_ch = 0; } set_video_switch(current_ch); }逻辑说明:只有另一路明显更强才切,避免边界抖动。参数说明:HYST太小会抖,太大会漏切。我一般先在静态下测两路 RSSI 噪声峰峰值,取 2 倍作为HYST起点。
4.3 切换时机与音频“咔哒”声抑制
模拟开关切换瞬间,音频输出会跳变。常见做法是在切换前后短暂静音,或者用软切换(逐渐改变增益)。如果原理图里模拟开关有使能脚,可以在切换时先拉低使能,切完再拉高。视频切换一般不需要静音,但切换太快会导致同步头丢失,建议切换间隔不小于 20ms。
注意:分集切换不是越快越好。FPV 图传信号本身有起伏,切太勤反而让画面更碎。实测 50~100ms 的最小切换间隔比较稳。
5. 避坑与排查:RX5808 双接收调试中最容易翻车的 5 个点
5.1 现象:设频后 RSSI 不变,像没收到信号
原因:SPI 时序不对,寄存器没写进去。RTC6705 的 LE 脉冲太窄或 CLK 太快都会导致写入失败。解决:用逻辑分析仪抓 SPI,对照手册时序图,把 CLK 降到 1MHz 以下试,LE 宽度加到 1us。
5.2 现象:两路都收到信号,但分集不切换
原因:RSSI 采样通道搞反,或者模拟开关控制脚接错。解决:先单独测每路 RSSI 是否随信号变化,再测模拟开关控制脚电平是否随current_ch变化。原理图上用万用表通断档跟一遍。
5.3 现象:切换时视频闪一下甚至黑屏
原因:切换间隔太短,或者模拟开关切换时间不够。解决:把最小切换间隔加到 50ms 以上,查模拟开关数据手册的ton/toff,确保 MCU 等待时间大于它。
5.4 现象:近距离信号强时正常,远距离两路都雪花
原因:RSSI 在弱信号区非线性,滞回阈值设得不对。解决:在弱信号下重新测两路 RSSI 差值,把HYST调小,或者改用“信号低于某门限才启动分集比较”的策略。
5.5 现象:烧录后完全没反应,连串口都不出
原因:熔丝位错、晶振没起振、或者供电不足。解决:先量 MCU 供电和晶振脚,再用编程器读回 flash 确认烧录成功。AVR 的熔丝位写错会导致芯片锁死,需要高压编程器救。
6. 进阶:用 RTC6705 手册里的 RSSI 曲线做自适应阈值
RTC6705 手册里通常有一张 RSSI 输出电压 vs 输入功率的曲线。这张图的价值在于:你可以把 ADC 读数反推成 dBm,然后按 dBm 设阈值,而不是拍脑袋定 ADC 码值。具体做法:在已知信号源下测几个点(比如 -30dBm、-60dBm、-80dBm),拟合一条直线,代码里用rssi_dbm = a * adc + b。这样换模块、换批次时,只要重新标定 a、b,分集逻辑不用大改。
另一个进阶点是双路同时采样。有些 MCU 的 ADC 有多通道扫描模式,可以一次触发采两路,减少时间差。如果 MCU 不支持,就用两个 ADC 或外部多路开关,但要注意采样保持时间。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 采样周期 | 1ms | 太快噪声大,太慢响应迟 |
| 滤波 Alpha | 0.2 | 越小越平滑 |
| 滞回 HYST | 5 ADC 码 | 按噪声峰峰值 2 倍取 |
| 最小切换间隔 | 50ms | 防音频咔哒和视频闪 |
| SPI CLK | ≤1MHz | 保守值,稳定优先 |
我自己的习惯是:每次改完分集参数,先在地面用信号源做静态测试,记录切换次数和 RSSI 曲线,再去外场飞。外场环境一变,参数可能还要微调,但静态测试能排除大部分逻辑错误。希望帮到你。
本文还有配套的精品资源,点击获取