STM32野火开发板的PWM和DAC练习

一.采用定时器方法使STM32F103输出一路PWM波形

1.PWM输出模式介绍

PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。PWM模式分为两种,PWM1和PWM2,总得来说是差不多,就看你怎么用而已,具体的区别见表格32-1。
在这里插入图片描述
1.PWM边沿对齐模式
在递增计数模式下,计数器从0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从0 开始计数并生成计数器上溢事件
在这里插入图片描述
在边沿对齐模式下,计数器CNT只工作在一种模式,递增或者递减模式。这里我们以CNT工作在递增模式为例,在中,ARR=8,CCR=4,CNT从0开始计数,当CNT<CCR的值时,OCxREF为 有 效 的 高 电 平 , 于 此 同 时 , 比 较 中 断 寄 存 器CCxIF置位。当CCR=<CNT<=ARR时,OCxREF为无效的低电平。然后CNT又从0开始计数并生成计数器上溢事件,以此循环往复。
2.PWM中心对齐模式
在这里插入图片描述
在中心对齐模式下,计数器CNT是工作做递增/递减模式下。开始的时候,计数器CNT从0 开始计数到自动重载值减1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到1 并生成计数器下溢事件。之后从0 开始重新计数。图32-14是PWM1模式的中心对齐波形,ARR=8,CCR=4。第一阶段计数器CNT工作在递增模式下,从0开始计数,当CNT<CCR的值时,OCxREF为有效的高电平,当CCR=<CNT<<ARR时,OCxREF为无效的低电平。第二阶段计数器CNT工作在递减模式,
零死角玩转STM32F103—指南者第453页共835从ARR的值开始递减,当CNT>CCR时,OCxREF为无效的低电平,当CCR=>CNT>=1时,OCxREF为有效的高电平。在波形图上我们把波形分为两个阶段,第一个阶段是计数器CNT工作在递增模式的波形,这个阶段我们又分为①和②两个阶段,第二个阶段是计数器CNT工作在递减模式的波形,这个阶段我们又分为③和④两个阶段。要说中心对齐模式下的波形有什么特征的话,那就是①和③阶段的时间相等,②和④阶段的时间相等。中心对齐模式又分为中心对齐模式1/2/3 三种,具体由寄存器CR1位CMS[1:0]配置。具体的区别就是比较中断中断标志位CCxIF在何时置1:中心模式1在CNT递减计数的时候置1,中心对齐模式2在CNT递增计数时置1,中心模式3在CNT递增和递减计数时都置1。

2.具体实验步骤介绍

(1)我们打开野火给出的官方代码,TIM-通用定时器-4路PWM输出中的工程,其路径如下所示:
在这里插入图片描述
(2)我们将其工程编译后,将HEX文件直接烧录到野火开发板当中:
在这里插入图片描述
(3)硬件的连接:
我们需要示波器来展示波形,注意硬件的引脚连接
在这里插入图片描述
在这里插入图片描述
(4)波形展示:
在这里插入图片描述
(5)当我们调整工程中波形的占空比时,其波形变为如下所示:
在这里插入图片描述

二.STM32F103的DAC功能。

1.DAC简介及功能图

DAC为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。STM32具有片上DAC外设,它的分辨率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发
在这里插入图片描述
整个DAC模块围绕框图下方的“数字至模拟转换器x”展开,它的左边分别是参考电源的引脚:𝑉𝐷𝐷𝐴、𝑉𝑆𝑆𝐴及𝑉𝑟𝑒𝑓+,其中STM32的DAC规定了它的参考电压𝑉𝑟𝑒𝑓+输入范围为2.4——3.3V。“数字至模拟转换器x”的输入为DAC的数据寄存器“DORx”的数字编码,经过它转换得的模拟信号由图中右侧的“DAC_OUTx”输出。而数据寄存器“DORx”又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。图中的左上角为DAC的触发源,DAC根据触发源的信号来进行DAC转换,其作用就相当于DAC转换器的开关,它可以配置的触发源为外部中断源触发、定时器触发或软件控制触发。如本章实验中需要控制正弦波的频率,就需要定时器定时触发DAC进行数据转换。

2.正弦波频率的计算方式:

在这里插入图片描述

3.输出一个周期2khz的正弦波(循环),驱动作用至蜂鸣器或喇叭。

我们打开野火官方代码库中的代码:
在这里插入图片描述
根据计算公式就可以知道,将bsp_dac.c中的20改为1126,就可以得到2Khz的正弦波。
在这里插入图片描述
然后我们将程序烧录到野火开发板当中,即可得到相应的波形:
在这里插入图片描述

4.将一段数字音频歌曲数据转换为模拟音频波形输出(循环)

(1)首先将歌曲中的一个片段转换为wav格式:
我们首先用Adobe Audition CS6打开一个mp3文件,将其另存为wav格式,其中采样率修改为8000,以满足实现用音频制作工具制作一段数字化的2khz正弦波wav文件:
在这里插入图片描述
(2)我们打开刚才转换为wav格式的文件,进行歌曲的片段裁剪,并且裁剪长度为10s:
在这里插入图片描述
在这里插入图片描述
选择文件保存位置,设置采样频率为8000,单声道,16位
在这里插入图片描述
(3)把得到的文件用Ultraedit打开来处理处理音频代码
在这里插入图片描述
Ctrl+A全选,选择16进制复制所选视图,新建文件,并且粘贴:
在这里插入图片描述
然后再用Ultraedit打开,右键点击选择范围,选择中间代码部分复制到另一个txt文件中保存,然后再用nodepad++打开这个txt文件,点击列块编辑。
在这里插入图片描述
在这里插入图片描述
变换后如下所示:
在这里插入图片描述
然后我们把得到的代码复制到野火的官方模板 DAC输出 中,并且删掉const uint8_t Sine12bit[]函数括号里的参数。编译成功后,进行烧录到板子上即可。在这里插入图片描述

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值