51驱动AD9850/AD9851—DDS信号发生器
AD9850/AD9851的简介
AD9850/AD9851 模块是采用 ADI 应用最广泛的 DDS(AD9850 和 AD9851)制作的模块。
主要功能特点:
- 模块能够输出正弦波和方波,2 个正弦波和 2 个方波输出。
AD9850: 0-40MHz
AD9851: 0-70MHz
频率在 20-30MHz 后谐波越来越大,波形会越来越不干净。
方波: 0-1MHz - 采用 70MHz 的低通滤波器,使波形的 SN 比更好
- 比较器的基准输入端电压由可变电阻产生,调节该电阻可以得到不同的占空比方波
- AD9850 模块采用 125MHz 的有源晶振,AD9851 模块采用 30MHZ 的有源晶振
AD9850 和 AD9851 主要区别
- AD9850 的时钟频率最高 125MHz,AD9851 的时钟频率最高 180MHz。输出最高频率
AD9851 要比 AD9850 高。 - AD9850 没有 6 倍频,AD9851 有
原理图
DDS输出波形的灵活性
关于DDS的其他性能这里暂不多叙。关于DDS的输出波形灵活性只要在 DDS内部加上相应控制如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK、PSK、ASK和 MSK等信号。另外,只要在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);
}
实验接线
ad9850 | 51 |
---|---|
w_clk | P2^2 |
fq_up | P2^1 |
rest | P2^0 |
bit_data | P1^7 |
当然,还要接电源供电
调试结果
下载好对应的代码
OUT1 和 OUT2 端能测试到对应输出 1KHz 信号。如需测试方波,调节可变电位器,可在方波 1 和方波 2 端测试到方波。
AD9851的程序设计
其实软件和AD9850差不多,主要采用注意6clock打开还是关闭,其余的当成180M的时钟处理。
外部晶体为30M,6倍频打开,不像AD9854可以4—20倍频可选。在AD9851的基础上稍做修改就可搞定。
本次主要以AD9850为主做介绍
总结
AD9850是AD公司采用先进的DDS技术1996年推出的高集成度DDS频率合成器,它内部包括可编程 DDS系统、高性能DAC及高速比较器,能实现全数字编程控制的频率合成器和时钟发生器。有需要全代码的可下方留言邮箱获取,长期发布此类文章,喜欢的可以常关注,有不对的地方欢迎大家指点。