本应用笔记举例介绍了使用数模转换器 (DAC) 外设生成音频输出信号的过程,该 DAC 外设内嵌在 微控制器系列产品中。 数模转换器 (DAC) 是一种与模数转换器功能相反的器件,可以将数字形式的数据转换为相应的模拟电压信号。 通用MCU DAC 模块是 12 位字转换器,带有两个支持立体声音频的输出通道。 DAC 可用于多种音频应用中,例如:安全警报、蓝牙耳机、发声玩具、答录机、人机接口以及低成本的音乐播放器 通用MCU DAC 还可实现许多其他模拟用途,如模拟波形产生和控制工程。本应用笔记主要包括两部分内容: 通用MCU DAC 模块的主要特性。 两个示例。 示例一,DAC 用于生成正弦波形。示例二,DAC 用于通过 .WAV 文件生成音频。
DAC 主要特性
- 数据格式
DAC 可以使用以下三种整型格式的数据:8 位右对齐、12 位右对齐以及 12 位左对齐。12 位值的范围在 0x000 到 0xFFF 之间,其中 0x000 为最小值,而 0xFFF 为最大值。
图 1. DAC 数 据 格 式 - 双通道模式
DAC 有两个输出通道,每个通道各有一个转换器。在双 DAC 通道模式下,转换可以单独进行,也可以同时进行。 当 DAC 通道由同一个触发源触发后,两个通道将组合在一起同步执行更新操作,转换也会同时进行。
- 专用定时器
除了通过软件和外部触发器触发 DAC 转换之外,还可以通过不同的定时器触发 DAC 转换。 TIM6 和 TIM7 是两个基本定时器,主要用于 DAC 触发。 每当 DAC 接口在所选的定时器触发输出 (TIMx_TRGO) 上检测到上升沿时,DAC_DHRx 寄
存器中存储的最后一个数据即会转移到 DAC_DORx 寄存器中。图 2. 通用MCUF100x DAC 触发器通道
DMA 功能 通用MCU 微控制器配有一个多通道 DMA 模块。每个 DAC 通道都连接到独立的 DMA 通道。对于 通用MCUF100x 微控制器,DAC 通道 1 连接到 DMA 通道 3,DAC 通道 2 连接到 DMA 通道 4。 未使用 DMA 时,CPU 用于向 DAC 提供模式波形。通常,波形保存在存储器 (RAM) 中, CPU 负责将数据从 RAM 传输到 DAC。
图 3. 不存在 DMA 时的 DAC 交互过程
DAC
ai18302
使用 DMA 时,系统的整体性能会因内核的释放而提升。此时,数据直接通过 DMA 从存储器传输到 DAC,无需 CPU 执行任何操作。这样节省的 CPU 资源可供其它操作使用。
RAM
图 4. 存在 DMA 时的 DAC 交互过程
DMA 下溢错误 DMA 向 DAC 提供模式波形时,有时会出现 DMA 传输速度比 DAC 转换速度快的情况。此时,DAC 会检测到部分模式波形遭到忽略而不予转换。它随后会将“DMA 下溢错误”标志置 1。 可以使用触发定时器通过共享 IRQ 通道处理下溢错误,在 DAC 不通过 TIM6 触发时也可通过专用中断来处理。
- 白噪声发生器
- 定义
通用MCU 微控制器 DAC 为用户提供了一个伪随机码发生器。根据移位寄存器上使用的节拍数,在序列重复前,可生成具有最多 2n-1 个数的序列。
图 5. DAC 中内置的伪随机码发生器
ai18304
由噪声发生器生成的噪声具有均匀的频谱分布,可将这些噪声视为白噪声。不过,白噪声分布均匀,不具备高斯输出特性。
图 6. 噪 声 波 形 噪声波形的偏移量可以编程。使用预配置的偏移量表更改此偏移量(信号模式),用户可获得与信号模式和噪声波形之和相对应的波形。
图 7. 带可更改偏移量的噪声波形
أ
ai18306
- 典型应用
通用MCU 微控制器具有采样率高达 1 M/ 秒的 12 位增强型 ADC。在大多数应用中,这种分辨率已经足够,但在一些需要更高精度的情况下,可以利用过采样和抽选输入信号的概念,以减少外部 ADC 解决方案的使用并降低应用功耗。 白噪声发生器还可用于产生电子音乐,通常直接产生或作为滤波器的输入来形成其它类型的噪声信号。白噪声发生器广泛用于音频合成,通常用于再现钹等打击乐器的效果,这些乐器在其频域内具有较高的噪声量。 白噪声发生器可用于控制工程,以及放大器和电子滤波器的频率响应测试。白噪声是一种通用的合成噪声源,用于通过耳鸣掩蔽器进行声掩蔽。
- 三角波发生器
- 定义
通用MCU DAC 为用户提供了具有灵活的偏移量、振幅和频率的三角波形发生器。理论上说,三角波形是一种由无限组奇次谐波组成的波形。
MAMPx[3:0] 位 |
数字振幅 | 模拟振幅 (V) (Vref+ = 3.3V) | 0 | 1 | 0.0016 | 1 | 3 | 0.0032 | 2 | 7 | 0.0064 | 3 | 15 | 0.0128 | 4 | 31 | 0.0257 | 5 | 63 | 0.0515 | 6 | 127 | 0.1031 | 7 | 255 | 0.2062 | 8 | 511 | 0.4125 | 9 | 1023 | 0.8250 | 10 | 2045 | 1.6483 | >= 11 | 4095 | 3.3000 |
可以使用 DAC_CR 寄存器中的 MAMPx 位修正三角波形的振幅。表 1. 预编程三角波形振幅值
有关三角波形的详细信息,请参见 通用MCU 参考手册。三角波形频率与触发源的频率相关。
图 8. 三 角 波 形
三角波形的偏移量可以编程。使用预配置的偏移量表更改三角波形地偏移量(信号模式),用户可获得与信号模式和三角波形之和对应的波形。
图 9. 带可更改偏移量的三角波形
结果波形
模式波形(偏移量)
- 典型应用
由于三角波发生器的高次谐波下降速度更快,因此其音色比方波柔和,故而三角波发生器经常用于声音合成。 三角波发生器电路还可用于多种调制解调器电路应用。
- 缓冲的输出
为了在不使用外部运算放大器的情况下驱动外部负载,DAC 通道内嵌一个输出缓冲器,可以根据用户应用情况进行使能和禁止。 如果未对 DAC 输出进行缓冲,当用户应用电路中存在负载时,实际电压输出会低于预期电压输出。启用缓冲器后,实际电压输出会与预期电压输出非常接近。
图 10. 非缓冲的通道电压(存在负载/ 不存在负载) DACDAC_Channel_1 DOR = 0xFFF 3.3 V 1.2 V
R = 5.1K
DACDAC_Channel_1 DOR = 0xFFF 3.3V GND 3.3 V
ai18309
图 11. 缓冲的通道电压(存在负载/ 不存在负载)
DACDAC_Channel_1 DOR = 0xFFF 3.3 V 3.3 V
R = 5.1K
DACDAC_Channel_1 DOR = 0xFFF 3.3V GND 3.3 V
ai18310
- 应用示例
- 使用 DAC 生成正弦波形
- 说明
本示例分步说明如何生成正弦波形。 正弦波形也称作单频正弦波音,它是一种纯音或绝对音。在确定听觉系统的各种响应时,正弦音一般用作刺激源。
- 准备数字模式的正弦波形
要准备数字模式的波形,需要进行一些数**算。这里的目标是产生正弦波的 10 个数字模式数据(采样),变化范围为 0 到 2*PI。
采样间隔为 (2*PI)/ ns (采样数)。 sin(x) 的结果值在 -1 到 1 之间,经过必要的重新校准后,可以生成 0 和 0xFFF 之间(对应电压范围为 0 V 到 3.3 V)的正向正弦波。
y x = □ sin □□x 2----- □ + 1□□ □ ---0----x---F----F----F-----+ 1-□ SineDigital □ □□ ns□ □□ □ 2 □ 经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。各 DAC 通道引脚的模拟输出电压通过以下公式确定: DACOutput = V -----------------------D---O-----R------------------------- REFDAC_MaxDigitalValue 注: 对于右对齐的 12 位分辨率:DAC_MaxDigitalValue = 0xFFF 对于右对齐 8 位分辨率:DAC_MaxDigitalValue = 0xFF
因此,可通过以下公式得到模拟正弦波形 ySineAnalog ySineDigitalx ySineAnalogx = 3.3Volt------------------------------------- 0xFFF
表 2. 正弦波的数字和模拟采样值 采样 (x) | 数字采样值 ySineDigital (x) | 模拟采样值(电压) ySineAnalog(x) | 0 | 2048 | 1.650 | 1 | 3251 | 2.620 | 2 | 3995 | 3.219 | 3 | 3996 | 3.220 | 4 | 3253 | 2.622 | 5 | 2051 | 1.653 | 6 | 847 | 0.682 | 7 | 101 | 0.081 | 8 | 98 | 0.079 | 9 | 839 | 0.676 |
此表保存在存储器中,并由 DMA 传输,传输过程由触发 DAC 的相同定时器触发
- 修正正弦波频率
要修正正弦波信号的频率,需要设置定时器触发输出的频率。所产生正弦波的频率为
TfimerTRGO fSinewave = ----------------------------- ns
因此,如果 TIMx_TRGO 为 1 MHz,则 DAC 正弦波的频率为 10 kHz。注: 要获得高质量的正弦波曲线,建议使用较高的采样数 ns。
图 13. ns = 10 时生成的正弦波
图 14. ns = 255 时生成的正弦波
- 使用 DAC 实现音频波形播放器
- 说明
此应用演示的目的是为 通用MCU 微控制器提供一种音频播放器解决方案,用于播放 .WAV 文件。该过程经过优化,需要的外部组件数量最少,最终用户可以灵活选择自己的 .WAV 文件。
.WAV
SPI DAC
通用MCU 中的音频文件通过 MicroSD 存储卡提供。 图 15. 从 MicroSD Flash 到外部扬声器的数据流
- 音频波形文件规范
本应用假设要播放的 .WAV 文件具有如下格式: 音频格式:PCM(一种未经压缩的波形数据格式,其中的每个值表示采样时信号的振幅)。 采样率:8000、11025、22050 或 44100 Hz 每次采样的位数:8 位(音频采样数据值的范围为 [0-255])。 通道数:1(单声道)
.WAV 文件格式 .WAV 文件格式是存储多媒体文件使用的资源交换文件格式 (RIFF) 规范中的一种。RIFF 文件以一个文件头开始,然后是一系列的数据块。.WAV 文件通常就是一个 RIFF 文件,内含一个“WAVE”数据块,该数据块由以下两个子数据块组成: 指定数据格式的 fmt 子数据块 包含实际采样数据的 data 子数据块
WAVE 文件格式的开始是 RIFF 头:它指示文件长度。 然后,fmt 块描述采样格式,其中包含如下信息:波形音频的格式:(PCM/...),通道数(单声道/立体声),采样率(每秒的采样数:例如,22050)以及采样数据大小(例如,8 位 /16 位)。最后,数据块包含采样数据。
- 实现音频波形播放器
音频波形播放器的应用以 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 存储器中读取。
|