STM32的AD9854 DDS模块调试总结

dds基本原理和特点 1、dds基本原理 直接频率合成技术实际上是通过将存储的波形数据,通过特定算法,经过高速d/a转换器转换成所需要模拟信号的数字合成技术。其基本原理框图如图1所示。
由图1可见,其主要由标准参考频率源、相位累加器、波形存储器、数/模转换器等部分组成。其中,参考频率源一般是一个高稳定的晶体振荡器,其输出信号用于dds中各部件同步工作。当频率合成器正常工作时,在标准频率参考源的控制下(频率控制字k决定了其相位增量),相位累加器则不断地对该相位增量进行线性累加,当相位累加器积满量时就会产生一次溢出,从而完成一个周期性的动作,即合成信号的一个频率周期。累加器的输出地址对波形rom进行寻址,从而把存储在相位累加器中的抽样值转化成对应的正弦波幅度序列。通过高速d/a变换把数字量变成模拟量,经过低通滤波器进一步平滑并滤掉带外杂散,得到所需的波形。
2、dds实现的正弦信号分析 理想dds的输出频谱就是指不存在相位舍入误差、幅度量化误差和dac误差时,系统输出的频谱。这时,整个dds系统就相当于理想的采样保持电路。其输出信号的频谱结构是以sa(·)函数为包络的一组离散谱线,如图2(所选fc=200 mhz,fo=40 mhz)所示,只在f=nfc±fo=(n±k/2n)fc处存在离散谱线。
dds芯片——ad9854 ad9854数字合成器是ad公司的一款高度集成的dds器件,其内部集成了双48位频率累加器,双48位相位累加器,正余弦波形表,双12位正交数模转换器,双12位数字倍增器,可编程的基准时钟倍增器以及调制和控制电路,能够在单片机上实现频率调制、相位调制,可编程的幅度调制以及i,q两路正交调制等多种功能。当ad9854作为一个精确的时钟源时,它能产生高稳定度,频率一相位一幅度均可编程的正弦和余弦输出。其主要特点有:
工作频率高 其工作频率高达300 mhz,其电路结构允许产生频率达到150 mhz的同时正交输出信号。相位截断到17位保证了优良的无杂散信号动态范围(sfdr)。
频率分辨率高 其创新的高速dds核提供了48位的频率分辨率(当sysclk为300 mhz时有1μhz的调节分辨率)。
可编程的基准时钟倍增器 ad9854的可编程的4×~20×的refclk倍增器电路在内部从一个低频的外部参考时钟产生300 mhz的系统时钟,节省了用户的花费,减小系统时钟源的难度。
内部集成高性能dac 两个12 b/300 mhz的dac使输出信号的信噪比(snr)满足要求。
简单的高速串、并行数据接口 并行口的数据传输速率达到100 mhz,串行口也有10 mhz的速度,频率转换时间最低能达到10 ns。
多种工作模式 有五种可编程的工作模式:单音调模式、非斜升fsk、斜升fsk、线性调频和bpsk,在使用中可以根据不同的需要进行转换。
stm32的ad9854 dds模块调试 最近一段时间因为比赛需要自己制作信号源,于是在某宝上选用了ad9854 dds模块,内部结构就不介绍了,手册上都有。该模块可以产生i、q两路正交输出信号,即一路正弦一路余弦信号,还有一路比较器的输出信号,即方波信号。如果对输出信号幅度没要求的话也可以选择ad9851 这个模块还是比较经典的。调试方法与9854类似。我采用的是串行通信模式,比较节省io口。 首先,对ad9854进行初始化,根据手册中时序图进行代码编写,串行模式下s/p必须接低电平,其余功能io口设置的输出输入分别为推挽输出模式和上拉输入模式。初始化程序:
[html] view plain copy《span style=“font-size:18px;”》void ad9854_init_s(void)
{
ad9854_m_reset_h();
ad9854_sp_l();
ad9854_sclk_l();
ad9854_sdio_l();
ad9854_io_ud_clk_l();
ad9854_cs_h();
ad9854_io_reset_h();
delay_int(10);
ad9854_m_reset_l();
delay_int(10);
data[3]=0x00;
data[2]=0x4a; //10倍频
data[1]=0x00;
data[0]=0x60;
ad9854_send_data(0x07,data);
}《/span》
其次,开始给寄存器对应地址写值,串行通信地址对应0x00~0x0b,并行通信写地址方式与串行有所区别,具体参考手册。简单的频率幅度控制的话,关心的地址只有0x02(i通道频率控制地址) 0x03(q通道频率控制地址) 0x07(倍频地址) 0x08(i通道幅度控制地址) 0x09(q通道幅度控制地址)。
寄存器写值先写低位,在写高位。
0x07地址一共4个字节,写值为data[3]=0x00;data[2]=0x4a;data[1]=0x00;data[0]=0x60;如果只修改倍频系数的话只需要修改data[2]的值(范围4-20倍,实际最大10倍频),若要其他功能对照手册修改对应地址的值即可。 0x02地址一共6个字节,100m对应频率字为data[0]=55;data[4]=55;data[3]=55;data[2]=55;data[1]=55;data[0]=55;换算为16进制数后1m=940000000000;写值后只需进行移位送入对应地址,方便以后频率步进,扫频功能。0x03同。有人就会问了:这里频率设置了为什么还要设置倍频系数呢?关于倍频系数,如果输出频率比较高,而倍频系数比较小的话,输出波形会失真,因此倍频系数根据你输出的频率要进行相应的设置。频率设置函数代码如下:
[html] view plain copy《span style=“font-size:18px;”》void ad9854_setfre(long long fre) //最高输入为2^48
{
data[5]=(u8)(fre》》40);
data[4]=(u8)(fre》》32);
data[3]=(u8)(fre》》24);
data[2]=(u8)(fre》》16);
data[1]=(u8)(fre》》8);
data[0]=(u8)fre;
ad9854_send_data(0x02,data);
ad9854_send_data(0x03,data);
}//若要i、q输出不同频率,0x03输入值重新定义个数组即可。《/span》
0x08地址一共2个字节,经实测10mv=450;幅度设置函数代码如下:
[html] view plain copyvoid ad9854_setsine(u16 shape)//最高输入2^16
{
unsigned char a[2]={0};
a[1]=shape》》8;
a[0]=shape&0xff;
ad9854_send_data(0x08,a);
ad9854_send_data(0x09,a);
}//若需两路不同幅度输出,参照上面频率控制。
这些步骤完成后,连线应该会输出你想要的信号,但是可能会出现恒定输出某个频率,并且波形很不光滑有许多台阶,无论如何修改倍频系数,输出不会发生改变,修改频率字输出波形也不会按照你想得那样变化。这个问题我整了好几天,真的很是无奈,要求外部5v供电,刚开始用电脑usb供电以为输入电流小而导致,后来改用稳压电源5v供电,电流2a,还是没有任何改善,9854模块上的gnd与单片机的gnd是接着的,后来才发现,两个gnd之间存在电压差,并没有实现真正的共地,导致芯片工作不正常。
解决方法:外部5v供电的同时将9854模块上的3.3v供电也接到单片机上3.3v电压处,这样应该是构成了回路,gnd才实现了真正的共地,问题解决。 9854这个模块还是很好用的,初始化时序没问题的话,只要在对应地址写值就可以实现你想要的输出了。并行通信的话,时序对了,跟串行地址写值稍微有点区别,也不难,参照手册即可。

晶闸管在电力变换及控制中的应用
台湾地区中小显示器市场小结与展望
传感器ISM330IS为边缘设备带来更强的人工智能
监狱室内人员定位系统可实现哪些功能
我国集成电路对外商依赖严重 自主之路依然很漫长
STM32的AD9854 DDS模块调试总结
大电流弹片微针模组在手机锂电池测试中的应用
万用表电压档的工作原理
IGBT模块赋能马达驱动应用
Polar将可能会成为2019年下半年的币圈黑马
一加首款智能手表发布无限期推迟
中国航天飞行器结构设计:从设计源头控制成本
非原装数据线的充电速度能否和华为原装数据线一样?
坚果R1拆解 做工怎么样
大中华区工业物联网市场现状、应用场景以及发展趋势
英飞凌领跑“离子阱”芯片;谷歌Gemini死磕ChatGPT
高通发布骁龙XR1平台 涵盖AR、VR 与 MR
大电容器取代备用电池
电容器的ESD耐性
神经网络再进步 麻省理工“人造突触”问世