锁相环 ADF5355 的使用经验
ADF5355 结合外部环路滤波器和外部参考频率使用时,可实
现小数 N 分频或整数 N 分频锁相环(PLL)频率合成器。该微波宽
带 VCO 设计允许在一个 RF 输出实现 7 MHz 至 14 GHz 的工作频
率。其他频率输出的一系列分频器可实现 55 MHz 至 7000 MHz
的工作频率。ADF5355 具有一个集成电压控制振荡器(VCO),其
基波输出频率范围为 3.5 GHz 至 7 GHz。此外,VCO 频率可进行 2
分频。利用 1/2/4/8/16/32/64 分频电路,用户可以产生低至 55
MHz 的 RF 输出频率。对于要求隔离的应用,RF 输出级可以实现
静音。静音功能既可以通过引脚控制,也可以通过软件控制。
这个芯片是一个很好的信号发生器的应用,频率范围宽,外
围电路少,体积小等优点,但使用起来技术难度也比较大,因为
带宽比较宽,外围电路处理不好相噪就很差,还有就是采用分频,
倍频处理方式,多次谐波也比较多。我开发这个芯片花了 2 个月
的时间才处理好这些问题,其中碰到很多意想不到的问题,比如
芯片发热、相噪差、输出幅度、谐波分量等。下面我把我碰到的
关键问题,和解决办法阐述如下,看了一定有意想不到的收获:
1. ADF5355 功耗还是有 200mA 左右,芯片有点热,排
版注意散热问题,中心接地多打过孔,接地面积要
尽可能大。
2. 电源供电一定要选择噪声系数小的稳压芯片,5V 选
用 ADM7150ACPZ-5.0,3.3V 选用 ADP150AUJZ-3.3-R7,
3.3V 电源要分两部分供电,射频输出和其他供电,
同电压供电分别要用电感电容进行隔离,时钟部分
电压和地都要用电感隔离。
3. 印制板布局:高频走线要尽量短,滤波电容要多点,
大小要并用如电源 104、102、10P 并用。
4. 寄存器配置,我是如图:记住环路电流一定要用
0.9mA。
5. 环 路 滤 波 我 用 的 是 ADISIMPLL 3.5 软 件 , 选 择
ADF4350 芯片,设置如下图:
6. 编程:我用的是 51 汇编程序
#include "ADF5355.h"
#define SET_LE()
GPIO_SetBits(GPIOD, GPIO_Pin_8)//LE
#define CLR_LE()
GPIO_ResetBits(GPIOD, GPIO_Pin_8)
#define
SET_SCL()
GPIO_SetBits(GPIOD, GPIO_Pin_10)
//CLK
#define
CLR_SCL()
GPIO_ResetBits(GPIOD, GPIO_Pin_10)
#define SET_DATA()
GPIO_SetBits(GPIOD, GPIO_Pin_11)
//DAT
#define CLR_DATA()
GPIO_ResetBits(GPIOD, GPIO_Pin_11)
#define SET_CE()
GPIO_SetBits(GPIOD, GPIO_Pin_9)//CE
#define CLR_CE()
GPIO_ResetBits(GPIOD, GPIO_Pin_9)
u8 buf[4];
void delay (int length)
{
}
int i;
i = length * 200 ;
while (i >0)
i--;
void ADF5355_Initiate(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOD,
ENABLE); ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9
|GPIO_Pin_10 | GPIO_Pin_11 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
SET_CE();
}
//---------------------------------
//void WriteToADF5355(unsigned char count,unsigned char *buf);
//---------------------------------
//Function that writes to the ADF5355 via the SPI port.
//--------------------------------------------------------------------------------
void WriteToADF5355(unsigned char count, unsigned char *buf)
{
unsigned char ValueToWrite = 0;