STM32
直播中

王秀珍

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

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

STM32F103的DAC模块功能有哪些?
如何使用STM32F103的DAC输出周期为2khz的正弦波呢?

回帖(1)

华一颖

2021-11-15 09:40:38
  一、DAC的介绍
  1.DAC(数字/模拟转换模块)
  把输入的数字编码,转换成对应的模拟电压输出。
  2.ADC(模拟/数字转换模块)
  把输入的模拟信号,转换成对应的数字信号。
  主要对DAC进行介绍
  3.DAC的特点
  2个DAC转换器
  8位或12位单调输出
  12位模式下数据的左对齐或者右对齐
  同步更新功能
  噪声波形生成
  三角波形生成
  双DAC通道同时或者分别转换
  每个通道都有DMA功能
  4.DAC模块功能框图
  
  ①中表示的是DAC模块模拟部分的供电和DAC模块的参考电压 ,STM32 的 DAC 规定了它的参考电压 输入范围为 2.4——3.3V。一般,取值为3.3V。②中DAC_OUTx表示DAC输出通道,对应引脚是PA4或者PA5。
  5.数据的写入
  在使用 DAC 时,不能直接对上述 DORx 寄存器写入数据,任何输出到 DAC 通道 x 的数据都必须写入到 DHRx 寄存器中(其中包含 DHR8RxDHR12Lx 等,根据数据对齐方向和分辨率的情况写入到对应的寄存器中)。数据被写入到 DHRx 寄存器后,DAC 会根据触发配置进行处理,若使用硬件触发,则
  DHRx 中的数据会在 3 个 APB1 时钟周期后传输至 DORx,DORx 随之输出相应的模拟电压到输出通道;若 DAC 设置为外部事件触发,可以使用定时器(TIMx_TRGO)、EXTI_9信号或软件触发(SWTRIGx)这几种方式控制数据 DAC 转换的时机。
  二、DAC相关寄存器
  1.DAC控制寄存器(DAC_CR)
  
  2.DAC软件触发寄存器(DAC_SWTRIGR)
  
  3.DAC通道 1 的 12 位右对齐数据保持寄存器(DAC_DHR12R1)
  
  4. DAC通道 1 的 12 位左对齐数据保持寄存器(DAC_DHR12L1)
  
  5.DAC通道 1 的 8 位右对齐数据保持寄存器(DAC_DHR8R1)
  
  6.DAC通道 1 数据输出寄存器(DAC_DOR1)
  
  更多详细内容,请参考STM32中文手册进行了解
  三、使用DAC输出周期2khz的正弦波
  1.使用Audition输出一个周期2khz的正弦波
  ①选择文件-》新建-》音频文件
  
  ②设置相关采用频率
  
  ③选择生成-》音调
  
  ④设置相关频率
  
  ⑤导出为wav文件,选择文件-》导出-》文件
  
  2.使用UltraEdit得到相关数据
  ①用该软件打开刚才保存的wav文件
  ②CTRL+A,接着鼠标右键,选择 十六进制复制选定视图,将内容粘贴到一个新建文件中
  
  ③在新建文件中,CTRL+A,接着鼠标右键,选择范围输入起始的行号和列号,确定就选中了整个我们需要的内容
  
  3.使用notepad++添加相关内容
  下载地址:
  https://notepad-plus.en.softonic.com/
  ①打开该软件后,将上面选中的内容复制粘贴到该软件中(在上面软件中,右键选择复制)
  
  ②在需要添加内容的位置,alt+c
  
  4.添加数据
  ①打开野火提供的样例程序——DAC输出正弦波
  ②将对应上面内容复制到存放正弦波数据的位置
  ③编译烧录
  ④使用示波器观察得到的波形
  采用Audition生成的正弦波的数据,并没有的到想要的波形,最后使用野火官方给出的python脚本实现采点输出。
  波形如下
  
  四、使用DAC输出数字音频歌曲数据转换为模拟音频波形输出
  1.使用Audition截取一段喜欢的音乐
  ①选择文件-》打开,找到对应的音乐
  ②选中一段,然后右键,选择存储选区,接着更改采用类型
  
  2.使用UltraEdit得到相关数据
  方法跟上面一样
  3.使用notepad++添加相关内容
  方法跟上面一样
  4.添加数据
  ①打开野火提供的样例程序——DAC输出正弦波
  ②将对应上面内容复制到存放正弦波数据的位置
  ③编译烧录
  ④使用示波器观察得到的波形
  
  五、小结
  通过Au的方式生成正弦波,得到的数据是16位的,转成12位后,仍旧不能够输出很规整的正弦波。弄了好久都没有实现正弦波的输出,最终,采用采点的方式实现。
举报

更多回帖

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