其他分享
首页 > 其他分享> > 51驱动AD9850/AD9851—DDS信号发生器

51驱动AD9850/AD9851—DDS信号发生器

作者:互联网

51驱动AD9850/AD9851—DDS信号发生器

AD9850/AD9851的简介

AD9850/AD9851 模块是采用 ADI 应用最广泛的 DDS(AD9850 和 AD9851)制作的模块。
在这里插入图片描述

主要功能特点:

AD9850 和 AD9851 主要区别

原理图

在这里插入图片描述

DDS输出波形的灵活性

关于DDS的其他性能这里暂不多叙。关于DDS的输出波形灵活性只要在 DDS内部加上相应控制如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK、PSK、ASK和 MSK等信号。另外,只要在DDS的波形存储器存放不同波形数据,就可以实现各种波形输出,如三角波、锯齿波和矩形波甚至是任意的波形。当DDS的波形存储器分别存放正弦和余弦函数表时,既可得到正交的两路输出。
DDS的原理框图:
DDS的原理框图

AD9850/AD9851 模块的输出波形

输出正弦波和方波,
注:在输出正弦波的情况下,接线到方波输出的 IO 口,直接调节
蓝色的电位器可输出方波。

程序介绍

下面对主要的源代码进行简单的介绍
初始化DDS

void init_dds(void)
{
clk =0;
load =0;
delay(2);
clk = 1;
delay(2);
clk =0;
delay(5);
load= 1;
delay(2);
load= 0;
}

写入40bit到DDS芯片,频率占用前32bit,相位暂不可调

void write_dds(unsigned long dds)
{
uchar i;
load= 0;
clk =0;
for(i=0;i<40;i++)
{
clk = 0;
delay(3);
if(dds & 0x00000001)
dat = 1;
else dat = 0;
delay(2);
clk = 1;
dds = dds >> l;
}
load=1;clk =0;delay(5);load= 0;
}

输出你要的频率,例如输出12.5M则调用write freq ( 12500000);

void write_freq(unsigned long freq)
{
unsigned long dds;
dds = 42.94967296*freq;write_dds(dds);
}

实验接线

ad985051
w_clkP2^2
fq_upP2^1
restP2^0
bit_dataP1^7

当然,还要接电源供电

调试结果

在这里插入图片描述
下载好对应的代码
OUT1 和 OUT2 端能测试到对应输出 1KHz 信号。如需测试方波,调节可变电位器,可在方波 1 和方波 2 端测试到方波。

AD9851的程序设计

其实软件和AD9850差不多,主要采用注意6clock打开还是关闭,其余的当成180M的时钟处理。
外部晶体为30M,6倍频打开,不像AD9854可以4—20倍频可选。在AD9851的基础上稍做修改就可搞定。
本次主要以AD9850为主做介绍

总结

AD9850是AD公司采用先进的DDS技术1996年推出的高集成度DDS频率合成器,它内部包括可编程 DDS系统、高性能DAC及高速比较器,能实现全数字编程控制的频率合成器和时钟发生器。有需要全代码的可下方留言邮箱获取,长期发布此类文章,喜欢的可以常关注,有不对的地方欢迎大家指点。

标签:输出,DDS,方波,51,dds,AD9851,AD9850
来源: https://blog.csdn.net/qq_42250136/article/details/117511170