最近在准备一个射频项目时,需要一款宽频带、低相位噪声的频率源作为本振。市面上的成品信号源要么价格昂贵,要么性能参数不满足需求,于是决定自己设计一款基于LMX2592的锁相环频率源。这款频率源覆盖20MHz到9.8GHz的超宽频段,最小步进1MHz,输出功率可调,特别适合用作射频系统的本振源或测试信号源。
整个系统采用STM32F103C8T6作为主控制器,通过SPI接口与LMX2592通信,实现了频率和功率的数字控制。系统采用USB供电,板载四路输出,工作电流约360mA,相位噪声性能优异。下面我将详细介绍这个项目的硬件设计、软件实现和调试经验,希望能为有类似需求的工程师提供参考。
选择LMX2592作为频率合成芯片主要基于以下几个考虑:首先,它的频率覆盖范围宽(20MHz-9.8GHz),完全满足我的项目需求;其次,它的相位噪声性能优异,在1GHz载波、10kHz偏移处典型值为-110dBc/Hz;最后,它支持小数分频,可以实现精细的频率步进。
原理图设计时特别注意了以下几个关键点:
电源滤波电路:LMX2592对电源噪声非常敏感,我在每个电源引脚都放置了0.1μF和1μF的MLCC电容,并采用π型滤波网络。VCO供电部分还额外增加了铁氧体磁珠,进一步抑制高频噪声。
参考时钟电路:虽然LMX2592内置了参考时钟倍频器,但为了获得最佳相位噪声性能,我外接了一个100MHz的OCXO作为参考源。参考信号通过AC耦合输入,输入端串联50Ω电阻实现阻抗匹配。
环路滤波器设计:这是锁相环性能的关键。我采用三阶无源滤波器结构,通过TI的PLLatinum仿真工具优化了参数。电容选用NP0材质,电阻选用1%精度的薄膜电阻,确保滤波器特性稳定。
射频输出匹配:四个输出端口都设计了50Ω匹配网络,采用0402封装的元件以减少寄生参数。每个输出端都有独立的数字衰减器,实现输出功率的精确控制。
STM32F103C8T6作为主控芯片,主要负责以下功能:
硬件设计要点:
SPI接口:使用STM32的SPI1接口,时钟配置为5MHz(LMX2592的最高SPI时钟速率)。特别注意了信号完整性,在SCK、SDI、SDO线上串联了33Ω电阻,并尽量缩短走线长度。
按键电路:采用4个轻触开关实现频率和功率调节,通过10kΩ上拉电阻和0.1μF电容实现硬件消抖。按键信号连接到STM32的外部中断引脚,实现快速响应。
状态指示:设计了双色LED用于指示锁定状态(绿色表示锁定,红色表示失锁)和输出使能状态。
USB供电:采用TPS5430降压转换器将USB的5V转换为3.3V,最大提供1A电流,确保系统稳定工作。
基于CMSIS标准开发底层驱动,确保代码的可移植性。主要实现了以下功能模块:
c复制void LMX2592_WriteReg(uint8_t reg, uint16_t val)
{
CS_LOW();
HAL_SPI_Transmit(&hspi1, ®, 1, 100);
HAL_SPI_Transmit(&hspi1, (uint8_t*)&val, 2, 100);
CS_HIGH();
Delay_us(50); // 关键延时
}
GPIO控制:实现了LMX2592的CE(芯片使能)、LE(锁存使能)等控制信号的操作函数。这些信号对时序要求严格,必须按照数据手册的时序图操作。
定时器配置:使用SysTick定时器实现精确延时,为按键消抖和LMX2592的配置时序提供时间基准。
LMX2592的寄存器配置较为复杂,我将其封装为几个关键函数:
c复制void SetFrequency(uint64_t freqHz)
{
// 计算分频比
uint32_t N = freqHz / F_REF;
uint32_t frac = ((freqHz % F_REF) * 1048576) / F_REF;
// 配置PLL参数
LMX2592_WriteReg(0x00, 0x8000); // 复位PLL
LMX2592_WriteReg(0x24, (N << 7) | (frac >> 16));
LMX2592_WriteReg(0x25, frac & 0xFFFF);
// ... 其他相关寄存器配置
LMX2592_WriteReg(0x00, 0x0000); // 使能PLL
}
功率控制函数:通过设置输出驱动强度和衰减器值,实现-4dBm到+5dBm的输出功率调节。
锁定检测函数:定期读取LMX2592的状态寄存器,判断PLL是否锁定。如果连续多次检测到失锁,会自动重新初始化芯片。
用户界面主要包括按键处理和状态显示两部分:
c复制void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY_UP_Pin) {
key_flags |= KEY_UP_FLAG;
}
// 其他按键处理...
}
void ProcessKeys()
{
if(key_flags & KEY_UP_FLAG) {
current_freq += 1000000; // 1MHz步进
SetFrequency(current_freq);
key_flags &= ~KEY_UP_FLAG;
}
// 其他按键处理...
}
初始测试时发现相位噪声比数据手册指标差约5dB,经过以下改进措施后达到了预期性能:
电源噪声抑制:在电源输入端增加了LC滤波网络,并使用线性稳压器为VCO单独供电。实测发现开关电源的纹波会直接影响相位噪声。
参考时钟优化:改用OCXO作为参考源后,近端相位噪声改善了约8dB。参考信号走线尽量短,并采用差分传输方式。
环路滤波器调整:通过实测优化了环路带宽。最终选择50kHz的环路带宽,在相位噪声和锁定时间之间取得了良好平衡。
默认配置下,频率切换的锁定时间约500μs,通过以下方法缩短到200μs以内:
预充电电荷泵:在频率切换前预先设置接近目标频率的电荷泵电压,减少VCO的调谐范围。
快速校准算法:利用LMX2592的快速校准模式,牺牲少量相位噪声性能换取更快的锁定速度。
优化SPI写入顺序:按照芯片要求的特定顺序写入寄存器,避免不必要的校准过程。
SPI通信失败:
输出功率不稳定:
高频段输出杂散大:
经过精心调试,最终实现的性能指标如下:
使用建议:
这个频率源已经成功应用在多个射频项目中,作为本振源性能稳定可靠。整个项目的原理图和源代码已经开源,读者可以根据自己的需求进行修改和优化。对于需要更高性能的应用,可以考虑改用更高端的频率合成器芯片如LMX2594,或者采用外置VCO的方案。