在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 7764|回复: 10

[求助] ADF4002锁相环无法锁定 麻烦大家帮忙看看万分感谢 因为做毕设所以十分紧急

[复制链接]
发表于 2014-5-11 13:21:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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;

}

发表于 2014-5-11 15:21:10 | 显示全部楼层
你好。我最近做项目用的片子是ADF4110。遇到过你的类似问题,一直失锁。后来发现时我们单位内网提供的datasheet上的时序是错误的。你到网上搜索AD公司编写的“锁相环常见问题解答”,或许在上面你能找到问题的答案。至于你的程序我还没有看,不太懂单片机,我用的是Verilog。
发表于 2014-5-11 15:23:48 | 显示全部楼层
哦,对了,你有没有测量过VCO 的调谐电压值
发表于 2014-5-11 15:45:26 | 显示全部楼层
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);///
发表于 2014-5-11 15:46:43 | 显示全部楼层
你确定你的配置数据先发送的是24bit控制位的最高位数据?我感觉你的配置数据的16进制和2进制的不是同一个数啊。
 楼主| 发表于 2014-5-11 23:10:48 | 显示全部楼层
回复 3# liujilonghit201


    谢谢你回答我的问题 我测量过vt 就是输出最高的调谐电压5v..
 楼主| 发表于 2014-5-11 23:14:39 | 显示全部楼层
回复 5# liujilonghit201


    嗯我确定先从24位数据的最高位开始写入的 我那个二进制数确实是错误的 我后来改程序 改了那个16进制数 但是后面的注释忘记改了 所以你看起来不一样 我明天研究下这个时序问题 白天好像看到过这个说时序错误 但是我看实例程序时序也这样 所以就没太大在意
 楼主| 发表于 2014-5-12 10:00:29 | 显示全部楼层
回复 5# liujilonghit201


   我的时序已经按照adi的那个要求调好了 这个是仿真的图片 QQ截图20140512095737.png

可是还是不能锁定 好烦啊 会不会是寄存器的设置有问题
QQ图片20140512100101.jpg
发表于 2015-4-13 22:16:39 | 显示全部楼层
请问你这个程序现在调试好了吗
发表于 2015-4-13 22:16:37 | 显示全部楼层
请问你这个程序现在调试好了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-19 02:21 , Processed in 0.060029 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表