STM32-ADC模数转换器(7)

目录

一、ADC简介

二、逐次逼近型ADC

三、ADC基本结构图

四、规则组的四种转换模式

五、转换时间


对GPIO来说,它只能读取引脚的高低电平,使用了ADC模数转化器之后,就可以对高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量,就能得到引脚输入的具体电压是多少了。

ADC模数转化器就相当于一个电压表,把引脚的电压值测出来,放入一个变量中,这就是ADC的作用。

一、ADC简介

模拟-数字转换器简称ADC(Analog-Digital Converter),它可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。

数字-模拟转换器简称DAC,可以将数字变量转化成模拟电压,主要应用于波形生成(信号发生器、音频解码芯片)等。
PWM的功能与DAC相似,它只有完全导通和完全断开两种状态,在这两种状态上都没有功率损耗,所以在直流电机调速这种大功率的应用场景,使用PWM来等效模拟量,是比DAC更好的选择,且PWM电路更简单,而且更常用。

STM32中的ADC是12位逐次逼近型ADC,1us转换时间。


ADC还有两个关键参数,分别是分辨率和转换时间(转换频率)
分辨率就是用多少位来表示,这里12位,分辨率的表示范围就是0~2^(12-1),即量化结果的范围是0~4095,位数越高,量化结果越精细,对应分辨率就越高。
AD转换是需要一小段时间的,这里1us表示从AD转换开始到产生结果,需要花费1us的时间,对应AD的转换频率是1MHz,这个就是STM32的最快转换频率。

输入电压范围:0~3.3V,转换结果范围:0~4095
输入电压一般要求是在芯片供电的正极和负极之间变化,输入0-3.3V,经过AD转换后,就得到最小值0,最大值4095,中间也都是一一对应的线性关系。

ADC模数转换器共有16个输入通道,可测量16个外部和2个内部信号源
16个外部信号源就是16个GPIO口,在引脚上直接接模拟信号就可以,不需要任何额外的电路,引脚就可以测量电压值。
两个内部信号源分别是内部温度传感器和内部参考电压。
温度传感器可以测量CPU的温度,内部参考电压是一个1.2V左右的基准电压,这个基准电压不会随外部供电变化而变化,如果芯片的供电不是标准的3.3V,测量外部引脚的电压就会错误,这时就可以读取基准电压进行校准,就能得到正确的电压值了。

STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道,两个内部信号源温度传感器和内部参考电压都在ADC1上。
ADC12_IN0的意思是ADC1和ADC2的IN0都在PA0引脚上。

二、逐次逼近型ADC

输入部分:给地址锁存和译码一个通道的地址,就能让通道选择开关,选择其中一个通道打开。

比较部分:通过电压比较器,它可以判断两个输入信号电压的大小关系,输出一个高低电平,指示电压谁大谁小。它的两个输入端,一个是外部通道输入未知编码的电压,一个是DAC输出已知编码的电压,它俩同时输入到比较器,进行大小判断。如果DAC输出的电压比较大,就调小DAC数据;如果DAC输出电压比较小,就调大DAC数据,直到DAC输出电压和外部通道输入的电压近似相等,这样DAC输入的数据就是外部电压的编码数据了,这个电压调节的过程就是逐次逼近寄存器SAR来完成的。

为了最快找到未知电压的编码,通常是采用二分法来进行查找,比如8位的ADC,那编码就是0~255,第一次输入时,就给255的一半128进行比较,如果DAC大了,第二次比较就给128的一半64进行比较,以此类推。这些比较数据正好是二进制的每一位位权,这个判断过程就相当于是从高位到低位依次判断是1还是0的过程。

三、ADC基本结构图

左边是输入通道,包括16个GPIO外部输入通道和两个内部通道。

进入AD转换器后,里面有两个组,分别是规则组和注入组,规则组最多可以同时选中16个通道进行比较,但是只能转换输出其中一个通道内的数据,因此规则组可以配合DMA数据转运来使用,DMA可以转运选中的其他多个通道内的数据,防止数据被覆盖。
注入组最多可以同时选择4个通道进行比较,也能同时输出4个通道内的数据到AD数据寄存器。

触发控制提供开始转换信号,它有软件触发(调用函数)和硬件触发(定时器和外部中断)。

上面可以布置一个模拟看门狗,用于监测转换结果的范围,如果超出设定的阈值,就通过中断输出控制,向NVIC申请中断。

规则组和注入组转换完成后,会有一个EOC信号,它会置一个标志位,最终也可以向NVIC申请中断。

最后右下角还有一个开关控制,在库函数中就是ADC_Cmd函数,用于给ADC上电。

