027 - STM32学习笔记 - ADC初识(一)

026- STM32学习笔记 - ADC初识(一)

在这里插入图片描述

前几天不小心把板子掉地上了,液晶屏摔坏了,暂时先停一下液晶屏的学习,等新的板子来了再继续学习。

一、ADC介绍

ADC指的是Analog to Digital Converter(模数转换器),即将连续变化的模拟信号转换为数字信号,常见的模拟信号有例如:压力、温度、声音等,我们可以将诸如上面说的集中通过模数转换器将其转换为更容易存储的数字信息。

二、ADC结构框图

在这里插入图片描述

2.1 电压输入范围

在ADC中输入电压模拟量,并不是什么电压范围都可以直接输入的,我们知道MCU的电源电压一般都为0-3.3V,而429中ADC的输入范围为VREF- ≤ VIN ≤ VREF+。设计时,是将VSSA和VREF-接地,把VREF+和VDDA接3.3V,因此ADC的输入电压范围就是03.3V。我们在常见的模拟量一般为05V、010V或者-10V+10V,针对于这些电压比较高的,可以在外部增加转换电路,将电压转换为0~3.3V即可。

2.2 输入通道

在F429上面,一共有三个独立的ADC 1/2/3,其分辨率有6/8/10/12位可选,每个ADC具有19个通道,其中外部通道共有16个。这就相当于可以采集3*16=48路模拟量信号(通道数不代表可以同时使用的通道数,具体看下表)。

ADC IO分配

ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1PF3
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC3PC3PC3
通道14PC4PC4PF4
通道15PC5PC5PF5
通道16连接内部VSS连接内部VSS连接内部VSS
通道17连接内部Vrefint连接内部VSS连接内部VSS
通道18连接内部温度传感器/内部VBAT连接内部VSS连接内部VSS

这里我们可以看到在三组通道中,前两组ADC1、ADC2的引脚0-15一致,ADC3与ADC1/2的第4-10、14-15共8个通道引脚不同,因此假如我们在使用过程中,假如ADC1/2的引脚全部用完,也可以使用ADC3通道中这8个引脚,因此实际429的ADC通道可以同时使用引脚数一共为16+8=24组

除了以上说的引脚外,ADC1/2/3的1618位内部通道,ADC2/3的1618引脚全部连接到内部VSS,ADC1的通道16连接到VSS,通道17连接到内部参考电压VREFINT,通道18连接的为芯片内部温度传感器或者备用电源VBAT

外部使用的16个通道,在转换时区分为规则通道和注入通道,其中规则通道最多为16路,注入通道最多为4路,其区别如下:

规则通道:从字面上理解,就是规规矩矩的做模数转换的通道。

注入通道:可以强制插入到规则通道中,并且注入通道一定是在存在规则通道时才会存在。

这里举个不恰当的例子来说明一下规则通道和注入通道的区别,假如有一个房子,房子外面一共有16个监控摄像头,房子内有4个监控摄像头,监控系统正常情况下是显示外面16个摄像头的内容,这些内容是由监控系统挨个去扫描数据从而显示的,当我们需要看室内的情况时,可以通过监控系统的切换,暂时不接收室外视频数据流,从而只显示室内摄像头的数据流,看完后再自动切换回室外摄像头数据流。这里室外摄像头就相当于规则通道,室内摄像头则为注入通道。

2.3 转换顺序

根据上面通道的分类,转换顺序可分为规则序列和注入序列,分别由不同的寄存器进行控制。

规则序列

控制规则序列的寄存器有3个,分别为SQR3、SQR2、SQR1,每个SQR寄存器有5位,取值范围为1-16,对应通道ADCx_IN[0-15]。其中SQR3控制规则序列中前6个通道(这里说的前6个通道,不是物理意义上的0-5通道,而是顺序)。比如我们想在第一次采集第ADCx_IN15通道的数据,那么在SQ1[4:0]中写入16即可。SQR2控制转换序列中第712个通道,SQR1则控制第1316个通道,可能我们一次接入的转换通道不够16位,那么具体需要转换多少位,则由SQR1的L[3:0]来控制。规则序列寄存器配置如下表:

在这里插入图片描述

注入序列

注入序列寄存器只有一个JSQR,最多支持4个通道,具体多少有JSQR的JL[2:0]决定,如果JL的值小于4的时候,JSQR跟SQR决定转换顺序的设置不一样,第一次转换的位JCQRx[4:0],其中x=4-JL,跟SQR的顺序相反。如果JL = 0时,表示只有1个转换,那么转换顺序就从JSQR4开始,如果JL = 4,转换顺序就跟SQR一致。注入序列寄存器配置如下表:

在这里插入图片描述

2.4 触发源

