【STM32+cubemx】0030 HAL库开发:DDS芯片AD9833实现简单的波形发生器
创始人
2024-04-29 20:31:53
0

大家好,我是学电子的小白白,今天带大家了解一款波形发生器芯片——AD9833。

AD9833是AD公司出品的一款DDS波形发生器,能够产生正弦波、三角波和方波输出。

1)什么是DDS

通俗来讲,DDS是一种把波形预先存储在芯片内部的DAC,只要设置好它的工作频率,就能按这个频率来输出特定的波形。

DDS内部主要分成3部分:相位累加器、相位幅度转换、数模转换器(即DAC)。

相位累加器:

一个周期信号的波形,它的相位是均匀增加的,比如1Hz的正弦波,每1/360秒相位增加1°,增加到360°时又回到0°。相位累加器就是一个不断累加产生相位值的计数器,周期性地累加、清零。

相位累加器的位数决定了把一个周期分为多少等分,位数越高,则分得越细,一个周期内的点数也越多,输出波形在时间尺度上就会越精细。

相位幅度转换

相位幅度转换其实就是已经存储的波形表,比如我们想输出正弦波的波形时,相位累加器输出的相位是30°,则通过查表,输出sin(30°)的值,就完成了相位幅度转换。

DAC输出

有了幅度值,再通过DAC输出,就得到了当前时刻的波形值。这个就不多解释了,和通用的DAC一个意思。这里的DAC也是有位数的,位数越高,产生的波形幅度就越精细。

2)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的正弦波是可行的,一个周期内两个点的波形,再加上后端的低通滤波器就能实现;输出方波也是可行的,因为方波只有高、低电平的变化;而想要输出三角波,就不可能了,一个周期中只输出两个点,怎么都不可能形成三角波的图形,要想输出三角波,只能降低频率,让一个周期内的点数增加,才能输出类似三角波的波形。

3)使用stm32驱动AD9833输出

AD公司官方给出了一套驱动AD9833的代码,但是它的代码结构比较复杂,而且它为了兼容同系列的其他DDS芯片里面有很多冗余的部分,我们不使用官方的代码,有兴趣可以关注我的公众号找到下载地址自行研究。

这里我们自己来实现AD9833的驱动代码,使用的硬件平台是stm32单片机。

AD9833连接到SPI2接口上,使用PA8作为片选信号。

首先看AD9833的SPI接口时序:

它只有MOSI数据,所以数据只有主机到从机的,而且要注意是在时钟下降沿取数的,每次传输16bit。

在cubemx里建立工程,主要的参数设置下面几项:

使能SPI2,设置为全双工主机(半双工主机也可以);时钟初始为高、第一个跳变沿取数;

PA8设置为输出,作为AD9833的片选信号;

然后生成工程,在keil中打开后就可以编写代码了。

AD9833的寄存器比较简单,一共就三个:控制寄存器、频率寄存器、相位寄存器。

其中,控制寄存器用于设置波形、是否输出、是否低功耗等等一些控制量。频率、相位寄存器都有两个,由控制寄存器中的FSELEC、PSELECT位来选择使用哪一个。

这里我们尝试把常用的几个功能封装的函数中,其他一些细节功能的可以参见AD9833的数据手册。

首先是定义片选的拉高、拉低函数:

接着是初始化函数,由于cubemx生成的代码已经把spi接口初始化好了,所以这里我们只需要把片选线拉高就可以了:

AD9833的读写函数,我们使用HAL库的spi函数实现,由于AD9833每次传输16bit,先传高位,所以我们每次传输2字节就可以了,先传高字节;当然在传输前后,加上片选的拉低、拉高:

设置AD9833控制寄存器的函数,这里只实现了常用的几个位:RESET、SLEEP、OPBITEN、MODE这几个bit的设置:

如果想实现其他bit位的改写,也很容易。

最后是设置频率的函数:

注意这个函数设置完频率之后, AD9833_Write(0x2100);这句把输出关闭了。

在主函数中写一个测试程序:

主要功能是在初始化之后,主循环之前,设置1MHz正弦波,延时10s输出:

将代码下载到单片机运行,可以简称到上电10后,AD9833的10脚out上输出1MHz正弦波。

使用模块来搭电路时,要注意避坑,我选用的模块是下面这种:

原理图如下:

在AD9833的输出增加了一个数字电位器MCP41010和运放AD8051进行输出波形幅度的调节。

