STM32单片机(七)ADC模拟数字转换器----第一节:ADC模数转换器

news2024/10/7 18:28:16

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习ADC模拟数字转换器的相关知识,包含两小节:
第一小节主要学习ADC模拟数字转换器的理论基础知识,第二小节是对第一小节的内容写两个程序进行练习,分别是AD单通道和AD多通道;
最终附上所有的源代码;

本小节主要学习ADC模拟数字转换器的理论基础知识。

ADC的作用:
对于GPIO来说,它只能读取引脚的高低电平,要么是高电平,要么是低电平,只有两个值;而使用ADC之后,我们就可以对这个高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量,就可以知道引脚的具体电压是多少了;所以ADC其实就是一个电压表,把引脚的电压值测出来,放在一个变量里,这就是ADC的作用

文章目录

    • 1 ADC简介
    • 2 逐次逼近型ADC
    • 3 ADC框图
    • 4 ADC基本结构
    • 5 输入通道
    • 6 转换模式
    • 7 触发控制
    • 8 数据对齐
    • 9 转换时间
    • 10 校准
    • 11 硬件电路

1 ADC简介

在这里插入图片描述

  • STM32主要是数字电路,数字电路只有高低电平,没有几伏电压的概念,所以如果想要读取电压值,就需要借助ADC模数转换器来实现了;ADC读取引脚上的模拟电压,转换为一个数据,存在寄存器里,我们再把这个数据读取到变量里,就可以进行显示、判断、记录等等操作了;
  • ADC可以将模拟信号转换为数字信号,是模拟电路到数字电路的桥梁;
  • DAC模拟数字转换器,可以将数字量转换为模拟电压;

ADC有两个关键参数:

  • 第一个是分辨率,一般用多少位来表示,12位AD值,它的表示范围就是0~2^12-1;就是量化结果范围是0~4095;位数越高,量化结果就越精细,对应分辨率就越高;
  • 第二个是转换时间,就是转换频率;AD转换是需要花一小段时间的,这里的1us就表示从AD转换开始,到产生结果,需要花1us时间,对应AD转换的频率就是1MHz;这个就是STM32 ADC最快的转换频率;

2 逐次逼近型ADC

在这里插入图片描述

  • 上图是ADC0809的内部结构图;它是一个独立的8位逐次逼近型ADC芯片,其是一款经典的外挂型ADC芯片;
  • 左边IN0-IN7是8路输入通道;通过通道选择开关,选中一路,输入到比较器进行转换;
  • 下面的地址锁存和译码模块;就是你想选中哪个通道,就把通道号放在ADDA-ADDC这三个引脚上,然后给一个锁存信号,则上面通道选择开关里对应的通路开关就可以自动拨好了;
  • 这个ADC只有8个输入通道,而我们STM32内部的ADC是有18个输入通道的;所以对应上面输入通道,STM32内部是有18个输入的;
  • 比较器可以判断两个输入信号电压的大小关系,输出一个高低电平指示谁大谁小,它的两个输入端,一个是待测电压,另一个是DAC的电压输出端,DAC是数模转换器,给它一个数据,它就可以输出数据对应的电压;现在在比较器两端,一端有了一个外部通道输入的位置编码的电压,另一端有了一个DAC输出的一直编码的电压,他俩同时输入到电压比较器,进行大小判断;如果DAC输出的电压比较大,我就调小DAC数据,如果DAC输出的电压比较小,我就增大DAC数据,直到他们相等;就得到了外部位置编码电压的具体数值,这样DAC输入的数据就是外部电压的编码数据了 ;这就是DAC的实现原理
  • 上面提到的比较方法,使用的是二分法的比较方法;

3 ADC框图

在这里插入图片描述
在这里插入图片描述

  • 模拟多路开关,可以指定我们想要选择的通道;右边是多路开关的输出,进入到模数转换器;这里的模数转换器就是执行逐次比较的过程;转换结果会直接放在数据寄存器里;通过程序读取寄存器就能直到ADC转换的结果了;

在这里插入图片描述

4 ADC基本结构

