文章目录
STM32的PWM和DAC练习
一、PWM控制呼吸灯实验
(一)、PWM简介
关于PWM
PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制。 PWM是一种对模拟信号电平进行数字编码 的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个 具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的 任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压 或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去 的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被 断开的时候。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
PWM生成
- 计算法
根据拟合波形的频率、幅值和半周期脉冲数,准确计算 PWM 波各脉冲宽度和间隔,据此控制开关器件的通断,就可得到所需 PWM 波形;
- 调制法
拟合波形作调制信号,进行调制得到期望的 PWM 波;该方法一般采用等腰三角波为载波,其任一点水平宽度和高度成线性关系且左右对称。载波(等腰三角波)与平缓变化的调制信号波(即要拟合的波形)相交,在载波与信号波的交点控制器件通断,就得宽度正比于信号波幅值的脉冲,符合 PWM 的要求。相对于计算法,其处理过程计算简单。
(二)、PWM仿真输出
实验环境
1.野火STM32指南者(STM32F103VET6)
2.keil5
环境搭建
在野火官方资料中找到“TIM—通用定时器\TIM—通用定时器-4路PWM输出”,打开工程
对工程进行编译,由于没有相关器材,所以我们选择仿真。
点击options for target(魔法棒),在debug中选择use simulator
点击start
点击setup
点击new(insert),输入GPIOA_IDR ,在display type中选择bit
仿真结果
二、基于STM32的DAC实现音频波形输出
(一)、DAC简介
关于DAC
DAC 为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
STM32 具有片上 DAC 外设,它的分辨率可配置为 8 位或 12 位的数字输入信号,具有两个 DAC 输出通道,这两个通道互不影响,每个通道都可以使用 DMA 功能,都具有出错检测能力,可外部触发。
DAC功能
整个DAC模块围绕框图下方的“数字至模拟转换器ⅹ”展开,它的左边分别是参考电源的引脚:VDDA、VSSA及Vrer+,其中SIM32的DAC规定了它的参考电压Vnef+输入范围为2.4——3.3V。“数字至模拟转换器κ”的输入为DAC的数据寄存器“DORx”的数字编码,经过它转换得的模拟信号由图中右侧的“ DAC OUTX”输出。而数据寄存器“DORx”又受“控制逻辑”支配,它可以控制数据寄存器加入一些伪噪声信号或配置产生三角波信号。
图中的左上角为DAC的触发源,DAC根据触发源的信号来进行DAC转换,其作用就相当于DAC转换器的开关,它可以配置的触发源为外部中断源触发、定时器触发或软件控制触发。如本章实验中需要控制正弦波的频率,就需要定时器定时触发DAC进行数据转换。
(二)、DAC输出
采集音频
利用AU生成一个音频文件
点击效果–>生成基本音色,设置参数
生成正弦波
选择区段,1800个采集点,2000hz,需要0.9秒
右键点击选中部分,选择存储选区,保存音频
将生成的音频转化为16进制
仿真输出
打开野火官方代码中的“DAC-输出正弦波”
打开工程,将bsp_dac.c中的16进制修改为自己音频生成的16进制代码
点击编译,最后烧录验证
实验成功!