ADC模数转换器(ADC类型、ADC工作原理、单通道ADC采集、单通道ADC采集(DMA读取)、多通道ADC采集(DMA读取)、单通道ADC过采样、内部温度传感器、光敏传感器)

参考

http://t.csdnimg.cn/GmeYZ

一、ADC简介

在这里插入图片描述
在这里插入图片描述

1.1、什么是ADC?

在这里插入图片描述
ADC(模数转换器) 是一种电子设备,用于将连续的模拟信号转换为相应的离散数字数据。这在许多应用中非常重要,特别是在嵌入式系统和数据采集系统中。

具体来说,ADC将来自外部环境的模拟信号(例如来自传感器的温度、压力、光强等)转换为数字形式,以便微处理器或其他数字电路可以处理和分析这些数据。ADC的输出通常是二进制数字,代表了模拟信号的离散值。

在嵌入式系统中,ADC常常用于采集传感器数据,比如监控温度、湿度、光照等环境参数。这些数据随后可以被处理器用来做出决策、控制系统或者在显示器上显示。

总的来说,ADC是将模拟世界的数据转换为数字世界的重要桥梁,使得我们能够对现实世界的各种信号进行量化和处理。

1.2、常见的ADC类型

常见ADC类型:https://blog.csdn.net/whereismatrix/article/details/81814431
在这里插入图片描述

常见的ADC类型包括并行比较型和逐次逼近型。它们各有优点和缺点:
1.并行比较型 ADC:
优点:
转换速度非常快,适用于需要高速转换的应用。
可以实现高速率的采样。

缺点:
成本较高,因为需要大量的比较器和电路来并行处理输入信号。
功耗较高,因为需要同时工作的电路较多。
分辨率通常较低,受到布局和电路复杂性的限制。

2.逐次逼近型 ADC:
优点:
结构相对简单,成本较低。
功耗较低,因为只有一个比较器在工作。

缺点:
转换速度较慢,每次转换需要多个时钟周期。
适用于较低速率的采样,不适合需要高速率采样的应用。

在选择 ADC 类型时,需要根据应用的具体要求权衡各种因素,包括转换速度、成本、功耗和分辨率等。

1.3、并联比较型工作示意图

在这里插入图片描述

1.4、逐次逼近型工作示意图

在这里插入图片描述
逐次逼近型 ADC (Successive Approximation ADC)通常由以下几个主要部分组成:
1.控制电路:控制电路负责管理 ADC 的整个转换过程。它通常包括时钟控制、状态机、控制逻辑等,用于确保 ADC 能够按照预定的顺序和时序完成模拟信号到数字信号的转换。

2.数码寄存器:数码寄存器是 ADC 中用于存储转换结果的部分。它的位数决定了 ADC 的分辨率。在逐次逼近型 ADC 中,数码寄存器通常是一个 N 位的寄存器,其中 N 表示 ADC 的分辨率。

3.D/A 转换器:D/A 转换器(Digital-to-Analog Converter)用于产生 ADC 内部的参考电压或比较电压。在逐次逼近型 ADC 中,D/A 转换器通常用于生成逼近比较电压,以便与输入模拟信号进行比较。

4.电压比较器:电压比较器用于比较输入模拟信号和由 D/A 转换器产生的比较电压。比较器的输出结果将用于 ADC 控制电路中的决策逻辑,驱动 ADC 进行逐步逼近型转换过程。

5.逐次逼近型 ADC 通过多次逼近比较的过程来逐渐逼近输入模拟信号的真实值,并将结果存储在数码寄存器中。这种类型的 ADC 结构相对简单,适用于许多低速应用场景。

1.5、ADC的特性参数

在这里插入图片描述
ADC 特性参数包括:
1.分辨率:ADC 的分辨率表示其能够辨别的最小模拟量的能力。通常以位数来表示,例如 8 位、10 位、12 位、16 位等。更高的分辨率意味着 ADC 能够更精细地将模拟信号转换为数字信号。

2.转换时间:转换时间是完成一次 A/D 转换所需的时间。它决定了 ADC 的采样率,即每秒钟能够完成多少次转换。转换时间越短,ADC 的采样率就越高,能够更快地对模拟信号进行采样和转换。

3.精度:ADC 的精度是指其输出数字量与输入模拟量之间的误差。它受到多种因素的影响,包括 ADC 自身的性能、环境条件(如温度、气压等)以及电路设计的质量等。精度通常以百分比或者 LSB(最小刻度基本单位)来表示。

4.量化误差:量化误差是指将模拟信号转换为数字信号时,由于量化过程的精度限制而引入的误差。这个误差是由数字量化的离散性质所导致的,通常使用四舍五入等近似方法,因此会产生一定的误差。量化误差的大小取决于 ADC 的分辨率,分辨率越高,量化误差通常越小。

