ADC 模数转换器

目录

ADC 模拟-数字转换器

逐次逼近型ADC

ADC框图

ADC基本结构

输入通道

转换模式

触发控制

数据对齐

转换时间

校准

硬件电路

ADC 常用函数


本篇文章内容的前置知识为 TIM 编码器接口,如果不了解,可点击链接学习

TIM 编码器接口-CSDN博客

ADC 模拟-数字转换器

        在 STM32 系列微控制器中,ADC(Analog-Digital Converter,模拟-数字转换器) 是一种重要的外设模块,用于将连续变化的模拟电压信号转换为数字信号,便于数字电路进行后续处理。它在传感器数据采集、电压监测等场景中被广泛使用,起到连接模拟世界与数字系统的桥梁作用。

ADC 模块具有以下主要特点:
1. 分辨率为 12 位的逐次逼近型 ADC(SAR ADC),可以将输入的模拟电压精确转换为数字值,范围从 0 到 4095(共 2¹² 个等级)
2. 转换速度高,每次转换的典型时间约为 1 微秒(1 μs),适用于快速采样场景。
3. 输入电压范围为 0 ~ 3.3V,与芯片的参考电压一致。对应的数字结果从 0(代表 0V)到 4095(代表 3.3V)
4. 提供 18 个模拟输入通道,其中包括 16 个外部引脚输入通道,以及 2 个内部信号源(芯片内部温度传感器、内部参考电压)

支持两种转换方式:
        规则组:适合定期采样的标准数据采集流程。
        注入组:适合异步或中断触发的高优先级采样任务,具有更高的实时性。

        集成了 模拟看门狗(Analog Watchdog)功能,可用于自动监测某个模拟输入电压是否超出设定的上下限范围,并在异常时发出中断,增强系统的安全性。
        在 STM32F103C8T6 芯片中,包含 两个 ADC 模块(ADC1 和 ADC2),共支持 10 个外部输入通道,用户可根据应用场景选择合适的通道进行采样。

逐次逼近型ADC

        逐次逼近型 ADC(SAR ADC)是一种常见的模拟-数字转换器,它通过逐位比较输入模拟电压与 DAC(数模转换器)输出的电压,逐步逼近最终数字结果。每次比较确定一个二进制位,直到完成全部位数(如 8 位、12 位)为止。

上图是ADC0809 的结构框图,是一种具有多通道输入的 8 位逐次逼近型 ADC

模块功能
IN0 ~ IN7共 8 个模拟输入通道,最多可采集 8 路模拟信号
通道选择开关根据地址选择其中一路模拟信号进行采样
地址锁存与译码通过 ADDA、ADDB、ADDC 接收通道地址;ALE 锁存地址
比较器 + DAC + SAR实现逐次逼近转换,比较输入电压与 DAC 电压逼近过程
定时与控制控制 ADC 的启动与转换节奏,START 启动转换,EOC 表示转换完成
8 位三态缓冲器存储转换结果,经由 D0~D7 输出,OE 控制输出有效性
V_REF(+) / V_REF(-)设置参考电压范围,决定转换精度与量程

ADC框图

一、输入部分(左侧)
ADCx_IN0 ~ IN15:最多支持 16 路外部模拟信号输入
温度传感器、VREFINT:内部模拟通道
多路开关:选择哪个通道输入
注入通道 / 规则通道:
注入通道最多 4 个(优先级高,常中断触发)
规则通道最多 16 个(常用于自动采集)

二、控制与触发部分(底部)
JEXTSEL / EXTSEL 控制位:选择触发源
JEXTTRIG / EXTTRIG:控制是否启用外部触发
支持的触发源包括 TIM 定时器通道、TRGO 信号等
支持注入组与规则组分别配置不同的触发方式

三、转换与结果处理(中部与右侧)
模拟至数字转换器:12 位分辨率,进行逐次逼近转换
注入 / 规则通道结果寄存器:分别存储转换数据
可通过 DMA 自动传输规则组数据,减轻 CPU 负担

四、监测与中断(右上角)
模拟看门狗(AWD):可设置高/低阈值,实时监测电压异常
中断控制单元:
EOC:规则组转换完成
JEOC:注入组转换完成
AWD:电压异常
可配置中断标志位,触发 NVIC 响应

STM32 的 ADC 模块支持多通道采样、规则与注入双通道机制、多种触发方式、模拟看门狗与 DMA 功能,既灵活又高效,适合各种复杂的模拟信号采集场景。

ADC基本结构

1. 模拟信号输入
GPIO(16 路)、温度传感器、参考电压 VREFINT 等模拟源通过多路选择器接入
信号被分配到规则组(最多16路)或注入组(最多4路)

