当前位置: 首页 > news >正文

STM32 ADC工作原理与配置详解

文章目录

  • ADC
    • ADC简介
    • 逐次逼近型ADC
    • ADC框图
      • ADC框图的工作流程(以规则组为例)
        • 1. 输入通道选择与信号接入
        • 2. 触发转换:软件或硬件触发
        • 3. 采样保持与量化编码
        • 4. 转换结果处理与存储
        • 5. 状态标志与中断
        • 6. 参考电压与时钟驱动
        • 7. 辅助功能:模拟看门狗
      • 关键流程总结
      • 与多通道模式的差异
    • ADC基本结构
    • 输入通道
    • 转换模式
      • 单次转换,非扫描模式
      • 连续转换,非扫描模式
      • 单次转换,扫描模式
      • 连续转换,扫描模式
    • 触发控制
    • 数据对齐
      • 数据右对齐
      • 数据左对齐
    • 转换时间
    • 校准
    • 硬件电路
    • ADC 与 DAC/PWM 对比

ADC

ADC简介

ADC(Analog-Digital Converter)模拟-数字转换器

ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

12位逐次逼近型ADC,1us转换时间

输入电压范围:03.3V,转换结果范围:04095

18个输入通道,可测量16个外部和2个内部信号源

规则组和注入组两个转换单元

模拟看门狗自动监测输入电压范围

STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道

ADC 基础定义

  • 全称:Analog to Digital Converter(模拟数字转换器)。

  • 功能:将连续变化的模拟电压(如 0~3.3V)转换为离散的数字信号(如 0~4095 的整数),实现模拟电路与数字电路的交互。

  • 对比 GPIO

    • GPIO 仅能识别高电平(3.3V)或低电平(0V),无法测量中间电压。
    • ADC 可量化中间电压,例如 1.65V 对应原始数据 2048(即 3.31.65×4095=2047.5≈2048)。

    STM32 ADC 关键参数

    参数说明
    分辨率12 位,可表示 2^12=4096 个量化等级,精度为 3.3V / 4095 ≈ 0.805mV
    转换时间最快 1μs(当 ADC 时钟为 14MHz 且采样时间最短时)。
    输入范围0~3.3V(由参考电压 VREF+ 决定,通常与 VDDA 3.3V 绑定)。
    通道数量18 个(16 个外部 GPIO 通道 + 2 个内部通道:温度传感器、参考电压)。
    转换单元- 规则组:处理常规转换(最多 16 个通道,需配合 DMA 防止数据覆盖)。 - 注入组:处理紧急中断转换(最多 4 个通道,独立数据寄存器)。

逐次逼近型ADC