AD初始化步骤:
(1)开启RCC时钟,包括ADC和GPIO;
(2)ADC的时钟,ADCCLK需要配置一下;
(3)配置GPIO,改成输入模式;
(4)配置多路开关,把左边通道接入到右边的规则组列表中;
(5)配置ADC转换器;
(6)调用ADC_Cmd函数,开启ADC;
(7)对ADC进行校准,来减少误差。


四、规则组的四种转换模式


1、单次转换,非扫描模式

上图列表就是规则组里能选中的通道,在非扫描模式下,这个列表只有第一个序列1的位置有效,规则组同时选中一组(16个通道)就退化为简单地选中一个地方式了,序列1的位置可以指定想要转换的通道,触发后,ADC就会对这个通道2进行模数转换,过一小段时间后,转换结果就会放在数据寄存器中,同时给EOC标志位置1。如果需要再转换,就得再次触发ADC进行模数转换。

2、连续转换,非扫描模式

它与上一种方式的不同之处在于,在一次转换结束之后,它的转换不会停止,而是立刻开始下一轮的转换,一直持续下去。

3、单次转换,扫描模式

这里也是单次转换,因此再每次转换后,都会停下来,需要触发才能开始。
这个扫描模式可以同时选择多个通道,通道数量也是可以指定的,触发之后,它就会依照序列号,依次对通道进行AD转换,转换结果都放在数据寄存器了,为了防止数据被覆盖,需要用DMA及时将数据挪走。7个通道转换完成后,才会产生EOC标志位置1,转换结束。然后需要转换,得再次触发ADC进行模数转换。


4、连续转换,扫描模式

这个模式功能跟上个模式一致,就是触发一次就会自动一直触发,会一直连续转换。

在扫描模式得情况下,还有一种模式,叫间断模式,它的作用是在扫描过程中,每隔几个转换,就暂停一次,需要再次触发,才能继续。


ADC1和ADC2的外部触发方式,其中包括定时器触发、外部引脚触发和软件触发,选择哪种触发方式,通过控制最右边寄存器可以选择对应方式。

五、转换时间

AD转换的步骤包括采样保持、量化编码两步。

采样保持:在量化编码前,需要设置一个采样开关,打开采样开关,收集外部电压,比如可以用一个小容量的电容存储这个电压,存储好了以后,断开采样开关,再进行后面的量化编码,这样在量化编码期间,电压就能够始终保持不变,这样才能精确地定位未知电压的位置;
采样保持的过程中,需要闭合采样开关,过一段时间再断开,这里就会产生一个采样时间。

量化编码:是ADC逐次比较(AD模数转换)的过程,这个需要花一段时间,位数越多,花费的时间就越长。

STM32 ADC的总转换时间为:T_CONV = 采样时间 + 12.5个ADC周期
采样时间就是采样保持花费的时间,采样时间越大,越能避免一些毛刺信号的干扰,转换时间也会相应延长;
12.5个ADC周期是量化编码花费的时间,ADC是12位的,因此需要花费12个周期,这里0.5个周期是一些其他事情花费的时间。

例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期。T_CONV = 1.5 + 12.5 = 14个ADC周期 
ADC周期就是从RCC分频过来的ADCCLK,ADCCLK最大为14MHz。
转换时间= N个ADC周期/ADCCLK = 14/14MHz = 1us

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能商品推荐系统技术路线图

智能商品推荐系统技术路线图 系统架构图 --------------------------------------------------------------------------------------------------------------- | 用户交互层 (Presentation Layer) …

【Docker系列】docker inspect查看容器部署位置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

标量/向量/矩阵/张量/范数详解及其在机器学习中的应用

标量(Scalar)、向量(Vector)、矩阵(Matrix)、张量(Tensor)与范数(Norm)详解及其在机器学习中的应用 1. 标量(Scalar) 定义&#xff1…

【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)

【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…

SierraNet协议分析使用指导[RDMA]| 如何设置 NVMe QP 端口以进行正确解码

在解码RoCEv2数据包(包括TCP RDMA和RoCE RDMA)时,若捕获的跟踪数据无法正确解码,通常需要执行特定的解码步骤。对于RoCE RDMA跟踪数据的处理,分析器主要采用两种方式获取必要信息以实现数据包解码: 首先&am…

JavaScript基础-局部作用域

在JavaScript中,理解不同种类的作用域是掌握这门语言的关键之一。作用域决定了变量和函数的可访问性(即可见性和生命周期)。与全局作用域相对应的是局部作用域,它限制了变量和函数只能在其定义的特定范围内被访问。本文将深入探讨…

李沐动手深度学习(pycharm中运行笔记)——09.softmax回归+图像分类数据集+从零实现+简洁实现

