ADF4351配置日志

本文详细介绍了如何使用AD9777芯片实现1KHz可变时钟源,通过计算输入频率的整数和小数分频,以及VCO分频系数,以适应不同数据采集需求。涉及工作原理、配置方法和寄存器设置,以10MHz输入频率为例演示频率输出过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目背景

       为 AD9777提供可变时钟源,实现1KHz可调功能,以便适应不同参数下的数据采集。本次记录以代码、频率实现为主。

工作原理

       输出频率计算

F_{out}=\frac{F_{IN}}{R_{count}}\times \left (INT+\frac{FRAC}{MOD}\right)\div DIV

        F_{IN}       :输入频率(取值范围:10-250MHz)

        R_{count}   :R预分频器(取值范围:1-1023)

        INT        :整数分频(取值范围:4/5预分频器为23-65535;8/9预分频器为75-65535)

        \frac{FRAC}{MOD}    :小数分频(MOD取值范围:2-4095,FRAC取值范围:0-(MOD-1))

        DIV        :VCO分频系数(系数范围:1,2,4,8,16,32,64)

        通过对输入的参考频率进行整数、小数分频合成,VCO压控振荡器可以输出频率范围:2200MHz-4400MHz。再经过1,2,4,8,16,32,64分频,实现35MHz-4.4GHz频率输出。

        以10MHz参考频率输入,100.001M频率输出为例。

        经过R分频器对参考频率进行10分频,得到1MHz的PFD频率(此举是为了方便计算VCO的整数部分-INT),按照VCO频率区间(2200MHz-4400MHz),需要对其进行至少22分频输出,22向上取整,实际最低分频系数为32,对应VCO频率为3200.032MHz,经32分频后,输出频率为100.001MHz。INT为3200;FRAC/MOD=0.001。

手册总结 

        输入频率10-250MHz,输出频率35MHz-4.4GHz。

        3线SPI,高位优先,最大速率50MHz,数据位宽32(包括低3位寄存器控制位)。

 配置引脚:

        CLK  :串行时钟输入。数据在CLK上升沿时逐个输入32位移位寄存器。此输入为高阻抗CMOS 输入。

        DATA:串行数据输入。串行数据以MSB优先方式加载,三个LSB用作控制位。此输入为高阻抗CMOS输入。

        LE     :加载使能。当LE变为高电平时,存储在32位移位寄存器中的数据载入三个控制位所选择的寄存器。此输入为高阻抗CMOS输入。

        CE     :芯片使能信号,高电平有效

寄存器说明

待更新...

Reg0

Reg1

Reg2

Reg3

Reg4

Reg5

#define         Freq    10000;//KHz


alt_u16 ADF4351_R_CNT;
alt_u16	ADF4351_DIV    ;//分频系数 
alt_u32	ADF4351_VCO    ;//压控振荡器频率 
alt_u32	ADF4351_INT    ;//整数部分 
alt_u32	ADF4351_MODE   ;
alt_u32	ADF4351_FRAC   ; 
alt_u32 ADF4351_PFD    ;//PFD频率1MHz

//计算频率系数
void freq_4351(alt_u32	ADF4351_FREQ)//35M-4400M
{
	alt_u32	div		;//分频系数 
	alt_u32	SUM1	;
	alt_u32	SUM2	; 
	alt_u32	EXT		; 
	 
    ADF4351_PFD=Freq/ADF4351_R_CNT;
	ADF4351_R_CNT=10;//R分频器系数
//输入频率范围判断
	if(ADF4351_FREQ>=4400000)
		ADF4351_FREQ=4400000;
	else	if(ADF4351_FREQ<=35000)
		ADF4351_FREQ=35000;
	
//参数计算
	if(ADF4351_FREQ<=68750)
	{
		div=64;
		ADF4351_DIV=6;
	}
	else if((68750<ADF4351_FREQ)&&(ADF4351_FREQ<=137500))
	{
		div=32;
		ADF4351_DIV=5;
	}
	else if((137500<ADF4351_FREQ)&&(ADF4351_FREQ<=275000))
	{
		div=16;
		ADF4351_DIV=4;
	}
	else if((275000<ADF4351_FREQ)&&(ADF4351_FREQ<=550000))
	{
		div=8;
		ADF4351_DIV=3;
	}
	else if((550000<ADF4351_FREQ)&&(ADF4351_FREQ<=1100000))
	{
		div=4;
		ADF4351_DIV=2;
	}
	else if((1100000<ADF4351_FREQ)&&(ADF4351_FREQ<=2200000))
	{
		div=2;
		ADF4351_DIV=1;
	}
	else if(ADF4351_FREQ>2200000)
	{
		div=1;  
		ADF4351_DIV=0;
	} 	 

	ADF4351_VCO=ADF4351_FREQ*div;				//VCO频率
	ADF4351_INT=ADF4351_VCO/1000/ADF4351_PFD;	//VCO分频系数-整数部分-单位MHz
	EXT=ADF4351_VCO%1000;						//VCO分频系数-小数部分-单位KHz
	
	//printf("VCO频率 :%d\n",ADF4351_VCO); 
	//printf("整数int :%d\n",ADF4351_INT); 
	//printf("分频系数:%d\n",div); 
	//printf("小数部分:%d\n",EXT); 
	
	for(ADF4351_MODE=2;ADF4351_MODE<4096;ADF4351_MODE++)
	{	 
		for(ADF4351_FRAC=0;ADF4351_FRAC<ADF4351_MODE;ADF4351_FRAC++)
		{ 
			SUM1=ADF4351_FRAC*1000;
			SUM2=EXT*ADF4351_MODE;
			 
			if(SUM1==SUM2) break;
		}	
			if(SUM1==SUM2) break;
	}  

	//printf("VCO频率 :%d\n",ADF4351_VCO); 
	//printf("分频系数:%d\n",div); 
	//printf("小数部分:%d\n",EXT); 
	//printf("整数int :%d\n",ADF4351_INT); 
    //printf("ADF4351_FRAC:%d\n",ADF4351_FRAC); 
	//printf("ADF4351_MODE:%d\n",ADF4351_MODE);  
	//printf("ADF4351_R_CNT:%d\n",ADF4351_R_CNT);  

}

寄存器配置

//配置寄存器地址参数
void reg_4351()
{
	adf4351_para[0]=0x0+(ADF4351_INT<<15)+(ADF4351_FRAC<<3); 
	adf4351_para[1]=0x1+(1<<27)+(1<<15)+(ADF4351_MODE<<3);
	adf4351_para[2]=0x2+0X0E40+(ADF4351_R_CNT<<14);
	adf4351_para[3]=0x3+0X4B0;
	adf4351_para[4]=(1<<23)+(ADF4351_DIV<<20)+0x0803C;
	adf4351_para[5]=0x5+0X580000;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值