问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F1系列微控制器ADC模数转换器详解

创作时间:
作者:
@小白创作中心

STM32F1系列微控制器ADC模数转换器详解

引用
CSDN
1.
https://blog.csdn.net/qq_55958175/article/details/145048640

一、ADC模数转换器

ADC(Analog-Digital Converter)即模拟-数字转换器,能够将引脚上连续变化的模拟电压转换为内存中存储的数字变量。STM32F1系列的ADC是12位逐次逼近型,转换时间为1us,频率为1MHz。输入电压范围为0-3.3V,转换结果在0到2^12-1之间,可以测量16个GPIO和两个内部信号源(温度传感器和内部参考电压)。STM32F1的ADC包含规则组和注入组两个转换单元,其中注入组用于紧急事件。此外,还配备了模拟看门狗以自动监测输入电压范围。

二、ADC的电路结构

1、逐次逼近型ADC

逐次逼近型ADC的工作原理是通过比较器和二分法来逐次逼近输入模拟值。具体来说,比较器会将输入的模拟电压与一个参考电压进行比较,根据比较结果逐步逼近真实值。例如,如果最大值为255(1111 1111),则首先比较255对应的电压,如果输入电压小于255,则比较127(0111 1111),依此类推,直到确定每一位的值。这个过程由时钟信号驱动,每次转换完成后会触发EOC(End of Conversion)信号。

2、STM32中的ADC电路结构

在STM32中,ADC电路结构主要包括16个GPIO口和两个内部信号源(温度传感器和参考电压),通过模拟多路开关进入ADC模数转换器。ADC模数转换器采用逐次逼近型电路结构,由时钟驱动,最大频率为14MHz。转换完成后,数据会被存储在规则组或注入组数据寄存器中,这些寄存器分别是16位和4*16位。规则组在使用多个ADC转换时需要使用DMA,否则只会保留最后一个ADC转换的结果。最后,规则组、注入组和模拟看门狗的转换结果都会通过ADC中断端口输出,并有各自的标志位。

3、STM33的ADC逻辑框图

(此处应有逻辑框图,但原文中未提供具体图片)

三、ADC配置要点

1、转换模式选择

在ADC中,可以通过控制量来选择转换模式,主要有单次模式和连续模式、扫描模式和非扫描模式,组合起来有四种模式:

2、数据对齐方式

数据对齐方式有左对齐和右对齐两种。一般情况下使用右对齐,这样读出来的值和实际值相同。值得注意的是,左对齐可以只读取高位,虽然会损失部分精度,但只需要读取一个字节。

3、转换时间

转换时间由采样时间和ADC转换时间共同构成。由于是12位ADC,大约需要12.5个ADC转换周期。采样时间越长,越能滤除毛刺信号。

4、ADC校准

在初始化时通常会对ADC进行校准,这是一个自动化过程,通过四条标准库代码执行。其原理是在电容上增加修正值来进行校准。这里的电容用于保存采样的电压,在保持阶段使用。

四、代码示例

本次实验将PA0口(ADC1的通道1)连接到一个滑动变阻器,用于测量电压值。以下是实验的主要步骤:

  1. 打开ADC和GPIO的时钟
  2. 配置ADC的预分频系数
  3. 初始化GPIO
  4. 配置数据选择器,选择ADC的通道
  5. 配置ADC的模数转换部分
  6. 使能ADC并进行校准

为了节省篇幅,完整的代码已上传至GitHub仓库:

STM32F103c8t6_learning/GPIO_std/STM32f1_ADC

请注意,HAL库的更新正在进行中,建议关注项目动态。

参考资料

  1. ADC模数转换器 - 哔哩哔哩
  2. AD单通道&AD多通道 - 哔哩哔哩
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号