1.6、STM32各系列ADC的主要特性

在这里插入图片描述
根据您提供的信息,以下是 STM32 各系列 ADC 的主要特性:
1.F1 系列:
ADC 类型:逐次逼近型
分辨率:12 位
ADC 时钟频率:最大 14MHz
采样时间:采样时间越长,转换结果相对越准确,但转换速度越慢
转换时间:与 ADC 时钟频率、分辨率和采样时间等有关
供电电压:VSSA: 0V,VDDA: 2.4V~3.6V(全速运行)
参考电压:VREF–: 0V,VREF+: 一般为 3.3V
输入电压:VREF–≤VIN≤VREF+

2.F4 系列:
ADC 类型:逐次逼近型
分辨率:6/8/10/12 位
ADC 时钟频率:最大 36MHz
其他特性与 F1 类似,但有更高的分辨率和 ADC 时钟频率。

3.F7 系列:
ADC 类型:逐次逼近型
分辨率:6/8/10/12 位
ADC 时钟频率:最大 36MHz
其他特性与 F4 类似,但有更高的分辨率和可能更高的 ADC 时钟频率。

4.H7 系列:
ADC 类型:逐次逼近型
分辨率:8/10/12/14/16 位
ADC 时钟频率:最大 36MHz
其他特性与 F4/F7 类似,但有更高的分辨率。

以上是基于您提供的信息对各系列 STM32 的 ADC 特性的概述。请注意,具体的特性可能因芯片型号和具体配置而略有差异,建议查阅相关的数据手册以获取更详细的信息。

二、ADC工作原理

在这里插入图片描述
在这里插入图片描述

F1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ADC(模拟-数字转换器)的框图结构通常包括以下部分:

参考电压/模拟部分电压:

这部分提供了 ADC 输入信号的参考电压,用于将模拟信号转换为数字信号。
在这里插入图片描述
在STM32中,ADC的参考电压(VREF+)和模拟部分电压有以下特点和限制:
1.ADC供电电源:
ADC模块的供电电源是由VSSA(模拟地)和VDDA(模拟电源)提供的。
VDDA的电压范围通常为2.4V至3.6V。

2.ADC输入电压范围:
ADC输入的模拟电压(VIN)的范围取决于参考电压的设定。
参考电压(VREF+)和参考地(VREF-)之间的电压范围定义了ADC输入的有效范围。
在STM32中,常见的参考电压为3.3V,因此ADC的输入电压范围通常为0V至3.3V。

因此,当使用STM32的ADC时,需要确保模拟输入信号的电压在VREF-和VREF+之间,并且ADC的供电电源在正常工作范围内。

输入通道:

ADC 可以从多个输入通道中选择进行转换。这些输入通道可以连接到外部传感器、电路或其他模拟源。
在这里插入图片描述

转换序列:

转换序列定义了 ADC 转换的顺序,即每次转换涉及的输入通道的顺序。
在这里插入图片描述

规则组和注入组

在STM32中,ADC的转换序列被组织为规则组和注入组,具体特点如下:

1.规则转换组:
规则转换组用于处理常规的A/D转换需求。
最多可以有16个转换通道,每个通道可以配置为一个独立的转换序列。
这些转换按照预先定义的顺序进行,可以由软件触发或由外部事件触发。

2.注入转换组:
注入转换组用于处理一些具有优先级的特殊转换需求,通常用于处理紧急或重要的转换。
最多可以有4个转换通道,每个通道可以配置为一个独立的转换序列。
注入转换可以在规则转换之前或之后触发,具体取决于其优先级设置。

通过规则组和注入组的灵活组合,STM32的ADC可以满足各种不同的转换需求,从而更好地适应不同的应用场景。
在这里插入图片描述
规则组和注入组的执行优先级如下所示:
1.规则组执行优先级:
规则组的转换优先级相对较低。
当规则组和注入组同时触发转换时,规则组通常会等待注入组完成转换后再执行。

2.注入组执行优先级:
注入组具有较高的转换优先级。
如果注入组启动了转换,并且规则组也需要进行转换,注入组的转换会优先执行。
注入组可以在规则组转换之前或之后触发转换,具体取决于其优先级设置。

总的来说,注入组的转换具有较高的优先级,可以在规则组转换之前或之后执行,并且可以在一些特殊情况下优先执行。规则组的转换相对较为常规,优先级较低,会等待注入组转换完成后才执行。

规则序列和注入序列

在这里插入图片描述
在这里插入图片描述
规则序列和注入序列是STM32中ADC转换序列的两种类型,它们的设置可以通过相关的寄存器进行配置。
1.规则序列:
规则序列用于执行常规的ADC转换任务,可以包含多个转换通道,并按照设置的顺序依次执行。
通过配置规则序列,可以定义需要转换的通道及其顺序。
规则序列最多可以包含16个转换通道。