逐次逼近型 ADC 工作原理

  • 核心逻辑:通过二分法逐次比较,从最高位到最低位确定每一位的二进制值。

    • 示例(8 位 ADC)
      1. 初始猜测中间值 128(0x80),比较 DAC 输出电压与输入电压。
      2. 若输入电压更高,保留最高位 1,下次猜测 192(0xC0,128+64);若更低,最高位 0,下次猜测 64(0x40)。
      3. 重复 8 次,确定所有位,最终得到 8 位二进制编码。
  • STM32 内部实现

    • 集成 12 位逐次逼近寄存器(SAR),配合模拟多路开关选择通道。

    • 转换结果存储在 16 位数据寄存器中,支持右对齐(低 12 位有效)和左对齐(高 12 位有效)。

    • ADC0809工作流程

      1. 输入通道选择
        • 通道结构:具备 8 路输入通道(IN0-IN7),可通过 3 位地址线(A、B、C)选择具体通道。
        • 地址锁存:地址信号经 “地址锁存与译码电路” 锁存,控制 “通道选择开关” 接通对应输入通道,将模拟信号送至电压比较器。
      2. 逐次逼近转换
        • 核心部件:由 “逐次逼近寄存器(SAR)”、“数模转换器(DAC)” 和 “电压比较器” 构成闭环反馈系统。
        • 二分法比较
          • 转换开始时,SAR 从最高位(D7)开始逐位试探,先置 D7=1,其余位 = 0,经 DAC 输出半满量程电压(如 5V 参考电压下为 2.5V),与输入电压比较。
          • 若输入电压≥DAC 输出电压,保留该位(D7=1);否则清零(D7=0)。
          • 依次对 D6-D0 重复上述过程,经 8 次比较后确定 8 位二进制编码。
      3. 时钟与控制信号
        • 时钟(CLK):驱动内部逻辑电路,典型频率为 500kHz,决定转换速度(约 100μs / 次)。
        • 启动信号(START):脉冲触发转换,上升沿复位 SAR,下降沿启动转换。
        • 转换结束信号(EOC):转换完成时变为高电平,可作为中断请求或查询信号。
      4. 数据输出
        • 转换结果存入 8 位数据寄存器,通过三态输出缓冲器与单片机数据总线连接,可直接读取数字信号(D7-D0)。
      5. 参考电压(VREF)
        • 决定输入电压范围,通常接 5V,此时输入范围为 0-5V;也可外接可调参考电压,灵活调整量程。

      总结:ADC0809 通过 “地址选择→逐次比较→时钟驱动→数据输出” 的流程,实现模拟信号到数字信号的转换,其逐次逼近原理和多通道选择能力使其在早期单片机系统中广泛应用,尤其适合低速、多通道数据采集场景。

在这里插入图片描述

ADC框图

ADC框图的工作流程(以规则组为例)

1. 输入通道选择与信号接入
  • 通道类型
    • 外部通道:16 个 GPIO 引脚(如 PA0-PA15),可直接接入模拟电压信号(0~3.3V)。
    • 内部通道:2 个(温度传感器、内部参考电压 VREFINT),无需外部接线。
  • 选择逻辑
    • 通过 模拟多路开关(Analog Multiplexer) 选中目标通道(如规则组序列中的通道)。
    • 扫描模式下:按序列依次切换通道(如序列 1 到序列 16),非扫描模式仅固定选择单个通道。
2. 触发转换:软件或硬件触发
  • 触发源
    • 软件触发:程序调用函数(如 ADC_SoftwareStartConv())发送 START 信号。
    • 硬件触发:来自定时器(如 TIM3 的 TRGO 事件)或外部中断引脚,通过配置 ADC_CR2 寄存器选择。
  • 触发流程
    • 触发信号激活后,ADC 进入 采样阶段,通过采样保持电路对输入电压进行采样。
3. 采样保持与量化编码
  • 采样阶段
    • 采样开关闭合:采样电路,就记录此时的输入电压,防止电压的不断变化造成后期量化的不准确,电容充电至输入电压值,持续时间由 采样时间寄存器(ADC_SMPR) 配置(如 1.5~239.5 个 ADC 周期)。
    • 抗干扰作用:较长采样时间可抑制高频噪声,但会延长转换周期。
  • 量化编码阶段
    • 逐次逼近寄存器(SAR):从最高位(第 11 位)开始,通过二分法逐位确定每一位的二进制值。
    • 数模转换器(DAC):根据 SAR 的当前值生成参考电压,与采样保持的电压在 电压比较器 中对比。
    • 比较反馈:若输入电压 ≥ DAC 电压,该位保留为 1;否则为 0,直至最低位(第 0 位)确定,完成 12 位编码。
4. 转换结果处理与存储
  • 数据寄存器
    • 规则组:仅 1 个数据寄存器(ADC_DR),扫描模式下若未使用 DMA,仅保留最后一个通道的结果。如果不进行处理就出现数据覆盖。
    • 存储格式:支持 右对齐(默认)左对齐,右对齐时低 12 位为有效数据,左对齐时高 12 位为有效数据。
  • DMA 搬运(可选)
    • 在扫描模式下,通过 DMA 请求 将转换结果自动搬运至内存,避免数据覆盖(需提前配置 DMA 通道)。
