文档库 最新最全的文档下载
当前位置:文档库 › 基于AD9850芯片的DDS系统程序

基于AD9850芯片的DDS系统程序

基于AD9850芯片的DDS系统程序
基于AD9850芯片的DDS系统程序

连接电路如下

图中滤波器如果没有条件制作就可以省略。

有源晶振最高可接125M,那么输出最高频率为125M/2 (有采样定律可知)

写控制字部分就连接就是D0~D7与单片机的一个IO口连接,另外就是写控制端W_CLK,频率更新控制端FQ_UD,还有复位端Rest。三个端口也连接上单片机IO口。

电路连接好确定无误,就编写程序,首先掌握DDS的基本原理,这里不详细说了,最主要掌握他的频率控制字是怎么算出来的,很简单由F out=CLK * K /2^32

可得K=2^32 * F out / CLK

这里K就是需要的频率控制字用来写入芯片,F out是所要输出的频率,

CLK是芯片的时钟频率我用的有源晶振100MHz。

掌握datasheet的时序图就可以写出控制程序了

由上写出:

for(i=0;i<5;i++) //循环5次

{

DATAOUT=word[i]; //控制字输出到IO口

W_CLK=1;_nop_(); //如时序图一个上升沿使芯片读入数据word[i]

W_CLK=0;_nop_(); //

}

PQ_UD=1;_nop_(); //5个写完后,频率控制端一个上升沿,是AD9850更新频率

PQ_UD=0;_nop_();

}

这个没问题剩下的就简单了。

另外程序开始可以加个复位

RET=1;

delay_1ms(100);

W_CLK=0;

PQ_UD=0;

RET=0;

制作完成看看,是够丑的

看看波形,可能是示波器太先进了所以看起来不太平滑,但是用模拟滤波器肯定平滑,从频谱可以看出,不错够纯净

而且控制很精准,当控制输入为10MHz时,看右上角的显示10.012MHz。误差原因暂不分析,先就这水平。

没加滤波器,结果波形很数字化的感觉。

剩下的根据情况加上键盘输入和显示就OK了。

付一个程序,没有加键盘和现实的:

#include

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int

sbit W_CLK= P1^0;

sbit PQ_UD= P1^1;

sbit RET= P1^2;

uchar word[5]={0x00,0x00,0x00,0x00,0x00};

unsigned long int k=42.94967296*1500000; //15000000就是所要输出的频率值,

//若晶振不同为其他频率更改数值就行了

void chang(unsigned long int t)

{

word[1]=k>>24;

word[2]=k>>16;

word[3]=k>>8;

word[4]=k;

}

delay_1ms(uint t)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++); }

main()

{

uint i;

RET=1;

delay_1ms(100);

W_CLK=0;

PQ_UD=0;

RET=0;

chang(k);

while(1)

{

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

{

P0=word[i];

W_CLK=1;

_nop_();

W_CLK=0;

_nop_();

}

PQ_UD=1;_nop_();

PQ_UD=0;_nop_();

}

}

相关文档