ADC(模数转换)详解
- 前言
- ADC的定义
- ADC简介
- ADC特性
- ADC时钟
- 工作模式
- 单通道单次转换练习
- 多通道扫描模式单次转换
前言
在STM32微控制器中,ADC代表模数转换器(Analog-to-Digital Converter)。ADC是一种用于将模拟信号转换为数字信号的电子设备或模块。
STM32微控制器中的ADC模块用于将模拟电压信号转换为数字表示,以便微控制器可以对其进行处理和分析。它可以将外部传感器、电压源或其他模拟信号的变化转换为微控制器可以理解和处理的数字形式。
ADC的工作原理是将连续变化的模拟电压信号分割成离散的取样,并对每个取样进行量化,生成相应的数字表示。通常,ADC使用一种称为逐次逼近法(successive approximation)的转换技术,通过逐步比较模拟输入信号和一个内部参考电压来逼近原始模拟信号的值,并将其转换为对应的数字值。
STM32微控制器中的ADC模块提供了多个转换通道,可以选择不同的输入引脚来进行模拟信号的采样和转换。它还提供了各种配置选项,如采样时间、分辨率、转换速率等,以满足不同应用场景的需求。
通过使用STM32的ADC功能,开发者可以方便地将外部模拟信号转换为数字形式,从而实现各种测量、检测和控制应用,如温度监测、电压测量、传感器读取等。
ADC的定义
ADC是模拟到数字转换器(Analog-to-Digital Converter)的缩写。它是一种电子设备或模块,用于将连续变化的模拟信号转换为离散的数字信号,以便数字系统(如微处理器、微控制器等)能够对其进行处理和分析。
模拟信号是连续变化的电压或电流信号,其数值在一定范围内变化。而数字信号是由一系列离散的数字表示,只能取有限的值,通常以二进制形式表示。
ADC的工作原理是将模拟信号分割成一系列离散的取样,并将每个取样值转换为相应的数字表示。这个过程涉及到两个主要步骤:采样和量化。
-
采样:ADC将连续变化的模拟信号在一定时间间隔内进行取样。取样频率决定了每秒采集的样本数,通常以赫兹(Hz)表示。采样过程通过保持并测量模拟信号在每个采样时间点的电压值来实现。
-
量化:采样得到的连续模拟信号经过量化转换为数字形式。量化是将每个采样值映射到一个离散的数字值的过程。这通常通过比较采样值与参考电压之间的差异,并将其转换为数字表示。
ADC的分辨率是指它可以将模拟信号分成多少个离散的级别。较高的分辨率意味着ADC能够提供更精细的数字表示,从而更准确地捕捉和量化模拟信号的细微变化。
ADC在许多应用中起着重要作用,例如传感器信号采集、音频采样、数据采集和控制系统等。它使得模拟信号能够与数字系统进行交互和处理,从而实现各种测量、监测和控制任务。
ADC简介
12 位 ADC 是一种逐次逼近型模拟数字转换器。
它有多达 19 个通道,可测量 16 个外部通道(从外部GPIO口连接的16通道模拟输入)
3个内部信号源,分别为内部温度传感 (VSENSE) 输入、内部参考电压 (VREFINT) 输入、外部电池 VBAT 供电引脚输入
各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
ADC的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。
ADC特性
量程:
能测量的电压范围 0 ~ 3.6V
分辨率:
ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
可配置的转换精度:
6位,8位,10位,12位
转化时间:
模拟输入电压在允许的最大变化范围内,从转换开始到获得稳定的数字量输出所需要的时间称为转换时间
ADC时钟
SYSCLK 系统时钟
HSI 16Mhz 高速内部时钟
PLL 锁相环倍频器
工作模式
EOC: 通道转换结束信号
EOS: 序列转换结束信号
单次转换模式: ADC只执行一次转换;
连续转换模式: 转换结束之后马上开始新的转换;
ADC的单次模式和连续模式
这两种模式的概念是相对应的。这里的单次模式并不是指一个通道。假如同时开了ch0,ch1,ch4,ch5这四个通道。单次模式转换模式下会把这四个通道采集一遍就停止了。而连续模式就是这四个通道转换完以后再循环过来再从ch0开始。
扫描模式
ADC扫描选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
间断模式
触发一次,转换一个通道,在触发,在转换。在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。
ADC单通道
单次转换: 只进行一次ADC转换:配置为“单次转换模式”,扫描模式关闭。ADC通道转换一次后,就停止转换。等待再次使能后才会重新转换
连续转换: 进行连续ADC转换:配置为“连续转换模式”,扫描模式关闭。ADC通道转换一次后,接着进行下一次转换,不断连续。
ADC多通道
单次转换: 只进行一次ADC转换:配置为“单次转换模式”,扫描模式使能。ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。等待再次使能后才会重新转换
连续转换:进行连续ADC转换:配置为“连续转换模式”,扫描模式使能。ADC的多个通道,按照配置的顺序依次转换一次后,接着进行下一次转换,不断连续。
单通道单次转换练习
采集光照/火焰/可燃气传感器数值(这里以G030为例,请根据自己情况配置引脚)
采集光照/火焰/可燃气传感器数值(这里以G030为例,请根据自己情况配置引脚)
采集光照/火焰/可燃气传感器数值(这里以G030为例,请根据自己情况配置引脚)
1.打开ADC对应通道
2. 使能串口
3. 编程实现
1)启动ADC
HAL_StatusTypeDef HAL_ADC_Start (ADC_HandleTypeDef * hadc)
功能:启动ADC开始转换
参数:ADC_HandleTypeDef * hadc 句柄
返回值: 状态
2)等待转换结束
HAL_StatusTypeDef HAL_ADC_PollForConversion (ADC_HandleTypeDef * hadc, uint32_t Timeout)
功能:等待转换完成
参数: ADC_HandleTypeDef * hadc 句柄
uint32_t Timeout 超时时间
返回值好:转换状态
3)获取转换结果
uint32_t HAL_ADC_GetValue (ADC_HandleTypeDef * hadc)
功能:获取转换结果
参数:ADC_HandleTypeDef * hadc 句柄
返回值:转换结果
4)停止ADC
HAL_StatusTypeDef HAL_ADC_Stop (ADC_HandleTypeDef * hadc)
功能:停止ADC
参数:ADC_HandleTypeDef * hadc 句柄
返回值: 状态
5)串口输出转换结果
重定向printf到串口,再通过printf输出转换结果
多通道扫描模式单次转换
- 将PA1(多向按键)设置为ADC的输入通道
-
选择序列-扫描模式
-
编程实现
现在有两个通道需要转换且获取结果,当第一个通道转换完成时,会产生一个EOC信号,当整个序列转换完成时,会产生一个EOS信号
ADCx_ISR 中断和状态寄存器