5. 状态标志与中断
  • 转换完成标志(EOC)
    • 转换结束后,状态寄存器(ADC_SR)中的 EOC 位自动置 1,可通过轮询或中断方式检测。转化完成后就可以读取数据,或者使能中断,申请中断。
  • 中断响应
    • 若使能 中断功能(配置 ADC_IT_EOC),EOC 信号会触发 NVIC 中断,在中断服务函数中读取结果。
6. 参考电压与时钟驱动
  • 参考电压(VREF+)
    • 决定输入电压范围(通常为 0~VREF+),STM32 内部默认与 VDDA(3.3V)绑定,无需外接。
    • 校准作用:通过内部参考电压通道(VREFINT)可校准外部供电偏差。
  • 时钟(ADC_CLK)
    • 来源:由系统时钟(APB2,72MHz)经预分频器分频得到,最大允许频率为 14MHz(需配置 RCC 寄存器)。
    • 转换时间计算Tconvert=采样时间+12.5×TADC_CLK
      例如:ADC_CLK=14MHz(周期≈71.4ns),采样时间 = 1.5 周期,则总转换时间 = (1.5+12.5)×71.4ns≈1μs。
7. 辅助功能:模拟看门狗
  • 阈值监测
    • 预先设置 上限阈值(THR)下限阈值(TLR),实时监测转换结果。
    • 若结果超出阈值范围,触发 模拟看门狗中断,可用于异常信号报警(如温度超限)。

关键流程总结

输入信号通道选择采样保持触发信号逐次逼近转换结果存储数据输出/中断响应

与多通道模式的差异

  • 单通道模式(非扫描):仅转换单个通道,无需配置序列,适合简单电压监测。
  • 多通道模式(扫描):需配置规则组序列(最多 16 通道),依赖 DMA 搬运数据,适合复杂数据采集场景。

在这里插入图片描述

ADC基本结构

后面会根据这张图写程序,进行代码中参数配置等操作。

在这里插入图片描述

输入通道

输入通道与引脚映射

  • 外部通道
    • PA0PA7、PB0PB1、PC0~PC5(共 16 个),但 STM32F103C8T6 仅引出 10 个(PA0~PA9)。
  • 内部通道
    • 通道 16:内部温度传感器,用于测量 CPU 温度,计算公式:温度(∘C)=A**vg_SlopeVTS−V25+25
      (其中 VTS​ 为传感器电压,V25​ 为 25℃ 时电压,Avg_Slope 为温度系数)。
    • 通道 17:内部参考电压(1.2V 左右),用于校准外部供电偏差。
通道ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC3PC3PC3
通道14PC4PC4
通道15PC5PC5
通道16温度传感器
通道17内部参考电压

转换模式

模式分类具体模式特点
按转换次数单次转换触发一次,转换一个通道或一组通道,完成后停止。
连续转换触发一次后循环转换,无需重复触发。
按通道数量非扫描模式每次仅转换单个通道(规则组序列 1)。
扫描模式按序列依次转换多个通道(规则组最多 16 个,需 DMA 搬运数据)。

单次转换,非扫描模式

在这里插入图片描述

连续转换,非扫描模式

在这里插入图片描述

单次转换,扫描模式

连续转换,扫描模式

在这里插入图片描述

触发控制

触发方式

  • 软件触发:程序中调用函数启动转换(如 ADC_SoftwareStartConvCmd())。
  • 硬件触发:通过定时器(如 TIM3 更新事件)或外部中断引脚自动触发,减少 CPU 干预。
    在这里插入图片描述

数据对齐

数据对齐

  • 右对齐:12 位数据存放在寄存器低 12 位(默认方式),直接读取即可得到原始值。
  • 左对齐:12 位数据存放在寄存器高 12 位,低 4 位补 0,适用于需要降低分辨率的场景(如转换为 8 位数据)。

