七、1 ADC模数转换器介绍+有关知识点

news2024/9/24 9:21:38

目录

1、介绍

(1)ADC,模拟信号转换为数字信号

(2)DAC和PWM,数字信号转换为模拟信号

(3)ADC的两个关键参数

(4)

(5)

(6)

(7)

(8)

2、逐次逼近型ADC

(1)型号为ADC0809 的普通ADC

(2)STM32的ADC

1)

2)触发ADC开始转换的信号

3)

4)

3、ADC通道与引脚的对应关系

4、转换模式(4种)

5、触发控制

6、数据对齐

7、转换时间

8、校准

9、硬件电路


1、介绍

(1)ADC,模拟信号转换为数字信号

GPIO只能读取引脚的高低电平,

而ADC可以对高低电平之间的任意电平之间的任意电压进行量化,最终用一个变量来表示。读取这个变量就可以知道引脚的电压到底是多少。(将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁)

ADC就是相当于一个电压表,把引脚的电压值测出来,放在一个变量里。

(2)DAC和PWM,数字信号转换为模拟信号

DAC:数字模拟转换器,可将数字变量转化为模拟电压(数字到模拟的桥梁)。主要应用在波形生成领域,如信号发生器、音频解码芯片等。

PWM也有DAC的功能,PWM只有完全导通和完全断开两种状态,这两种状态都没有功率损耗,所以在直流电机调速这种大功率的应用场景,使用PWM来等效模拟量是比DAC更好的选择。并且PWM电路更加简单,更加常用。

(3)ADC的两个关键参数

分辨率:一般用多少位来表示,12位AD值,表示范围为0~2^12 - 1(即量化结果的范围是0~4095),位数越高,量化结果就越精细,对应分辨率就越高。

转换时间(转换频率):AD转换需要一小段时间,1μs表示从AD转换开始到产生结果,需要花费1μs的时间,对应AD转换的频率就是1MHz(为STM32 ADC的最快转换频率,若转换一个频率比较高的信号,就要考虑这个转换频率够不够用)

(4)

输入电压0V对应转换结果0,3.3V对应4095

二者呈线性关系

(5)

(该系列最多有)16个外部信号源是16个GPIO口,在引脚上直接接模拟信号就行,不需要任何额外的电路,引脚就能直接测电压;

2个内部信号源是内部温度传感器(可测量CPU的温度,内部参考电压为一个1.2V左右的基准电压)和内部参考电压 VREFINT(V Reference Internal)。

(6)

普通的AD转换流程是:启动一次转换、读一次值,再启动、再读值。

STM32的ADC比较高级,可以列一个组,一次性启动一个组,连续转换多个值。并且有两个组,一个用于常规使用的规则组,一个用于突发事件的注入组

(7)

ADC一般用于测量光线强度、温度的值,并且经常有一个需求是,如果光线(温度)高于某个阈值、低于某个阈值时,执行一些操作。高于某个阈值或低于某个阈值的判断,可以用模拟看门狗来自动执行。

模拟看门狗可以检测指定的某些通道,当AD值高于它设定的上阈值或低于下阈值时,就会申请中断,执行中断函数里的相应操作。(这样就不需要手动读值,再用 if 进行判断了)

(8)

ADC的资源有ADC1、ADC2 共两个ADC外设;

最多只能测量10个外部引脚的模拟信号(想要更多的外部通道,可选择引脚更多的型号)

2、逐次逼近型ADC

(1)型号为ADC0809 的普通ADC

若DAC输出电压比较大(小)就调小(增大)DAC数据,直到DAC输出的电压和外部通道输入的电压近似相等,这样DAC输入的数据就是外部电压的编码数据了。

通常使用二分法进行寻找

(2)STM32的ADC

1)

一般情况下,使用规则组就足够了

2)触发ADC开始转换的信号

触发ADC开始转换的信号有两种:①软件触发,在程序中手动调用一条代码就可以启动转换;②硬件触发

