完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面的寄存器设置实现:在外部晶振10MHz的条件下,主端口输出1.4G射频信号。
R5: 0x004005; R4: 0x00950024; R3: 0x000084B3; R2: 0x140056C2; R1: 0x0800088191; R0: 0x008C0000; 针对在调试时出现的情况对其中的几位说明一下: (1)R5中的LD PIN MOD(DB23、DB22) 论坛里说这个关键不要接发光二极管,因为它只是一个逻辑高电平,不一定能驱动二极管发光。实际电路中我还是接了贴片发光二极管,完全可以发光。另外,这个管脚可以设置为输出高低电平,因此可以在程序中通过将其置高置低,通过观察二极管是否发光来判断寄存器写入有没有执行。 (2)R2中的MUXOUT(DB28、DB27、DB26) 一开始的时候我将这一位设置为N分频输出,然后ADF4350有输出,但是是1.07G左右而不是1.4G,从改管脚测量的N分频输出为7.6MHz左右。锁定指示灯不亮,我一直以为是环路滤波器的问题,换过几个电阻电容后发现结果没有变化,修改了很多寄存器值都没办法锁定。最后才想到MUXOUT,将其改为ANALOG LOCK DETECT后,输出就奇迹般的好了。在论坛里查了一下,也有人有相同的问题,MS这是ADF4350芯片自身的一个BUG。另外我想,这个管脚可以接回单片机,在其信号由高到底(即4350失锁)时,激活单片机从新对4350写寄存器,相当于重启。 (3)R2中的CHARGE PUMP CURRENT SETtiNG(DB12、DB11、DB10、DB9) 这个没有在网上翻到怎么设置,根据我自己的实验测试来看,Icp选择2mA与4mA之间的值都是可以的,其他值没有测试。 另外两点关于ADF4350电路的经验: (1)外部的环路滤波器。根据软件计算出来的电阻电容值和实际市场上可以买到的有出入,不过不会影响锁相环正常锁定,对于最后信号的相位噪声影响有多大还没有测试。下面是采用快速锁定方式,鉴相频率为10MHz时的环路滤波器计算值与实际使用值: 元件 计算值 实际值 C1 1.82nF2.2nF C2 C2 24.8nF 47nF C3 831pF2.2nF 1 R1 450 510 R1a 1.35k 1.5K R2 3.67K3.7.7KK (2)ADF4350差分输出。 ADF4350的输出是一对差分信号,如果你只需要一路输出的话,另一路信号必须接50的匹配负载。同样,如果你想用示波器或频谱仪测试一下ADF4350的输出,不要忘了示波器自身也是50的负载。我犯得错误就是,在一对差分信号的输出端都接了50的匹配负载时,直接用示波器探头去测量一路输出,测到的信号功率只有-30dBmW,显然不对,而且这样有可能烧坏片子。 AD的官网上有读写ADF4350寄存器的C语言示例程序,下面这个是稍微修改后的,单片机采用ATMEGA16,中间加了一端与电脑串口通信的程序,用来检验程序是否正常执行。 #include #include #define SET_LE() PORTB = (PORTB | 0x40) //PB6->LE 调 #define SET_SCL() PORTB = (PORTB | 0x20) //PB5->SCL 调 #define SET_DATA() PORTB = (PORTB | 0x10) //PB4->DATA 调 调 调 未签名字符buf[4] = {0,0,0}; 无效的延迟( 长度) { while (length >0) 长度-; } 通过SPI港口向ADF4350公司写信的职能。 - - - - - - - - - - - - - - - - - - - - - - - - 无效的 写入ToADF4350( 未签名的字符数, 未签名的字符*buf) { 未签名的字符 valueTo write = 0; 未签名字符i=0; 未签名字符j = 0; 设置_ data_out () ; 迟延(1); clr_scl() ; clr_le( ) ; 迟延(1); for(i=count;i>0;i--) { { { 值重写 = * (buf i - 1); for(j=0; j<8; j++) { { { 如果( 0x80 = (值写 0x80)) { { { SET_DATA (); // 发送 1 到 SDO 针 时 时 其它 { { { CLR_DATA (); // / 发送零到 SDO 插针 时 时 迟延(1); 设置_scl() ; 迟延(1); ValueToWrite <<= 1; //Rotate data clr_scl() ; 时 时 } clr_ data () ; 迟延(1); sand_le( ) ; 迟延(1); clr_le( ) ; } /*****************串口初始化*********************************/ 无效usart_init( 取消) { UCSRB = 0x00; ///在设定跌落率时残疾 UCSRA = 0x00; //Bit1为1则倍速发送 UCSRC = 0x86; //8位字符,1位停止位,无校验 UBRRL = 0x19; //波特率:9600 Bps UBRRH = 0x00; //误差率:0.2% UCSRB = 0xD8; } /******************端口初始化*******************************/ 无效端口_init( 撤销) { PTOA = 0xFF; 复员方案A=0x00; PTOB = 0xFF; 复员方案B=0xFF; PTOC = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = 0xFF; 3 = = 0xFF; 3 = = 0xFF; = = 0xFF; = 0xFF; = 0xFF; = 0xFF; 复员方案=0x00; PORTD = 0xFF; //设置RXD0和TXD0 复员方案D=0x02; } /******************初始器件**************************************/ eit_ devits 无效( 撤销) { 端口_ init (); usart_init( ); } /****************中断接收服务处理子程序*******************************/ asr( usart_rxc_ vect) { 未签名的字符元数据_temp; unsigned char data=':'; //UCSRB=0x00; //禁止发送和接收 data_temp = UDR; //从数据缓冲器中接收数据 UCSRB=0xD8 ; //允许发送和接收,接收和发送结束中断使能 if(data_temp=='0') //如果接收到的字符为'0' UDR = data; //将数据data放入缓冲器,发送数据 其它 UDR=data_temp; //否则将接收到的数据返回 } /*********************中断发送服务处理子程序**************************/ asr( usart_ txc_ vect) { UCSRA |= (1<<6); //发送结束清零 } 主( 无效) { cli(); //总中断禁止 init_ devits () ; 内置设备( ) ; buf[3] = 0x00; buf[2] = 0x40; buf[1] = 0x00; // write 通信登记册 0x0000005 以控制进度 buf[0] = 0x05; // 写入登记簿 5 以设定 digitock alldetector 书写toadadf4350( 4, buf); buf[3] = 0x00; buf[2] = 0x95; //(DB23=1) 信号直接从 VCO 接收; (DB22-20:4H) RF 分割器为 16; (DB19-12:50H) R 80 buf[1] = 0x00; //(DB11=0) VCO 增强; buf[0] = 0x24; //( DB5=1) FF 输出启用;( DB4-3=3H) 输出功率水平为 5 书写toadadf4350( 4, buf); buf[3] = 0x00; buf[2] = 0x00; buf[1] = 0x84; //(DB14-3:96H)clock divider value is 150.非快速锁定设为0x04; buf[0] = 0xB3; 书写toadadf4350( 4, buf); buf[3] = 0x14; buf[2] = 0x00; //(DB6=1) Set PD 极度为正数; (DB7=1) LDP 是 6nS; buf[1] = 0x56; //(DB8=0) 可实现的分数- N 数字锁检测; buf[0] = 0xC2;//(DB12-9:7H)set Icp 2.50 mA; 书写ADF4350( 4, buf); //( DB23-14: 1H) R 计数器为 1 buf[3] = 0x08; buf[2] = 0x00; buf[1] = 0x81;//(DB14-3:6H)MOD 计数器为 6; buf[0] = 0x91; //( DB26-15:6H) PHASE 单词为 1, 既不是相继同步 WriteToADF4350( 4,buf); // 或未使用虚假的优化功能 / (DB27=1) 预估标值为 8/ 9 buf[3] = 0x00; buf[2] = 0x8C; buf[1] = 0x00; buf[0] = 0x00; //(DB14-3:0H) FRAC 值为 0; 书写ADF4350( 4, buf); //( DB30-15: 140H) INT 值为 280; sei(); //总中断允许 和(1) {;} } |
|
相关推荐 |
|
959 浏览 0 评论
835 浏览 1 评论
784 浏览 1 评论
电路小知识 | 交流电路复数的基础知识以及相位差和电抗的计算
639 浏览 0 评论
1877 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 08:44 , Processed in 0.676819 second(s), Total 50, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号