学习STM32(6)-- STM32单片机ADC&DAC的应用

1 引 言

深入了解并掌握STM32F103单片机在模拟数字转换(ADC)和数字模拟转换(DAC)应用方面的功能和操作。学习如何配置STM32F103的ADC模块,实现模拟信号到数字信号的精确转换;同时,探索DAC模块的工作原理和使用方法,实现数字信号到模拟信号的转换。这些技能的掌握对于未来在嵌入式系统设计、信号处理等领域的工作是非常重要的。

2 实验目的

1.掌握 STM32F103 的 ADC 的使用

2.了解 STM32F103 的 DAC 的使用

3 实验内容

3.1 ADC 概念

ADC(模拟-数字转换器)是一种将连续的模拟信号转换成离散的数字信号的电子设备。在各种电子系统中,ADC扮演着重要的角色,特别是在需要将模拟世界的物理量(如温度、压力、声音等)转换为数字形式以供微处理器处理的场合。

模拟信号是连续变化的,而数字信号则是由离散的数值组成的。ADC通过几个关键的步骤将模拟信号转换成数字信号:

**采样:**在固定的采样率下获取模拟信号的瞬时值。

**量化:**将采样得到的连续幅值转换成最接近的数字级别。这个过程中通常会产生一些量化误差。

**编码:**将量化后的数值转换成二进制形式。

ADC的性能主要由两个参数来衡量:

**分辨率:**ADC的分辨率决定了它能区分的最小电压变化量,通常用位数来表示。例如,一个8位的ADC能将输入信号分成2^8(即256)个不同的电压级别。

**采样率:**采样率决定了ADC每秒可以采样的次数,高采样率可以更精确地追踪信号的变化。

由于数字信号更易于存储和处理,因此ADC在数字信号处理、通信系统、图像处理和其他许多需要数字化实时信号的领域中非常关键。在设计和选择ADC时,需要根据应用的需求来选择适当的分辨率和采样率。

3.2 ADC 功能框图剖析

图1 功能框图

若输入电压范围设定在:0~3.3v,因为 ADC是 12 位的(4096),满量程对应的就是3.3V;数值0 对应的就是 0V。

如果转换后的数值为 X ,X 对应的模拟电压为 Y,

那么会有这么一个等式成立:2^12 / 3.3 = X / Y

则 Y = (3.3 * X ) / 2^12

3.3 ADC 编程要点

图2 ADC初始化例子

(1)初始 ADC 用到的 GPIO;

图3 ADC的GPIO例子

(2)设置 ADC 的工作参数并初始化;

(3)设置 ADC 工作时钟;

(4)设置 ADC 转换通道顺序及采样时间;

(5)配置使能 ADC 转换完成中断,在中断内读取转换完数据;

(6)使能 ADC;

(7)使能软件触发 ADC 转换。

图4 ADC工作参数配置例子

3.4 DAC 概念

DAC(数字-模拟转换器)是一种将数字信号转换成连续的模拟信号的电子设备。它是许多数字电子系统中不可或缺的组件,尤其是在需要将数字数据转换为模拟信号以驱动其他硬件(如扬声器、电机等)的应用中。

DAC的工作原理与ADC相反,其主要步骤包括:

**接收数字信号:**DAC接收的数字信号通常是二进制形式的数据。

**转换:**将接收到的数字信号转换为相对应的模拟电压或电流。

**输出模拟信号:**输出的模拟信号通常是连续变化的,这个信号可以用来驱动其他模拟系统或设备。

DAC的关键性能参数主要有:

**分辨率:**DAC的分辨率是指它能输出的最小模拟信号变化的能力,通常也用位数来表示。分辨率越高,输出的模拟信号就越精确。

**更新率:**也称为转换率,是DAC每秒可以更新输出信号的次数。更新率越高,DAC输出的信号就越能忠实地再现输入的数字信号。

DAC广泛应用于声音播放(如音频DAC)、视频显示、信号生成和通信系统等领域。在设计这些系统时,DAC的选择和优化对于保证整个系统性能至关重要。DAC确保了数字技术能够有效地与模拟世界相互作用。

3.5 DAC 功能框图

图5 DAC功能框图

"数字至模拟转换器 x"是核心部件,整个 DAC 外设都围绕它而展开。它以左边的 VREF+作为参考电源,以 DAC 的数据寄存器"DORx"的数字编码作为输入,经过它转换得的模拟信号由右侧的"DAC_OUTx"通道输出。其中各个部件中"x"是指设备的标号,在 STM32 中具有 2 个这样的 DAC 部件,每个 DAC 有 1 个对应的输出通道连接到特定的引脚,即:PA4-通道 1,PA5-通道 2,为避免干扰,使用 DAC 功能时,DAC 通道引脚需要被配置成模拟输入功能(AIN)。

3.7 定时器设置分频系数和周期--计算波形的频率公式

图6 频率计算公式

4 深入分析