2. 启动与时钟控制
RCC 提供 ADC 时钟
触发控制器决定转换的启动方式(软件启动或外设触发)
转换开始后,AD 转换器逐步将模拟信号转换为数字量

3. 数据处理与存储
转换结果分别存入:
规则组结果寄存器(1个)
注入组结果寄存器(最多4个)
若启用,模拟看门狗可监测是否超出预设电压范围。

4. 中断与输出
转换完成发出 EOC 信号
若触发中断或电压异常,交由中断输出控制模块发送信号至 NVIC
NVIC 响应中断,进行数据处理或错误处理

输入通道

通道

ADC1

ADC2

ADC3

通道0

PA0

PA0

PA0

通道1

PA1

PA1

PA1

通道2

PA2

PA2

PA2

通道3

PA3

PA3

PA3

通道4

PA4

PA4

PF6

通道5

PA5

PA5

PF7

通道6

PA6

PA6

PF8

通道7

PA7

PA7

PF9

通道8

PB0

PB0

PF10

通道9

PB1

PB1

通道10

PC0

PC0

PC0

通道11

PC1

PC1

PC1

通道12

PC2

PC2

PC2

通道13

PC3

PC3

PC3

通道14

PC4

PC4

通道15

PC5

PC5

通道16

温度传感器

通道17

内部参考电压

转换模式

ADC 规则组常见转换模式有四种

转换模式转换类型特点说明应用场景
单次转换,非扫描模式单通道只转换一个通道,启动一次转换,转换完成即停止只需采集单一模拟信号,如电压采集
单次转换,扫描模式多通道一次启动,依次转换多个通道,全部转换完成后停止多个通道轮询采集一次,如多传感器采样
连续转换,非扫描模式单通道只采一个通道,但转换会自动重复进行,直到手动停止实时持续采集一个信号,如电池电压跟踪
连续转换,扫描模式多通道多通道轮流采样,自动循环进行,采集完成后再次开始多路模拟信号持续监测,如多路电压、电流

触发控制

数据对齐

ADC为12位,寄存器为16位,就需要用到数据对齐,一般使用右对齐

数据右对齐:

数据左对齐:

转换时间

AD转换的步骤:采样,保持,量化,编码
STM32 ADC的总转换时间为 TCONV = 采样时间 + 12.5个ADC周期
例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期
TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs
 

校准

        ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
建议在每次上电后执行一次校准
启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

硬件电路

ADC 常用函数

函数名功能主要参数
RCC_APB2PeriphClockCmd()使能 ADC1 和 GPIO 所在的外设时钟RCC_APB2Periph_ADC1 , ENABLE
RCC_ADCCLKConfig()配置 ADC 模块的时钟(PCLK2 分频)例:RCC_PCLK2_Div6 → 72MHz ÷ 6 = 12MHz(最大不能超过14MHz)
GPIO_Init()配置模拟引脚(如 PA0)为模拟输入GPIO_Pin_0,GPIO_Mode_AIN
ADC_RegularChannelConfig()配置规则组的通道、序号、采样时间ADC1, ADC_Channel_0, 1(序列1位置), ADC_SampleTime_55Cycles5
ADC_Init()初始化 ADC 的各种模式ADC1, &ADC_InitStructure(结构体包括扫描、连续、触发等设置)
ADC_Cmd()使能 ADCADC1, ENABLE
ADC_ResetCalibration()启动 ADC 校准复位操作(必须流程)ADC1
ADC_GetResetCalibrationStatus()轮询校准复位是否完成(RESET 表示完成)ADC1
ADC_StartCalibration()启动 ADC 校准ADC1
ADC_GetCalibrationStatus()判断校准是否完成ADC1
ADC_SoftwareStartConvCmd()软件触发一次 ADC 转换ADC1, ENABLE
ADC_GetFlagStatus()检查 ADC 状态标志位(如 EOC:转换结束)ADC1, ADC_FLAG_EOC
ADC_GetConversionValue()获取最近一次转换的结果ADC1,返回 uint16_t,范围 0~4095


ADC_InitTypeDef 结构体成员

成员说明
ADC_Mode模式选择,常用:ADC_Mode_Independent(独立)
ADC_ScanConvMode是否启用扫描模式(多个通道)
ADC_ContinuousConvMode是否启用连续转换
ADC_ExternalTrigConv外部触发源,None 表示手动(软件)触发
ADC_DataAlign数据对齐方式,常用 Right(右对齐)
ADC_NbrOfChannel转换的通道数,非扫描模式必须为 1

ADC 时钟(ADCCLK)必须小于 14 MHz,否则 ADC 结果会不准确;
校准操作是 STM32F1 的必须流程,一般只在初始化时做一次;
每次调用 ADC_GetValue() 都会触发一次 ADC 采样 → 等待转换结束 → 返回采样值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值