2.注入序列:
注入序列用于执行具有高优先级的ADC转换任务,通常用于实时性要求较高的应用场景。
注入序列也可以包含多个转换通道,但其优先级高于规则序列,且在某些情况下可以中断规则序列的转换来执行自己的转换。
注入序列最多可以包含4个转换通道。

配置规则序列和注入序列的步骤如下:
1.选择转换通道:确定需要转换的通道,可以是单个通道或多个通道的组合。
2.设置转换顺序:为规则序列和注入序列设置转换通道的顺序,通常通过相关的寄存器进行配置。
3.配置转换触发源:选择触发转换的条件,可以是软件触发或外部触发等。
4.设置转换参数:包括采样时间、对齐方式、分辨率等转换参数的设置。
5.启动转换:根据需求启动规则序列和注入序列的转换。

具体的配置步骤和寄存器设置会根据具体的STM32系列和型号而有所不同,需要查阅相应系列的参考手册或技术文档以获取详细信息。

触发源:

触发源确定 ADC 何时启动转换。它可以是软件触发(通过代码触发)或外部触发(来自外部信号)。
在这里插入图片描述

ADON位触发转换 和 外部事件触发转换

对于STM32系列中的ADC模块,确实存在这两种触发转换的方法。

1.ADON位触发转换(仅限于某些旧的STM32系列,如F1系列):
在旧的STM32系列中,可以通过设置 ADC_CR2 寄存器的 ADON 位来启动ADC转换。
当 ADON 位为 1 时,表示ADC处于启动状态,再次将 ADON 位设置为 1,可以触发规则组转换。

2.外部事件触发转换:
外部事件触发转换是一种更为灵活和常见的触发方式,适用于各种STM32系列。
外部事件触发可以分为规则组外部触发和注入组外部触发两种:
规则组外部触发:可以由外部信号触发规则序列的转换,例如外部GPIO引脚的信号变化、定时器的触发等。
注入组外部触发:类似地,注入序列的转换也可以由外部事件触发,且在某些情况下具有更高的优先级。

对于外部事件触发转换,需要配置相应的触发源,并在启动ADC时等待外部事件的发生以触发转换。这种方法通常更加灵活,并且适用于各种应用场景。

规则组外部触发使用方法 和 注入组外部触发使用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

规则组外部触发和注入组外部触发的使用方法如下:

规则组外部触发使用方法:
1.配置触发源: 首先,需要选择外部事件作为触发源,例如外部GPIO引脚的信号变化、定时器的触发等。这通常需要配置相关的GPIO或定时器,并将其与ADC模块的触发输入信号相连。

2.配置ADC触发模式: 在初始化ADC时,需要设置触发模式为外部触发。这可以通过配置 ADC_CR2 寄存器中的 EXTEN 和 EXTSEL 位来实现。EXTEN 用于配置触发边沿,EXTSEL 用于选择触发源。

3.启动ADC转换: 当外部事件发生时,会触发ADC转换。在启动ADC时,ADC会等待外部触发事件,并在触发后执行规则组中的转换。

注入组外部触发使用方法:
1.配置触发源: 类似于规则组外部触发,首先需要选择外部事件作为触发源,并将其与注入组的触发输入信号相连。

2.配置注入组触发模式: 在初始化ADC时,需要设置注入组的触发模式为外部触发。这可以通过配置 ADC_CR2 寄存器中的 JEXTEN 和 JEXTSEL 位来实现。JEXTEN 用于配置注入组触发边沿,JEXTSEL 用于选择触发源。

3.启动ADC转换: 当外部事件触发时,注入组会执行相应的转换。在启动ADC时,注入组会等待外部触发事件,并在触发后执行注入组中的转换。

通过以上步骤,可以实现规则组和注入组的外部触发转换,从而灵活地应对各种采样需求。

转换时间:

转换时间是完成一次模拟到数字转换所需的时间。它取决于 ADC 的时钟频率、分辨率和采样时间等因素。
在这里插入图片描述
在这里插入图片描述
设置ADC时钟和转换时间的方法如下:
1.设置ADC时钟:
首先,选择适当的时钟源和分频系数来配置ADC的时钟。在STM32中,ADC的时钟源通常为系统时钟(SYSCLK)或者外部时钟源(如HSE或HSI)。
使用相关的寄存器(如RCC_CFGR 寄存器)来配置时钟源和分频系数,以获得所需的ADC时钟频率。例如,如果使用SYSCLK作为时钟源,并希望得到14MHz的ADC时钟,则需要设置合适的分频系数。

