马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位大神咨询ADF4002的问题 无论如何无法锁定 情况是这样的一个ADF4002,用DDS给25KHZ的参考频率 VCO是一个15MHZ/V的 环路滤波器是使用的ADI软件设计的17.5M/V的环路滤波器 现在已经证明ADF4002的寄存器是可以写值进去的 因为把MUXOUT改成R DIVIDER OUT以后 在MUXOUT脚可以看到我的25KHZ方波 可是设置R,N以后烧写程序以后 VCO始终输出最高频率,无论如何无法锁定到我要的频率上 应该怎么办 各位大神帮我下 万分感谢 开始还以为是51单片机和ADF4002的CMOS电平不兼容,但是查了手册以后,发现两个芯片高低电平是可以兼容的,而且事实证明也是可以成功对锁相环寄存器进行设置,但是就是无法锁定,很苦恼。。
下面是我ADF4002的程序 #include "reg52.h"
sbit ADF4002_CE = P0^5; sbit ADF4002_CLK = P1^6; sbit ADF4002_DATA = P1^5; sbit ADF4002_LE = P0^4; sbit 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; } |