STM32 ADC转换器

一、ADC简介

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

        模拟量:时间和幅值均连续的信号,例如:变换的电压、电流

        数字量:时间和幅值均离散的信号,例如:单片机中的0和1

        STM32的12位ADC是一种逐次逼近型模/数转换器。它多达18个通道,可测量16个外部和2个内部信号源。个通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐的方式存储在16位数据寄存器中

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

ADC术语:

        分辨率:满刻度电压与2ⁿ的比值,其中n位ADC的位数。例如:12位ADC能够分辨出满刻度1/2¹²(0.024%)的输入电压变化。一个10V满刻度的12位ADC能够分辨输入电压变化的最小值为2.4mV

        转换速率:ADC能够重复进行数据转换的速度,即每秒转换的次数

        绝对精度:在ADC中任何数码所对应的实际模拟电压与其理想的电压之差的最大值

        相对精度:把这个最大偏差表示为满刻度模拟电压的百分数

        线性度:ADC实际转移函数与理想直线的最大偏移

二、ADC结构

2.1 电压输入范围

ADC的输入范围:Vref- < VIN <Vref+

通常Vref+、Vref-和VDDA、VSSA,所以ADC的输入电压也就是:0~3.3V

如果要测量不在0~3.3V内的电压,需要在外部搭建转化电路

2.2 ADC时钟

        由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器

2.3 输入通道

注意: 温度传感器和VREFINT只能出现在主ADC1

对于STM32F103C8T6而言,ADC1与ADC2的外部输入通道相同,对应至PA0~PB1

ADC有16个多路通道。可以把转换组织成两组:规则组和注入组
● 规则组由多达16个转换组成
● 注入组由多达4个转换组成


规则通道:按照一定的顺序规则井然有序的进行转换输出,默认情况下使用的是规则通道。由于数据寄存器只能存储最后一个通道的转换数据,如果转换多通道数据,还需与DMA配合使用

注入通道:

(1)触发注入:如果在规则通道转换期间产生一个外部触发注入,当前转换被复位,注入通道序列被以单次扫描方式进行转换。然后,恢复上次被中断的规则组通道转换

如果在注入通道转换期间产生一个规则事件,注入转换不会被中断,但是规则序列将在注入序列结束后被执行

(2)自动注入:在此模式下,必须禁止注入通道的外部触发。如果设置了自动注入和连续模式、规则通道至注入通道的转换序列被连续执行。如果ADC时钟的预分频系数为4~8,在两通道的转换期间会自动插入1个ADC时钟间隔;如果分频系数为2,则右2个时钟间隔的延迟

所以,注入通道只有在规则通道存在时才会出现

1.利用外部触发或通过设置ADC_CR2寄存器的ADON位,启动一组规则通道的转换。
2.如果在规则通道转换期间产生一外部注入触发,当前转换被复位,注入通道序列被以单次扫描方式进行转换。
3.然后,恢复上次被中断的规则组通道转换。如果在注入转换期间产生规则事件,注入转换不会被中断,但是规则序列将在注入序列结束后被执行。
 

2.3 模式控制

(1)单次转换模式和连续转换模式

单次转换模式:ADC只进行一次转换,每次转换需要触发一次(读取结果时,需要判断结束标志位)

连续转换:当前ADC转换结束后立即启动下一次转换(读取结果时,不需要判断结束标志位)

        每次转换结束后,转换数据被存储在相应的数据寄存器中,EOF(转换结束)/JEOF(注入转换结束)被置位,此外还可申请中断

(2)扫描模式和非扫描模式

        ADC扫描被选中的所有通道。每个组的每个通道执行单次转换,在每个转换结束后,同一组的下一个通道被自动转换

注:非扫描模式下,仅第一个序列有效

        如果设置了连续转换,则不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换

(3)间断模式

规则组间断模式:可以用来执行一个短序列的n次转换(n≤8)

例如,n=3,被转换的通道:0、1、2、3、6、7、8、9

①第一次触发,转换序列为0、1、2

②第二次触发,转换序列为3、6、7

③第三次触发,转换序列为8、9,并产生EOC(End of conversion)事件

第四次触发,转换序列为0、1、2

当所有子组被转换完成,下一次触发启动第一个子组的转换

注入组间断模式:可以用来执行一个短序列的n次转换(n≤8)

例如,n=1,被转换的通道:1、2、3

①第一次触发,转换序列为1

②第二次触发,转换序列为2

③第三次触发,转换序列为3,并产生EOC(End of conversion)和JEOF(Injected channel end of conversion)事件

第次触发,转换序列为1

不能同时使用自动注入和间断模式

(4)双ADC模式

2.4 外部触发转换

        转换可以由外部事件触发( 例如定时器捕获, EXTI 线 )。当外部触发信号被选为 ADC 规则或注入转换时,只有它的上升沿可以启动转换。

2.5 DMA请求

        因为 规则通道转换 的值储存在 一个仅有的数据寄存器 中,所以 当转换多个规则通道时需要使用 DMA ,这可以避免丢失已经存储在ADC_DR寄存器中的数据。
        只有在规则通道的转换结束时才产生DMA请求 ,并将转换的数据从 ADC_DR寄存器传输到用户 指定的目的地址。