2.设置ADC转换时间:
转换时间由采样时间和转换周期组成。采样时间是ADC在进行转换之前对输入信号进行采样的时间,而转换周期是ADC完成一次转换所需的时间。
采样时间可以通过设置 SMPx[2:0] 位来实现,其中 x 表示对应的通道编号。不同的STM32系列有不同的通道编号和对应的寄存器。通常,SMPx[2:0] 位设置为0~7对应不同的采样时间,从而决定了转换过程中对输入信号的采样时间长度。
转换周期固定为12.5个ADC时钟周期。因此,转换时间可以通过以下公式计算得到:T C O N V = 采样时间 + 12.5 个 A D C 时钟周期

通过以上步骤,可以根据需求灵活地设置ADC的时钟和转换时间,以满足具体的应用需求。
在这里插入图片描述
在这里插入图片描述

数据寄存器:

转换后的数字输出存储在数据寄存器中,供微处理器或其他设备使用。
在这里插入图片描述
数据寄存器用于存储ADC转换的结果,其中规则数据寄存器 ADCx_DR 存储规则组转换的结果,而注入数据寄存器 ADCx_JDRy 存储注入组转换的结果,其中 y 可以是1到4,对应着注入组中不同的转换通道。

在读取数据之前,需要根据应用的要求设置数据的对齐方式。这可以通过 ADCx_CR2 寄存器的 ALIGN 位来实现。具体地:
右对齐模式(默认模式):转换结果的最低有效位存储在数据寄存器的最低位,而最高有效位存储在数据寄存器的最高位。这种模式适用于大多数应用场景。

左对齐模式:转换结果的最高有效位存储在数据寄存器的最低位,而最低有效位存储在数据寄存器的最高位。这种模式适用于一些特定应用场景。

根据具体需求选择合适的对齐模式,然后读取数据寄存器中的转换结果即可。
在这里插入图片描述

中断:

ADC 可以在转换完成时生成中断请求,以通知微处理器有新的数据可用。
在这里插入图片描述
在STM32的F1/F4/F7系列中,ADC模块支持多种中断事件,以及对应的事件标志和使能控制位。这些中断事件包括:

1.规则通道转换结束(End of Conversion, EOC):表示规则组中的一个转换通道完成了转换。
事件标志:EOC
使能控制位:EOCIE

2.注入通道转换结束(Injected End of Conversion, JEOC):表示注入组中的一个转换通道完成了转换。
事件标志:JEOC
使能控制位:JEOCIE

3.模拟看门狗状态位(Analog Watchdog, AWD):表示转换结果超出预设阈值,可以用于检测输入信号的异常状态。
事件标志:AWD
使能控制位:AWDIE

4.溢出(Overflow, OVR):表示转换结果溢出,即转换结果超出了数据寄存器的容量。在F1系列中没有此中断。
事件标志:OVR
使能控制位:OVRIE

此外,对于规则组转换结束后,还可以产生DMA请求,可以使用DMA及时传输转换好的数据到指定的内存地址,防止数据被覆盖。

H7

这些部分共同构成了 ADC 的框图结构,使其能够将模拟信号转换为数字信号,并与微处理器进行通信。
在这里插入图片描述
在STM32H7系列中,ADC的框图结构通常包括以下部分:

VREF+电压

这是ADC的参考电压,用于确定模拟输入信号的范围。
在这里插入图片描述

ADC双时钟域架构

STM32H7的ADC采用了双时钟域架构,以实现更高的性能和精度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输入通道

ADC可以从多个输入通道中选择进行转换。这些输入通道可以连接到外部传感器、电路或其他模拟源。
在这里插入图片描述
在这里插入图片描述

转换序列:

转换序列定义了ADC转换的顺序,即每次转换涉及的输入通道的顺序。
在这里插入图片描述

(1)常规序列

在这里插入图片描述
在这里插入图片描述

(2)注入序列

在这里插入图片描述

触发源:

触发源确定ADC何时启动转换。它可以是软件触发(通过代码触发)或外部触发(来自外部信号)。
在这里插入图片描述
在这里插入图片描述

转换时间:

在这里插入图片描述
在这里插入图片描述

转换时间是完成一次模拟到数字转换所需的时间。它取决于ADC的时钟频率、分辨率和采样时间等因素。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考电压:

参考电压提供了ADC转换所需的参考基准。
选择参考电压,我们可以设置参考电压来自外部的 Vref+,也可以设置参考电压来自内部的稳压器。

ADC核心:

ADC核心执行模拟到数字转换的实际过程。
ADC 的核心是一个 16 位的逐次逼近型 ADC 转换器,它根据我们设置好的参考电压、输入通道、启动条件等,执行模数转换。

