STM32单片机ADC功能详解
文章目录
1. ADC概述
2. ADC结构图
3. 引脚定义
4. 转换模式
5. 数据对齐
6. 转换时间
7. 硬件电路
8. STM32使用ADC单/多通道检测数据
1. ADC概述
- 功能:ADC是一个将模拟信号(如电压)转换为数字信号的设备。在微控制器中,它允许模拟信号如传感器输出或其他电压形式被数字化,进而可以由数字系统处理。
- 分辨率:12位,这意味着ADC输出的数字可以在0到4095之间变化。更高的分辨率意味着更精确的输入信号量化。
- 转换速度:1μs转换时间指每个ADC样本的获取和转换仅需1微秒。
- 输入电压范围:0至3.3V,这是微控制器能够安全处理的电压范围,超过此范围可能导致硬件损伤或数据不准确。
- 多通道输入:STM32F103C8T6具备10个外部和2个内部的ADC通道,使得可以同时从多个源获取数据,非常适合复杂或多变量的监测任务。
- 18个触发输入:这些触发输入支持从10个外部源和2个内部源触发ADC,允许在特定事件发生时自动启动ADC转换,增强了系统的自动化和响应速度。
对于将数字信号转为模拟信号的功能称为DAC,和PWM相似,PWM只有导通和断开两种状态。这两种状态都没有功率损耗,所以适用于直流电机这种大功率场景。而DAC主要应用于波形生产:比如信号发射器。
2. ADC结构图
从结构图中可以看出,有18个输入通道(C8T6只有10个),到达模拟多路开关,可以指定想要选择的通道,再往右边是多路开关的输出,进入到模数转换器,这里的转换器采用逐次比较的方法,也就是二进制从高位到地位依次比较,转换的结果会存放到数据寄存器中,读取寄存器就可以得到数据。
对于普通的ADC,多路开关一般只选择一个,也就是选择其中一个通道,然后转换,转换完成后取出结果,但在这里可以选择多个通道,并且stm32还有分组的功能,规则组和注入组。
规则组可以一次性选择16个通道,注入组可以选择4个通道。但是由于数据寄存器只能存放一个数据,所以选择多个通道会导致前面的数据被覆盖,这时就需要使用到DMA,它可以将每个数据进行转移。
对于注入组,不用担心数据覆盖的问题,因为注入通道有4个寄存器,可以同时储存4个通道的数据。
并且还可以在模拟看门狗中设置阈值,例如如果超出阈值,就会触发中断。
3. 引脚定义
引脚定义也可以在数据手册中查到:
通道编号 | ADC1 | ADC2 | ADC3 |
---|---|---|---|
通道0 | PA0 | PA0 | PA0 |
通道1 | PA1 | PA1 | PA1 |
通道2 | PA2 | PA2 | PA2 |
通道3 | PA3 | PA3 | PA3 |
通道4 | PA4 | PA4 | PF6 |
通道5 | PA5 | PA5 | PF7 |
通道6 | PA6 | PA6 | PF8 |
通道7 | PA7 | PA7 | PF9 |
通道8 | PB0 | PB0 | PF10 |
通道9 | PB1 | PB1 | |
通道10 | PC0 | PC0 | PC0 |
通道11 | PC1 | PC1 | PC1 |
通道12 | PC2 | PC2 | PC2 |
通道13 | PC3 | PC3 | PC3 |
通道14 | PC4 | PC4 | |
通道15 | PC5 | PC5 | |
通道16 | 温度传感器 | ||
通道17 | 内部参考电压 |
4. 转换模式
在ADC初始化的结构体中有两个参数,单词转换/连续转换,扫描模式/非扫描模式,这两个参数组成了不同的转换模式。
- 单次转换,非扫描模式
在这个模式下只有序列1有效(非扫描模式),如果想转换某一个通道,例如选择通道2,这时就会转换通道2的数据并将数据存入寄存器,如果想换一个通道就需要将选择的新通道替换掉原来的通道2.
- 连续转换,非扫描模式
非扫描模式,所以还是序列1有效,和单次转换不同的是,连续模式代表转换一次后,不需要等待,会自动进行下一轮的转换。
- 单次转换,扫描模式
依然是单次转换,所以只触发一次,转换结束后会停止。扫描模式代表可以使用菜单,也就是使用多个序列,多个通道。比如这里指定通道数目为7,代表会依次扫描前7个通道,转换结果放到寄存器中,为了防止数据被覆盖,需要用DMA及时将数据转移走。七个通道转换完成后,产生ECO信号,代表转换结束。
- 连续转换,扫描模式
相对于单次转换,扫描模式,这个模式在转换完成后,立刻开始下一次的转换。也就是转换一次后,不需要等待,会自动进行下一轮的转换。
5. 数据对齐
在ADC中,转换结果为12位的数据,但是数据寄存器是16位的,这就存在一个数据对齐的问题。有两种方式,数据右对齐和数据左对齐。
数据右对齐:
12位的数据向右靠,高位多出来的几位就补0,这个方式读取寄存器,直接得到的就是转换结果。
数据左对齐:
12位的数据向左靠,低位补0,这个方式直接读取的话数据会较大,因为二进制左移一次相当于把这个数据乘以2,下面的例子相当于把结果乘以16倍。
6. 转换时间
AD转换的步骤位:采样,保持,量化,编码
采样保持的作用:因为AD转换时,量化和编码需要一段时间,如果在这段时间中,输入电压依然不断变化,就无法准确判断电压的数据,所以就需要用到采样开关,先打开开关收集外部电压,然后断开采样开关,再进行量化和编码,这个过程所用的时间就是采样时间。
- STM32 ADC的总转换时间:
总转换时间是进行一次完整AD转换所需要的时间,它由两部分组成:
- 采样时间:ADC模块在将模拟信号转换成数字信号前,需要一定的时间来采样模拟信号。这段时间是可编程的,可以根据信号的性质和需要的精度来调整。
- 转换时间:这是ADC完成实际的模数转换过程所需的固定时间,通常由内部时钟频率决定。
- 公式说明:
总转换时间的计算公式为: T(CONV) = 采样时间 + 12.5个ADC周期
其中T(CONV) 是ADC模块的时钟周期,这取决于ADC时钟(ADC Clk)的频率。
- 示例:
假设 ADC Clk 的频率是14MHz,则每个时钟周期T(ADC)是 1/114MHz,1/14MHz 约为 71.4ns。因此,如果采样时间设置为1.5个ADC时钟周期(通常是最小设置),转换时间计算如下: T(CONV) = 1.5×71.4ns+12.5×71.4nsTCONV=1.5×71.4ns+12.5×71.4ns
T(CONV) = 1.071ns + 892.5ns
T(CONV) = 893.571ns 即转换时间大约是893.571纳秒,接近1微秒。
7. 硬件电路
ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差,所以建议在每次上电后执行一次校准,启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期,这些都会在初始化代码中设置。
下面三种电路就是常见的ADC的外围输入电路。
第一个是电位器产生可调电压,中间的PA0,也就是滑动端可以输出一个0-3.3v可调的电压输出,当滑动端向上时,电压增大,往下滑时,电压减少,另外这里电阻的阻值不能太小,太小可能会损坏,至少要接千欧的电阻。
第二个是传感器输出电压的电路,它们都可以等效为一个可变电阻,因为电阻阻值无法直接测量,所以这里可以通过和一个固定电阻串联分压,来得到一个反应电阻值电压的电路,这里传感器阻值变小时,下拉作用变强,输入端电压就下降。传感器阻值变大时,下拉作用变弱,输出端收上拉电阻的作用,电压就会升高,固定电阻一般可以选择和传感器阻值相近的电阻。
第三个是电压转换电路,比如测量一个5v电池输入电压,但ADC只能测量不超过3.3v的电压,就可以使用电阻进行分压,上面加下面的阻值一共50K,根据分压公式,中间的电压为VIN/50K*33K,最后得到的电压就是0-3.3V.
8. STM32使用ADC单/多通道检测数据
正在写,明天发布
完整工程文件:
STM32通过ADC单通道检测数据
STM32通过ADC多通道检测数据
相关文章:

