news 2026/6/17 18:29:23

【ADC控制器原理】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ADC控制器原理】

参考电压

分辨率

分辨率是ADC能够区分的最小电平的大小,分辨率通常以位数表示,例如:8位ADC、10位ADC、12位ADC等等,可以通过ADC_CR1.RES位进行配置。

输入通道

ADC通道指的是将模拟信号输入到ADC控制器的单个输入路径或者是信号通道,通常,一个ADC控制器可以具有多个输入通道,每个通道都可以连接到一个模拟信号源。

STM32F407上有三个ADC

外部通道:每个ADC控制器都有16个,来自外部的GPIO端口。

内部通道:只有ADC1控制器具有,有3个内部通道,通道16连接的是芯片内部的温度传感器;通道17连接的是芯片内部的参考电压;通道18连接的是电池或者是其它电源采集VBAT通道。

通过ADC通道进行输入的模拟电压的范围,VREF-≤ VIN ≤VREF

转换序列

当多个ADC 通道,以任意顺序进行转换时,就有了转换序列的概念。既然是序列,那么就有长度和顺序。长度:指的就是我们需要转换的通道个数;顺序:指的就是想以什么样的顺序转换需要转换的通道。转换序列有两种:规则序列和注入序列。

规则序列

规则转换序列可设置的长度最大为16,从规则序列1(SQ1),到规则序列16(SQ16),长度最大为16,所以,规则序列中最多可以放入16个通道进行转换。规则序列的转换顺序为,从规则序列1(SQ1)开始,依次进行转换,转换的个数就是我们设置的长度。

规则序列的设置

例如我们想转换通道0(IN0)、通道3(IN3)和通道15(IN15)三个通道,并且按照先转换通道3(IN3),再通道0(IN0),最后再转换通道15(IN15)的顺序进行转换,那就根据需要,设置规则序列相关寄存器,具体设置方法如下:

1、设置需要转换的规则序列长度(通过ADC_SQR1.L位)

当规则转换序列的长度设置为3时,规则序列的转换顺序和长度如 下侧图示:

2、为规则序列添加转换通道(通过ADC_SQRx.SQRn位)

ADC_SQRx寄存器有三个,ADC_SQR1、ADC_SQR2、ADC_SQR3,由于给规则序列添加需要转换的通道。

ADC_SQR3寄存器用于为规则序列1(SQ1)到序列6(SQ6)设置转换通道。

ADC_SQR2寄存器用于为规则序列7(SQ7)到序列12(SQ12)设置转换通道。

ADC_SQR1寄存器用于为序列13(SQ13)到序列16(SQ16)设置转换通道。

注入序列

注入序列的长度最大为4,从注入序列1(JSQ1),到注入序列4(JSQ4),长度最大为4,所以,注入序列中最多可以放入4个通道进行转换。注入序列的转换顺序与设置的注入序列长度有关。

注入序列的设置

例如我们想转换通道0(IN0)、通道3(IN3)和通道15(IN15)三个通道,并且按照先转换通道3(IN3),再通道0(IN0),最后再转换通道15(IN15)的顺序进行转换,那就根据需要,设置规则序列相关寄存器,具体设置如下:

1、注入序列的转换长度由ADC_JSQR.JL位设置

通过ADC_JSQR.JL位,设置注入序列转换长度为3。

2、为注入序列添加转换通道,由ADC_JSRQ.JSQx位设置

ADC_JSRQ.JSQ4位用于给注入序列4_JSQ4添加转换的通道

ADC_JSRQ.JSQ3位用于给注入序列3_JSQ3添加转换的通道

ADC_JSRQ.JSQ2位用于给注入序列2_JSQ2添加转换的通道

ADC_JSRQ.JSQ1位用于给注入序列1_JSQ1添加转换的通道

转换触发源

软件触发

规则序列的软件触发:当ADC控制器被使能后,若ADC_CR2.SWSTART位被写入1时,即可触发开始对规则序列中的通道进行转换。转换一旦开始,ADC_CR2.SWSTART位将会被控制器清0。

注入序列的软件触发:当ADC控制器被使能后,若ADC_CR2.JSWSTART位被写入1时,即可触发开始对注入序列中的通道进行转换。当转换开始时,ADC_CR2.JSWSTART位将会被控制器清0。

ADC控制器使能:简单来说就是给ADC控制器上电,通过向ADC_CR2.ADON位写1,即可上电ADC。

事件触发

外部触发转换,可以通过外部事件(例如,定时器捕获、EXTI中断线)触发转换,事件源可以通过ADC_CR2.EXTSEL(规则序列外部事件源选择)和ADC_CR2.JEXTSE(注入序列外部事件源选择)位进行选择。外部事件能够以所选的极性(上升沿、下降沿、上升和下降沿)触发转换。

注入序列存在的意义?

特性触发注入模式自动注入模式 (连续转换)
JAUTO 位状态0 (必须)1 (必须)
触发方式外部触发 / 软件触发规则通道完成后自动触发
连续转换❌ 不支持✅ 支持 (配合 CONT=1)
典型应用事件驱动型采样周期性规则 + 注入采样
数据处理每次触发后处理一次连续数据流,需 DMA 或中断处理

转换时间

ADC时钟

ADC外设挂载在APB2外设时钟总线上。ADC具有两个时钟,其来源都是APB2。

ADC的时钟1:用于模拟电路的时钟ADCCLK

此时钟决定了ADC通道的采样和转换的时间,此时钟来自于经可编程预分频器分频的APB2时钟,该分频器允许ADC在fpclk/2、fpclk/4、fpclk/6或fpclk/8下进行工作,分频器系数的选择可由ADC_CCR.ADCPRE位进行选择。但是需要注意的一点是:ADCCLK被允许的最大频率36MHz。