在这里插入图片描述

  • 左边是输入通道,16个GPIO口,外加两个内部的通道;
  • 然后进入AD转换器,AD转换器里有两个组,一个是规则组,一个是注入组,规则组最多可以选中16个通道,注入组最多可以选择4个通道;
  • 转换的结果可以存放在AD数据寄存器里,其中规则组只有1个数据寄存器,注入组有4个
  • 然后下面有触发机制,提供了开始转换这个START信号,触发控制可以选择软件触发和硬件触发,硬件触发主要是来自于定时器,当然也可以选择外部中断的引脚;右边是来自于RCC的ADC时钟CLOCK;ADC逐次比较的过程就是由这个时钟推动的;
  • 模拟看门狗用于检测转换结果的范围, 如果超出设定的阈值,就通过中断输出控制,向NVIC申请中断;
  • 另外,规则组和注入组转换完成后会有个EOC信号,它会置一个标志位,当然也可以通向NVIC;
  • 最后右下角还有个开关控制,在库函数中,就是ADC_Cmd函数,用于给ADC上电的;

5 输入通道

在这里插入图片描述

上图是ADC通道和引脚复用的关系;

6 转换模式

在这里插入图片描述

  • 单词转换,非扫描模式,单次转换后就会停止;然后开启下一次转换;

在这里插入图片描述

  • 连续转换,非扫描模式:它与单次转换,非扫描模式的不同是,它在一次转换结束后不会停止,而是立刻开始下一轮的转换,然后一直持续下去;这样只需要最开始触发一次,之后就可以一直转换了;
  • 这个模式的好处是开启转换后不需要等待一段时间;

在这里插入图片描述

  • 单次转换,扫描模式:也是单次转换,所以每触发一次,转换结束后就会停下来,下次转换就得再触发才能开始;然后它是扫描模式,就会用到列表了,左边的每个位置是通道几可以任意指定,并且可以重复;初始化结构体里还会有个参数,就是通道数目,因为16个位置可以不用完,只用前几个,所以需要指定通道数;
    在这里插入图片描述
  • 连续转换,扫描模式

7 触发控制

在这里插入图片描述

8 数据对齐

在这里插入图片描述

  • 一般我们使用右对齐

9 转换时间

在这里插入图片描述

10 校准

在这里插入图片描述

11 硬件电路

在这里插入图片描述

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

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

相关文章

autoDL上A100运行wiki出错:NVIDIA A100-PCIE-40GB(最后安装好torch+dgl了);学校服务器加2.X版本pytorch

1、A100运行wiki出错:NVIDIA A100-PCIE-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA A100-PCIE…

CTFshow-pwn入门-pwn26-pwn28