但是,这个模块的设计是有问题的,主要在于MCP41010数字电位器的带宽不够!会造成输出频率较高时,波形幅度大幅减小,完全起不到调节波形幅度的作用。

如下图是MCP41010的增益随频率的变化曲线,可以看到,频率到1MHz以上时,衰减会变得很明显,频率越高衰减越大:

所以在频率比较高的时候,这种模块是不适用的。

好了,本节关于DDS波形发生器AD9833的使用就讲到这里了。

如果觉得有用,可以关注我的微 信 公众号“小白白学电子”,可以找到所有源码和参考资料:

相关内容

热门资讯

安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...
美咖云系统安卓版,开启智能生活... 你有没有发现,最近手机上多了一个叫“美咖云系统安卓版”的小家伙?它就像一个魔法师,轻轻一点,就能让你...
安卓系统推荐最好的手机,盘点性... 你有没有想过,拥有一部性能卓越的手机,就像是拥有了移动的宝藏库?在这个信息爆炸的时代,一部好手机不仅...
安卓11系统能精简吗,释放潜能 你有没有发现,随着手机越来越智能,系统也越来越庞大?安卓11系统,这个最新的操作系统,是不是也让你觉...
安卓自动重启系统软件,揭秘原因... 手机突然自动重启,是不是感觉整个人都不好了?别急,今天就来和你聊聊这个让人头疼的安卓自动重启系统软件...
苹果手机x刷安卓系统,探索安卓... 你有没有想过,你的苹果手机X竟然也能刷上安卓系统?是的,你没听错,就是那个一直以来都和我们苹果手机X...
安卓系统智商低吗,智商低下的真... 你有没有想过,为什么安卓系统的智商总被调侃得好像有点低呢?是不是觉得它总是慢吞吞的,有时候还犯点小错...
安卓系统手机联系人,揭秘你的社... 你有没有发现,手机里的联系人列表就像是一个小小的社交圈呢?里面藏着我们的亲朋好友、工作伙伴,甚至还有...
安卓系统免费铃声下载,打造个性... 手机里那首老掉牙的铃声是不是让你觉得有点out了呢?别急,今天就来给你支个招,让你轻松给安卓手机换上...
安卓系统用哪个桌面好,打造个性... 你有没有发现,手机桌面可是我们每天都要面对的“脸面”呢?换一个好看的桌面,心情都能跟着好起来。那么,...
虚拟大师是安卓10系统,功能与... 你知道吗?最近在手机圈里,有个新玩意儿引起了不小的轰动,那就是虚拟大师!而且,更让人惊喜的是,这个虚...
安卓系统与苹果优缺点,系统优缺... 说到手机操作系统,安卓和苹果绝对是两大巨头,它们各有各的特色,就像两道不同的美味佳肴,让人难以抉择。...
安卓win双系统主板,融合与创... 你有没有想过,一台电脑如果既能流畅运行安卓系统,又能轻松驾驭Windows系统,那该有多爽啊?没错,...
安卓系统可精简软件,轻松提升手... 你有没有发现,手机里的安卓系统越来越庞大,软件也越装越多,有时候感觉手机就像个“大肚子”,不仅运行速...
安卓系统基于linux的代码,... 你有没有想过,那个陪伴你每天刷抖音、玩游戏、办公的安卓系统,其实背后有着一套复杂的基于Linux的代...
苹果和安卓的拍照系统,谁更胜一... 你有没有发现,现在手机拍照已经成为我们生活中不可或缺的一部分呢?无论是记录生活的点滴,还是捕捉美丽的...
苹果和安卓系统不同吗,系统差异... 你有没有想过,为什么你的手机里装的是苹果的iOS系统,而朋友的手机却是安卓系统呢?这两种系统,看似都...
安卓系统有多少级,揭秘其多级架... 你有没有想过,那个陪伴我们日常生活的安卓系统,它其实有着丰富的层级结构呢?没错,就是那个让我们的手机...
华为鸿蒙系统与安卓的,技术融合... 你知道吗?最近科技圈可是炸开了锅,华为鸿蒙系统与安卓的较量成为了大家热议的话题。这不,今天我就来给你...
什么安卓手机是苹果系统,搭载苹... 你有没有想过,为什么有些人宁愿花大价钱买苹果手机,而有些人却对安卓手机情有独钟呢?其实,这个问题背后...