数据寄存器:

转换后的数字输出存储在数据寄存器中,以便供微处理器或其他设备使用。
在这里插入图片描述

在这里插入图片描述

中断:

ADC可以在转换完成时生成中断请求,以通知微处理器有新的数据可用。
在这里插入图片描述
模拟看门狗中断发生条件:首先通过 ADCx_LTR 和 ADCx_HTR 寄存器设置低阈值和高阈值,然后开启了模拟看门狗中断后,当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。例如我们设置高阈值是 3.0V,那么模拟电压超过 3.0V 的时候,就会产生模拟看门狗中断,低阈值的情况类似。

采样阶段结束:如果位 EOSMP 被硬件置 1,则说明采样阶段结束(仅限常规转换),然后可以通过对 EOSMP 位写 1 来清零该位。如果 EOSMPIE 位置 1,可以产生采样阶段结束中断。

上溢:如果常规转换后的数据未在新转换数据可用之前(由 CPU 或 DMA)读取,会由溢出标志(OVR)指示缓冲区溢出事件。如果 OVRIE 位置 1,可以产生一个溢出中断。

此外,我们还要知道常规组和注入组的转换结束后,除了产生中断外,还可以产生 DMA请求,把转换好的数据存储在内存里面,防止读取不及时数据被覆盖。

通道预选控制信号:

这些信号用于预选ADC转换中涉及的通道,以便更高效地进行转换。
这些部分共同构成了STM32H7系列ADC的框图结构,使其能够有效地将模拟信号转换为数字信号,并与微处理器进行通信。

通道预选控制信号,用于将 ADC 某个通道连接到对应的 GPIO 上。PCSEL[19:0]每个位对应一个通道,总共 20 个通道。这一点和以前的 STM32 系列不一样,在使用的时候,需要特别注意。

单次转换模式和连续转换模式

在这里插入图片描述
单次转换模式和连续转换模式是ADC的两种工作模式,具体特点如下:

单次转换模式:

在单次转换模式下,ADC只进行一次转换,即完成一次转换后就停止工作。
对于规则组,转换结果存储在ADC_DR寄存器中,并且转换结束标志位EOC被置为1。如果设置了EOCIE位,则会产生中断。
对于注入组,转换结果存储在ADC_DRJx寄存器中,并且转换结束标志位JEOC被置为1。如果设置了JEOCIE位,则会产生中断。
在这里插入图片描述

连续转换模式:

在连续转换模式下,ADC会连续进行转换,即完成一次转换后会自动触发下一次转换,直到外部停止触发或者软件停止。
对于规则组,转换结果同样存储在ADC_DR寄存器中,并且转换结束标志位EOC被置为1。如果设置了EOCIE位,则会产生中断。
对于注入组,转换结果同样存储在ADC_DRJx寄存器中,并且转换结束标志位JEOC被置为1。如果设置了JEOCIE位,则会产生中断。
自动注入功能可以使得注入组自动进行转换,通过设置JAUTO位来启用。
在这里插入图片描述
总之,单次转换模式适用于只需要进行一次转换的场景,而连续转换模式适用于需要连续监测的场景。

扫描模式

在这里插入图片描述
扫描模式是指ADC进行转换时是否扫描多个通道的模式。具体特点如下:

关闭扫描模式:
在关闭扫描模式下,ADC只会转换由ADC_SQRx或ADC_JSQR选中的第一个通道。也就是说,只会转换一个通道的数据。

使用扫描模式:
在使用扫描模式下,ADC会扫描所有被ADC_SQRx或ADC_JSQR选中的通道,依次进行转换。
这意味着,ADC会逐个转换所有被选中的通道,并将转换结果存储在相应的数据寄存器中。

总之,扫描模式可以让ADC在一次转换中依次转换多个通道的数据,适用于需要监测多个信号的场
在这里插入图片描述

三、单通道ADC采集实验

在这里插入图片描述

3.1、实验简要

在这里插入图片描述

根据配置描述,通过ADC1通道1(PA1)采集电位器的电压,并显示ADC转换的数字量及换算后的电压值。以下是实现该功能的步骤:
1.确定最小刻度: 对于STM32系列,如果ADC的参考电压(VREF+)为3.3V,且分辨率为12位,则最小刻度为 ( \frac{3.3V}{2^{12}} ) ,即 ( \frac{3.3V}{4096} ) 。这是ADC可以分辨的最小电压变化。

2.确定转换时间: 根据您提供的采样时间239.5个ADC时钟周期,转换时间为21μs。

3.模式组合: 您选择了单次转换模式,并且不使用扫描模式。

4.编程实现:
启用ADC1通道1(PA1)作为输入通道。
配置ADC为单次转换模式,禁用扫描模式。
启动ADC转换并等待转换完成。
读取转换结果,换算为电压值。
显示转换结果及电压值。