思考一

实验源码"31-ADC-电压采集:1-ADC-单通道(中断读取)",查找电路图和程序,确认ADC硬件对应的引脚号; 改变ADC的采样时钟实现三种不同采样速度的 ADC数据采集。

图7 ADC IO 分配

图8 ADC硬件对应的引脚号

图9 改变ADC的采样时间

将ADC_SampleTime_55Cycles5改为ADC_SampleTime_1Cycles5,ADC_SampleTime_7Cycles5,ADC_SampleTime_13Cycles5等等就可以实现实现三种不同采样速度的 ADC数据采集。

图10 可以使用的采样时间

ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles 采样时间等于1.5个周期

ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles 采样时间等于7.5个周期

ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles 采样时间等于13.5个周期

ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles 采样时间等于28.5个周期

ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles 采样时间等于41.5个周期

ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles 采样时间等于55.5个周期

ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles 采样时间等于71.5个周期

ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles 采样时间等于239.5个周期

ADC的采样时间=采样周期/ADC的时钟频率

ADC的转换时间=ADC的采样时间+12.5周期 (12.5是采集12位AD时间是固定的周期)

思考二

在 ADC 采集数据的应用中,为了提高 ADC 的分辨率,可以采用多个采样平均的方式提高其分辨率(平均值滤波), 修改程序实现 ADC采集的平均值滤波。

这里我们在ADC中断中,通过一次中断进行6次采样然后取平均值来提高 ADC 的分辨率,从而实现 ADC采集的平均值滤波。

图11 6次采样然后取平均值来提高 ADC 的分辨率

图12 main函数

思考三

实验源码"31-ADC-电压采集:5-ADC-芯片温度"采用 DMA 的方式实现 MCU 温度的采集,比较 DMA 方式与单 通道(中断读取)方式程序的异同。

**DMA (Direct Memory Access)的定义与原理:**DMA 是一种允许某些硬件子系统直接访问主内存的技术,无需通过CPU。在MCU温度采集中,ADC(模数转换器)通过DMA直接将采集到的数据传输到内存中。

优点:

**高效:**DMA 传输可以在不占用 CPU 的情况下进行,提高系统的总体效率。

**连续采集:**可以连续采集数据,适合需要高速或连续数据采集的场景。

**程序结构:**程序中需要设置DMA通道和配置其源地址(ADC数据寄存器)和目标地址(内存中的缓冲区),以及传输完成后的中断或回调函数。

**单通道中断的定义与原理:**在单通道中断方式中,ADC完成转换后会产生一个中断信号,CPU响应这个中断,并从ADC数据寄存器读取数据。

优点:

**简单:**硬件和软件配置相对简单,适用于数据采集需求不频繁的应用。

**灵活:**程序可以灵活处理每次采集到的数据。

**程序结构:**程序中主要包含中断服务例程,每次ADC完成转换后,CPU通过中断服务程序读取数据,并处理或存储。

DMA 与单通道中断方式的比较

**资源利用:**DMA方式不占用CPU资源,而中断方式每次采集都需要CPU介入,影响CPU执行其他任务。

**数据处理:**DMA适合大批量数据处理,能连续不断地采集;单通道中断方式则在每次转换后都需要CPU处理,更适合对数据即时处理的要求。

**复杂性:**DMA的配置和调试相对复杂,涉及到内存管理和DMA控制器配置;单通道中断方式配置简单,但在高数据率下可能会使CPU负担加重。

**适用场景:**DMA更适合高速、大量数据采集的场景,如音视频处理或工业控制系统;单通道中断方式适用于数据采集频率较低、单次数据处理需求更高的场景。

思考四

参照实验源码"DAC-输出正弦波"实现不同频率的波形输出,实现基于 DAC 输出方波。

图13 DAC 输出方波代码修改操作

图14 main函数

图15 DAC初始化基础构架

图16 示波器显示方波验证图

相关推荐
副露のmagic2 分钟前
更弱智的算法学习 day36
学习·算法
科技林总33 分钟前
【系统分析师】3.3 输入输出系统
学习
进阶小白猿43 分钟前
Java技术八股学习Day17
java·jvm·学习
whale fall1 小时前
【雅思听力语料库5.1】
笔记·学习
华清远见IT开放实验室1 小时前
以“科技+教育”双引擎,打造虚实融合的智能化教育新生态——华清远见亮相央广网2025教育年度盛典
科技·stm32·单片机·物联网·esp32·虚拟仿真·非凡就业班
半夏知半秋2 小时前
kcp学习-skynet中的kcp绑定
开发语言·笔记·后端·学习
专注于大数据技术栈2 小时前
java学习--HashSet
java·学习·哈希算法
zy135380675732 小时前
TT119/PM1132芯片-220v转5v应急灯应用方案
科技·单片机·物联网·智能电视
Q_21932764552 小时前
基于单片机智能百叶窗卷帘门自动门设计
单片机·嵌入式硬件