因为ADC经常需要过一个固定时间段转换一次,比如每隔1ms转换一次,正常思路为用定时器,每隔1ms申请一次中断,在中断里手动开始一次转换。但频繁进中断对程序有一定影响(若有很多中断,可能导致一些中断不能及时响应),这种需要频繁进中断,并且只是进行一些简单的操作的,一般会有硬件支持。

如:给TIM3定个1ms的时间,把TIM3的更新事件选择TRGO输出,在ADC这里选择开始触发信号为TIM3的TRGO,这样TIM3的更新事件就能通过硬件自动触发ADC转换了。

3)

4)

3、ADC通道与引脚的对应关系

4、转换模式(4种)

①单次转换,非扫描模式:只转换一次,想再启动一次转换就需要再触发一次;非扫描模式下,菜单只有第一个序列1的位置有效,这时,菜单同时选中一组的方式就退化为简单地选中一个的方式。

②连续转换,非扫描模式:一次转换结束后不会停止,立刻开始下一轮的转换,然后一直持续下去;菜单列表只用第一个。

③单次转换,扫描模式:只转换一次;确定有几个通道,每次触发之后,依次对这前几个位置进行AD转换,转换结果都放在数据寄存器里,为防止数据被覆盖,就需要用DMA及时将数据挪走。

④连续转换,扫描模式:一次转换结束后不会停止,立刻开始下一轮的转换,然后一直持续下去;只转换一次;确定有几个通道,每次触发之后,依次对这前几个位置进行AD转换,转换结果都放在数据寄存器里,为防止数据被覆盖,就需要用DMA及时将数据挪走。

⑤间断模式

5、触发控制

6、数据对齐

我们这个ADC是12位的,它的转换结果就是一个12位的数据,但数据寄存器是16位的,所以存在一个数据对齐的问题。

一般使用右对齐

7、转换时间

8、校准

校准过程是固定的,只需要在ADC初始化的最后,加几条代码就行了

9、硬件电路

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

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

相关文章

深度学习代码运行RuntimeError:No such operator torchvision::nms解决方案

RuntimeError: No such operator torchvision::nms解决方案 跑代码的时候碰到了"RuntimeError: No such operator torchvision::nms",找到的资料显示大多是"torch"和"torchvision"版本不匹配,让二者版本一致即可解决。但我…

抱抱脸自动下载模型地址

HuggingFace模型自动下载找保存地址 问题:OSError: Incorrect path_or_model_id: THUDM/cogvlm2-llama3-chat-19B/model.safetensors.index.json. Please provide either the path to a local folder or the repo_id of a model on the Hub. 解决:MODEL_…

多叉树的深度优先遍历(以电话号码的字母组合为例)

在我们的座机上,都有这种数字与字母对应的按键。 以此为例,讲解多叉树的深度优先遍历 问题 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同…

奥运新项目带来新增长,小众运动攀岩相关商品成交额同比增长 160%

巴黎奥运会临近收官,中国健儿在乒乓球、网球、跳水、游泳等众多项目中表现出色,不仅吸引了全球目光,更在国内掀起了一股强劲的“奥运热”。抖音电商数据显示,7月20日-8月2日“热力先锋季”主题活动期间,抖音电商体育类…

“名字说我俩挺配的”:解锁姓名背后的神秘共鸣,带你玩转名字魔法!

引言:从姓名中挖掘灵魂共鸣 大家好,欢迎来到“姓名共鸣者”的世界!不管你是想知道自己的名字和暗恋对象的名字有多配,还是好奇自己和某个历史人物之间的缘分,或者只是想找点乐子,“姓名共鸣者”都能满足你…

[qt] 数据库基本概念

一 数据和数据库 1.1 数据 数据可以是被计算机接受处理和处理的符号。可以有数字、文字、表格、图形、图像和声音等 1.2 数据库 顾名思义就是存放数据的仓库 1.2.1 特点 数据按照数据模型组织,是高度结构化的,可供多个用户共享并且具有一定的安全性…