3.2、ADC寄存器介绍

ADCx 通用控制寄存器(ADCx_CCR)

在这里插入图片描述
在这里插入图片描述

ADCx 控制寄存器(ADCx_CR)

在这里插入图片描述
在这里插入图片描述

ADCx 配置寄存器(ADCx_CFGR)

在这里插入图片描述

ADCx 配置寄存器 2(ADCx_CFGR2)

在这里插入图片描述

ADCx 常规序列寄存器 1(ADCx_SQR1)

在这里插入图片描述
在这里插入图片描述

ADCx 采样时间寄存器 2(ADCx_SMPR2)

在这里插入图片描述

ADCx 通道预选寄存器(ADCx_ PCSEL)

在这里插入图片描述
芯片上面,ADC 所在的 IO 口,都不能做 5V 兼容。

ADCx 常规数据寄存器(ADCx_ DR)

在这里插入图片描述

ADCx 中断和状态寄存器(ADCx_ ISR)

在这里插入图片描述

3.3、单通道ADC采集实验配置步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单通道ADC采集实验配置步骤,以下是对每个步骤的简要说明:
1.配置ADC工作参数、ADC校准:
使用 HAL_ADC_Init() 初始化 ADC,并使用 HAL_ADCEx_Calibration_Start() 进行校准。这两个函数将配置 ADC 的基本工作参数,并确保其准确性。

2.ADC MSP初始化:
实现 HAL_ADC_MspInit() 函数,其中包括配置 ADC 相关的中断向量表、时钟和 GPIO 等外设。这是为了确保 ADC 的正常工作,包括时钟和中断的配置。

3.配置ADC相应通道相关参数:
使用 HAL_ADC_ConfigChannel() 配置 ADC 的输入通道及其相关参数,如采样时间等。通过这一步,您可以选择要采集的通道以及采样参数。

4.启动A/D转换:
使用 HAL_ADC_Start() 启动 ADC 转换。一旦启动,ADC 将开始转换输入通道的模拟信号,并将其转换为数字值。

5.等待规则通道转换完成:
使用 HAL_ADC_PollForConversion() 函数等待 ADC 转换完成。在这个步骤中,您可以选择等待转换完成或设置超时时间。

6.获取规则通道A/D转换结果:
使用 HAL_ADC_GetValue() 函数获取转换结果。一旦转换完成,您可以使用该函数获取 ADC 转换的数字值,然后进行后续处理,比如显示或存储。

通过以上步骤,您可以完成单通道ADC采集的实验配置。确保根据您的具体硬件和应用需求进行适当的配置和修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HAL_ADC_Init 函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HAL_ADCEx_Calibration_Start 函数

在这里插入图片描述
在这里插入图片描述

HAL_ADC_ConfigChannel 函数

在这里插入图片描述

HAL_ADC_Start 函数

在这里插入图片描述

HAL_ADC_PollForConversion 函数

在这里插入图片描述
在这里插入图片描述

HAL_ADC_GetValue 函数

在这里插入图片描述

四、单通道ADC采集(DMA读取)

在这里插入图片描述

4.1、实验简要

在这里插入图片描述

4.2、ADC & DMA 寄存器

ADCx 配置寄存器(ADCx_CFGR)

在这里插入图片描述
在这里插入图片描述

DMA 数据流 x 外设地址寄存器(DMA_SxPAR)

在这里插入图片描述

DMA 数据流 x 存储器 0 地址寄存器(DMA_SxM0AR)

在这里插入图片描述

DMA 数据流 x 数据项数寄存器(DMA_SxNDTR)

在这里插入图片描述
该寄存器控制 DMA 数据流 x 的每次传输所要传输的数据量。其设置范围为 0~65535。并且该寄存器的值会随着传输的进行而减少,当该寄存器的值为 0 的时候就代表此次数据传输已经全部发送完成了。所以可以通过这个寄存器的值来知道当前 DMA 传输的进度。特别注意,
这里是数据项数目,而不是指的字节数。比如设置数据位宽为 16 位,那么传输一次(一个项)就是 2 个字节。

4.3、单通道ADC采集(DMA读取)实验配置步骤

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HAL_DMA_Start_IT 函数

在这里插入图片描述

HAL_ADC_Start_DMA 函数

在这里插入图片描述

五、多通道ADC采集(DMA读取)

在这里插入图片描述

5.1、实验简要

在这里插入图片描述

5.2 ADC寄存器