注: 只有 ADC1ADC3拥有DMA 功能。由 ADC2转化的数据可以通过双ADC模式,利用ADC1的
DMA功能传输

2.6 数据对齐

        注入组通道转换的数据值已经减去了在ADC_JOFRx 寄存器中定义的偏移量,因此结果可以是一 个负值。SEXT 位是扩展的符号值。
        对于规则组通道,不需减去偏移值,因此只有12 个位有效

一般选用右对齐的方式,读出的值就是转换结果

左对齐的方式,相当于将数据左移了4位,也就是:结果=实际数据*16

如果不需要那么高的精度,可以使用左对齐,然后取出高n位,即可

2.7 转换时间

        ADC采样之后,防止外部电压不断变化造成量化、编码的影响,需要将采集到的电压保持一小段时间

        采样时间可由软件进行配置,采样时间越长,越能避免一些毛刺信号的干扰,但相应的转换时间也会延长

2.8 校准

2.9 ADC中断

EOC(End of conversion)和JEOF(Injected channel end of conversion

ADC1 ADC2 的中断映射在 同一个中断向量 上,而 ADC3 的中断有 自己的中断向量

三、ADC相关库函数

3.1 初始化函数:ADC_Init()

3.2 校准函数

3.3 软件触发转换函数

3.4 通道配置:ADC_RegularChannelConfig ()

四、ADC配置

(1)开启ADC、GPIO时钟

(2)配置ADCCLK的分频器

	RCC_ADCCLKConfig(RCC_PCLK2_Div6);  //APB2六分频

(3)配置GPIO,完成初始化(模拟输入)

(4)配置多路开关,把左边的通道接入右边的规则组列表中

	ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1,ADC_SampleTime_1Cycles5);  //在序列1的位置上写入通道3

(5)配置ADC,完成初始化

	ADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;  //工作模式:独立模式	ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;  //单次转换ADC_InitStruct.ADC_ScanConvMode = DISABLE;  //非扫描模式	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;  //数据对齐:右对齐ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  //外部触发源选择:不使用外部触发ADC_InitStruct.ADC_NbrOfChannel = 1;  //进行规则转换的数目通道ADC_Init(ADC1,&ADC_InitStruct);

(6)中断配置(如果使用中断,需要此步骤)

(7)配置NVIC,完成初始化(如果使用中断,需要此步骤)

(8)校准

	ADC_ResetCalibration(ADC1);  //复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);  //复位校准完成ADC_StartCalibration(ADC1);  //开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);  //复位校准完成

(9)使能ADC

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Access denied for user ‘zabbix‘@‘localhost‘ (using password: NO)

现象 排查过程 进入数据库show grants for zabbixlocalhost;select host,user from mysql.user;cat /etc/zabbix/zabbix_server.conf | grep DB | grep -vE ‘#|$’cat /etc/zabbix/web/zabbix.conf.php | grep DB 解决办法 mysql 8.0以下 DPassword123.com mariadb -e "…

Docker搭建代码托管Gitlab

文章目录 一、简介二、Docker部署三、管理员使用四、用户使用五、用户客户端 一、简介 GitLab是一个基于Git的代码托管和协作平台&#xff0c;类似于GitHub。 它提供了一个完整的工具集&#xff0c;包括代码仓库管理、问题跟踪、CI/CD集成、代码审查等功能。 GitLab的开源版本…

Hdu1350 Taxi Cab Scheme 【最小路径覆盖】

Taxi Cab Scheme 题意 有一张边长不超过 200 200 200 的网格图&#xff0c;有若干个乘客&#xff0c; 乘客 i i i 的需求是&#xff1a; h h : m m , ( a , b ) , ( c , d ) hh:mm, (a,b) , (c, d) hh:mm,(a,b),(c,d)&#xff0c;意为他需要在 h h 时 m m 分 hh时mm分 hh时…

奇妙的探索——偶然发现的bug

今天想在腾讯招聘官网找几个前端的岗位投一下&#xff0c;最近自己也在找工作&#xff0c;结果简历还没有投出去&#xff0c;就发现了腾旭招聘官网的3个前端bug。 1.有时候鼠标hover还没有滑倒下拉选框的菜单上&#xff0c;就消失了&#xff0c;消失的太快了&#xff0c;根本点…

【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?

常见问题 Q&#xff1a;Heygen是什么&#xff1f;Heygen是什么玩意&#xff1f; A&#xff1a;Heygen是一款由AI视频工具,创作者只需要上传视频并选择要翻译的语言&#xff0c;该工具可实现自动翻译、调整音色、匹配嘴型。为了方便理解&#xff0c;笔者利用Heygen制作了一个AI视…

java中File类和输入输出流的用法

目录 针对文件系统进行操作 针对文件内容进行操作 java针对文件操作可以分为两种&#xff1a;1&#xff09;针对文件系统进行操作&#xff0c;如创建文件&#xff0c;删除文件&#xff0c;创建目录&#xff0c;重命名文件等。 2&#xff09;针对文件内容进行操作&#xff0c…

