原创 AD9851DDS的EZ-USB控制

2009-3-10 21:40 3806 6 6 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


点击看大图     上面是电路图,晶振是20M,通过倍频AD9851系统时钟可以达到120M。DATA2,FQUD2,WCLK2,DDS_RESET分别引线到CY7C68013单片机上:


sbit FQUD = IOD^0;
sbit WCLK = IOD^3;
sbit RESET= IOD^4;
sbit DATA = IOD^7;


     根据DDS原理:f= ( △Phase ×System Clock)/4294967296(2的32次幂)


故:△fo=120*106/232 Hz = 0.028Hz


    根据抽样定理可知最大输出频率为系统时钟频率(120M)的二分之一(60M),故信号的频率低于此值均可满足要求。


现设计几个不同信号频率的信号源:1K,10K,100K,1M,10M


根据 DWORD=f/△fo可以分别得出DWORD,分别如下:


1KHz           ------ 8B82


10KHz          ------57316


100KHz         ------367EE4


1MHz           ------220F4EE


10M            ------15499149



unsigned char AD9851_FREQ1K[5]={0x82,0x8B,0x00,0x00,0x01}; //存放W0,W1,W2,W3,W4到W39,其中W32位6倍频,W33为0,W34为 POWER DOWN ,W35到W39为相位                                          //数据发送从W0~W39


unsigned char AD9851_FREQ10K[5]={0x16,0x73,0x05,0x00,0x01};


unsigned char AD9851_FREQ100K[5]={0xE4,0x7E,0x36,0x00,0x01};


unsigned char AD9851_FREQ1M[5]={0xEE,0xF4,0x20,0x02,0x01};


unsigned char AD9851_FREQ10M[5]={0x49,0x91,0x49,0x15,0x01};


unsigned char POWERDOWN[5]={0x00,0x8B,0x00,0x00,0x03};



具体的控制写函数如下:


void delayms(unsigned int time)   //延时约time个ms


{


     unsigned char i=120;


        while(--time)


                  {


                     while(--i);


                  }


}


void   AD9851_INIT() //AD9851的初始化,必须复位(注:复位也可硬件上接成上电复位)


{  //上电后只需复位1次,在断电前都可使用


 WCLK=0;


 FQUD=0;



 RESET=1;


 delayms(5);


 RESET=0;


 delayms(1);


}



void AD9851_FREQ_SEND(unsigned char *freq)  //向AD9851发送频率控制字


{


 unsigned char temp;


 unsigned char i;


 unsigned char d;



 WCLK=1;



 WCLK=0;   //送出XXXXX011




 FQUD=0;



 FQUD=1;   //启动串口模式



 FQUD=0;      


 


 for(i=0;i<5;i++)


 {


 temp=*(freq+i);


 for(d=0;d<8;d++)


  {


 WCLK=0;  //写频率控制字和相位等



 if(temp&0x01) DATA=1;


 else          DATA=0;



 _nop_();


 _nop_(); 


  


 WCLK=1;



 _nop_();


 _nop_();



 temp=temp>>1;



 



 }


  }


  FQUD=1;


  FQUD=0;



}


   再在VENDOR_CMD写命令配置单片机


#define VX_B2 0xB2              // (re)arm endp 1 out 


#define VX_42 0x42              //1K


#define VX_43 0x43              //10K


#define VX_44 0x44              //100K


#define VX_45 0x45              //1M


#define VX_46 0x46              //10M


#define VX_47 0x47              //POWER-DOWN MODE


case VX_42:                //1Khz


{


  


      AD9851_INIT();  //


      AD9851_FREQ_SEND(AD9851_FREQ1K);


  EP0BCH = 0;


      EP0BCL = 1;


  EP0CS |= bmHSNAK; 


  *EP0BUF = VX_42;


          // Acknowledge handshake phase of device request


      break;


}


  其他的类似。



   通过观察IOUT波形,可以看到结果相当令人满意。


   



 


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条