使用STM32微控制器系列中的DAC生成音频和波形之应用实例

控制/MCU

1878人已加入

描述

《使用DAC生成正弦波形》

1、说明

本示例分步说明如何生成正弦波形。

正弦波形也称作单频正弦波音,它是一种纯音或绝对音。在确定听觉系统的各种响应时,正弦音一般用作刺激源。

2、准备数字模式的正弦波形

要准备数字模式的波形,需要进行一些数学运算。这里的目标是产生正弦波的 10 个数字模式数据(采样),变化范围为 0 到 2*PI。

dac

采样间隔为 (2*PI)/ ns (采样数)。

sin(x) 的结果值在 -1 到 1 之间,经过必要的重新校准后,可以生成 0 和 0xFFF 之间(对应电压范围为 0 V 到 3.3 V)的正向正弦波。

dac

经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。

各 DAC 通道引脚的模拟输出电压通过以下公式确定:

dac

因此,可通过以下公式得到模拟正弦波形 ySineAnalog

dac

此表保存在存储器中,并由 DMA 传输,传输过程由触发 DAC 的相同定时器触发

3、修正正弦波频率

要修正正弦波信号的频率,需要设置定时器触发输出的频率。

所产生正弦波的频率为

dac

因此,如果 TIMx_TRGO 为 1 MHz,则 DAC 正弦波的频率为 10 kHz。

注:要获得高质量的正弦波曲线,建议使用较高的采样数 ns。

dac

《使用DAC实现音频波形播放器》

1、说明

此应用演示的目的是为 STM32 微控制器提供一种音频播放器解决方案,用于播放 .WAV 文件。

该过程经过优化,需要的外部组件数量最少,最终用户可以灵活选择自己的 .WAV 文件。STM32 中的音频文件通过 MicroSD 存储卡提供。

dac

2、音频波形文件规范

本应用假设要播放的 .WAV 文件具有如下格式:

●音频格式:PCM(一种未经压缩的波形数据格式,其中的每个值表示采样时信号的振幅)。

●采样率:8000、11025、22050 或 44100 Hz

●每次采样的位数:8 位(音频采样数据值的范围为 [0-255])。

●通道数:1(单声道)

3、.WAV 文件格式

.WAV 文件格式是存储多媒体文件使用的资源交换文件格式 (RIFF) 规范中的一种。RIFF 文件以一个文件头开始,然后是一系列的数据块。.WAV 文件通常就是一个 RIFF 文件,内含一个“WAVE”数据块,该数据块由以下两个子数据块组成:

1.指定数据格式的 fmt 子数据块

2.包含实际采样数据的 data 子数据块

WAVE 文件格式的开始是 RIFF 头:它指示文件长度。然后,fmt 块描述采样格式,其中包含如下信息:波形音频的格式:(PCM/...),通道数(单声道/立体声),采样率(每秒的采样数:例如,22050)以及采样数据大小(例如,8 位 /16 位)。

最后,数据块包含采样数据。

3、实现音频波形播放器

音频波形播放器的应用以 SPI、DMA、TIM6 和 DAC 外设为基础。

在启动时,此应用首先使用 SPI 与 DOSFS 文件系统的 MicroSD 卡建立连接,解析卡中的内容,并在 USER 文件夹中查找可用的 .wav 文件。找到有效的 .wav 文件后,会通过 SPI 读回,然后使用 CPU 将该数据传输到位于 RAM 内的缓冲区阵列。DMA 用于将数据从 RAM 传输到 DAC 外设。TIM6 用于触发 DAC,将音频数字数据转换为模拟波形。

在播放音频数据之前,会对 WAV 文件头进行解析,以便确定数据的采样率及其长度。

使用采样数据(.WAV 文件中包含的数据)来更新 DAC 输出中的值,借此完成重现音频的任务。该数据以 8 位的形式进行编码(值的范围为 0 到 255)。

DAC 通道 1 由 TIM6 定期触发,触发间隔由 .WAV 文件头的采样率指定。

.WAV 文件从使用 DosFS 文件系统的 MicroSD 存储器中读取。

在演示代码中,处理波形播放器演示的编码文件为:

waveplayer.c

waveplayer.h

使用 WavePlayerMenu_Start() 函数来调用波形播放器演示,以下为相关流程图。

dac

在本应用中,协同处理是必不可少的,这样可以同时实现从外部存储器读取波形和将波形写入 DAC 寄存器的过程。

dac

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分