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 示波器显示方波验证图