09.softmax回归图像分类数据集从零实现简洁实现(与课程对应) 目录 一、softmax回归 1、回归 vs 分类 2、经典分类数据集: 3、从回归到分类——均方损失 4、从回归到多类分类——无校验比例 5、从回归到多类分类——校验比例 6、softmax和…

C++八股——内存分配

文章目录 1. 虚拟内存空间2. malloc和free3. new和delete4. 内存池 1. 虚拟内存空间 程序进程的虚拟内存空间是操作系统为每个进程提供的独立、连续的逻辑地址空间,与物理内存解耦。其核心目的是隔离进程、简化内存管理,并提供灵活的内存访问控制。 &am…

【Linux基础】网络相关命令

目录 netstat命令 1.1 命令介绍 1.2 命令格式 1.3 常用选项 1.4 常用命令实例 1.4.1 显示所有TCP连接 1.4.2 查看路由表 1.4.3 实时监控网络接口流量 1.4.4 查看监听中的端口以及关联进程 ping命令 2.1 命令介绍 2.2 命令格式 2.3 常用选项 2.4 常用示例 ifconfi…

adb 实用命令汇总

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 基础adb命令 # 重启adb adb kill-server# 查看已连接的设备 adb devices# 进入命令行 adb shell# 使用 -s 参数来指定设备 adb -s <设备序列号> shell…

C#管道通讯及传输信息丢失的原因

以下是C#管道通讯客户端/服务端共用类 namespace PipeCommunication { /// <summary> /// 管道信息回调通知 /// </summary> /// <param name"msg"></param> public delegate void PipeMessageEventHandler(string msg…

MixTeX - 支持CPU推理的多模态LaTeX OCR

文章目录 一、项目概览相关资源核心特性技术特点 二、安装三、使用说明环境要求 四、版本更新五、当前限制 一、项目概览 MixTeX是一款创新的多模态LaTeX识别小程序&#xff0c;支持本地离线环境下的高效CPU推理。 无论是LaTeX公式、表格还是混合文本&#xff0c;MixTeX都能轻…

简单 Linux 字符设备驱动程序

注&#xff1a;本文为 “Linux 字符设备驱动” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 未整理去重&#xff0c;如有内容异常&#xff0c;请看原文。 Simple Linux character device driver 简单 Linux 字符设备驱动程序 Oleg Kutko…

NX949NX952美光科技闪存NX961NX964

NX949NX952美光科技闪存NX961NX964 在半导体存储领域&#xff0c;美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计&#xff0c;成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…

协议路由与路由协议

协议路由”和“路由协议”听起来相似&#xff0c;但其实是两个完全不同的网络概念。下面我来分别解释&#xff1a; 一、协议路由&#xff08;Policy-Based Routing&#xff0c;PBR&#xff09; ✅ 定义&#xff1a; 协议路由是指 根据预设策略&#xff08;策略路由&#xff0…

Linux510 ssh服务 ssh连接

arning: Permanently added ‘11.1.1.100’ (ECDSA) to the list of known hosts. rooot11.1.1.100’s password: Permission denied, please try again. rooot11.1.1.100’s password: Permission denied, please try again 还没生效 登不上了 失效了 sshcaozx26成功登录 …

金融学知识笔记

金融学知识笔记 一、引言 金融学它结合了数学、概率论、统计学、经济学和计算机科学等多学科的知识&#xff0c;用于解决金融领域中的各种问题&#xff0c;如金融衍生品定价、投资组合优化、风险管理和固定收益证券分析等。通过对金融学的学习&#xff0c;我们可以更好地理解…

AB测试面试题

AB测试面试题 常考AB测试问答题(1)AB测试的优缺点是什么?(2)AB测试的一般流程/介绍一下日常工作中你是如何做A/B实验的?(3)第一类错误 vs 第二类错误 vs 你怎么理解AB测试中的第一、二类错误?(4)统计显著=实际显著?(5)AB测试效果统计上不显著?(6)实验组优于对…

USR-M100采集数据并提交MQTT服务器

本文为记录备忘&#xff0c;不做过多解释。 模块自身带有2路数字量输入&#xff0c;2路模拟量输入&#xff0c;2路485接口 数字量接报警输入&#xff0c;模拟量接压力传感器&#xff0c;液位传感器&#xff0c;485接口分别接流量计&#xff0c;温湿度传感器。 正确接线&…

Octave 绘图快速入门指南

目录 1. 基本的 2D 绘图 2. 自定义图形样式 3. 绘制散点图 4. 绘制柱状图 5. 绘制直方图 6. 3D 绘图 6.6.1 3D 曲面图 6.6.2 3D 散点图 7. 绘制极坐标 8. 多子图绘制 总结 Octave 是一个类似于 MATLAB 的开源数学软件&#xff0c;广泛用于数值计算和数据分析。它提供…