ADC的时钟2:用于数字接口的时钟

此时钟用于ADC控制器寄存器的读/写访问,此时钟等效APB2的时钟

可独立设置各通道的采样时间

扫描模式和非扫描模式

扫描模式的含义:

ADC 扫描模式是一种连续对多个输入通道进行转换的模式,这种模式下,ADC 会按照预先定义的顺序对多个输入通道轮流进行转换。

如果设置的序列长度大于1时,则为多通道转换,就需要使用扫描模式。

如果序列的长度为1时,则是单通道转换,单通道转换则不需要开启扫描模式。

注意:如果关闭了扫描模式,即使序列设置的长度大于1,ADC 仍然按照单通道进行转换。

扫描模式和非扫描模式的切换:

ADC的扫描模式和非扫描模式,由ADC_CR1.SCAN位进行控制ADC_CR1.SCAN= 0,禁止扫描模式,也就是使用非扫描模式ADC_CR1.SCAN= 1,使能扫描模式,也就是使用扫描模式。

单次转换模式和连续转换模式

连续转换模式的含义:

连续转换模式,指的是ADC 按照序列设置的长度,完成一次序列的转换后,回到序列头开始新一轮的转换。

注意:触发注入无法进行连续转换,注入序列想要连续转换的唯一例外情况是使用自动注入,将注入序列配置为在规则序列之后,自动转换。

单次转换模式的含义:

ADC 的单次转换模式,是指ADC 按照序列设置的长度,完成一次序列的转换后,ADC 停止。

数据寄存器和数据对齐

数据寄存器

数据寄存器有两类:一类是规则数据寄存器ADC_DR,另一类就是注入数据寄存器ADC_JDRx(x为1到4)。

规则数据寄存器只有一个,有效长度是16bit,用于存储规则序列中完成转换的通道的数据。规则序列中,设置的所有需要转换的通道,共用一个数据寄存器ADC_DR。

注入数据寄存器则有四个,有效长度是16bit,ADC_JDR1、ADC_JDR2、ADC_JDR3、ADC_JDR4,用于存储注入序列中通道的转换结果。ADC_JDRx中存储的数据与注入序列转换的先后顺序有关,ADC_JDR1用于存储注入序列中的第一个转换,ADC_JDR2用于存储注入序列中的二个转换,以此类推。

数据对齐

数据对齐,其实就是ADC 转换完成的结果,在数据寄存器中的存储方式,对齐方式有两种:左对齐和右对齐。数据寄存器的有效位是16 位,但是,ADC 转换出来的数字量实际占用的位数与分辨率有关,比如12 位ADC,只需要使用12位0和1的组合进行表示,12 位的数据,存储到16 位的数据寄存器中,也就规定了两种存储方式。一般常使用右对齐。

状态寄存器

模拟看门狗

各种模式组合

单次转换模式+非扫描模式

连续转换模式+非扫描模式

注意:触发注入无法进行连续转换,注入序列仅在自动注入模式下,可进行连续转换。

单次转换模式+扫描模式

连续转换模式+扫描模式

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 6:53:13

【教育AI Agent推荐系统揭秘】:3大核心技术驱动个性化学习升级

第一章:教育AI Agent学习推荐系统概述随着人工智能技术的快速发展,教育领域正逐步引入AI Agent以提升个性化学习体验。教育AI Agent学习推荐系统通过分析学生的学习行为、知识掌握程度和兴趣偏好,动态生成个性化的学习路径与资源推荐&#xf…

作者头像 李华
网站建设 2026/6/17 16:35:05

Dify企业级实战深度解析 (11)

一、学习目标 作为 Dify 工作流进阶实战篇,本集聚焦 “图文结合” 的知识传递需求,核心目标是掌握知识库检索与图片展示联动的工作流开发、图文关联配置、场景化展示优化:从知识库图文结构化处理到图片资源对接,从检索关键词与图…

作者头像 李华
网站建设 2026/6/17 18:09:59

代码审查中的测试要点深度解析

在敏捷开发与DevOps实践中,代码审查已成为质量保障的关键环节。对于软件测试从业者而言,参与代码审查不仅是从源头发现缺陷的重要手段,更是深化对系统理解、提升测试效能的宝贵机会。本文旨在系统梳理测试人员在代码审查过程中应关注的核心要…

作者头像 李华
网站建设 2026/6/15 17:50:27

为何要严格控制氩气中的氧含量以及氩气中微量氧检测传感器推荐

氩(高纯)是一种无色、无味、无毒的气体。它是地球大气中的第三常见元素,占据大气的0.934%。高纯氩是指氩的纯度达到了99.999%以上。氩具有多种优良性质。氩在大气中的含量很稳定,并且不会与其他元素发生反应,它是一种非常稳定的气体。其次&am…

作者头像 李华
网站建设 2026/6/15 7:13:40

如何用Python快速打造智能微信助手:Wechaty框架终极指南

你是否曾想过拥有一个24小时在线的微信助手,自动回复消息、管理群聊、推送通知?Python Wechaty框架让这个梦想触手可及!只需少量代码,就能打造功能强大的智能微信机器人,彻底解放你的双手。 【免费下载链接】python-we…

作者头像 李华
网站建设 2026/6/15 0:07:10

AnimatedDrawings:5步开启AI动画创作新世界

AnimatedDrawings:5步开启AI动画创作新世界 【免费下载链接】AnimatedDrawings Code to accompany "A Method for Animating Childrens Drawings of the Human Figure" 项目地址: https://gitcode.com/GitHub_Trending/an/AnimatedDrawings 想让孩…

作者头像 李华