视频怎么转换成mp3音频?视频转mp3音频的几个批量方法

视频怎么转换成mp3音频?在现代的工作场景中,多媒体文件的处理已经成为许多工作任务中不可或缺的一部分。特别是在处理视频和音频文件时,有时候需要将视频文件转换成MP3音频格式。这一操作不仅仅是简单的格式转换,更是为了适应不同…

微信小程序实现Canvas画板

这个小demo适用于 快递实名签收等业务逻辑 源码如下: js文件: Page({data: {ctx: "", // 保存 canvas 上下文pen: 5, // 画笔默认的宽度color: "#000", // 画笔默认的颜色},startX: 0, // 保存 X 坐标startY: 0, // 保存 Y 坐标o…

人在职场,格局越小,破事越多

人在职场,面对同样的琐碎、倾轧,有人处理得游刃有余,有人总是战战兢兢,表面上看起来,是能力水平的差别,归根究底,是格局的不同。 格局越小的人,眼里的破事越多;格局越大…

【限流与Sentinel超详细分析】

Sentinel 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。 1 Sentinel 基本概念 资源…

OpenAI开发ChatGPT“反作弊神器”,99.9%超高命中率,还没上线

检查内容是否用了ChatGPT,准确率高达99.9%! OpenAI又左右互搏上了,给AI生成的文本打水印,高达99.9%准确率抓「AI枪手」作弊代写。其能够精准识别出论文或研究报告是否由ChatGPT撰写,甚至能追溯其使用的具体…

C++ | Leetcode C++题解之第328题奇偶链表

题目: 题解: class Solution { public:ListNode* oddEvenList(ListNode* head) {if (head nullptr) {return head;}ListNode* evenHead head->next;ListNode* odd head;ListNode* even evenHead;while (even ! nullptr && even->next…

VScode的环境编译器选择

按快捷键 Ctrl Shift P 选择即可

中国移动机顶盒【山东】魔百和CM201-2芯片HI3798MV300刷机过程、心得(朝歌代工)【免拆刷机】过程心得

中国移动【山东】魔百和CM201-2芯片HI3798MV300刷机过程、心得(朝歌代工)【免拆刷机】过程心得 先上主板图(虽然是【免拆刷机】但是为了防止刷机失败,建议大家拆一下对比一下主板是否一致) 添加图片注释,不超过 140 字…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天

目录 一,列表-无序和有序的定义列表 二,表格-基本使用与表格结构标签 三,合并单元格 四,表单-input标签 五,表单-下拉菜单 六,表单-文本域 七,表单-label标签 八,表单-按钮 …

git 如何把A仓库中的代码提交到B仓库分支

1. git clone A仓库代码到本地 首先将A仓库代码克隆到本地(地址为A仓库地址,替换自己的即可) git clone http://gitlab.cn/sourceA/A.git 2. 添加目标B仓库为远程仓库 git remote add target http://gitlab.cn/targentB/B.git 3. 查看当前远程仓库地址 git remo…

C++ --- std::array容器与std::vector容器的区别

std::array和std::vector的区别 一、内存管理和大小固定性二、性能三、功能特性四 、使用场景 在C中,array和vector都是用于存储一系列相同类型元素的容器,但它们之间存在几个关键的区别。这些区别主要体现在内存管理、大小固定性、性能以及功能特性等方…

18 数据在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 (一)什么是大小端 (二)为什么会有大小端 (三)练习 1、设计一个小程序来判断当前机器的字节序 2、练习二 3、练习三 4、练习四 5、练习五…

73 属性

① 公开的数据成员可以在外部随意访问和修改,很难保证用户进行修改时提供新数据的合法性,数据很容易被破坏,也不符合类的封装性要求。解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对私有数据成员的读取…

基于STM32开发的智能门禁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 公司门禁管理家庭门禁管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门禁系统通过RFID卡或密码输入的方式,实现对门禁的智能控制和管理…