用STM32F103的DAC功能完成波形输出

一、DAC是什么

数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。

STM32具有片上DAC外设,它的分辯率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。

二、DAC主要特征

2个DAC转换器:每个转换器对应1个输出通道
8位或者12位单调输出
12位模式下数据左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
双DAC通道同时或者分别转换
每个通道都有DMA功能
外部触发转换
输入参考电压VREF+
DAC通道框图
在这里插入图片描述
在这里插入图片描述

实验一2Khz正弦波输出

输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;

1、在野火的官方资料中有生成112Khz的正弦波的实验源码,我们只需要在此基础上改变输出信号的周期就可以了。
打开官方的代码后,我们可以在bsp_dac.c这个文件中找到下面的代码
在这里插入图片描述
根据DAC中信号频率的计算公式如下图,我们可以得到这是的频率为112500Hz
在这里插入图片描述
我们需要的是2KHZ的,所以根据上面的公式我们可以得到采样点数为3600.但是由于计算机不能直接识别波形,只能识别一个一个的点,所以我们需要先对正弦波进行采样,而我们现在已经得到了采样的点数。
在野火官方的文件中有一个matlab脚本,里面就是直接对正弦波进行采样的代码。我们直接在此基础之上,修改采样点数就可以直接将结果复制到我们的源码中了。
在这里插入图片描述
直接打开,修改采样点数。
在这里插入图片描述
运行之后会自动生成一个已经采样后的正弦波的图形。
在这里插入图片描述
由于采样点数过多,看起来就像是没有采样。但是当我们放大之后,还是能够看到采样的。
在这里插入图片描述
同时还会自动生成这3600个点,在dac_sinWave.c文件中。
在这里插入图片描述
之后就是打开这个文件,将里面的内容复制到实验源码里面。
在这里插入图片描述
复制之后记得将周期的点数修改为3600。编译之后将生成的hex文件烧录到开发板中,开发板DAC输出通道为PA4和PA5,选其一即可,将其连接到示波器上,就可以观察到波形了。
2、还有一种方法是借助软件Adobe Audition CS6直接生成正弦波。
打开软件Adobe Audition CS6之后,新建一个音频文件。
然后在效果里面选择生成基本音色。选择选择正弦波。
在这里插入图片描述
之后就会生成一个正弦波。
在这里插入图片描述
将这个文件保存为wav格式。然后用UltraEdit打开这个文件。
CTRL+A 鼠标右键 选择 十六进制复制选定视图,新建文件,粘贴。
在这里插入图片描述

找到最下面那个字节,鼠标右键 选择范围 输入起始的行号和列号,然后确定就选中了整个我们需要的内容,再次复制粘贴建立新文件。保存这个文件。
在这里插入图片描述
用Notepad++打开这个文件。用notepad++打开上面保存文件,编辑–列块编辑–插入文本 ,插入0X,生成如下文件。
在这里插入图片描述
然后将生成的字节,复制到bsp_dac.c文件中和第一种方法一样的代码里面,记得修改周期数。
之后就是编译将生成的文件烧录到开发板中,就可以了。
在这里插入图片描述

实验二、音频输出

将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。

这个步骤和上面的第二种方法的差不多,不过首先是需要我们自己下载一段音频。然后用Adobe Audition CS6打开这个音频,选择一段(不要太长,几秒钟就可以)
选中一段之后,将这一段保存出来。
在这里插入图片描述
按下图设置存储
在这里插入图片描述
用UltraEdit打开这个文件。之后的步骤就和前面的方法二一样,最后生成一个十六进制的文件。
然后再用Notepad++打开这个文件,选中我们需要的部分,添加十六进制的标志0X,保存我们需要的部分。然后将这一段复制到代码下面的函数里面。
在这里插入图片描述
运行编译生成.HEX文件就可以了。
然后将我呢见烧录到开发版中就行了,板子PA4或PA5端连接示波器,打开示波器便可观察到我们截取音乐片段的模拟音频波形。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值