电路设计论坛
直播中

李永每

7年用户 1355经验值
私信 关注
[文章]

ADF4350的调试经验

下面的寄存器设置实现:在外部晶振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)
{;}

}

更多回帖

发帖
×
20
完善资料,
赚取积分