ADC转换起始和结束可以有ADC的控制寄存器2:ADC_CR2的ADON位来控制,写入1时启动转换,写入0时停止转换。同时也可以通过外部事件触发转换,可以设置为内部定时器触发或者外部IO触发,具体选择哪种触发源由ADC控制寄存器2:ADC_CR2的EXTSEL[3:0]JEXTSEL[3:0]位控制,其中EXTSEL[3:0]用于选择规则通道的触发源,JEXTSEL[3:0]选择注入通道的触发源。触发源选定后,是否需要激活有ADC的控制器2:ADC_CR2的EXTTRIGJEXTTRIG这两位激活。

在这里插入图片描述

若设置为外部触发,可以通过设置ADC寄存器2:ADC_CR2的EXTEN[1:0]JEXTEN[1:0]来控制触发极性,可以设置为:禁止触发检测、上升沿检测、下降沿检测以及上升沿下降沿军检测。

2.5 转换时间

ADC时钟

作为一个外设,ADC同样也需要开启时钟,ADC的输入时钟ADC_CLK有PCLK2经过分频产生,最大值为36MHz,分频因子由ADC通用控股之寄存器ADC_CCR的ADCPRE[1:0]设置,可设置的分频系数有2、4、6和8分频,由于PCLK2一般我们设置的为90MHz,所以这里我们可以将分频系数设置为4分频(90MHz/4 = 22.5MHz),或者设置为6分频(90MHz/6 = 15MHz)。这里注意,VDD我们接的时3.3V,时钟周期看VDDA = 2.4 to 3.6V

在这里插入图片描述

采样时间

ADC对输入的电压进行周期性采集,采样的周期数通过采样时间寄存器ADC_SMPR1和ADC_SMPR2中的SMP[2:0]位进行设置,ADC_SMPR1用于控制通道09,ADC_SMPR2用于控制1017。每个通道可以设置不同的时间进行采样。采样周期可设置的最小值为3个周期,周期即为1/ADC_CLK。

ADC的转换时间跟ADC的输入时钟和采样周期相关,公式为:
T c o n v = 采样时间 + 12 个周期 Tconv = 采样时间 + 12个周期 Tconv=采样时间+12个周期
当PCLK2 = 90MHz时,经过ADC预分频器分频得到的最大时钟为22.5MHz,采样周期设置为最快采样周期,即3个周期,那么Tconv = 3 + 12 = 15个周期 = 15 * (1/22.5) = 0.6667us。

2.6 数据寄存器

前面对于ADC的转换序列分为规则数列和注入序列,为了设置这两组序列,分别存在规则数据寄存器ADC_DR和注入数据寄存器ADC_JDRx,ADC将模拟量转为数字量时,根据其转换组别不同,数据存入的寄存器也不同,其中规则组的数据存放在ADC_DR寄存器,而注入组的数据则是存放在JDRx中。如果使用的时双重或者三重模式,那么规则组的数据则是存放在规矩寄存器ADC_CDR中。

规则数据寄存器ADC_DR

规则组数据寄存器ADC_DR只有一个,是一个32位的寄存器,其中只有低16位有效,并且只是用于独立模式存放转换完成的数据,因为ADC的精度最大为12位,而ADC_DR是16位有效,因此ADC存放数据时,需要选择左对齐或者右对齐,具体选择哪种方式,由ADC_CR2的11位ALIGN设置,比如:设置ADC精度位12位,如果设置数据位左对齐,那么转换完成的数据存放在ADC_DR寄存器的[4:15]位中,如果设置为右对齐,则存放在ADC_AR寄存器的[0:11]位中。

这里需要注意的是,前面学习到前面规则序列时,知道规则序列一共有16个,但是因为规则数据寄存器只有1个,如果多通道转换时,所有转换的数据都会全部存储到ADC_DR寄存器中,存储的先后顺序也会随着转换完成通道的先后顺序依次进行**覆盖**,如果没有及时取走转换成的数据,可能就会被下一个通道转换完成的数据给覆盖掉,这里就需要使用ADC状态寄存器的ADC_SR来获取ADC转换的进度状态,从而保证转换数据能正常获取。

当然除了这种办法外,还可以启用DMA模式,将转换完成的数据传输到内存中,这样就不会存在数据的覆盖了,具体如何实现,等后面我们在学习。

注入数据寄存器ADC_JDRx

注入组与规则组不同,注入组共有4个数据寄存器,刚好对应4个通道,因此不存在与规则组一样有数据覆盖的问题。ADC_JDRx同样时32位寄存器,低16位有效,高16位保存,数据同样也分左对齐和右对齐,具体以哪种方式存放,由ADC_CR2的11位ALIGN设置。

通用规则数据寄存器ADC_CDR

规则数据寄存器ADC_DR只是用与独立模式,即上面说的ADC1/2/3只启用任意一组,而通用规则数据寄存器ADC_CDR则适用于双重和三重模式(双重模式为启用任意两组ADC通道,三重则为3个通道都启用),此处需要注意的是,双重或三重模式下尽可能配合DMA数据传输使用。

