DDS芯片AD9833的特性
AD9833是AD公司出品的一款DDS波形发生器,能够产生正弦波、三角波和方波输出,它的主要参数如下:
能产生正弦波、三角波和方波的输出;
28位的相位累加器,也就是主频时钟为25MHz时,可实现0.1Hz的分辨率;主频时钟为1MHz时,可实现0.004Hz的分辨率;
10位的DAC输出;输出正弦波和三角波时波形幅度为38mV~650mV,输出方波时幅度最大为3.3V。
采用SPI接口,只作为SPI的从机。
这里需要说明一下,AD9833的输出波形频率,最高可达12.5MHz。这个12.5MHz是怎么来的呢?
因为AD9833的输入时钟频率最高是25MHz,由于奈奎斯特采样定律的限制,输出波形的每个周期内至少要2个点才能还原出信号,所以,25MHz/2 = 12.5MHz,是这么来的。
但是,这里要特别注意一下,奈奎斯特采样定理使用的条件,它描述的是波形中所含正弦波的最高频率。
因此,如果我们想让它输出12.5MHz的正弦波是可行的,一个周期内两个点的波形,再加上后端的低通滤波器就能实现;输出方波也是可行的,因为方波只有高、低电平的变化,输出不加任何滤波就是方波;而想要输出三角波,就不可能了,一个周期中只输出两个点,怎么都不可能形成三角波的图形,要想输出三角波,只能降低频率,让一个周期内的点数增加,才能输出类似三角波的波形。
使用stm32驱动AD9833输出
AD公司官方给出了一套驱动AD9833的代码,但是它的代码结构比较复杂,而且它为了兼容同系列的其他DDS芯片里面有很多冗余的部分,我们不使用官方的代码(有兴趣研究官方代码的可以关注我的公众号找到下载地址)。
自己来实现AD9833的驱动代码,使用的硬件平台是stm32单片机。
AD9833连接到SPI2接口上,使用PA8作为片选信号。
首先看AD9833的SPI接口时序:
它只有MOSI数据,所以数据只有主机到从机的,而且要注意是在时钟下降沿取数的,每次传输16bit。
在cubemx里建立工程,主要的参数设置下面几项:
使能SPI2,设置为全双工主机(半双工主机也可以,因为数据线只有一根MOSI);时钟初始为高、第一个跳变沿取数;
PA8设置为输出,作为AD9833的片选信号;
然后生成工程,在keil中打开后就可以编写代码了。
AD9833的寄存器比较简单,一共就三个:控制寄存器、频率寄存器、相位寄存器。
其中,控制寄存器用于设置波形、是否输出、是否低功耗等等一些控制量。频率、相位寄存器都有两个,由控制寄存器中的FSELEC、PSELECT位来选择使用哪一个。
原理图如下:
在AD9833的输出增加了一个数字电位器MCP41010和运放AD8051进行输出波形幅度的调节。
但是,这个模块的设计是有问题的,主要在于MCP41010数字电位器的带宽不够!会造成输出频率较高时,波形幅度大幅减小,完全起不到调节波形幅度的作用。
如下图是MCP41010的增益随频率的变化曲线,可以看到,频率到1MHz以上时,衰减会变得很明显,频率越高衰减越大: