<?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波形,可以看到结果相当令人满意。
文章评论(0条评论)
登录后参与讨论