什么是ASLR 大多数的攻击都基于这样一个前提,即攻击者知道程序的内存布局,需要提前知道shellcode或者其他一些数据的位置。因此,引入内存布局的随机化能够有效增加漏洞利用的难度,其中一种技术就是ASLR(Address Space…

Qt颜色、文件、字体对话框

项目目录 界面 一、颜色对话框 QColor color QColorDialog::getColor(QColor(255,0,0));qDebug()<<"r"<<color.red()<<" g "<<color.green()<<" b "<<color.blue(); 二、文件对话框 //文件对话框QString…

《网络安全0-100》-网络攻击方式

网络攻击方式 DoS DDoS攻击 DoS攻击和DDoS攻击都是网络攻击的一种&#xff0c;它们的区别如下&#xff1a; DoS攻击(Denial of Service&#xff0c;拒绝服务攻击)&#xff1a;指攻击者通过向目标计算机或网络发送大量的合法请求&#xff0c;占用其网络资源和带宽&#xff0c;…

Java API

目录 1.JSON 2.多线程 3.网络编程 1.JSON &#xff08;1&#xff09;定义&#xff1a; 1.轻量级的文本数据交换格式 2.具有自我描述性【看到某个JSON数据就能知道它的特点】 3.比XML传输速度快【跨平台】 (2)语法规则&#xff1a; 1.语法&#xff1a; 2.构成要素&#xff…

Cortext-M3系列:M3内核概述(1)

引言&#xff1a; 本系列博客记录的是博主以前学习单片机时期的一些关于MCU内核方面的知识点和笔记&#xff0c;分享给一起学习的小伙伴&#xff0c;也作为复习用处。文中出现的Cortex-M3、CM3、M3均指的是ARM公司的产品Cortex-M3&#xff0c;后面不再赘述。本系列的博客仅仅只…

基于Java共享客栈管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Go语言包设计指南

1. Go包的认知 1.1 Go包是基本功能单元 我们知道Go包是Go编程语言中的一个重要概念&#xff0c;它是一组相关的Go源代码文件。并且&#xff0c;在Go中&#xff0c;每个Go源文件都必须属于一个包。 Go包是一个逻辑上独立的单元&#xff0c;是Go的基本功能单元&#xff0c;用来做…

Redis安装说明(heima)

Redis安装说明&#xff08;heima&#xff09; 笔者的redis(Linux版)的下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87926624 笔者的redis图形化桌面客户端&#xff0c;下载链接地址为&#xff1a;https://download.csdn.net/download/weixin…

Python单元测试框架之pytest -- 断言

对于测试来讲&#xff0c;不管是功能测试&#xff0c;自动化测试&#xff0c;还是单元测试。一般都会预设一个正确的预期结果&#xff0c;而在测试执行的过程中会得到一个实际的结果。测试的成功与否就是拿实际的结果与预期的结果进行比较。这个比的过程实际就是断言&#xff0…

PHP实战开发24-一定要知道PHP中反射的强大应用

文章目录 一、前言1.1 关于反射1.2 PHP中的反射 二、反射的应用2.1 自动注入2.2 动态调用方法2.3 注解解析 总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 1.1 关于反射 反射是一种编程语言的特性&#xff0c;它允许程序在运行时获取和操作对象的…

kotlin从入门到精通之内置类型

基本类型 声明变量 val&#xff08;value的简写&#xff09;用来声明一个不可变的变量&#xff0c;这种变量在初始赋值之后就再也不能重新赋值&#xff0c;对应Java中的final变量。 var&#xff08;variable的简写&#xff09;用来声明一个可变的变量&#xff0c;这种变量在初始…

CUDA线程的线程层次结构,以及单个线程threadIdx如何使用stride来进行跳步操作,同时对多个数据进行计算

线程层次的概念&#xff1a; 简单说&#xff0c;就是一个grid有多个block,一个block有多个thread. grid有多大&#xff0c;用gridDim表示它有多少个block&#xff0c;具体分为gridDim.x, gridDim.y&#xff0c;gridDim.z。 block有多大&#xff0c;用blockDim表示它有多少个t…

SpringBoot项目结合@Slf4j将日志记录到磁盘和数据库

文章目录 1、背景介绍2、存本地2.1、配置文件2.2、使用 3、存数据库3.1、配置文件改造3.2、过滤器编写3.3、表准备3.4、添加依赖3.5、测试 4、优化4.1、日志定期删除4.2、分库处理4.3、环境 5、总结 1、背景介绍 现在我一个SpringBoot项目想记录日志&#xff0c;大概可以分为下…

深度学习助力版面分析技术,图像“还原”有方

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

【Python 随练】分数序列

题目&#xff1a; 有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13… 求出这个数列的前 20 项之和。 简介&#xff1a; 在本篇博客中&#xff0c;我们将研究一个有趣的数学问题&#xff1a;求解一个特殊数列的…

MySQL出现Specified key was too long; max key length is 3072 bytes解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

算法篇——动态规划 01背包问题 (js版)

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 链接&#xff1a;力扣 解题思路&#xff1a; 这道题看似是比较简单的背包问题&#xff1a; 首先可以通过判断数组和是否是…

MVC框架的model,view,controllr如何运作

第一步&#xff1a; MVC 是&#xff1a;model&#xff0c;view&#xff0c;controller 的缩写。 第二步&#xff1a; view负责界面显示&#xff0c;也就是jsp&#xff0c;html页面 controller是控制业务流程&#xff0c;也就是servlet&#xff0c;service等java文件 model是…

AI绘图网站 AI绘图生成器推荐

一、怎样设置关键词才能制作出美观高端的图片&#xff1f; 要在使用AI绘画软件时生成高端的优质图片&#xff0c;关键词的设置是不可或缺的重要因素。以下是一些关键词设置的建议。 确立你想要呈现的主题或题材 在设定关键字之前&#xff0c;你必须确定你所要表现的主题或题材…