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

引 言 

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

实验目的

1.掌握 STM32F103 的 ADC 的使用

2.了解 STM32F103 的 DAC 的使用

实验内容

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

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值