javaScript基础3

javaScript 一.对象1.概念2.创建对象的三种方法(1).字面量创建&#xff08;利用{}&#xff09;(2)变量、属性、函数、方法的区别(3).new Object创建(4).构造函数 3.new关键字的执行过程4.遍历对象&#xff08;for..in) 二.内置对象1.了解2.math对象3.日期对象&#xff08;构造函…

用 LM Studio 1 分钟搭建可在本地运行大型语言模型平台替代 ChatGPT

&#x1f4cc; 简介 LM Studio是一个允许用户在本地离线运行大型语言模型&#xff08;LLMs&#xff09;的平台&#xff0c;它提供了一种便捷的方式来使用和测试这些先进的机器学习模型&#xff0c;而无需依赖于互联网连接。以下是LM Studio的一些关键特性&#xff1a; 脱机&am…

Web界面加持!数据库备份神器,助你轻松备份数据!

带Web界面的数据库/文件备份增强工具。原理&#xff1a;执行自定义shell命令输出文件&#xff0c;增强备份功能。同时支持: 文件、mysql、postgres... 支持自定义命令 支持执行shell输出的文件备份&#xff0c;原理上支持各种数据库/文件备份 支持备份周期设置&#xff0c;几分…

面试二十、BST二叉排序树

静态查找表&#xff1a; 当有序表是静态的&#xff0c;即其内容在创建后不再发生变化&#xff0c;适合使用顺序表作为存储结构。顺序表通过数组实现&#xff0c;可以提供常数时间的随机访问&#xff0c;因此在静态情况下&#xff0c;适合顺序表存储&#xff0c;这样可以简化数据…

项目暂停和重启运行,命令如何实现?

要通过命令行实现项目的暂停和重启运行&#xff0c;可以使用以下步骤&#xff1a; 1.查找项目进程ID&#xff1a;首先&#xff0c;你需要找到正在运行项目的进程ID&#xff08;PID&#xff09;。你可以使用 ps 命令来查找正在运行的进程&#xff0c;例如&#xff1a; ps aux …

如何批量修改图片的尺寸?轻松教你批量修改图片尺寸!三个快速有简单的方法

一&#xff0c;引言 在现代社会中&#xff0c;随着数字技术的快速发展&#xff0c;图片已经成为了我们日常生活中不可或缺的一部分。无论是在社交媒体上分享生活点滴&#xff0c;还是在工作中展示产品、宣传品牌&#xff0c;图片都扮演着重要的角色。然而&#xff0c;很多时候…

实现Spring底层机制(三)

文章目录 阶段4—实现BeanPostProcessor机制1.文件目录2.初始化方法实现1.编写初始化接口InitializingBean.java2.MonsterService.java实现初始化接口3.容器中的createBean方法增加初始化逻辑&#xff0c;判断对象类型是否是InitializingBean的子类型&#xff0c;如果是&#x…

在电脑上安装Linux?有手就行!

文章目录 安装虚拟机管理软件VM下载centos镜像文件开始安装创建虚拟机打开虚拟机&#xff0c;开始安装程序安装启动程序测试光盘选择语言进行安装前的配置安装 安装后操作 安装虚拟机管理软件VM 官方正版VMware下载&#xff08;16 pro&#xff09;&#xff1a;https://www.ali…

探索亚马逊云科技「生成式 AI 精英速成计划」

目录 前言「生成式 AI 精英速成计划」技术开发课程学习课程学习 总结 前言 亚马逊云科技&#xff08;Amazon Web Services&#xff0c;简称AWS&#xff09;作为全球领先的云计算服务提供商&#xff0c;一直以来在推动人工智能&#xff08;AI&#xff09;领域的发展中扮演着重要…

服务器 BMC(基板管理控制器,Baseboard Management Controller)认知

写在前面 工作中遇到&#xff0c;简单整理博文内容涉及 BMC 基本认知理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上春树 基板管理控制器&#xff08;BMC&…

rust 学习笔记(13-19)

13 迭代器与闭包 Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是 函数式编程&#xff08;functional programming&#xff09;。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 闭包&#xff08;Closu…

【学习】服务器解决:重新分配同样端口号后,连不上VScode

原来服务器分配的环境有问题&#xff0c;重新分配了一下。还是同样的端口号&#xff0c;Xshell和xftp能够连接上&#xff0c;但是VScode连接不上。 问题解决: 清除本地 SSH 缓存中与远程主机相关的条目可以通过编辑 known_hosts 文件来实现。这个文件包含了您曾经连接过的远程主…

API请求报错 Required request body is missing问题解决

背景 在进行调用的时候&#xff0c;加载方法&#xff0c;提示以下错误 错误信息如下&#xff1a; {"code": 10001,"msg": "Required request body is missing: XXX","data": null,"extra": null }Required request body…

2015NOIP普及组真题 3. 求和

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1971 核心思想&#xff1a; 本题的约束条件有两个&#xff1a; 条件1、colorx colorz 条件2、x、y、z的坐标满足 y − x z − y&#xff08;即 y 在 x 和 z 的中心位置&#xff09; …