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

STM32的ADC简介

一、ADC简介

STM32的ADC是一种12位逐次逼近型模拟数字转换器。它具备18个通道,能够测量16个外部信号源以及2个内部信号源。各通道的A/D转换可以执行单次、连续、扫描或间断模式。转换结果可采用左对齐或右对齐的方式(12位)存储于16位数据寄存器中。

二、ADC特点

ADC(Analog-Digital Converter)即模拟-数字转换器,可将引脚上连续变化的模拟电压转换为存储于内存中的数字变量,从而搭建起模拟电路与数字电路之间的桥梁。该ADC为12位逐次逼近型,转换时间为1us。其输入电压范围为0~3.3V,转换结果范围为0~4095。拥有18个输入通道,可测量16个外部和2个内部信号源。具备规则组和注入组两个转换单元,且模拟看门狗能够自动监测输入电压范围。

STM32F103C8T6的ADC资源包括ADC1和ADC2,拥有10个外部输入通道。

12位代表ADC的分辨率,其数值范围为0~2^12-1;

1us表示从转换开始到产生结果所需的最短时间为1us,对应的AD转换频率为1MHz;

16个外部信号源即16个GPIO口,引脚可直接测量电压;

2个内部信号源分别是内部温度传感器(用于测量CPU温度)和内部参考电压(基准电压约为1.2V,不随外部供电电压变化,可用于校准外部引脚电压);

三、ADC功能图

  1. 逐次逼近型ADC芯片结构框图

2. ADC框图

四、ADC基本结构

从左侧来看,有18个信号源进入AD转换器,可选择16个规则组和4个注入组,转换完成的结果会存储于AD数据寄存器,其中规则组有1个,注入组有4个。触发数据转换的触发控制部分提供软件触发和硬件触发两种方式。右侧推动ADC逐次比较的时钟CLOCK来源于RCC时钟。模拟看门狗位于上方,用于监测转换结果的范围,一旦超出阈值便会申请中断。规则组和注入组转换完成后会产生EOC信号,会设置标志位,同时也可以申请中断。

五、输入通道

 六、转换模式

ADC可选择单次转换或连续转换,扫描或非扫描模式,它们的不同组合会产生四种模式。

1. ADC单通道

- 单次转换,扫描模式失能:转换一次后停止,再次启动转换需重新触发;

- 连续转换,扫描模式失能:转换一次后自动进入下一轮转换,只需在开始时触发一次;

2. ADC多通道

- 单次转换,扫描模式使能:ADC的多个通道按配置顺序依次转换,完成后停止,再次启动需重新触发;

    - 连续转换,扫描模式使能:ADC的多个通道按配置顺序依次转换,完成后继续下一轮,开始时触发一次即可。在扫描模式下,下一次的刷新会覆盖上一次的值,且可通过DMA传输数据。

七、触发控制

# 八、数据对齐

12位ADC转换器的转换结果为12位数据,但数据寄存器为16位,因此存在数据对齐问题。

1. 数据右对齐:十二位数据靠右,高位补0;

2. 数据左对齐:十二位数据靠左,低位补0;

九、转换时间

ADC的转换过程包括采样、保持、量化和编码四个步骤。

Tconv = 采样时间 + 12.5个ADC周期(采样时间是采样与保持的时间总和;12.5个ADC周期是量化与编码所需的时间)(ADC周期是从RCC分频而来的ADCCLK,最大值为14MHz)

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

Tconv = 1.5 + 12.5 = 14个ADC周期 = 1us

采样时间短可提高速度,采样时间长则能避免毛刺干扰。

十、校准

ADC具备内置自校准模式。校准可显著降低因内部电容器组变化导致的精度误差。校准过程中,每个电容器上都会计算出一个误差修正码(数字值),该码用于消除后续转换中每个电容器产生的误差。

建议每次上电后执行一次校准。

启动校准前,ADC需处于关电状态至少两个ADC时钟周期。

http://www.lryc.cn/news/2400654.html

相关文章:

  • Bash shell四则运算
  • (javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常
  • 力扣刷题Day 70:在排序数组中查找元素的第一个和最后一个位置(34)
  • vue 多端适配之pxtorem
  • 图片压缩工具 | 图片属性详解及读取解析元数据
  • React---day8
  • C# Onnx 动漫人物人脸检测
  • C++内存列传之RAII宇宙:智能指针
  • PVE 虚拟机安装 Ubuntu Server V24 系统 —— 一步一步安装配置基于 Ubuntu Server 的 NodeJS 服务器详细实录1
  • GitHub 趋势日报 (2025年06月03日)
  • 出现dev/nvmeOnip2 contains a file system with errors, check forced 解决方法
  • Vue3.5 企业级管理系统实战(二十二):动态菜单
  • 磨皮功能 C++/C的OpenCV 实现
  • 蓝牙防丢器应用方案
  • TDengine 开发指南——高效写入
  • Linux kill 暂停命令
  • Unity与Excel表格交互热更方案
  • LVS、NGINX、HAPROXY的调度算法
  • C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据
  • 分布式微服务系统架构第143集:pom文件
  • 2.0 阅读方法论与知识总结
  • 5. Qt中.pro文件(1)
  • 第八部分:第三节 - 事件处理:响应顾客的操作
  • 共识机制全景图:PoW、PoS 与 DAG 的技术对比
  • 学习笔记085——Spring Data JPA笔记
  • 可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana
  • 内网穿透:打破网络限制的利器!深入探索和简单实现方案
  • 如何选择合适的哈希算法以确保数据安全?
  • 简数采集技巧之快速获取特殊链接网址URL方法
  • React 性能监控与错误上报