国产 GD32 无人机信标接收机:接收、寻向与上位机联调记录
这是我们科研训练团队参与完成的一套无人机信标接收机。项目围绕国产 GD32F450ZGT6 展开,目标是把天线接收到的信标信号转换为可用于寻向的 RSSI 数据,并完成扫描、粗定位、精定位、锁定、上位机显示和日志记录这一整条链路。
项目当前已经具备硬件原理图、引脚分配、软件设计方案和 Qt 上位机。下位机 GD32 与 FPGA 的完整固件仍需要继续补齐,因此下面会明确区分已经落地的软件功能、已经确定的硬件接口,以及后续真机联调需要验证的指标。
系统由三部分协同完成
接收机按照实时性划分为高速采样、实时控制和上位机交互三部分。
| 模块 | 主要器件或软件 | 主要职责 |
|---|---|---|
| 高速采样 | 射频前端、ADC、FPGA | 完成射频通道控制、I/Q 或 RSSI 采样、功率计算与数据缓冲 |
| 实时控制 | GD32F450ZGT6 | 周期读取采样结果,执行寻向状态机,控制舵机或电机,发送状态数据 |
| 交互与记录 | Qt 6 上位机 | 串口通信、命令下发、RSSI 极坐标显示、信标解析、地图定位与日志保存 |
这种划分把不同时间尺度的工作隔离开来:采样时序由 FPGA 保持稳定,GD32 只处理固定周期内需要做出的控制决策,上位机则专注于交互、可视化和数据追溯。这样既避免 MCU 被高速采样任务占满,也能让后续调试从“射频采样—控制逻辑—界面显示”三个方向分别进行。
GD32 核心板与外设连接
主控选择 GD32F450ZGT6。核心板除了常见的串口和下载接口外,还预留了 SPI、I2C、模拟采样、SDIO、QSPI Flash、USB、SWD,以及多路射频控制信号。这样的接口布局是为了给收发器配置、RSSI 读取、数据记录和后续调试留下余量。
![]()
关键引脚分配如下:
| 信号 | GD32 引脚 | 用途 |
|---|---|---|
| RSSI | PA0 | RSSI 模拟量输入 |
| ADC0 / ADC1 / ADC2 | PA1 / PA2 / PA3 | 多路模拟量采样 |
| SSP1 SPI | PB13 / PB14 / PB15 | 与 ADC 或射频器件交换数据 |
| CS_AD / CS_XCVR | PD8 / PD9 | ADC 与收发器片选 |
| XCVR_EN | PD10 | 收发器使能 |
| MIXER_SCLK / SDATA / ENX | PC10 / PC12 / PC11 | 配置射频混频器 |
| I2C0 | PB6 / PB7 | 配置或扩展低速外设 |
| USART0 | PA9 / PA10 | 与上位机通信 |
| SWD | PA13 / PA14 | 固件下载与在线调试 |
射频部分还使用了 RXENABLE、TXENABLE、RX_AMP、TX_AMP、AMP_BYPASS、MIX_BYPASS、LP、HP 等控制线。将这些信号按真实功能命名,可以让固件状态、原理图和示波器测试点直接对应,后续维护也不需要反复查找 GPIO 编号。
供电部分需要区分 MCU 和数字逻辑使用的 3.3 V、FPGA 或特定接口使用的 1.8 V、射频模拟部分的 VAA,以及收发器与放大器的受控电源。数字系统成功启动不代表射频链路已经处于可用状态,联调时应先确认电源、复位和使能逻辑,再进入信号测试。
射频接收链路
信号从天线进入后,需要经过开关、放大、滤波、混频、基带处理和采样,最后才能交给数字部分处理。整条链路可以概括为:
天线
→ RF 开关 / 接收放大
→ 混频器与可控滤波通道
→ 中频滤波
→ MAX2837 收发器
→ RXBBI / RXBBQ 基带 I/Q
→ ADC
→ FPGA
硬件中使用了 SKY13317-373LF、SKY13453-385LF、RFFC5072TR13、HFCN-4400+、HT-LFCN-400+ 和 MAX2837 等器件,分别承担射频路径切换、旁路或增益控制、混频、滤波和基带输出等功能。
![]()
射频调试不宜直接从最终 RSSI 结果开始。更可靠的做法是从供电与使能状态开始,依次检查天线端、RF 开关、放大器、滤波器、混频器本振和中频输出,再检查 MAX2837 的配置与 I/Q 输出,最后确认 ADC 采样值、FPGA 寄存器和 GD32 上报数据。每一级都能得到独立验证时,出现 RSSI 异常才容易定位到具体环节。
FPGA 负责采样与功率计算
时钟部分由 SI5351C-B-GMR 提供,MAX5864ETM+ 将采样数据送入 FPGA,FPGA 侧采用 XC2C64A-7VQG100C。在该架构中,FPGA 负责对采样时序进行固定控制,并把高速数据处理成 GD32 可以周期读取的寄存器结果。
FPGA 的主要任务包括:
- 生成 ADC 所需的时钟、片选和读写时序;
- 支持 I/Q 双通道同步采样,或单通道 RSSI 电压采样;
- 将采样数据写入 FIFO,并统一数据宽度与寄存器接口;
- 对 I/Q 数据计算瞬时功率;
- 对功率或 RSSI 结果做滑动平均;
- 通过 SPI 从机寄存器向 GD32 输出处理结果。
I/Q 模式下,基础功率计算可以写为:
P = I² + Q²
实际实现中,原始 ADC 值、滤波后功率和最终 RSSI 应分开保留。这样在进行 dBm 标定时,可以区分问题是出在采样、滤波还是标度换算,而不是只面对一个错误的最终数值。
![]()
FPGA 的接口、电源和去耦部分也单独保留。后续固件联调时,数据通道、时钟、片选与 JTAG 配置接口都需要与这部分原理图逐项核对。
![]()
扫描、粗定位、精定位与锁定
寻向流程使用有限状态机实现,状态分为 IDLE、SCAN、COARSE、FINE 和 LOCKED。
| 状态 | 主要动作 | 状态切换条件 |
|---|---|---|
IDLE | 保持执行机构不动,等待控制命令 | 收到 CMD_SCAN_START 后进入 SCAN |
SCAN | 进行 360° 扫描,按固定周期记录 RSSI 与角度 | RSSI 超过门限后进入 COARSE |
COARSE | 记录信号波束的起止角,计算大致中心方向 | 得到波束中心后进入 FINE |
FINE | 在粗定位中心附近做三点采样,逐步减小步长 | 步长收敛后进入 LOCKED |
LOCKED | 停止扫描,持续监测 RSSI 是否保持有效 | 信号失锁或收到停止命令后退出 |
软件设计中,SPI 读取周期约为 1 ms,电机控制回路目标频率约为 200 Hz,状态信息约以 20 Hz 上传到上位机。采样、控制和界面刷新使用不同的节拍,避免 PC 端的刷新速度影响下位机控制稳定性。
角度处理需要注意 0°/360° 跨界问题。例如 359° 与 1° 不能直接做普通算术平均,计算波束中心时应使用环形角度差;手动控制和自动控制也应把输出限制在 [0°, 360°) 范围内,防止跨越北向时出现突然反向。
串口协议与可靠传输
上位机将协议解析独立为 ProtocolParser,采用固定帧头、命令字、长度、负载和 CRC 的格式:
[0x55][0xAA][CMD][LEN_H][LEN_L][PAYLOAD...][CRC_H][CRC_L]
解析逻辑需要处理半包、粘包、帧头错位、异常长度和 CRC16 校验错误;接收原始帧也会被保留,便于后续日志回放。当前命令约定如下:
| 方向 | 命令 | 编码 | 负载 |
|---|---|---|---|
| GD32 → PC | CMD_STATUS | 0x01 | 状态 1 B、角度 2 B、RSSI 2 B |
| GD32 → PC | CMD_DATA | 0x02 | 原始信标数据 |
| PC → GD32 | CMD_SET_THRESHOLD | 0x10 | RSSI 门限 2 B |
| PC → GD32 | CMD_SCAN_START | 0x11 | 开始扫描 |
| PC → GD32 | CMD_STOP | 0x12 | 停止扫描 |
| PC → GD32 | CMD_MANUAL_CTRL | 0x13 | 方向 1 B、角度 2 B |
| 双向 | ACK / NACK | 0x00 / 0xFF | 命令确认与异常反馈 |
角度采用 0.1° 定点表示,RSSI 采用 dBm × 10 定点表示。协议文档中必须统一字节序、符号位和数值范围,否则同一组字节在 GD32 和上位机中可能会被解释成不同含义。
Qt 上位机承担了哪些工作
BeaconReceiver 基于 Qt 6.10、qmake、Widgets 和 SerialPort 开发。上位机不仅用于显示数据,还承担了控制下发和调试记录工作:
- 刷新串口、连接设备,并提供 115200 到 921600 的波特率选择;
- 下发扫描、停止、门限设置和手动控制等命令;
- 通过 ACK/NACK、超时和最多 5 次重发保证命令能被确认;
- 实时显示状态、方位角、RSSI、峰值方位、信标 ID、GPS、高度和电量;
- 使用 RSSI 极坐标图显示扫描余辉、最强点、门限与锁定方向;
- 导出 CSV 状态日志、信标日志和完整 TX/RX 原始帧日志;
- 在需要时通过高德地图或 Google Maps 展示坐标位置。
数据流采用“异步接收 → 协议解析 → 数据模型 → UI 更新”的方式。串口连续到达数据时,界面不必等待某个按钮回调结束,图表、日志和状态显示可以持续更新。
DEMO 已验证的内容与真机验证的边界
当前上位机提供 DEMO 模式:每 50 ms 生成一个状态帧,每 20 个状态帧生成一次信标数据帧,并模拟 RSSI 随角度变化的波束、粗定位、精定位、锁定和信号丢失后的重新扫描。
DEMO 可以用于确认协议打包与解析、ACK 队列与重发、状态机切换、极坐标显示,以及 CSV 和原始帧日志保存是否正确。它验证的是软件闭环和数据路径。
真实射频性能则仍需在硬件上验证,包括接收灵敏度、动态范围、频点一致性、RSSI 标定精度和最终寻向误差。对于这类接收机,软件流程跑通只是第一步,RF 到 dBm 的标定链路和机械角度误差同样决定最终效果。
后续工作
下一阶段将围绕真机联调继续推进:
- 为协议增加版本号、序列号和时间戳,使控制命令、ACK、重发和状态帧能够在日志中完整关联;
- 将 DEMO 中的文本信标逐步升级为 TLV 或带长度的二进制字段,并保留原始 payload;
- 同步记录信号源功率、射频测试点功率、ADC 原始值、FPGA 计算结果、GD32 读取值和上位机 RSSI,建立完整标定曲线;
- 补齐 GD32 固件、FPGA 逻辑、SPI 寄存器表和协议测试向量,用同一组 RSSI 序列检查三端行为是否一致。
这次科研训练让我们真正把“无线接收”从一个抽象概念拆成了可落地的工程链路:射频前端负责把信号送到基带,FPGA 把高速采样转化为稳定数据,GD32 完成实时寻向,Qt 上位机完成控制、显示和记录。接下来,团队会继续把真机数据、标定结果和联调过程补充进这个项目。