STM32实现DAC功能输出音频波形

一、DAC简介

  • DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计 算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器 件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

  • STM32具有片上 DAC外设,它的分辨率可配置为 8位或 12位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。

  • 功能框图:
    在这里插入图片描述

  • DAC通道模块:
    在这里插入图片描述

  • 图中 VDDAVSSA为DAC 模块模拟部分的供电,而 Vref+则是 DAC 模块的参考电压。DAC_OUTx 就是 DAC的输出通道(DAC_OUT1对应 PA4 ,DAC_OUT2 PA5引脚)。当 DAC 的参考电压为 Vref+的时候,DAC 的输出电压是线性的从 0~Vref+,12 位模式下 DAC 输出电压与 Vref+以及DORx的计算公式如下: DACx 输出电压=Vref*(DORx/4095)
  • DAC的控制寄存器DAC_CR的低 16 位用于控制通道 1,而高 16 位用于控制通道 2。
  • DAC 输出是受 DORx寄存器直接控制的,但是DORx寄存器不能被直接写入数据,而是通过DHRx间接的传给DORx寄存器,实现对 DAC 输出的控制。前面我们提到,STM32F4的 DAC 支持 8/12 位模式,8 位模式的时候是固定的右对齐的,而 12 位模式又可以设置左对齐/右对齐。
    单 DAC 通道 x,总共有 3 种情况:
    ① 8 位数据右对齐:用户将数据写入 DAC_DHR8Rx[7:0]位(实际存入 DHRx[11:4]位)。
    ② 12 位数据左对齐:用户将数据写入 DAC_DHR12Lx[15:4]位(实际存入 DHRx[11:0]位)。
    ③ 12 位数据右对齐:用户将数据写入 DAC_DHR12Rx[11:0]位(实际存入 DHRx[11:0]位)。
  • STM32F4的 DAC集成了两个输出缓存器,通过DAC_CR的BOFFx位控制,可使能或禁止各通道的输出缓冲器,但做的有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到 0,在不使用输出缓存时可设置该位为 1。

二、输出周期为2kHz的正弦波

1.打开DAC\Project\RVMDK(uv5)\BH-STM32,找到如下函数:
在这里插入图片描述

2.通过如下公式计算出,周期频率位为2kHz大约需要采集1800个点:
在这里插入图片描述

3.找到.m文件,用matlab打开,对代码进行修改:
在这里插入图片描述

4.运行:
在这里插入图片描述
5.将dac_sinWave中的数据复制到uint16_t Sine12bit,周期32改成3600:
在这里插入图片描述
6.编译,成功后烧录到板子上,连接示波器,通过调频得到结果:
在这里插入图片描述

三、音频信号输出

1.通过 Adobe Audition 截取生成一段音频文件,打开AU,在文件里打开下载的歌曲:
在这里插入图片描述
2.设置参数,然后导出:
在这里插入图片描述
3.通过WavToC工具,将wav音频文件转为c语言代码程序:
在这里插入图片描述
4.将生成的数据替换工程中的波形数据:
在这里插入图片描述
5.烧录程序,通过示波器显示:
在这里插入图片描述

四、参考资料

Adobe Audition 2020中文版.

STM32F103使用TIM DMA DAC实现播放WAV音乐.

猜你喜欢

转载自blog.csdn.net/qq_48008050/article/details/112412679