多频段射频收发设计:频率可编程收发器选型、PLL调参与调试实战
手头正好在折腾一个多频段无线测试平台需求说得挺简单一套设备要能覆盖 433MHz 传感节点、915MHz ISM 设备、2.4GHz BLE 和 WiFi而且每个频段都得支持跳频测试。按老一套做法每个频段配一块收发板频率靠换晶体和滤波器硬切机箱体积直接翻倍BOM 成本也跟着失控。那阵子被这个问题搞得相当烦躁朋友提醒了一句你为什么不直接用频率可编程收发器这一下思路打开了。频率可编程收发器不是某一颗具体芯片而是一类可以通过数字接口配置载波频率、调制方式、输出功率、滤波器带宽的射频收发方案。用软件改寄存器代替硬件换晶体一块板子就能横跨多个频段。方向是对的但真正把方案落地、把链路调稳定里面能踩的坑比我想象的多得多。这篇文章就把我整个从选型、原理、设计到调试的全过程整理出来给准备碰频率可编程收发器的朋友做个参考。1. 频率可编程收发器到底是在解决什么问题行业内聊到频率可编程收发器很多人第一反应是“软件定义无线电”。这不算错但容易把概念带偏。软件定义无线电强调的是信号处理链路在数字域实现而频率可编程收发器更底层、更接地气——它解决的核心问题是如何用一套射频硬件覆盖宽频率范围并能在运行中快速切换工作频率。1.1 传统收发器的痛点在哪里传统窄带收发器的频率几乎被硬件锁死。晶体振荡器决定参考频率VCO 和滤波器的工作范围通常只有中心频率的百分之几到百分之十几。想改频段不是换颗晶体那么简单混频器前面的预选滤波器、功放后面的低通滤波器、天线匹配网络全都要跟着动。更要命的是多频段设备如果每一路都单独做接收发射通道PCB 面积、功耗、成本都是成倍往上翻。我最早做的那个多频段采集器就是这种结构板子上密密麻麻排了三组射频前端调试时每一组都要重新匹配阻抗和校准功率量产阶段还得维护三套校准文件。说实话那段时间每次改版都想骂人。1.2 可编程收发器改变了什么频率可编程收发器把“频率选择”这件事从硬件转移到了软件。它内部有一套完整的频率合成结构通常是 PLL锁相环加 VCO配合可编程分频器实现小数分频或整数分频。你只需要通过 SPI、I2C 或并行接口写入一串寄存器配置输出频率就能在很宽的范围内变化。部分集成度更高的收发器甚至把发射、接收、调制解调、滤波全做进一颗芯片里外部只要加天线匹配和电源就能工作。1.3 典型应用场景从我接触过的项目来看这类器件主要用在这几个地方多协议物联网网关一个网关同时支持 LoRa、FSK、WiFi、BLE频率可编程收发器可以分时复用一套射频通道。无线测试仪表信号源、频谱仪、综测仪内部几乎全是频率可编程方案因为测试仪器本身就要求覆盖多个频段、多种制式。跳频通信系统抗干扰通信要求几百甚至几千跳每秒的频率切换速度手动换晶体根本不现实。软件定义无线电平台像 USRP 这类产品里面就是高速 ADC/DAC 加可编程收发芯片频率、带宽全由上位机软件控制。卫星地面站和遥测设备频率不高但范围宽一颗可编程收发器就能覆盖多个卫星下行频段。这些场景的共同点就是频率范围宽、切换频繁、需要灵活配置。这正是传统固定频率方案最难满足的地方。2. 动手之前先想清楚三种方案怎么选频率可编程收发器不是一个标准模板市场上至少有三种成熟的技术路线。选错了后面功耗、成本和性能全都对不上账。我在做方案对比时把 DDS 直接频率合成、PLLVCO 频率合成、集成射频收发器三条路全列了出来逐一过了需求。2.1 三条技术路线的核心差异DDS直接数字频率合成用数字相位累加器生成正弦波查找表再经过 DAC 输出模拟信号。它的频率切换速度极快频率分辨率能做到微赫兹级别相位噪声也低。但 DDS 的输出频率受限于 DAC 时钟频率一般最高到几百 MHz 到 1GHz 左右直接用在高频段不太够通常要配合上变频器使用。PLLVCO 方案用锁相环把 VCO 的输出频率锁定到参考频率的 N 倍上。输出频率可以做到很高几 GHz 是常态覆盖范围宽相位噪声指标好但频率切换速度受环路带宽限制频率分辨率也不如 DDS。实际产品里常把 PLL、VCO、分频器、电荷泵集成在一颗芯片里比如 ADI 的 ADF4351、TI 的 LMX2594。集成射频收发器把频率合成、混频、滤波、调制解调甚至基带处理全部集成。这是目前最“省事”的方案外部器件少软件配置集中缺点是灵活性略差很多参数被芯片厂商定义好了。下面是张对比表我挑了几个直接影响项目决策的维度对比维度DDS 方案PLLVCO 方案集成射频收发器工作频率范围几百 MHz 以下为主最高可达 GHz 级别覆盖宽常见 70MHz-6GHz频率切换速度极快ns 级较慢几十 us 到 ms 级中等受内部状态机限制频率分辨率极高uHz 级依赖鉴相频率和分频器依赖片上分频器通常 kHz 级相位噪声低优秀中等到优秀灵活性高需自己搭混频链路中等需设计环路滤波器低但胜在集成度高开发难度高需要外部 RF 链路配合中难点在环路滤波和校准低主要工作量在寄存器配置适用场景测试信号源、跳频激励工程设备、通信链路SDR、多协议网关2.2 我的选型逻辑我这次项目的核心要求是覆盖 400MHz-2.5GHz跳频间隔最小 1MHz切换时间小于 100us功耗控制在 2W 以内并且要支持自定义的 GFSK 调制。DDS 方案首先排除因为覆盖 2.5GHz 需要额外加两三级倍频和放大链路复杂度上来了PCB 面积和功耗全部超标。集成射频收发器其实是最省事的尤其是 AD9361 这类宽带收发器70MHz 到 6GHz 一个芯片全搞定。但问题有两个一是这颗芯片的电源轨特别多布局布线要求相当苛刻打样成本和调试周期都长二是它默认的调制解调链路偏宽带做窄带 GFSK 反而要费不少功夫去配置滤波器系数。最后我选了PLLVCO 加独立调制器/解调器的方案。PLL 芯片负责频率合成发射链路用正交调制器做 GFSK 调制接收链路用宽带 I/Q 下变频器解调。这样每一级都能单独调试频率规划也灵活。成本上比集成收发器低不少BOM 里都是常规器件供应商好找。3. 频率合成是地基PLL 的环路参数和计算频率可编程收发器最核心的部分永远是频率合成器。PLL 的频率输出精度、相位噪声、锁定时间直接决定整个收发链路的性能。这个章节的参数计算和经验是我觉得最值得反复琢磨的部分。3.1 PLL 频率公式和分频器配置PLL 的基本结构是鉴相器比较参考时钟和反馈分频时钟的相位差输出误差信号经过环路滤波器控制 VCO 的调谐电压最终让 VCO 输出频率稳定在 N × f_ref 上。在整数分频 PLL 里频率配置公式很简单f_out N × f_PFD其中 f_PFD 是鉴相器工作频率一般由参考时钟经过 R 分频得到f_PFD f_ref / R我在 2.4GHz 频段工作时选了一个 25MHz 的 TCXO 作为参考源R 分频设为 25得到 f_PFD 1MHz。那么要实现 2402MHz 的输出频率N 就等于 2402。这个整数 N 理论上可行但整数分频模式下 PLL 的鉴相频率被频率步进限制住了步进越小鉴相频率越小环路带宽就得跟着收窄锁定时间变长。3.2 小数分频器和 Sigma-Delta 调制器的作用为了解决频率步进和环路带宽的矛盾现代 PLL 芯片普遍支持小数分频。输出频率可以写成f_out (N.frac) × f_PFD其中 N.frac 是整数部分加小数部分的组合小数部分由 Sigma-Delta 调制器动态改变分频比来实现。这样一来鉴相频率可以保持较高比如 25MHz而频率步进可以做到几十 Hz 甚至更低。我用的 ADF4351 就支持小数分频。设置 2.4GHz 输出时我把 f_PFD 设为 25MHz小数分频的值直接写进 FRAC/INT 寄存器。具体计算INT floor(f_out / f_PFD) floor(2402 / 25) 96 FRAC integer_part((f_out / f_PFD - INT) × MOD) MOD 4096芯片默认模数注意 ADF4351 的 VCO 内核工作频率是 2.2GHz 到 4.4GHz输出 2.4GHz 可以直接从 VCO 取不用打开输出分频器。如果要做 900MHz 频段VCO 输出要经过二分频或四分频这时寄存器配置里还要额外设置输出分频系数。3.3 环路滤波器设计快锁还是低杂散环路滤波器是 PLL 设计里最考验经验的环节。带宽越宽锁定速度越快但环路对 VCO 相位噪声的抑制能力也越弱带宽越窄杂散抑制好但锁定时间拉长。我一般用三阶无源环路滤波器带宽选 f_PFD 的 1/20 左右。以 f_PFD 25MHz 为例环路带宽约 1.25MHz这个值在快速跳频和杂散抑制之间比较均衡。实际调试时我用 ADI 的 ADIsimPLL 软件生成的环路滤波器参数电容电阻值标出来手工焊上去再微调。锁定时间的测试方法是给 PLL 的 lock detect 引脚接一个 LED 或者示波器切换频率时观察锁定指示信号从拉低到拉高的时间。我做出来的板子从 2.400GHz 跳到 2.480GHz锁定时间大约 80us勉强满足项目 100us 的要求。如果要求更快的锁定可以试试把环路带宽放宽到 f_PFD 的 1/10或者换用支持自动重捕获的 PLL。3.4 参考时钟的重要性很多人忽视参考时钟的精度和相位噪声最后频谱仪一看射频输出飘了几百 Hz还以为是 PLL 芯片有问题。实际上 PLL 的输出频率指标不会优于参考时钟。我用的是 25MHz TCXO温漂大约 ±1ppm也就是 2.4GHz 下会有 ±2.4kHz 的频偏。对窄带通信来说这个偏差已经接近信道带宽的 10% 了必须软件校准。如果你要求更高可以升级到 OCXO或者用 GPS 驯服时钟做长期参考。4. 收发链路的实际设计每个器件都在动频率合成只是基础真正让收发器“好用”的是完整的发射和接收链路。这里我把自己的设计拆开讲从天线口到调制解调芯片每一级怎么选型、怎么匹配、怎么控制都有讲究。4.1 发射链路I/Q 调制和功率放大发射链路的结构是基带产生 I/Q 信号 → 正交调制器上变频 → 驱动放大器 → 功率放大器 → 输出滤波 → 天线。正交调制器我选的是能够覆盖 400MHz 到 2.5GHz 的宽带器件。GFSK 信号通过 I/Q 两路基带信号送入调制器本振信号由 PLL 提供。因为调制器内部集成了混频器输出端会产生本振泄漏和镜频所以调制器后面必须加一个带通滤波器抑制本振信号和镜频分量。功放的选择要综合考虑输出功率和线性度。我做的是 GFSK 恒包络调制对线性度要求不高可以选 C 类功放或者高效率的开关模式功放。实测下来2.4GHz 频段输出 14dBm 时邻道泄漏比 -20dBc 的 GFSK 信号用一颗小功率 MMIC 功放完全够用不需要外部大功率管。发射链路的阻抗匹配是功放前后级最容易出问题的地方。我的做法是先计算各级的 S 参数再用 Smith 圆图工具做初步匹配最后在板子上留出 π 型匹配网络的位置用 VNA 实测微调。π 型网络的好处是灵活电容电感的组合可以覆盖绝大多数失配情况。4.2 接收链路从天线到数字基带接收链路的方向和发射相反天线 → 低噪声放大器 → 射频带通滤波 → I/Q 下变频器 → 基带滤波 → 可变增益放大器 → ADC。接收链路最核心的指标是灵敏度和动态范围。灵敏度由噪声系数决定Sensitivity -174dBm/Hz NF 10logBW SNR_min以 1MHz 带宽、SNR_min 10dB 为例如果接收机整体噪声系数是 6dB那么灵敏度约为-174 6 60 10 -98dBm这个数值够用但前提是 LNA 的增益和噪声系数要选好。我用了一颗 NF 约 1.2dB 的 LNA后面接带通滤波器再进下变频器。整体噪声系数靠级联公式算F_total F1 (F2-1)/G1 (F3-1)/(G1×G2)第一级 LNA 增益设为 15dBNF 1.2dB第二级混频器NF 10dB算下来系统NF约 2.5dB灵敏度可以做到 -100dBm 以下。实际测试中我用信号源验证-100dBm 输入下解调误码率达到了 1e-3 量级符合预期。4.3 I/Q 不均衡的校准宽带 I/Q 下变频器有一个通病I、Q 两路的幅度不一致、相位不正交直接导致镜频抑制性能下降。理想情况下镜频抑制可以做到 40-50dB实际不校准时可能只有 20dB 出头。我用了最常用的单音校准法在接收端输入一个已知频率的单音信号采集 I/Q 两路的数据估计幅度误差和相位误差然后在数字域补偿。补偿算法很简单I_cal I Q_cal (Q - βI) / α其中 α 是 I/Q 幅度比β 是相位误差系数。这些参数在出厂校准阶段算一次存进 flash每次上电初始化时写进数字信号处理器。经过补偿后我的板子在 2.4GHz 频段的镜频抑制从 22dB 提升到了 42dB效果非常明显。4.4 PCB 布局的几条硬规则射频板设计有一个原则所有高频走线都要当作传输线来设计。我用的板材是 FR-42.4GHz 下 50Ω 微带线线宽大约是 0.6mm板厚 1.6mm 时具体可以用阻抗计算工具算不要凭感觉画。电源去耦是另一个高频发愁的点。PLL 的电源对噪声极其敏感我在这颗芯片的每个电源引脚都放了 100pF 和 1uF 的组合电容并且把电源走线做了星形拓扑避免数字电路的高频噪声窜进去。第一批板子就是因为电源去耦没做足频谱仪上多了好几根杂散。射频链路之间最好用屏蔽罩隔开尤其是发射功率放大器和接收前端之间。屏蔽罩不贵但能减少通过空间耦合带来的干扰。收发共用一个天线时还要加一个 TDD 开关或者射频开关控制发射接收切换。5. 软件控制与校准寄存器背后是系统工程频率可编程收发器的灵魂在寄存器。硬件设计得再好寄存器配置错了也白搭。这一章我从 SPI 时序到初始化序列再到自动校准把软件和硬件的配合讲清楚。5.1 SPI 寄存器读写配置大多数 PLL 和收发器芯片用 SPI 接口配置寄存器。ADF4351 是 32 位移位寄存器前 3 位是寄存器地址后 29 位是数据。写寄存器时需要注意时序片选 CS 拉低时钟 SCLK 逐位移入数据移位完成后CS 拉高数据锁存到芯片内部寄存器有些芯片要求所有寄存器按顺序写入不能跳过否则配置不生效。我贴一个当时调通的 ADF4351 初始化片段基于 STM32 平台平台相关的东西就略过了核心是寄存器写入函数void adf4351_write_reg(uint32_t reg_value) { // 片选拉低 HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); // 从最高位开始逐位移入 for (int i 31; i 0; i--) { uint8_t bit (reg_value i) 0x01; HAL_GPIO_WritePin(SCLK_PORT, SCLK_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(SDATA_PORT, SDATA_PIN, bit ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(SCLK_PORT, SCLK_PIN, GPIO_PIN_SET); } // 片选拉高锁存数据 HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); }每次改频率我都把整组寄存器按顺序重写一遍虽然慢一点但避免只改一个寄存器导致状态机混乱。实测定点跑下来整组寄存器写一次耗时 20us 左右远小于 PLL 锁定时间。5.2 上电初始化和寄存器依赖顺序芯片的数据手册会给出推荐的寄存器写入顺序。这个顺序不能乱比如 ADF4351 要求先写寄存器 5 再写寄存器 4最后写寄存器 0 触发状态机更新。我一开始图省事按地址递增写结果频率输出完全不对后来逐行核对数据手册才发现问题。建议的做法是把初始化配置做成一份表格每条包含寄存器地址和数据按芯片推荐的顺序排列代码里按数组遍历写入。再用一个函数统一封装频率配置函数入口参数就是目标频率内部自动换算 INT、FRAC、分频器等参数外部调起来就一句话adf4351_set_frequency(2402000000ULL);5.3 自动校准和校准表PLL 芯片内部的 VCO 校准、滤波器带宽校准通常由芯片内部状态机在上电时自动完成。但自动校准依赖一个准确的外部参考时钟。所以整个系统的第一件事永远是等 TCXO 起振稳定再给 PLL 发初始化命令否则自动校准的过程会偏差很大。除了芯片自校准用户侧也需要做系统校准。我建了一张频率-校准值表把每个通信频点的以下参数都测好存起来PLL 实际输出频率与设定频率的偏差发射功率的绝对值接收链路的增益值I/Q 不均衡补偿系数。表格大概长这样设定频率MHz实测频率偏差Hz发射功率dBm接收增益dBI/Q 校准系数433.012012.542α0.98, β0.05915.0-8513.040α1.02, β-0.032402.021014.238α1.01, β0.022480.0-16014.037α0.99, β-0.04每次切换频点时主控 MCU 去 flash 里查表把对应的校准参数一并写入寄存器。这样不仅频率准确功率和灵敏度也稳定。如果设备工作环境温度变化很大还得加温度传感器在极端温度下做二次校准。6. 实测数据与踩坑记录理论讲再多最终还是要看实测数据。这里放出我在实验室里测到的一组关键指标然后把调试过程中最印象深刻的几个坑拉出来说说。这些都是规则外的经验常规文档里一般不会写。6.1 频率与信号质量实测我用频谱仪测了 433MHz、915MHz、2.4GHz 三个频段的中心频率和相位噪声也验证了跳频切换时间。测试时 PLL 配置为小数分频模式参考时钟 25MHz TCXO。测试项433MHz915MHz2402MHz中心频率误差120Hz-85Hz210Hz相位噪声 10kHz-102dBc/Hz-98dBc/Hz-92dBc/Hz相位噪声 100kHz-124dBc/Hz-120dBc/Hz-115dBc/Hz杂散电平-68dBc-65dBc-58dBc跳频锁定时间95us105us80us2.4GHz 频段的相位噪声明显比低频段差一些这是 VCO 固有特性高频段的压控灵敏度更高对噪声更敏感属于正常现象。杂散那边2.4GHz 的 -58dBc 主要来自小数分频的 Sigma-Delta 调制噪声如果对杂散要求更严可以改用整数分频模式但那样频率步进会变大适合信道间隔固定的场景。6.2 踩坑记录一电源纹波导致杂散全面恶化第一批板子刚调试时频谱仪上的杂散信号密密麻麻尤其是主信号两侧各 1MHz 的位置有两根明显的边带。查了一圈最后发现是给 PLL 供电的 LDO 输出纹波过大1MHz 的开关纹波直接调制到了 VCO 上。解决办法是把 PLL 的模拟电源和数字电源彻底分开模拟电源单独用一颗低噪声 LDO 供电输出端再加一个 10uF 钽电容并联 100nF 陶瓷电容。改版之后1MHz 边带杂散直接降了 20dB 以上。这是我一再强调电源去耦的原因。6.3 踩坑记录二SPI 时序边沿竞争有段时间设备上电后偶尔出现频率配置错误表现为输出的中心频率偏了几 MHz。用逻辑分析仪抓 SPI 时序发现 MCU 在 SCLK 下降沿改变了数据线电平而芯片在上升沿采样这本身没什么问题。问题是信号线上有 RC 延迟数据线电平翻转慢了半个周期导致芯片采到错误数据。解决办法很简单把 SPI 时钟频率从 10MHz 降到 1MHz再在数据线上串联一个 22Ω 电阻改善信号完整性。此后就没再出现偶发配置失败的情况。如果你遇到类似的怪异问题第一步永远是降低 SPI 时钟频率排查信号完整性问题。6.4 踩坑记录三收发切换时功放瞬间过载TDD 模式下发射链路的功放和接收链路的 LNA 由射频开关切换。最开始软件里控制收发切换的 GPIO 时序和射频开关的切换时序没有对齐导致功放输出已经打到天线口但前端开关还没完全切换到发射通路出现过驻波偏大、功放瞬间过流的问题。功放没烧但对信号质量有明显影响。解决方法是把收发 GPIO 控制信号和开关控制信号在 MCU 里做时序对齐先切换射频开关再打开发射链路关断时顺序反过来。后来我在发射通路里加了一颗小型功率检测器检测驻波比异常时自动降低驱动电平作为一个硬件保护机制。6.5 踩坑记录四天线切换开关的隔离度接收灵敏度的另一个隐性杀手是天线的收发切换开关隔离度不够。半双工工作时如果天线开关隔离度只有 25dB发射功率在接收通道泄漏可能导致接收前端饱和微弱信号被淹没。我最初选的开关隔离度只有 28dB实测灵敏度比预期低了 5dB。换了隔离度 45dB 的开关后问题立刻消失。选型的时候建议优先看隔离度指标不要只看插损。6.6 调试工具和调试顺序做这类项目频谱仪和矢量网络分析仪基本是必需品。调试顺序建议从后往前先测 PLL 输出是否锁定、频率是否准确再接调制器最后接功放和天线。不要一上来就输出满功率信号先把每一级的静态功耗和输出频谱检查一遍确认无误再加信号。软件调试时多用逻辑分析仪抓取 SPI 时序能够快速定位寄存器写入问题。我也习惯在代码里加一个“回读”函数初始化完成后把 PLL 的关键寄存器读回来校验一遍防止指令没写进去。做完这个项目回头再看频率可编程收发器的核心难点其实不在硬件连接而在频率规划、环路参数、校准补偿这些看不见的细节。硬件连好了能出声不代表能稳定工作稳定工作不代表全温范围内都可靠。每一步都得拿数据和指标说话这也是我认为做一个射频工程师最值钱的地方所在。

相关新闻