STM32
直播中

张玲

7年用户 1282经验值
私信 关注
[问答]

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

DAC是什么?

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

回帖(1)

李燕梅

2021-11-15 14:07:03
  一、DAC简介
  DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
  STM32 具有片上DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用DMA 功能,都具有出错 检测能力,可外部触发。
  二、输出一个周期2khz的正弦波
  博主直接使用的是野火指南者DAC输出正弦波的例程
  
  DAC初始化结构体详解
  typedef struct
  {
  uint32_t DAC_Trigger; //DAC触发方式
  uint32_t DAC_WaveGeneration; //是否自动输出噪声或三角波
  uint32_t DAC_LFSRUnmask_TriangleAmplitude; //选择噪声生成器的低通滤波器或三角波的幅值
  uint32_t DAC_OutputBuffer; //选择是否使能输出缓冲器
  }DAC_InitTypeDef;
  (1)DAC_Trigger
  本成员用于配置 DAC 的触发模式,当 DAC 产生相应的触发事件时,才会把 DHRx 寄 存器的值转移到 DORx 寄存器中进行转换。
  (2) DAC_WaveGeneration
  本 成员用于 设 置 是 否 使 用 DAC 输 出 伪 噪 声 或 三 角 波,使用伪噪声和三角波输出时,DAC都会把 LFSR 寄存器的值叠加到 DHRx 数值上,产生伪噪声和三角波,若希望产生自定义的输出时,直接配置为 DAC_WaveGeneration_None 即可。
  (3) DAC_LFSRUnmask_TriangleAmplitude
  本成员通过控制 DAC_CR 的 MAMP2 位设置 LFSR 寄存器位的数据,即当使用伪噪声或三角波输出时要叠加到 DHRx 的值,非噪声或三角波输出模式下,本配置无效。
  (4) DAC_OutputBuffer本 结 构 体 成 员 用 于 控 制 是 否 使 能 DAC 的 输 出 缓 冲(DAC_OutputBuffer_Enable/Disable),使能了 DAC 的输出缓冲后可以减小输出阻抗,适合直接驱动一些外部负载。
  更详细的介绍请参考《零死角玩转STM32——F103指南者》
  为了输处2KHz正弦波,我们还需要修改一下例程
  
  
  示波器观察结果
  
  三、将一段数字音频歌曲数据转换为模拟音频波形输出
  总体与正弦波输出程序一致,只需将波形数据换成音频信号数据即可
  (1)使用Audition软件打开音频歌曲,选中2~3秒
  
  (2)右键选中的音频,选择存储选区为,设置采用频率为8KHz,单声道,16位,格式为Wave PCM,选择保存位置,确认。
  
  -(3)使用音频转化软件将保存的wav格式音频转为数据
  
  生成的数据
  
  (4)复制其中一部分数据,将其粘贴到波形数据数组里
  
  (5) 使用示波器观察输出的音频波形(接PA4口)
举报

更多回帖

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