STM32F103的DAC——输出声音效果

一、DAC的介绍

1.DAC(数字/模拟转换模块)
把输入的数字编码,转换成对应的模拟电压输出。
2.ADC(模拟/数字转换模块)
把输入的模拟信号,转换成对应的数字信号。

主要对DAC进行介绍

3.DAC的特点

  • 2个DAC转换器
  • 8位或12位单调输出
  • 12位模式下数据的左对齐或者右对齐
  • 同步更新功能
  • 噪声波形生成
  • 三角波形生成
  • 双DAC通道同时或者分别转换
  • 每个通道都有DMA功能

4.DAC模块功能框图
在这里插入图片描述
①中表示的是DAC模块模拟部分的供电和DAC模块的参考电压 ,STM32 的 DAC 规定了它的参考电压 输入范围为 2.4——3.3V。一般,取值为3.3V。②中DAC_OUTx表示DAC输出通道,对应引脚是PA4或者PA5。
5.数据的写入
在使用 DAC 时,不能直接对上述 DORx 寄存器写入数据,任何输出到 DAC 通道 x 的数据都必须写入到 DHRx 寄存器中(其中包含 DHR8RxDHR12Lx 等,根据数据对齐方向和分辨率的情况写入到对应的寄存器中)。数据被写入到 DHRx 寄存器后,DAC 会根据触发配置进行处理,若使用硬件触发,则
DHRx 中的数据会在 3 个 APB1 时钟周期后传输至 DORx,DORx 随之输出相应的模拟电压到输出通道;若 DAC 设置为外部事件触发,可以使用定时器(TIMx_TRGO)、EXTI_9信号或软件触发(SWTRIGx)这几种方式控制数据 DAC 转换的时机。

二、DAC相关寄存器

1.DAC控制寄存器(DAC_CR)
在这里插入图片描述
2.DAC软件触发寄存器(DAC_SWTRIGR)
在这里插入图片描述
3.DAC通道 1 的 12 位右对齐数据保持寄存器(DAC_DHR12R1)
在这里插入图片描述
4. DAC通道 1 的 12 位左对齐数据保持寄存器(DAC_DHR12L1)
在这里插入图片描述
5.DAC通道 1 的 8 位右对齐数据保持寄存器(DAC_DHR8R1)
在这里插入图片描述
6.DAC通道 1 数据输出寄存器(DAC_DOR1)
在这里插入图片描述

更多详细内容,请参考STM32中文手册进行了解

三、使用DAC输出周期2khz的正弦波

1.使用Audition输出一个周期2khz的正弦波
①选择文件->新建->音频文件
在这里插入图片描述
②设置相关采用频率
在这里插入图片描述
③选择生成->音调
在这里插入图片描述
④设置相关频率
在这里插入图片描述
⑤导出为wav文件,选择文件->导出->文件
在这里插入图片描述
2.使用UltraEdit得到相关数据
①用该软件打开刚才保存的wav文件
②CTRL+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
在这里插入图片描述

③在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容
在这里插入图片描述
3.使用notepad++添加相关内容
下载地址:
https://notepad-plus.en.softonic.com/
①打开该软件后,将上面选中的内容复制粘贴到该软件中(在上面软件中,右键选择复制)
在这里插入图片描述
②在需要添加内容的位置,alt+c
在这里插入图片描述
4.添加数据
①打开野火提供的样例程序——DAC输出正弦波
②将对应上面内容复制到存放正弦波数据的位置
③编译烧录
④使用示波器观察得到的波形
采用Audition生成的正弦波的数据,并没有的到想要的波形,最后使用野火官方给出的python脚本实现采点输出。
波形如下
在这里插入图片描述

四、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出

1.使用Audition截取一段喜欢的音乐
①选择文件->打开,找到对应的音乐
②选中一段,然后右键,选择存储选区,接着更改采用类型
在这里插入图片描述
2.使用UltraEdit得到相关数据
方法跟上面一样
3.使用notepad++添加相关内容
方法跟上面一样
4.添加数据
①打开野火提供的样例程序——DAC输出正弦波
②将对应上面内容复制到存放正弦波数据的位置
③编译烧录
④使用示波器观察得到的波形
在这里插入图片描述

五、小结

通过Au的方式生成正弦波,得到的数据是16位的,转成12位后,仍旧不能够输出很规整的正弦波。弄了好久都没有实现正弦波的输出,最终,采用采点的方式实现。

六、参考资料

1.STM32F103使用TIM DMA DAC实现播放WAV音乐
2.STM32下的PWM和DAC练习
3.STM32笔记–DAC(正弦波发生)
4.第十次作业12.31 STM32的PWM和DAC练习
5.详细介绍Audition输出一个周期2khz的正弦波(循环)。将一段数字音频歌曲数据转换为模拟音频波形输出(循环)

猜你喜欢

转载自blog.csdn.net/qq_43279579/article/details/111990896