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://www.mzph.cn/news/827628.shtml

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

相关文章

sklearn 笔记 metrics

1 分类 1.1 accuracy_score 分类准确率得分 在多标签分类中&#xff0c;此函数计算子集准确率&#xff1a;y_pred的标签集必须与 y_true 中的相应标签集完全匹配。 1.1.1 参数 y_true真实&#xff08;正确&#xff09;标签y_pred由分类器返回的预测标签normalize 默认为 Tr…

LLama的激活函数SwiGLU 解释

目录 Swish激活函数 1. Swish函数公式 LLaMA模型中的激活函数 1. SwiGLU激活函数 2. SwiGLU激活函数的表达式 3. SwiGLU激活函数的优势 Swish激活函数 Swish是一种激活函数&#xff0c;其计算公式如下&#xff1a; 1. Swish函数公式 Swish(x) x * sigmoid(x) 其中&am…

概率图模型在机器学习中的应用:贝叶斯网络与马尔可夫随机场

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

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

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

裤裤带你一起学C语言内存函数啦!

目录 1.memcpy的使用和模拟实现 2.memmove使用和模拟实现 3.memset函数的使用 4.memcmp函数的使用 内存函数在<string.h>库中&#xff0c;我们使用内存函数必须先引入<string.h>头文件 1.memcpy的使用和模拟实现 memcpy的函数原型如下&#xff1a; void * m…

Vue--》深入了解 VueUse 功能性工具集

今天博主为大家介绍一款实用性的插件名字叫做 VueUse &#xff0c;它是专门为 Vue.js 生态系统设计的功能性工具集合。其提供了许多可重用的功能函数&#xff0c;可以帮助开发者更轻松地构建 Vue.js 应用程序。其提供了大量的功能&#xff0c;包括状态管理、副作用管理、组合式…

【刷题】前缀和入门

送给大家一句话&#xff1a; 既然已经做出了选择&#xff0c;最好还是先假定自己是对的。焦虑未来和后悔过去&#xff0c;只经历一个就够了。 – 张寒寺 《不正常人类症候群》 ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ…

react引入iconfont的svg图标

react引入iconfont的svg图标 本文目录 react引入iconfont的svg图标普通图标通过link引入css组件内引入css使用 svg图标通过script引入js组件内引入js使用 通过封装组件自定义封装组件中调用 通过antd封装使用 普通图标 通过link引入css <link rel"stylesheet" h…

基于springboot实现在线考试系统设计【项目源码+论文说明】计算机毕业设计

基于springboot实现在线考试管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb技术的在线考试系统设计与实现的开发全过程。通过分析基于Java Web技术的在线考试系统设计与实现管理的不…

http 3.0 有哪些新特性

HTTP/3 是超文本传输协议&#xff08;HTTP&#xff09;的最新主要版本&#xff0c;其显著特点是放弃了传统的TCP作为传输层协议&#xff0c;转而采用基于UDP的QUIC&#xff08;Quick UDP Internet Connections&#xff09;协议。以下是HTTP/3利用QUIC实现高性能传输的关键特性&…

sketchup{su}安装错误1402

错误如图 解决方法如下 打开autoremove&#xff0c;点击扩展&#xff0c;输入1402&#xff0c;点击搜索 等待修复成功既可尝试重新安装su 软件每周六选择其他方式登录免费使用

微软github技术公开课(web开发、生成式AI、ML、数据科学、物联网)

一些微软在github上公开的课程整理&#xff1a; web开发基础入门 面向初学者的数据数据科学课程 https://microsoft.github.io/Data-Science-For-Beginners/#/ 面向初学者的AI入门课程 https://github.com/microsoft/ai-for-beginners 面向初学者的生成式AI课程 https://…

WordPress自动采集发布AutoPostPro汉化版插件

WP-AutoPostPro 是一款极为出色的WordPress自动采集发布插件&#xff0c;其显著优势在于能够从任何网站抓取内容并自动将其发布到你的WordPress网站上。它实现了对任何网页内容的自动采集和发布&#xff0c;整个采集过程完全自动化&#xff0c;无需手动操作。 项 目 地 址 &…

网络 (基础概念, OSI 七层模型, TCP/IP 五层模型)

网络互连 网络互连: 将多台计算机连接在一起, 完成数据共享 数据共享的本质是网络数据传输, 即计算机之间通过网络来传输数, 也叫做网络通信 根据网络互连的规模不同, 将网络划分为局域网和广域网 注意: 局域网和广域网是相对的概念 局域网LAN 又称内网, 局域网和局域网之间在没…

生成式AI在B端产品的应用分析

AI产品发展到现在&#xff0c;消费端的产品应用还受到比较大的限制&#xff1b;但是在B端&#xff0c;已经有了不错的表现。作者总结了AI产品在B端的几款应用&#xff0c;一起来看看表现如何。 生成式AI在B端产品的应用分析© 由 ZAKER 提供 随着今年生成式AI应用的大范围…

Python基础06-日期和时间的操作方法

在Python中处理日期和时间是编程中常见的需求&#xff0c;无论是安排任务、记录日志还是分析数据。本文将介绍如何在Python中获取当前日期和时间、创建特定日期和时间、格式化日期和时间、解析字符串中的日期和时间、使用时间差、比较日期和时间、从日期/时间中提取组件、处理时…

2024年Java接单平台强力推荐!各个都知名!

Java这几年真卷飞了&#xff0c;一点都不夸张。因此&#xff0c;很多程序员朋友都已经试着转方向、换赛道了。试着接单、找私活就是一大途径。当然&#xff0c;特别是有技术、又有相对空闲时间的朋友&#xff0c;更值得一试。既是增加收入的捷径&#xff0c;又可以提升自我——…

在Milk-v Duo上部署YOLOV8模型

建议自己编译images固件&#xff0c;我使用官方给的固件在部署中出现了一些问题&#xff0c;请参考: 编译Milkv-duo固件-CSDN博客 下载YOLOv8 git clone https://github.com/ultralytics/ultralytics.git 下载yolo_export.zip 下载链接&#xff1a;链接&#xff1a;百度网盘…

mysql常见语法操作笔记

1. 数据库的基本操作 1.1. MYSQL登录与退出 D:\phpstudy_pro\Extensions\MySQL5.7.26\bin 输入 mysql -uroot -proot -h127.0.0.1 退出的三种方法 mysql > exit; mysql > quit; mysql > \q; 1.2. MYSQL数据库的一些解释 注意&#xff1a;数据库就相当于文件夹 …

Nacos的简介及安装和使用

Nacos的简介及安装和使用 1. Nacos简介1.1 核心特性1.2 常见的注册中心1.3 Nacos结构图 2. 如何安装和配置Nacos&#xff1f;2.1 Nacos的安装2.2 如何使用Nacos&#xff1f; 1. Nacos简介 ​ Nacos是一个开源的动态服务发现、配置和服务管理平台&#xff0c;由阿里巴巴开发和维…