原创 用MSP430F169单片机控制ADF4360系列锁相环芯片

2010-7-9 00:03 5966 8 10 分类: MCU/ 嵌入式

本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿

某发射机项目中需要一个频率范围为1.75GHz-1.81GHZ,频率步进为200KHz的扫频源。我选择了ADI的ADF4360系列锁相环芯片,该系列芯片内部集成了VCO,封装小巧(4mm*4mm),价格公道(官方批量价格3.06美元,我在人民币升值之前找本地公司买了10片,每片46人民币。注:我说的价格公道是指官方价格,不是指我买的价格;)),文档丰富,即便是对锁相环一窍不通的人,仔细看看文档也能设计出频率源。ADF4360-3满足我们的频率需求,其输出频率范围为1.6GHz-1.95GHz。系统的控制我用单片机,这是第一次用单片机,听说TI的MSP430系列不错,查了查资料,决定选用MSP430F169作为我们发射机项目的控制核心。


本文仅介绍如何用MSP430F169控制ADF4360-3。



========
硬件连接
========


MSP430F169与ADF4360-3之间的连接只需要3根线,我的是P5.1->DATA,P5.3->CLK,P5.4->LE,如图1所示。


点击开大图
图1 MSP430F169与ADF4360-3硬件连接图



========
软件程序
========


"The ADF4360 family has a simple SPI-compatible serial inter-face for writing to the device. "


ADF4360-3用与SPI兼容的方式进行通信,不过我用MSP430的SPI与ADF4360-3通信没有成功,时间紧迫,为了1天之内搞出来(因为第二天就要用),于是当天晚上我用单片机的普通IO口模拟SPI的工作方式来和ADF4360-3进行通信,获得了成功。


---------------------------------------------------------------------


#include  <msp430x16x.h>
float fOUT = 1750;
int fREF = 10;
int fPFD = 200;
int R="50";
int NCounter="0";
int PCounter="8";
int BCounter="0";
int ACounter="0";
int N2=0;
int N1=0;
int N0=0;
int bindata[8]={0,0,0,0,0,0,0,0};

void InitSystemClock(void)
{
  unsigned char i;
  BCSCTL1 = RSEL0 + RSEL1 + RSEL2;              
  BCSCTL2=SELM_2+SELS;
  do
  {
  IFG1 &= ~OFIFG;
  for (i = 0xFF; i > 0; i--); 
  }
  while ((IFG1 & OFIFG) != 0);
}


void PortInit(void)
{
 P1SEL=0X00;
 P1DIR=0XFF;
 P2SEL=0X00;
 P2DIR=0XFF;
 P3SEL=0X00;
 P3DIR=0XFF;
 P4SEL=0X00;
 P4DIR=0XFF;
 P5SEL=0X00;
 P5DIR=0XFF;
 P6SEL=0X00;
 P6DIR=0XFF;
 P1OUT=0X00;
 P2OUT=0X00;
 P3OUT=0X00; 
 P4OUT=0X00;
 P5OUT=0X00;
 P6OUT=0X00;
}


void delay(int count)
    {
     while(count!=0) count--;
    }


void MO2(int dbin)
{
    if(dbin==1)
    {
        P5OUT |= BIT1;
    }
    if(dbin==0)
    {
        P5OUT &= ~BIT1;
    }
    P5OUT |= BIT3;
    P5OUT &= ~BIT3;
}


void bin(int n)
{
    int i="0";
    for(i=0;i<8;i++)
    {
        bindata=n%2;
        n="n/2";
    }
}


void data_out(int decidata)
{
    int i="7";
    bin(decidata);
    for(i=7;i>=0;i--)
    {
        MO2(bindata);
    }
}


void set_R(int fref,int fpfd) // fref为晶振频率(单位为MHz),fpfd为鉴相频率(单位为Khz)
{
    int R2 = 0;
    int R1 = 0;
    int R0 = 0;
    fREF = fref;
    fPFD = fpfd;
    R = fREF*1000/fPFD;
    R2 = 0;
    R1 = (R-R&0x003F)/64;
    R0 = (R&0x003F)*4+1;
    P5OUT &= ~BIT4;
    data_out(R2);
    data_out(R1);
    data_out(R0);
    P5OUT |= BIT4;
}


void set_Control(int P)
{
    PCounter = P;
    P5OUT &= ~BIT4;
    if(P == 8)
    {
        MO2(0);MO2(0);
    }
    if(P == 16)
    {
        MO2(0);MO2(1);
    }
    if(P == 32)
    {
        MO2(1);MO2(0);
    }
    MO2(0);MO2(0);MO2(1);MO2(1);MO2(1);MO2(1);
    MO2(1);MO2(1); MO2(1);MO2(1);MO2(1);MO2(0);MO2(0);MO2(1);
    MO2(0);MO2(0); MO2(1);MO2(0);MO2(1);MO2(0);MO2(0);MO2(0);
   
    P5OUT |= BIT4;
}


void set_N(float fOUT) // fOUT为锁相环频综输出频率(单位为MHz)
{
    NCounter = fOUT*(1000/fPFD);
    BCounter = NCounter/PCounter;
    ACounter = NCounter-BCounter*PCounter;
   
    N1 = BCounter&0x00FF;
    N2 = (BCounter-N1)/256;
    N0 = ACounter*4+2;


    P5OUT &= ~BIT4;
    delay(0x18FF);
    data_out(N2);
    data_out(N1);
    data_out(N0);
    P5OUT |= BIT4;
}


void main( void )
{
    WDTCTL="WDTPW"+WDTHOLD;
    InitSystemClock();
    PortInit();
   
    set_R(10,200); // 晶振频率10MHz,鉴相频率200KHz
    set_Control(8); // 此项默认为8
    set_N(1780); // 频综输出频率1780MHz


}


---------------------------------------------------------------------



ADF4360其他系列芯片的控制方法是一样的,可以类推。

『 原创文章如转载,请注明:转载自http://blog.ednchina.com/rfengineer/ 』


PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1748934 2014-4-29 12:24

您好,请问您用的什么软件设计仿真这个电路的电路图

用户389572 2008-12-21 13:29

查收,学习一下,谢谢共享,有空也去我的自留地踩踩!http://blog.ednchina.com/blog/xjjrj/
相关推荐阅读
用户708361 2010-07-11 18:04
本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿)
新博客(射频那些事儿)为无线通信、射频领域的专业博客。谢谢大家一直以来的支持。...
用户708361 2010-07-09 00:16
Standards
本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿)。This page provides links to current air interface standards.  ...
用户708361 2010-07-09 00:15
用ADS设计LC带通滤波器
本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿)。滤波器大致分为四类:低通、高通、带通和带阻滤波器。工程应用中,借助专业软件来进行计LC滤波器的设计往往具有事半功倍的效果(特...
用户708361 2010-07-09 00:12
如何确定隔直电容的值
本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿)。发觉很多人对于隔直电容的选择都没有一个精确严谨的方法,比较笼统,在这里发表发表我的看法,欢迎大家交流。个人理解,欢迎拍砖。在...
用户708361 2010-07-09 00:05
射频学习资料推荐-第一波
本博客(RF Engineer)不再更新,将全面扎根新博客(射频那些事儿)===========================================《PLL Performance, Si...
我要评论
2
8
关闭 站长推荐上一条 /3 下一条