各位大神咨询ADF4002的问题 无论如何无法锁定
情况是这样的一个ADF4002,用DDS给25KHZ的参考频率 VCO是一个15MHZ/V的 环路滤波器是使用的ADI软件设计的17.5M/V的环路滤波器
现在已经证明ADF4002的寄存器是可以写值进去的 因为把MUXOUT改成R DIVIDER OUT以后 在MUXOUT脚可以看到我的25KHZ方波
可是设置R,N以后烧写程序以后 VCO始终输出最高频率,无论如何无法锁定到我要的频率上 应该怎么办 各位大神帮我下 万分感谢
开始以为是51单片机和ADF4002的电平不兼容 后来查了手册发现他两的高低电平是可以兼容的 而且事实也证明可以对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; } |