本实验我们很多的设置和单通道 ADC 采集(DMA 读取)实验是一样的,所以下面介绍寄存器的时候我们不会继续全部都介绍,而是针对性选择与单通道 ADC 采集(DMA 读取)实验不同设置的 ADCx_SQR 寄存器进行介绍,其他的配置基本一样的。另外我们用到 DMA 读取
数据,配置上和单通道 ADC 采集(DMA 读取)实验是一样的。ADCx 常规序列寄存器有四个(ADCx_SQR1~ ADCx_SQR4),具体怎么配置,需要看我们用多少个通道,比如本实验我们使用 6 个通道同时采集 ADC 数据,具体配置如下:

ADCx 常规序列寄存器 1(ADCx_SQR1)

在这里插入图片描述
SQ1[4:0]~SQ4[4:0]位设置常规组序列的第 1~4 个转换编号,第 5~16 个转换编号的设置请查看 ADCx_SQR2 和 ADCx_SQR4 寄存器。设置过程非常简单,忘记了请参考前面给大家整理出来的常规序列寄存器控制关系汇总表。
下面我们来看看本实验是怎么设置的:SQ1[4:0]位赋值为 14、SQ2[4:0]位赋值为 15、SQ3[4:0]位赋值为 16、SQ4[4:0]位赋值为 17、SQ5[4:0]位赋值为 18、SQ6[4:0]位赋值为 19,即常规序列 1 到 6 分别对应的通道是 14 到 19。其中 SQ5[4:0]位和 SQ6[4:0]位是在 ADCx_SQR2寄存器中配置。

5.3 多通道 ADC 采集(DMA 读取)配置步骤

在这里插入图片描述
在这里插入图片描述

六、单通道ADC过采样实验

在这里插入图片描述

6.1、怎么用过采样和求均值的方式提高ADC的分辨率?

用过采样和求均值提高ADC分辨率
方程推导过程:https://max.book118.com/html/2018/0506/165038217.shtm
在这里插入图片描述

过采样和求均值的方式可以有效提高ADC的分辨率。下面是具体步骤:
在这里插入图片描述

6.2、ADC 寄存器

ADCx 配置寄存器 2(ADCx_CFGR2)

在这里插入图片描述
在这里插入图片描述

6.3、实验简要

在这里插入图片描述
在这里插入图片描述

七、内部温度传感器实验

在这里插入图片描述
在这里插入图片描述

7.1、STM32内部温度传感器简介

在这里插入图片描述

7.2、温度计算方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3、实验简要

在这里插入图片描述

八、光敏传感器实验

在这里插入图片描述

8.1、光敏二极管简介

在这里插入图片描述
光敏二极管(Photodiode)是一种特殊的二极管,其核心是一个PN结。与普通二极管不同的是,光敏二极管对光的强度非常敏感。它在工作时需要加上反向电压。

光敏二极管的暗电流非常小,通常小于0.1微安,这是因为在无光照的情况下,几乎没有光子撞击PN结,因此几乎没有电流通过。

当有光照射到光敏二极管上时,光的强度越大,反向电流也越大,形成光电流。这种光电流的变化是非线性的,即光强增大时,电流不是简单地线性增加,而是呈现出一种非线性的变化。

为了利用光敏二极管来检测光的强度变化,通常会串联一个电阻。当光照强度发生变化时,光敏二极管的电流也会随之变化,导致电阻两端的电压发生变化。通过连接至ADC(模数转换器)的方式,可以读取电压的变化,从而得知光强的变化情况。

总的来说,光敏二极管可以通过测量其反向电流的变化来检测光的强度变化,从而实现对光的检测和测量。

8.2、实验原理

在这里插入图片描述
光敏传感器实验的原理是利用光敏二极管(或其他类型的光敏传感器)的光敏特性来检测光照强度的变化,并将其转换为电信号输出。以下是光敏传感器实验的基本原理:

1.光敏传感器选择:选择适合实验需求的光敏传感器,如光敏二极管、光敏电阻等。根据实验要求和预期的光强范围选择合适的传感器。

2.传感器连接:将光敏传感器连接到适当的电路中。通常,光敏传感器需要与电源和负载电阻相连接。光敏传感器的输出端可以连接到微控制器、模数转换器(ADC)或其他电子设备,用于读取和处理光强信号。

3.光照实验:将光敏传感器放置在待测的光源附近,观察传感器输出信号随着光照强度的变化而变化。可以尝试不同光照条件下的实验,比如改变光源的亮度或距离,以及改变光源的颜色。

4.数据采集与分析:利用连接的微控制器或ADC等设备采集传感器输出的电信号,并进行分析处理。可以将光照强度与传感器输出信号之间的关系绘制成曲线或图表,以便更直观地理解传感器的响应特性。

5.实验验证与应用:根据实验结果对光敏传感器的性能进行验证,并根据实验需求进行进一步的应用。例如,可以将光敏传感器用于制作光控开关、光敏电压表、光强监测系统等。