STM32单片机ADC功能详解
文章目录 1. ADC概述 2. ADC结构图 3. 引脚定义 4. 转换模式 5. 数据对齐 6. 转换时间 7. 硬件电路 8. STM32使用ADC单/多通道检测数据 1. ADC概述 功能:ADC是一个将模拟信号(如电压)转换为数字信号的设备。在微控制器中,…...

47.Redis学习笔记
小林coding -> 图解redis的学习笔记 文章目录 Rediswindwos安装docker安装redis启动redis使用RDM访问虚拟机中的redispython连接redis缓存穿透、击穿、雪崩基本数据类型高级数据类型高并发指标布隆过滤器分布式锁Redis 的有序集合底层为什么要用跳表,而不用平衡…...

数控六面钻适用场景-不止家具制造
在快节奏的现代生活中,家具作为我们生活的重要组成部分,其美观度和实用性日益受到人们的关注。而在这背后,一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻,顾名思义,是一种高度自动…...

【力扣】86. 分隔链表
86. 分隔链表 题目描述 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head […...

海云安受邀参加诸子云 4.27南京「金融互联网」私董会
4月27日,“安在新媒体网安用户行业活动”第四期私董会在南京顺利举办。活动以“金融&互联网”为主题,邀请十余位业内资深的甲方用户以及典型厂商代表。摒弃传统的议题分享,采取“随时问答,自由讨论”的形式,提问题…...

docker操作使用注意事项
文章目录 一、运行docker二、拉取的镜像存放位置1、查询所有拉取的镜像2、查询所有安装的镜像3、查询docker应用的所有信息 一、运行docker 该命令执行后是在窗口下运行的,关闭或退出后docker应用会停止运行 -p:设置绑定端口映射,10022对应…...

Leetcode—163. 缺失的区间【简单】Plus
2024每日刷题(126) Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…...

Ansible自动化运维工具 - playbook 剧本编写
一. inventory 主机清单 Inventory 支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。 1.1 inventory 中的变量含义 Inventory 变量名 含义ansible_hostansible连接节点时的IP地址ansible_port连接对方…...

Web前端一套全部清晰 ⑥ day4 CSS.2 复合选择器、CSS特性、背景属性、标签的显示模式
别人的议论,那是别人的,你的人生,才是你的 —— 24.5.7 一、复合选择器 定义:由两个或多个基础选择器,通过不同的方式组合而成 作用:更准确、更高效的选择目标元素(标签) 1.后代选择…...

Linux 认识与学习Bash——3
在Linux bash中,数据流重定向是指将命令的输出从默认的标准输出(通常是终端)重定向到其他位置,如文件或另一个命令的输入。这是通过使用特定的符号来实现的。例如,>用于将输出重定向到文件,而<用于将…...

匠心精神与创新力量:构筑网络安全的新防线
一、匠心精神在网络安全中的重要性 匠心精神代表着对工作的专注和对质量的极致追求。在网络安全领域,这意味着对每一个安全漏洞的深入挖掘,对每一项安全技术的精心打磨。亿林网络李璐昆的提名,正是对其在网络安全领域匠心精神的认可。 二、…...

接口信息解析
目录 一、通讯流程 二、如何获取接口信息--抓包 1、抓包步骤: 2、抓包工具 接口文档:又称为API文档,是由后端开发编写,用来描述接口信息的文档 一、通讯流程 功能(比如:登录)请求(请求路径、请求方式、…...

scikit-learn实现单因子线性回归模型
1.是什么: 针对机器学习提供了数据预处理,分类,回归等常见算法的框架 2.基于scikit-learn求解线性回归的问题: 2.1.求解a,b对新数据进行预测: 2.2评估模型表现(y和y’的方差MSE)…...

【笔记】Anaconda命令提示符(Anaconda Prompt)操作
通过anaconda配置python环境有时需要conda安装一些包或者文件,这里作为一个笔记记录如何打开Anaconda命令提示符(Anaconda Prompt),并用conda操作 1.打开Anaconda命令提示符(Anaconda Prompt) 可直接在搜…...

Unity射击游戏开发教程:(12)使用后处理
后处理 后期处理是向您的游戏场景添加一个或多个滤镜,确实可以为您的游戏提供精美的外观。在本文中,我们将讨论如何在 Unity 中设置后处理系统,从那里您可以探索和试验 Unity 提供的所有过滤器。 首先,我们需要从包管理器添加后处理器堆栈。包管理器是 Unity 产品的集合,…...

python:机器学习特征优选
作者:CSDN _养乐多_ 在Python中进行机器学习特征选择的方法有很多种。以下是一些常用的方法: 过滤法(Filter Methods):通过统计方法或者相关性分析来评估每个特征的重要性,然后选择最相关的特征。常用的…...

花一个月时间为 vue3 重制了 vue-styled-components
花一个月时间为 vue3 重制了 vue-styled-components 前言 styled-components 在 React 是一个超级热门的 css in js 工具库。其实 styled-components 也有 Vue 版本(vue-styled-components),可惜的是只支持 Vue2,并且该项目已有…...

API接口调用|京东API接口|淘宝API接口
什么是电商API接口: 电商API接口是电商服务平台对外提供的一种接口服务,允许第三方开发者通过编程方式与电商系统进行数据交互和功能调用。 这些接口提供了一种标准化的方法来获取、更新或处理电商平台上的商品信息、订单状态、用户数据、支付信息、物流…...

pgsql和mysql比较
pgsql相对于mysql的优势主要体现在以下几个方面: 稳定性和可靠性:PostgreSQL的稳定性极强,即使在崩溃、断电等灾难场景下也能表现出很好的抗打击能力。相比之下,很多MySQL用户都遇到过Server级的数据库丢失的情况。此外ÿ…...

【太赫兹偏振保持亚波长波导链路功率预算分析】
在进行太赫兹(Terahertz,THz)偏振保持亚波长波导链路的功率预算分析时,我们需要考虑多个因素,包括波导的传输损耗、耦合损耗、偏振保持性能、以及可能存在的其他系统损耗。以下是一个基本的分析框架: 传输…...

json-server的安装和使用
json-server介绍 json-server是可以把本地当做服务器,然后axios向本地区发送请求,并且不会出现跨域的问题,若是等不及后端数据,可以用这个模拟假数据 json-server安装及使用 【json-server网址】https://www.npmjs.com/package/…...

Unity射击游戏开发教程:(10)创建主界面
主界面开发 玩游戏时,主菜单是事后才想到要做的。实际上几乎每个游戏都有一个主界面。如果你点击打开游戏并立即开始游戏,你会感到非常惊讶。本文将讨论如何创建带有启动新游戏的交互式按钮的主界面/主菜单。 主菜单将是一个全新的场景。我们将添加一个 UI 图像元素,并在图像…...

Microsoft 365 for Mac v16.84 office365全套办公软件
Microsoft 365 for Mac是一款功能丰富的办公软件套件,为Mac用户提供了丰富的功能和工具,提高了工作效率和协作能力。Microsoft 365 for Mac是一款专为Mac用户设计的订阅式办公软件套件,旨在提高生产力和效率。 Microsoft 365 for Mac v16.84正…...

交易复盘-20240507
仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 蔚蓝生物 (5)|[9:25]|[36187万]|4.86 百合花…...

面试题: malloc与new的区别
malloc, free是C语言中的库函数, new, delete是C中的运算符new自动计算分配内存的大小,malloc需要手动计算分配内存的大小new返回对象类型的指针,malloc返回的是void*类型,需要显式类型转换new分配失败抛出异常,malloc…...

欧鹏RHCE 第五次作业
unit5.DNS域名解析服务的部署及优化方案 1. (问答题) 1.配置2台服务器要求如下: a)服务器1: 主机名:dns-master.timinglee.org ip地址: 172.25.254.100 配置好软件仓库 b)服务器2: 主机名&…...

