STM32
直播中

微风挽雨

9年用户 921经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术
私信 关注
[问答]

如何用STM32F103的DAC输出一个周期2khz的正弦波呢

什么是DAC数模转换器?

DAC数模转换器是由哪些部分组成的?
如何用STM32F103的DAC输出一个周期2khz的正弦波呢?

回帖(1)

邝计嘉

2021-11-15 11:31:59
  实验要求
  用STM32F103的DAC功能完成以下波形输出,用示波器观察波形,并用蜂鸣器或手机耳机收听输出声音效果、感受歌曲的音质差异。
  输出一个周期2khz的正弦波(循环)。此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
  将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
  一、DAC简介
  数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。
  STM32具有片上DAC外设,它的分辯率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。
  DAC模块图如下:
  
  二、输出一个周期2khz的正弦波
  1、用Audition输出正弦波的单音频波形文件(.wav)
  打开Audition软件,新建音频文件
  
  指定采样频率、量化位数和通道数
  
  MCU资源有限,建议采样频率8khz,8或16量化比特,单通道,1~2秒时长。
  音频wav数据可以用类似汉字字模的保存方式,直接copy到Keil代码中数组中,不必使用SD卡上的wav文件(野火开发板是读取SD卡上的wav文件)。
  生成基本音色(正弦波)
  
  
  另存为wav文件
  
  
  用UltraEdit打开前面生成的wav文件,前面的一段是固定格式
  
  快捷键CTRL+A后,点击鼠标右键选择十六进制复制选定视图
  
  新建文件,粘贴
  
  我们想要的只是中间的那一块内容,找到最下面那个字节,鼠标右键 选择范围 输入起始的行号和列号
  
  确定就选中了整个我们需要的内容
  
  再次复制粘贴,建立新文件并保存
  
  用Notepad++等文本编辑软件在十六进制之前添加0x,点击编辑—》列块编辑,按列块插入0x和, 每列重复操作
  
  这样就准备好了我们要的音频文件
  
  2、 输出波形
  示例程序采用于野火的STM32F103指南者DAC输出正弦波的示例程序
  
  将前面生成的音频文件复制粘贴到 uint16_t Sine12bit 数组中
  
  将程序烧录到板子中,将板子与示波器连接观察输出波形
  
  (使用开发板的DAC输出通道PA4和PA5这两个引脚来观测输出的波形,选其一即可)
  用耳机或者喇叭接到PA4脚就可以听到声音了,可以听到很长的“滴”的声音。
  三、将一段数字音频歌曲数据转换为模拟音频波形输出
  1、用Audition输出wav文件
  用Audition打开一段音乐
  
  剪切时长为5~10秒
  
  鼠标右键选中裁剪区,另存为wav文件
  
  采样类型改为:采样频率8khz,量化16bit,单通道
  
  2、输出波形
  按照上面相同的步骤生成相应的十六进制数组,并复制粘贴到示例代码对应的地方,编译运行
  
  将程序烧录到板子上,用示波器连接PA4引脚,观察输出波形
  
  用耳机或者喇叭接到PA4脚就可以听到音乐了。
  四、总结
  以上即为基于STM32的DAC功能输出WAV音频波形的实验内容。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分