各位大神咨询ADF4002的问题 无论如何无法锁定
情况是这样的一个ADF4002,用DDS给25KHZ的参考频率 VCO是一个15MHZ/V的 环路滤波器是使用的ADI软件设计的17.5M/V的环路滤波器
现在已经证明ADF4002的寄存器是可以写值进去的 因为把MUXOUT改成R DIVIDER OUT以后 在MUXOUT脚可以看到我的25KHZ方波
可是设置R,N以后烧写程序以后 VCO始终输出最高频率,无论如何无法锁定到我要的频率上 应该怎么办 各位大神帮我下 万分感谢
上传
威廉希尔官方网站
图还有程序:
#include "reg52.h"
***it ADF4002_CE = P0^5;
***it ADF4002_CLK = P1^6;
***it ADF4002_DATA = P1^5;
***it ADF4002_LE = P0^4;
***it ADF4002_MUXOUT = P0^6;
void delay_us (int length)
{
while (length >0)
length--;
}
void Send_Data(unsigned long int datanumber)
{
unsigned long int temp;
unsigned int i;
temp=0x800000;
ADF4002_DATA=0;
delay_us(1);
ADF4002_CLK = 0;
ADF4002_LE=0;
delay_us(1);
for(i = 0; i < 24; i++)
{
if(datanumber & temp)
{
ADF4002_DATA = 1;
}
else
{
ADF4002_DATA = 0;
}
delay_us(1);
ADF4002_CLK = 1;
delay_us(1);
temp >>= 1;
ADF4002_CLK = 0;
}
ADF4002_DATA=0;
delay_us(1);
ADF4002_LE=1;
delay_us(1);
ADF4002_LE=1;
}
void ADF4002_Control(unsigned long int REF_divide,unsigned long int N_divide)
{
unsigned long int m,n;
Send_Data(0x0d8083); //0001 1111 1000 0000 1001 0011
delay_us(200);
Send_Data(0x0d8082); // 0001 1111 1000 0000 1001 0010
delay_us(200);
m=REF_divide<<2;
Send_Data(0x000000|m); // 0000 0000 **** **** **** **00
delay_us(200);
n=N_divide<<8;
Send_Data(0x000001|n); // 000* **** **** **** 0000 0001
delay_us(200);
}
void ADF4002_Init(void)
{
ADF4002_LE=0;
ADF4002_CLK=0;
ADF4002_DATA=0;
}