数仓分层——ODS、DW、ADS
一、什么是数仓分层 数据仓库分层是一种组织和管理数据仓库的结构化方法,它将数据仓库划分为不同的层次或级别,每个层次具有特定的功能和目的。这种分层方法有助于管理数据仓库中的数据流程、数据处理和数据访问,并提供一种清晰的结构来支持…...

计算机视觉——OpenCV Otsu阈值法原理及实现
算法简介 Otsu阈值法,也被称为大津算法,是一种在图像处理中广泛使用的自动阈值分割技术。这种方法由日本学者大津展之于1979年提出,旨在根据图像的灰度直方图来自动选择最佳全局阈值。Otsu阈值法的核心思想是最小化类内方差或最大化类间方差…...

个人IP打造孵化运营产业链商业计划书
【干货资料持续更新,以防走丢】 个人IP打造孵化运营产业链商业计划书 部分资料预览 资料部分是网络整理,仅供学习参考。 PPT共90页(完整资料包含以下内容) 目录 个人IP运营方案: 1. 个人IP定位与构建 1.1 人格画像构…...

R语言:卡方检验
χ2检验(Chi-Square Test)是一种用于检验分类变量之间是否存在相关性的统计方法。χ2检验的原理基于观察到的频数与期望频数之间的偏差来判断分类变量之间是否存在显著的关联。 χ2检验的原理可以概括为以下几个步骤: 建立假…...