文章目录
一、DAC简介
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计 算机处理完成后,再由 DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器 件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32具有片上 DAC外设,它的分辨率可配置为 8位或 12位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
其功能框图如下:
![](https://pic.downk.cc/item/5ff531fe3ffa7d37b36a0b5a.png)
二、输出周期为2kHz的正弦波
① 通过如下公式计算出,周期频率位为2kHz大约需要采集1800个点
![](https://img.imgdb.cn/item/5ff87f303ffa7d37b35a2ee9.png)
② 通过matlab制作正弦波表
n = 2*pi/1800 : 2*pi/1800 : 2*pi %分成1800等份
a = sin(n)+1; %求取sin函数值并向上平移一个单位,消除负数值
a = a * 3.3/2; %调整幅值,使范围限制为0~3.3
r = a* (2.^12) /3.3 %求取dac数值,12位dac LSB = 3.3/2.^12
r = uint16(r); %把double型数据转化成16位整型数据
for i = 1:1800
if r(i) > 4095 %限制数据最大不超过4095
r(i) = 4095
end
end
dlmwrite('dac_sinWave.c',r); %把数据写入到文件,方便添加到stm32工程中
plot(n,r,'.') %把这些点画出来
![](https://img.imgdb.cn/item/5ff881623ffa7d37b35b2be8.png)
③ 将模拟好的数据替换工程中的波形数据
本实验所用工程来自于野火的DAC—输出正弦波实验
![](https://img.imgdb.cn/item/5ff883553ffa7d37b35cc98c.png)
④ 烧录程序后,示波器显示效果如下
![](https://img.imgdb.cn/item/5ff883d93ffa7d37b35d104a.png)
![](https://img.imgdb.cn/item/5ff884263ffa7d37b35d5ad0.png)
三、音频信号输出
① 通过 Adobe Audition 截取生成一段音频文件
![](https://img.imgdb.cn/item/5ff885523ffa7d37b35e8166.png)
② 设置参数,然后导出
![](https://img.imgdb.cn/item/5ff885ba3ffa7d37b35eccde.png)
③ 通过WavToC工具,将wav音频文件转为c语言代码程序
![](https://img.imgdb.cn/item/5ff886743ffa7d37b35f5a6f.png)
④ 同样将生成的数据替换工程中的波形数据
![](https://img.imgdb.cn/item/5ff886d13ffa7d37b35f8d20.png)
⑤ 烧录程序,通过示波器显示如下
![](https://img.imgdb.cn/item/5ff887703ffa7d37b35fe023.png)
四、参考资料
- 《零死角玩转STM32—F103指南者》
- STM32F103使用TIM DMA DAC实现播放WAV音乐