2.7 中断

ADC在完成数据转换后,可以产生中断,其中中断分为4种,分别为:

  • 规则通道转换结束中断
  • 注入转换通道转换结束中断
  • 模拟看门狗中断
  • 溢出中断
  • DMA请求

前面两个中断比较好理解,就是表示ADC正常转换结束后触发的中断,可以通过相应的中断标志位和中断使能写出配套的中断服务程序。

模拟看门狗中断

在前面我们了解到,ADC的输入范围为VREF- ≤ VIN ≤ VREF+,其中VREF- ~ VREF+为ADC转换采集的模拟量阈值区间,假如采集的模拟量电压低于VREF-或者高于VREF+,这种情况该怎么办呢?为了因对输入模拟电压超出阈值区间,这里需要开启模拟看门狗中断,低阈值由ADC_LTR设置,高阈值由ADC_HTR设置,比如设置高阈值为2.5V,当模拟输入电压高于2.5V时,就会产生模拟看门狗中断,同理低阈值也一样。

溢出中断

如果发生DMA传输数据丢失,会置位ADC状态寄存器ADC_SR的OVR位,如果同时使能溢出中断,则在转换结束后会产生一个溢出中断。

DMA请求

ADC转换结束后,除了产生终端外,还可以产生DMA请求,将转换好的数据直接存储到内存中,对于独立模式的多通道AD转换使用DMA传输非常有必要,对于双重模式或者三重模式使用DMA可以说时必不可少的。可以避免丢失在下一次写入之前还未被读出的ADC_DR寄存器中的数据。

2.8 电压转换

模拟电压经过ADC转换后,是个相对精度的数字值,什么意思呢?在F429开发板中,ADC的输入电压范围设置位0~3.3V,假如此时我们设置采集精度为12位,那么当输入模拟电压达到3.3V时,12位寄存器就会被填满,此时我们如果通过串口以16进制打印出来,会发现并不是我们要的3.3V,而是FFF,那么才能将最终输出的数据转换为我们需要的数值呢?这里就用到了电压转换。
V o l t = V ∗ V o u t / 2 n Volt=V * Vout / 2 ^ n Volt=VVout/2n
其中,V为3.3V,Vout极为ADC_DR中的数值,n则表示我们选择的精度,上面的例子中,n = 12,因此假如此时输入模拟电压为3.3V时,那么输出应为3.3 * FFF / 2^12,即3.3 * 4096 /4096,即输出数据为3.3。

OK,关于ADC的基本知识就学习到这里,后面继续学习关于ADC的相关结构体并且进行实战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/142333.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

​2005/2008-2022逐年道路网分布数据

道路网(road network)指的是在一定区域内,由各种道路组成的相互联络、交织成网状分布的道路系统。全部由各级公路组成的称公路网。在城市范围内由各种道路组成的称城市道路网。 城市道路网由城镇管辖范围内的各种不同功能的干道和区域…

vmware 修改主机名称 hadoop 服务器环境配置(一)

如何在虚拟机配置主机名称: 1. 如图所示在/etc 文件夹下有个hosts文件。追加映射关系: #关系 ip地址 名称 192.168.164.20 hadoop20 2. 保存后,重启reboot即可

GoldWave 6.78中文免费激活版功能特色2024最新功能解析

GoldWave 6.78中文免费激活版是一款多功能、强大且用户友好的音频编辑工具。它为音乐制作人、播客主持人以及音频编辑爱好者提供了全面的编辑功能,让你能够创造出高质量的音频作品。无论你是在音乐制作、音频修复还是播客制作,GoldWave 都是一个值得一试…

第1关:构造函数与析构函数的实现

题目&#xff1a;根据.h写出.cpp 考点&#xff1a; 1.链表的默认构造&#xff0c; 拷贝构造&#xff0c;传参构造以及析构函数等。 代码&#xff1a; /********** BEGIN **********/ #include <cstdlib> #include <cstring> #include "LinkedList.h&…

卷积神经网络(1)

目录 卷积 1 自定义二维卷积算子 2 自定义带步长和零填充的二维卷积算子 3 实现图像边缘检测 4 自定义卷积层算子和汇聚层算子 4.1 卷积算子 4.2 汇聚层算子 5 学习torch.nn.Conv2d()、torch.nn.MaxPool2d()&#xff1b;torch.nn.avg_pool2d()&#xff0c;简要介绍使用方…

服务器常见问题排查(一)—cpu占用高、上下文频繁切换、频繁GC

一般而言cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的&#xff0c;可以使用jstack来分析对应的堆栈情况。 使用jstack排查占用率问题 当使用jstack排查占用率问题时&#xff0c;可以…

