从 ADAR1000 到 XC7A50T:开源雷达 AERIS-10 的信号链,每一颗芯片都是精打细算
【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR
在消费电子里,"10.5 GHz 相控阵雷达"通常意味着军工级预算、专用 ASIC 和不可公开的供应链。而 AERIS-10(仓库代号 PLFM_RADAR)把整套系统——从频率合成、波束成形、收发前端到 FPGA 信号处理和 STM32 控制——全部开源到了一个人都能看懂、一台示波器能验证的程度。项目以"开源、低成本"立身,两个硬件版本(3 km 的 8×16 贴片阵列版与 20 km 的电介质填充波导阵列版)共享同一套主板与频率合成架构,规格表里没有一颗"堆料"芯片:ADC 是 8 bit 的 AD9484,DAC 是入门级 AD9708,FPGA 是入门级 XC7A50T。这篇文章不评价它的"性能天花板",而是顺着信号链逐级拆解:每一颗芯片为什么被选中、每个模块的算力与 IO 预算如何被精确计算、成本与性能的边界到底画在哪里。
射频收发链:从频率合成到波束成形,每一环都在"降本"
打开仓库的目录结构,硬件设计被刻意拆成四块独立电路板:主板原理图、频率合成板、功放板 与电源板。这种模块化本身就是成本策略:AERIS-10N 与 AERIS-10E 两个版本共享频率合成板、主板与电源设计,差异仅收敛在天线阵列和功放通道上——3 km 版本用 16 通道"约 1 W×16"的收发前端,20 km 版本则换插 16 块独立的 QPA2962 GaN 功放板(10 W×16)。换天线、加功放,就完成了 3 km 到 20 km 的产品线扩展,这是典型的"平台化降本"。
频率基准的选择最能体现精打细算的思路。系统用一颗 AD9523-1 低抖动时钟发生器做"时钟中枢",一次性输出相位对齐的 12 路时钟:300 MHz LVDS 给收发两路 ADF4382 频率合成器做参考、400 MHz 给 AD9484 ADC、100 MHz 给 FPGA 系统时钟、120 MHz 给 DAC、60 MHz 给 ADF4382 的同步通道。这段配置逻辑直接写在 main.cpp 里,注释逐通道标注了用途:
o Channel 0 = 300MHz LVDS (ADF4382 TX) o Channel 1 = 300MHz LVDS (ADF4382 RX) (Phase aligned with Channel 0) o Channel 4 = 400MHz LVDS (ADC) o Channel 5 = 400MHz LVDS (FPGA_ADC)(Phase aligned with Channel 4) o Channel 6 = 100MHz LVCMOS (FPGA system clock) o Channel 8 = 60MHz LVDS (ADF4382 TX sync)用一颗时钟芯片对齐所有采样与合成域,而不是每颗芯片自带晶振各自为政,省下的不仅是器件成本,还有最贵的调试成本。配套的还有 3 分钟 OCXO 预热流程(期间靠 IWDG 看门狗逐秒喂狗防止复位,见 main.cpp 第 1421 行附近)——对多普勒雷达而言,频率基准的短期稳定度直接决定回波相干的真假。
收发本振的定频也经过精算:TX 定在 10.5 GHz、RX 定在 10.38 GHz,相差 120 MHz——这正是中频的频率。也就是说,收发本振故意错开一个中频,用 LTC5552 混频器完成上/下变频的同时,把中频直接压到 DDC 可处理的 120 MHz,省掉一级中频放大与滤波链。adf4382a_manager.h 中TX_FREQ_HZ 10500000000ULL / RX_FREQ_HZ 10380000000ULL两行常量,就是这个架构决定的全部玄机。两路本振用硬件 TIMED 同步(SYNCP/SYNCN)而非软件 SPI 同步,开机后进入最长 10 秒的锁相等待循环,直到 TX/RX 双路 LKDET 全部置位才放行后续流程。
波束成形是这套系统最"明星"的部分:4 颗 ADAR1000,每颗 4 通道,共 16 个收发通道。每颗 ADAR1000 内部集成了移相器、可变增益放大器和 T/R 开关控制,一颗芯片吃下了原本需要十几颗分立移相器+衰减器+放大器的工作量。ADAR1000_Manager.h 里的寄存器映射完整展现了它被用到的每一个功能:CHx_RX_PHS_I/Q相位寄存器、CHx_RX_GAIN增益寄存器、REG_LOAD_WORKING工作寄存器装载、REG_PA_CHx_BIAS_ON偏置开关、内置温度 ADC 读取。
最有意思的细节在相位控制方式:AERIS-10 没有用 ADAR1000 的相位移相寄存器做逐度控制,而是自建了两张 128 项的向量调制查表VM_I[128] / VM_Q[128](ADAR1000_Manager.cpp),以 2.8125° 为步进覆盖全相位圆。查表数据来源被严谨地注释为"ADI 数据手册 Rev.B Tables 13-16",并经 Linux 内核主线驱动交叉校验。配合 main.cpp 中按 10.5 GHz、半波长阵元间距计算的相位差数组phase_differences[31],31 个波束位置(±45° 电子扫描)的相位配置被预计算成矩阵,运行时只是"查表+写寄存器",把 STM32 在微秒级 chirp 切换路径上的 CPU 开销压到最低。
收发切换也做成了"最小动作":pulseTXMode()/pulseRXMode()只翻转 ADTR1107 的 T/R 开关控制位,不做任何偏置时序——因为偏置在上电序列里已经就位。16 颗 ADTR1107 收发前端(RX 低噪放 + TX 功放一体)与 4 颗 ADAR1000 的组合,是用"中规模集成"换"总体成本"的典型示范。
FPGA 与 MCU:并行算力与串行控制的分工边界
AERIS-10 的算力分工非常清晰:所有采样率相关的数字信号处理全部在 FPGA 内完成,所有"人机交互级"的管理任务全部交给 STM32。
先看 FPGA 的选择逻辑。radar_system_top_50t.v 开头有一句直白的注释:"XC7A50T-FTG256 只有 69 个可用 IO 引脚"。为什么在 IO 如此紧张的情况下还选它?因为雷达信号处理的核心资源不是 IO 而是 DSP48E1 与 BRAM——Build 25 的生产基线只用了 9,252 个 LUT、12,488 个 FF、17 个 BRAM 和 142 个 DSP48E1(implementation-log),50T 的 DSP 资源利用率约 19%,余量足够继续塞算法。这是典型的"按需选型":不追求大芯片,只确保资源利用率落在合理区间。IO 不够就靠一个薄 wrapper 把未物理连接的端口(FT601 USB3.0 的 32 位总线、调试信号)在内部拴住、保证 netlist 完整,外部只暴露物理存在的引脚。
信号链的每一级都能在仓库里找到对应模块,且每一级都有明确的采样率标注:
| 处理级 | 模块 | 关键参数 |
|---|---|---|
| ADC 捕获 | ad9484_interface_400m.v | 400 MHz LVDS,BUFIO+IDDR 源同步捕获 |
| 数字下变频 | ddc_400m.v | IF=120 MHz,NCO+CIC+FIR,400 MHz→100 MHz |
| 匹配滤波 | matched_filter_multi_segment.v | 1024 点 FFT overlap-save,长 chirp 分 4 段 |
| 多普勒处理 | doppler_processor.v | staggered-PRF 双 16 点 FFT,Hamming 窗 |
| 地杂波抑制 | mti_canceller.v | H(z)=1-z⁻¹ 双脉冲对消 + DC 陷波 |
| 恒虚警检测 | cfar_ca.v | CA/GO/SO 三模式,滑窗 + DSP 乘法 |
这几个模块的选择背后各有取舍逻辑。ADC 侧,AD9484 是 8 bit/400 MHz 的器件——8 bit 量化在现代雷达里算不上"高端",但它换来的是 LVDS 差分接口、源同步时钟和更低的功耗与价格。FPGA 侧为了接住这 400 MHz 源同步时钟,代码里用了教科书级的处理:BUFIO 驱动 IDDR 消除保持时间违例,再用 MMCM 把 ~50 ps 的输入抖动净化到 20-30 ps(ad9484_interface_400m.v 注释明确写了这条链路)。这一个 MMCM 让 Build 20 的 WNS 从 +0.062 ns 直接拉到 +0.426 ns,7 倍余量改善——用最便宜的入门芯片跑满 400 MHz,时序功夫全下在接口工程上。
DDC 的 IF 选择同样精打细算:中频定在 120 MHz 而非直接零中频,等于把镜像抑制、直流偏移这些麻烦事留给数字域处理,省掉了模拟正交混频器和二阶中频滤波器的器件成本。
匹配滤波是算力开销的大头。30 µs 长 chirp 在 100 MHz 采样率下是 3000 个采样,超过单次 1024 点 FFT 的窗口,matched_filter_multi_segment.v 用 128 点重叠的 overlap-save 方法切成恰好 4 段(LONG_SEGMENTS = 4),每一段独立做频域相乘再拼接;0.5 µs 短 chirp 只有 50 个采样,补零到 1024 点一段完成(SHORT_SEGMENTS = 1)。段数、重叠量、缓冲深度都是显式参数,每个数字都对应一次 FFT 吞吐与 BRAM 的权衡。
多普勒处理则是"波形设计的算力补偿":系统采用双 PRI 交错的 staggered-PRF 波形——每帧 32 个 chirp,先 16 个长 PRI 再 16 个短 PRI。如果天真地做一次 32 点 FFT,非均匀采样会直接破坏频谱有效性。仓库的解法是显式的双 16 点 FFT(doppler_processor.v 注释写明了这一判断),把两个子帧分别变换后,用同一目标在不同 PRI 下落入不同多普勒 bin 的特性做速度模糊解算。这是用"多算一次 16 点 FFT"的微小成本,换取整个波形设计自由度——比买更贵的 ADC/合成器便宜得多。
CFAR 是算法成本的另一个样本。cfar_ca.v 实现 CA/GO/SO 三种自适应门限模式,滑窗统计量存入 2048×17 的 BRAM,门限乘法用一颗 DSP48E1,α 系数以 Q4.4 定点表达(Pfa=1e-4 时统计值 α≈4.88,折合 16 训练单元后 0.305→0x05)。implementation-log 如实记录了它的账:CFAR 的代价是 +2,229 LUT、+1,281 FF、+1 BRAM、+3 DSP——换来的是从固定门限到自适应检测的质变。项目没有美化这笔开销,而是把它当作一次明码标价的升级。
MCU 侧的分工同样边界分明。STM32F746 承担的角色包括:多路上电/断电时序(1.0V→1.8V→3.3V 逐级拉闸、各间隔 100 ms)、AD9523/ADF4382/ADAR1000 的 SPI/I2C 配置、16 路 PA 静态电流 Idq 的闭环校准(DAC5578 调 Vg、ADS7830 经 5 mΩ 采样电阻和 INA241A 电流放大器测 Idq)、8 路热敏电阻温控与风扇开关、GPS(UM982)/IMU(GY-85)/气压计(BMP180)姿态定位、步进电机 360° 机械扫描、USB CDC 协议解析。它的"控制节奏"在 main.cpp 的runRadarPulseSequence()里一目了然:对每个波束位置切换 16 通道相位矩阵,然后进入 chirp 序列——每个 chirp 只是GPIO 翻转通知 FPGA + pulseTXMode() + 微秒级延时 + pulseRXMode(),真正的采样与运算全部由 FPGA 侧的模式控制器(radar_mode_controller.v)并行跟进。
最能体现"跨层分工"设计功力的是 AGC。系统实现了双层自动增益控制:内环在 FPGA——rx_gain_control.v 按采样帧统计峰值与饱和计数,用 4 bit 有符号增益(-8..+7,约 ±42 dB 动态)做逐帧数字增益调节,零额外器件成本;外环在 STM32——ADAR1000_AGC.h 每帧(约 258 ms)读一次 FPGA 通过 DIG_5/PD13 上报的饱和标志,饱和立即降agc_base_gain(attack),连续无饱和holdoff_frames帧后逐步回升(decay),并把增益写回 16 路 ADAR1000 RX VGA 寄存器,支持逐通道cal_offset校准。数字内环管瞬时、模拟外环管稳态,跨层闭环用一根 GPIO 完成握手——这是"不花一分钱硬件"的性能优化。
双 USB 目标的参数化处理则是"一颗 RTL、两个平台"的省钱典范。radar_system_top.v 用parameter USB_MODE一分为二:0=FT601(32 bit USB3.0,面向更高端的 200T 生产目标),1=FT2232H(8 bit/60 MHz 245 同步 FIFO,50T 量产默认)。50T wrapper 只暴露 15 根 FT2232H 信号,200T 侧则完整走 32 位总线——换芯片不换算法,接口差异被限制在顶层 wrapper 和 XDC 里。
这套分工体系的工程成熟度可以从验证数据读出:FPGA 侧 23/23 回归套件全绿,覆盖匹配滤波、多普勒、CIC、CDC、USB、FFT、CFAR、MTI 等全链路;MCU 侧 20/20;最硬核的是 real-data 协同仿真——用录制 ADC 数据跑 RTL 与 Python golden reference 比对,5,137 项数据检查逐位精确匹配(见 implementation-log)。仓库的 tb 目录里躺着数十个 testbench、formal 目录里还有 CDC/握手/多普勒的形式化验证脚本——对一个"低成本"项目而言,这种验证投入本身就是一种隐形工程成本。
成本与性能的边界:哪些钱可以省,哪些不能省
纵观整个信号链,AERIS-10 的取舍逻辑可以归纳为一条原则:能在数字域用免费逻辑解决的问题,绝不用模拟器件花钱解决;必须花在物理层的钱(天线、功放、时钟),一分都不省。
省下来的钱,体现在这些地方:
- 中频架构省掉一级模拟链:120 MHz 中频 + 数字域 DDC,替代模拟正交混频与中频滤波;
- 入门级 ADC/DAC:8 bit/400 MHz 的 AD9484 与 8 bit DAC,靠 FPGA 的 MMCM 抖动净化和数字增益控制撑住性能;
- 双层 AGC 零硬件成本:FPGA 内环用移位寄存器做增益,STM32 外环复用已有的 ADAR1000 VGA 寄存器;
- 查表式波束控制:128 项 2.8125° 相位表替代逐寄存器计算,省下 STM32 的实时算力与切换延迟;
- staggered-PRF 双 FFT:用多算一次 16 点 FFT 的 FPGA 资源,换取波形设计自由;
- 平台化产品线:N/E 两版共享主板与频率合成,差异收敛在功放与天线。
不能省的钱,项目也写得很清楚。天线阵列是整套系统最贵的部分,仓库里躺着 4×4/8×16 贴片阵列、32×16 介质填充波导阵列的完整版图与 Gerber(4_7_Production Files),并配套了 Quartz 波导、开槽波导、方向图与阵列仿真的全套 Python 脚本(5_Simulations)——天线性能决定雷达的物理极限,这块投入不可压缩。功放同理:10E 版为 20 km 作用距离单独设计了 16 块 QPA2962 GaN 功放板,并配上 Idq 闭环校准与过流/过热保护。时钟同样不妥协:AD9523 + OCXO 的 3 分钟预热 + ADF4382 硬件同步,是 120 MHz 中频相干性的根基。
电路的物理层也做了对得起频率的投资:主板是 10 层混压板,Rogers RO4350B 与 FR-4 混合叠层(Stack_Hybrid.png),10.5 GHz 的信号走线压在低损耗材料上,低速与电源层用 FR-4 摊薄成本——这仍是"把钱花在刀刃上"的同一个原则。
那性能边界在哪?答案也在仓库的文档里。docs 的 bring-up.html 开诚布公地列出了"板子到货前已知风险":FT601 时序方法学残留警告、LO 同步与波束控制仍需真机验证、Idq 校准收敛边界未板级证实——所有 RF 行为"不能仅凭仿真与日志假设"。换句话说,这个开源项目的诚实之处在于:它把能用逻辑验证的都验证到了位精确,把必须用射频仪器验证的明确标注为待办。成本与性能的边界,最终由物理世界裁决,而不是由 BOM 表裁决。
对想动手复现的工程师,仓库把门槛降到了最低:原理图、PCB、Gerber、BOM、CPL 全部随仓库发布(4_7_Production Files),FPGA 有现成的 Vivado TCL 构建脚本(build_50t.tcl),固件有 20 项回归测试兜底,GUI 则有 v7 PyQt6 版本与位精确软件 FPGA 回放链路(9_3_GUI)。从 ADAR1000 的 128 项相位表到 XC7A50T 的 142 颗 DSP48E1,这套系统最值钱的不是任何一颗芯片,而是"知道每一分钱该花在哪"的工程判断——这正是它 1.9 万颗 Star 背后的真正原因。
【免费下载链接】PLFM_RADAROpen-source, low-cost 10.5 GHz PLFM phased array RADAR system项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考