文章目录[隐藏]
一、STM32的DAC通道介绍
1、DAC 简介
- DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
- STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
2、STM32中的DAC主要特点
- 拥有2个DAC转换器
- DAC通道为8位或12位单调输出
- DAC通道为12位模式下数据的左对齐或者右对齐
- DAC通道具有同步更新功能
- DAC通道可以生成噪声波形
- DAC通道可以生成三角波形
- 双DAC通道同时或者分别转换
- 每个DAC通道都有DMA功能
3、DAC 功能框图剖析
- ①中表示的是DAC模块模拟部分的供电和DAC模块的参考电压 ,STM32 的 DAC 规定了它的参考电压输入范围为 2.4—3.3V。一般,取值为3.3V。
- ②中DAC_OUTx表示DAC输出通道,对应引脚是PA4或者PA5。
4、DAC配置
(1)开启相应引脚时钟,设置 PA4 为模拟输入。(DAC1对应PA4,DAC2对应PA5)
STM32F103ZET6 的 DAC 通道 1 在 PA4 上,所以,我们要使能 PORTA 的时钟并设置 PA4 为模拟输入。
DAC 本身是输出,但是为什么端口要设置为模拟输入模式呢?
因为一但使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰。即使是直接用芯片也可以无脑设置为模拟输入,实验可得虽然引脚为模拟输入,但仍可输出相应信号。
(2)使能相应 DAC 时钟,本次实验通道对应为DAC1;
(3)初始化 DAC,设置 DAC 的工作模式;
(4)使能 DAC 转换通道;
二、实验要求
- 1)实验数据准备:用Adobe audition或goldwave等音频编辑软件录制“您好欢迎光临!”的几秒钟的声音(8khz采样、8bit量化编码的单声道wav格式),确保音频数据尽量小(最大不超64KB)。然后编程将其分批次写入stm32f103c8t6芯片内部flash区域。
- 2)数字音频还原播放任务:编程读取此段音频,分别通过 (a)stm32f103c8t6自带的DAC通道,转换为模拟音频进行播放,并用示波器观察波形,用耳机/喇叭收听,评判音乐还原效果;
- 提示:建议先用单音音频(比如2000Hz的正弦波)的wav数据进行实验,通过DAC或PCM音频模块能够基本还原出原始正弦波声音后,再用语音和音乐信号进行实验。
三、数据准备
1、生成mav文件
-
Audition生成输出一个周期2khz的正弦波的mav文件
-
①选择文件->新建->音频文件
-
②设置相关采用频率
-
③效果->选择生成基本音色
-
④设置相关频率
-
⑤导出为mav文件,选择文件->导出->文件
-
Audition生成一段数字音频歌曲数据的mav文件
-
打开一段歌曲音频文件
-
将音频剪切成5-10s
-
右击->存储选区
-
点击更改:选择采样类型为8000Hz,单声道,16位,再点击确认
-
导出wav文件
2、使用UltraEdit得到相关数据
-
①用该软件打开刚才保存的wav文件
-
②CTRL+A全选,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
-
③在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容
3、使用notepad++添加相关内容
- ①打开该软件后,将上面选中的内容复制粘贴到该软件中(在上面软件中,右键选择复制)
- ②在需要添加内容的位置:Alt+c,为十六进制数加0X前缀(一列一列的添加)
四、使用DAC输出周期2khz的正弦波
-
观察正弦波的波形我们直接使用野火提高的例程
-
这里使用MATLAB打开例程中的采样程序
-
然后把输出的采样点复制到波形数据中
-
编译烧录下载
-
使用示波器测量PA4、PA5的引脚便可看到正弦波形
(这里由于没有示波器就无法展示波形图)
五、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出
-
将上面使用notepad++添加0x前缀之后的数据复制到keil工程中bsp_dac.c文件的波形数据的数组中
-
编译烧录,使用示波器观察波形
(这里由于没有示波器就无法展示波形图)
六、总结
本次对STM32DAC的通道的使用过程中,学习到了DAC是集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭。整个学习过程很有意思,挺好玩的。
参考
详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
STM32F103的DAC——输出声音效果
版权声明:本文为CSDN博主「阿布布啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45970808/article/details/122177628
暂无评论