如何下载全国水系、铁路、土地、交通设施和运输相关数据?

​ 通过以下方法可以将全国水系、铁路、土地、交通设施和运输相关数据下载到本机。 方法/步骤 下载GIS地图下载器 http://www.geosaas.com/download/mapdownloader.exe&#xff0c;安装完成后桌面上出现”GIS地图下载器“图标。 2、双击桌面图标打开”GI…

11-13 spring整合web

spring注解 把properties文件中的key注入到属性当中去 xml配置文件拆分 -> import标签 注解开发中 import 实现 搞一个主配置类&#xff0c;其他配置类全部导入进来这个这个主配置类 而且其他配置类不需要 加上configuration注解 之前这个注解用于表示这是一个配置文件 …

【论文精读】Pose-Free Neural Radiance Fields via Implicit Pose Regularization

今天读的是一篇发表在ICCV 2023上的文章&#xff0c;作者来自NTU。 文章地址&#xff1a;点击前往 文章目录 Abstract1 Intro2 Related Work3 Preliminary4 Proposed Method4.1 Overall Framework4.2 Scene Codebook Construction4.3 Pose-Guided View Reconstruction4.4 Train…

Windows 微PE WePE_64_V2.3 PE模式下启用账号和修改密码

启动PE后&#xff0c;进入桌面打开运行dism程序 选择带有系统的盘符&#xff08;默认选的是PE盘&#xff09;&#xff0c;然后打开会话 选择左侧工具箱&#xff0c;然后右侧找到账户管理 然后就可以对已有账号进行管理了 结束。

【python自动化】Playwright基础教程(四)事件操作①高亮元素匹配器鼠标悬停

本文目录 文章目录 前言高亮显示元素定位 - highlighthighlight实战highlight定位多个元素 元素匹配器 - nthnth实战演示 元素匹配 - first&last 综合定位方式时间操作进行实战&#xff0c;巩固之前我们学习的定位方式。 这一部分内容对应官网 : https://playwright.dev/py…

Java SE 封装、包、static关键字和代码块

1.封装 1.1封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说 就是套壳屏蔽细节。 封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细…

关于反弹Shell个人的一些理解与学习收获

反弹Shell 概念&#xff1a; 反弹shell(reverse shell)&#xff0c;就是控制端(攻击者所有)监听某TCP/UDP端口&#xff0c;被控端发起请求到该端口&#xff0c;并将其命令行的输入输出转发到控制端。reverse shell与telnet&#xff0c;ssh等标准shell对应&#xff0c;本质上是…

C++模拟实现——AVL树

AVL树 1.介绍 AVL树是对搜索二叉树的改进&#xff0c;通过特定的方法使得每个节点的左右子树高度差绝对值不超过1&#xff0c;使得避免出现歪脖子的情况&#xff0c;最核心的实现在于插入值部分是如何去实现平衡调整的&#xff0c;由于前面详细实现和解析过搜索二叉树&#x…

Android问题笔记四十四:关于RecyclerView出现Inconsistency detected崩溃

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

Linux---(六)自动化构建工具 make/Makefile

文章目录 一、make/Makefile二、快速查看&#xff08;1&#xff09;建立Makefile文件&#xff08;2&#xff09;编辑Makefile文件&#xff08;3&#xff09;解释&#xff08;4&#xff09;效果展示 三、背后的基本知识、原理&#xff08;1&#xff09;如何清理对应的临时文件呢…

vite 深入浅出

vite 深入浅出 简介 vite(轻量&#xff0c;轻快的意思) 是一个由原生 ES Module 驱动的 Web 开发前端构建工具。 浏览器原生 ESM&#xff1a;浏览器支持的 JavaScript 模块化标准&#xff0c;可以直接使用 <script type"module"> 标签加载模块&#xff0c;无…

第二证券:定增价公布后第二天股价表现?

近年来&#xff0c;定增成为一种较为老练的公司融资方法&#xff0c;它通过向指定政策定向发行股份来筹集资金&#xff0c;相关于非公开发行股票或增发股份&#xff0c;定增的市场轰动和价格变化相对较小。但是&#xff0c;定增股票发行通常会推动股价的不坚决和出资者的心境崎…

Prometheus+Ansible+Consul实现服务发现

一、简介 1、Consul简介 Consul 是基于 GO 语言开发的开源工具&#xff0c;主要面向分布式&#xff0c;服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。 在没有使用 consul 服…

【社会网络分析第5期】gephi使用指南

gephi数据可视化 gephi数据可视化1、软件安装2、数据处理与导入&#xff08;1&#xff09;导入节点&#xff08;2&#xff09;导入边&#xff08;3&#xff09;改变节点的颜色&#xff08;4&#xff09;根据pagerank调整节点的大小&#xff08;5&#xff09;根据pagerank调整边…