通过光敏传感器实验,可以深入了解光敏传感器的工作原理、特性和应用场景,为光电转换和光控系统的设计提供实验基础和参考。

8.3、实验简要

在这里插入图片描述

### 回答1: STM32系列微控制器具有多通道ADC模数转换器)和DMA(直接内存访问)功能。ADC是用于将模拟信号转换成数字信号的模块,而DMA是用于高效地在外设和内存之间传输数据的模块。 多通道ADC意味着STM32微控制器可以同时接收多个模拟信号并进行转换。例如,一款具有8个通道的STM32微控制器可以同时处理8个不同的模拟信号。每个通道都有一个独立的ADC转换器,因此可以同时对多个信号进行采样和转换。 为了提高效率和性能,STM32微控制器还配备了DMA功能。DMA可以在处理ADC数据转换时,直接将转换数据传输到内存中,而无需CPU的干预。这样可以减少CPU处理数据的负担,提高系统的响应能力。 使用DMA进行ADC转换时,需要配置DMA通道和相关的内存地址。然后,当ADC完成一次数据转换后,DMA将自动激活并将转换结果传输到指定的内存地址。这样,CPU可以继续执行其他任务,而不需等待ADC转换完成和数据传输。 因此,STM32的多通道ADCDMA功能可以帮助我们实现高效的模拟信号采集和数据处理。无论是工业控制、传感器应用还是数据采集,都可以利用这些功能实现高性能和快速的数据转换与传输。同时通过合理的配置和使用,可以更好地提高系统效率和响应能力,为我们的应用带来更多的便利。 ### 回答2: STM32系列MCU的ADC模块具有多通道DMA功能。ADC多通道DMA是一种可以同时采集多个模拟信号并通过DMA传输到内存的方法。 首先,STM32的ADC模块支持多通道采集。它有多个ADC通道,每个通道可以独立地采集一个模拟信号。多通道ADC可以在单次转换模式下按照所选择的通道顺序依次进行转换,也可以在扫描模式下连续转换多个通道,这样就可以同时采集多个信号。 其次,STM32的DMA模块可用于提高ADC转换结果的传输效率。DMA即直接内存访问,它可以在不经过CPU干预的情况下,直接将ADC转换结果传输到指定的目的地,比如内存。通过使用DMA,可以减少CPU的负担,提高系统的效率。 在ADC多通道DMA的应用中,首先需要配置ADC多通道转换模式和DMA的相关参数。可以选择单次转换模式或连续转换模式,并设置多个通道的转换顺序。然后配置DMA通道,指定源地址为ADC的数据寄存器,目的地址为内存的指定位置,并设置数据长度和传输方向。最后,启动ADC转换和DMA传输,ADC会按照设定的通道顺序逐一进行转换,转换结果会通过DMA直接传输到指定的内存地址。 通过使用ADC多通道DMA,可以方便地同时采集多个模拟信号,并高效地将转换结果传输到内存,从而提高了系统的性能和效率。 ### 回答3: STM32系列的MCU具备多通道ADC功能,并且可以利用DMA(直接内存访问)来实现高效率的数据传输。 首先,ADC模数转换器)是一种用于将模拟信号转换为数字信号的电子设备。STM32的ADC模块支持多通道,这意味着可以同时对多个模拟输入信号进行转换。 而DMA是一种无需CPU干预的数据传输方式,利用DMA可以实现高速、高效的数据传输。在STM32的MCU中,DMA可以与ADC模块配合使用,实现从ADC转换结果缓冲区自动传输到指定的内存区域,无需CPU的介入。 具体实现方法如下: 1. 配置ADC模块的多通道扫描模式:通过设置ADC模块的控制寄存器,选择需要转换的通道数量,并设置扫描顺序。扫描模式可以使ADC连续地转换多个通道的模拟输入信号。 2. 配置DMA传输:通过设置DMA控制器的寄存器,配置DMA通道和传输方向(从ADC读取数据到内存)。同时设置DMA的数据宽度、传输大小和传输完成后的中断等参数。 3. 启动ADCDMA:通过设置ADCDMA的控制位,启动ADC模块和DMA传输。ADC开始按照设置的通道顺序进行连续转换,转换结果会自动传输到DMA的缓冲区。 4. 等待转换完成:可以通过DMA的传输完成中断来判断数据传输是否完成。一旦传输完成,可以读取DMA缓冲区内的数据,即为ADC转换的结果。 通过以上步骤,可以实现STM32 MCU的多通道ADC模块与DMA的协同工作。这种方式可以大大提高数据传输效率和系统性能。在实际应用中,可以根据需求进行相应的配置和优化,以满足具体的应用要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值