已回答假定已回答

各位大神咨询ADF4002的问题 无论如何无法锁定

xxiecauc 在 2014-5-10 詢問的問題
最後回覆由xxiecauc於2014-5-24提供

各位大神咨询ADF4002的问题 无论如何无法锁定

情况是这样的一个ADF4002,用DDS给25KHZ的参考频率 VCO是一个15MHZ/V的 环路滤波器是使用的ADI软件设计的17.5M/V的环路滤波器

现在已经证明ADF4002的寄存器是可以写值进去的 因为把MUXOUT改成R DIVIDER OUT以后 在MUXOUT脚可以看到我的25KHZ方波

可是设置R,N以后烧写程序以后 VCO始终输出最高频率,无论如何无法锁定到我要的频率上 应该怎么办 各位大神帮我下 万分感谢

上传电路图还有程序:

QQ截图20140509192144.png

#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;

}

結果