数据右对齐

在这里插入图片描述

数据左对齐

在这里插入图片描述

转换时间

AD转换的步骤:采样,保持,量化,编码

STM32 ADC的总转换时间为: TCONV = 采样时间 + 12.5个ADC周期

例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期

​ TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

校准

自校准功能

  • 目的:消除内部电容误差,提高转换精度。
  • 操作:每次上电后执行一次校准,通过库函数 ADC_ResetCalibration()ADC_StartCalibration() 实现。

在这里插入图片描述

硬件电路

三种形式:分压电阻的形式,上下拉电阻的形式(一般上下拉电阻的阻值相近一点,这样会是PA1 输出较为中间值),最后一个想要实现3.3v的输出,也是通过分压来实现的。

传感器接口电路

  • 分压电路
    • 光敏电阻、热敏电阻等传感器需与固定电阻串联,通过分压得到 ADC 可接收的电压。
    • 示例:光敏电阻(暗电阻 100kΩ)与固定电阻(10kΩ)串联,电源 3.3V:
      • 无光照时,光敏电阻阻值高,输出电压接近 3.3V(如 3.0V);
      • 有光照时,光敏电阻阻值低,输出电压接近 0V(如 0.3V)。
  • 电压转换电路
    • 若输入电压超过 3.3V(如 5V),需用电阻分压衰减,例如 17kΩ 与 33kΩ 串联,将 5V 分压为:
      • Vout = 5V×(17kΩ+33kΩ)/33kΩ = 3.3V
        在这里插入图片描述

ADC 与 DAC/PWM 对比

模块功能典型应用优势
ADC模拟信号转数字信号传感器数据采集、电压监测精度高、支持多通道
DAC数字信号转模拟信号波形生成、音频解码线性度好
PWM数字信号等效模拟信号(脉冲)电机调速、LED 亮度控制功耗低、电路简单
  • 注意:STM32F103C8T6 无内置 DAC,需通过 PWM 模拟 DAC 功能。
http://www.xdnf.cn/news/697591.html

相关文章:

  • 渐进够增强和优雅降级的区别
  • 8.5 Q1|中山大学CHARLS发文 | 甘油三酯葡萄糖-腰身高比指数与中国中老年人心血管疾病的关系
  • (8)python+ selenium自动化测试-获取当前页面的title
  • MCU与CPU时钟概念详解:从基础到面试高频问题
  • 第三届宁波技能大赛网络安全赛项样题
  • uniapp-商城-73-shop(6-商品列表,步进器添加数据到购物车,步进器数据同步(深度监听))
  • STM32定时器的死区时间(DTR)如何计算
  • Cancer Cell|从临床病例到AI空间组学 | 空间生物标志物如何精准预测HER2阳性乳腺癌ADC疗效?
  • 瑞数6代jsvmp简单分析(天津电子税x局)
  • B2146 Hermite 多项式
  • 15.为什么HashMap的容量是2的幂次方
  • 编译与链接,咕咕咕
  • 2.2 C++之循环结构
  • 弧度 = 弧长与半径的比值
  • Vitrual Studio调试windows应用程序如何打开控制台
  • 算法-背包问题
  • 火热邀测!DataWorks数据集成支持大模型AI处理
  • 让DeepSeek去除AI痕迹的指令
  • 数据库管理:探寻高效之路
  • webpack打包基本配置
  • 图像融合质量评价指标
  • cmake学习day01
  • [CARLA系列--03]如何打包生成CARLA 0.9.15的非编辑版(地图的加载与卸载)
  • NW845NW850美光闪存颗粒NW883NW889
  • 把数据库做得能扩展:Aurora DSQL 的故事
  • AxumStatusCode细化Rust Web标准格式响应
  • 配置vscode中java.configuration.runtimes
  • Java设计模式之命令模式详解
  • XJTU-SY轴承振动数据集的json自封装
  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models