基于STM32外设 -- 超详细ADC(模数转换器)内部流程及解析

前言

       本次我们学习一下STM32的一个基本外设 --- ADC(模数转换器),全程参考手册讲解,讲述ADC的工作模式和作用,转换过程和转换方式。本篇博客大部分是自己收集和整理,借鉴了很多大佬的图片和知识点整理,如有侵权请联系我删除。

本次实验板子使用的是正点原子精英版,芯片是STM32F103ZET6,需要资料可以@我拿取。

本博客内容原创,创作不易,转载请注明

一 . ADC介绍

一 . 数字/模拟量的介绍

1.Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变的模拟信号转换为离散的数字信号的器件。

2.AD转换就是模数转换,也可以是整流。顾名思义,就是把模拟信号转换成数字信号。

3.模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。A/D转换后,输出的数字信号可以有8位、10位、12位、14位和16位等。

4.DAC转换就是数模转换,就是将离散的数字量转换为连接变化的模拟量。与数模转换相对应的就是模数转换,模数转换是数模转换的逆过程。

5.数字量:在时间上和数量上都是离散的物理量称为数字量。把表示数字量的信号叫数字信号。把工作在数字信号下的电子电路叫数字电路。数字量由多个开关量组成。如三个开关量可以组成表示八个状态的数字量。

6.模拟量:在时间上或数值上都是连续的物理量称为模拟量。把表示模拟量的信号叫模拟信号。把工作在模拟信号下的电子电路叫模拟电路。模拟量是连续的量,数字量是不连续的。反映的是电量测量数值(如电流、电压)。

二 . ADC基本原理

    模拟信号转换为数字信号,一般分为四个步骤进行。即采样、保持、量化和编码。前两个步骤在取样 -- 保持电路中完成,后两步骤则在 ADC 中完成。

二. STM32_ADC介绍

12位ADC是一种逐次逼近型模拟数字转换器

1us转换时间,在 ADCCLK=14M,采样周期为 1.5 个 ADC 时钟下得到

输入电压范围:0~3.3V,转换结果范围:0~4095,ADC供电要求:2.4V到3.6V 

STM32 ADC的总转换时间为:TCONV = 采样时间 + 12.5个ADC周期

例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期

 TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

        STM32F103 系列最少都拥有 2 ADC ,我们选择的 STM32F103ZET 包含有 3 ADC
STM32 ADC 最大的转换速率为 1Mhz ,也就是转换时间为 1us (在 ADCCLK=14M, 采样周期
1.5 ADC 时钟下得到),不要让 ADC 的时钟超过 14M ,否则将导致结果准确度下降。

一 . ADC框图分析

二. ADC基本结构

三 . ADC外部通道和硬脚对应图

三. STM32 ADC通道组

        STM32 将 ADC 的转换分为 2 个通道组: 规则通道组和注入通道组 。规则通道相当于你正
常运行的程序,而注入通道呢,就相当于中断。
        在你程序正常执行的时候,中断是可以打断你 的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。

一. 模式介绍

一 . 单次转换模式

二 . 连续转换模式

三. 扫描模式

二 . 模式组合说明

        STM32F1的ADC的各通道可以单次,连续,扫描或者间断模式执行。 扫描与不扫描:扫描用于多个转换情况下。

单次扫描:触发一次,把设定的转换通道依次转换一次。每次转换结束后,都要再次触发才能开始,指定通道数目,在最后一个通道判断标志位。

单次不扫描:触发一次,把设定的第一个通道转换一次。转换结果在数据寄存器,EOC标志位为1读取,每次都要手动转换,同时读取EOC标志位

连续扫描:触发一次,把设定的转换通道依次转换一次。然后又回到第一个转换重新启动一轮转换。如此循环。

连续不扫描:触发一次,不停的对第一个通道进行转换。在一次转换后不会停止,马上开始下一次转换,只需要最开始触发一次,不用判断是否结束,需要AD值可以在数据寄存器直接读取。

三 . 通道选择

 软件触发ADC,就是芯片内部事件触发ADC,硬件触发就是芯片外部其他模块操作出发ADC

如:需要总共转换二个注入通道。第一次转换通道7 ,第二次转换通道3

ADC1->JSQR |= 1<<20

ADC1->JSQR |=7<<10 ; //通道7第一次转换

ADC1->JSQR |=3<<15 ; //通道3第二次转换

四. 数据对齐

一般选择右对齐,舍弃左边,如果左对齐,右边将会补0 ,数据就会不精准。

四. STM32_ADC中断

 五 . ADC校准

1.ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。

2.校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差

3.建议在每次上电后执行一次校准

4.启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

程序思路:

设置ADC时钟分频 设置ADC通道转换序列,

通道转换数量

设置ADC工作模式

设置ADC数据对齐方式

编写ADC转换启动函数 根据电压转换公式还原模拟量。VX / Vref= Bx / 2n,Bx:数字量、Vx:模拟量、Vef:参考电压、2n:n为ADC的分辨率

实现过程:

一.配置IO

  1. 开启时钟。
  2. 配置为模拟输入

二 .配置ADC - -  ADC1

  1. 开启时钟
  2. 一个通道—CR1
  3. 非扫描模式 –CR1
  4. 选择外部触发 –CR2
  5. 选择启动规则通道组转换的外部事件 – SWSTART –CR2
  6. 数据对齐 –右对齐
  7. 是否启用启用DMA
  8. 校准
  9. 单次模式
  10. 设置采样周期 ---不要设置太快,--SMPRx
  11. ADC 的时钟分频:
  1. 设置总的采样通道数 -- SQR1
  2. 设置通道采样顺序  -- SQR3
  3. 开/关A/D转换器 –CR2

三 。开启转换

1.开启规则组转换 –CR2

等待转换结束。

获取AD值。

2.是否开启注入组转换

总结:


       ADC外设的基本功能就是这么多了,大概注意的就是转换模式,注意多通道转换的方法,大家如果对我的博客有疑问或者错误,可以@我修改,大家相互交流。

  点赞收藏关注博主,不定期分享单片机知识,互相学习交流。
————————————————
 

 

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

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

相关文章

小猪优版的前世今生:从籍籍无名到行业瞩目,再到骤变的风暴中心

1. 前世&#xff1a;籍籍无名到行业新星的崛起 小猪优版在初创时期&#xff0c;并不被大众所知。然而&#xff0c;它凭借对短视频行业的深度洞察&#xff0c;以及独特的商业模式&#xff0c;开始在这个领域崭露头角。它提供了一个平台&#xff0c;不仅助力内容创作者更好地展现…

Vue3 配置全局 scss 变量

variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用

在springboot中实现WebSocket协议通信

前面介绍了使用netty实现websocket通信&#xff0c;有些时候&#xff0c;如果我们的服务并不复杂或者连接数并不高&#xff0c;单独搭建一个websocket服务端有些浪费资源&#xff0c;这时候我们就可以在web服务内提供简单的websocket连接支持。其实springboot已经支持了websock…

python -opencv形态学操作

python -opencv形态学操作 1.服饰和膨胀 2.开运算和闭运算 3.礼帽运算和黑帽运算 1.服饰和膨胀 opencv 腐蚀通过cv2.erode实现&#xff0c;膨胀通过cv2.dilate实现&#xff0c;看一下下面代码&#xff1a; from ctypes.wintypes import SIZE from multiprocessing.pool i…

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开&#xff1a;Bias and Debias in Recommender System: A Survey and Future Directions。 下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Posit…

跨境电商包装的可持续性:EPR的视角

跨境电商的崛起已经改变了我们购物的方式&#xff0c;使我们能够轻松购买来自世界各地的产品。然而&#xff0c;这种便捷也伴随着一个不容忽视的问题&#xff1a;包装和废物管理。 跨境电商平台通常需要在全球范围内运送产品&#xff0c;这意味着大量的包装材料和废弃物。在这…

【计算机网络学习之路】TCP socket编程

文章目录 前言一. 服务器1. 初始化服务器2. 启动服务器 二. 客户端三. 多进程服务器结束语 前言 本系列文章是计算机网络学习的笔记&#xff0c;欢迎大佬们阅读&#xff0c;纠错&#xff0c;分享相关知识。希望可以与你共同进步。 本篇博客基于UDP socket基础&#xff0c;介绍…

企业建数仓的第一步是选择一个好用的ETL工具

当企业决定建立数据仓库&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是选择一款优秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。数据仓库是企业数据管理的核心&#xff0c;它存储、整合并管理各种数据&#xff0c;为商业决策和数据分析提供支…

模电知识点总结(二)二极管

系列文章目录 文章目录 系列文章目录二极管二极管电路分析方法理想模型恒压降模型折线模型小信号模型高频/开关 二极管应用整流限幅/钳位开关齐纳二极管变容二极管肖特基二极管光电器件光电二极管发光二极管激光二极管太阳能电池 二极管 硅二极管&#xff1a;死区电压&#xf…

从零开始的c语言日记day36——指针进阶

一、什么是指针: 指针的概念:1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 ⒉指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型&#xff0c;指针的类型决定了指针的-整数的步长&#xff0c;指针解引用操作的时候的权限。…

RTS 客户端-服务器网络

Stone Monarch 从一开始就支持多人游戏&#xff0c;但随着时间的推移&#xff0c;网络模型经历了多次迭代。我最初基于这篇著名的帝国时代文章实现了点对点锁步模型。 点对点锁定步骤有一些众所周知的问题。点对点方面使玩家很难相互连接&#xff0c;并增加了每个新玩家的网络…

spring boot 热部署

相信小伙伴们在日常的开发中&#xff0c;调试代码时&#xff0c;免不了经常修改代码&#xff0c;这个时候&#xff0c;为了验证效果&#xff0c;必须要重启 Spring Boot 应用。 频繁地重启应用&#xff0c;导致开发效率降低&#xff0c;加班随之而来。有没有什么办法&#xff0…

UEC++ day8

伤害系统 给敌人创建血条 首先添加一个UI界面用来显示敌人血条设置背景图像为黑色半透明 填充颜色 给敌人类添加两种状态表示血量与最大血量&#xff0c;添加一个UWidegtComponet组件与UProgressBar组件 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "Enemy …

浏览器没收到返回,后端也没报错,php的json_encode问题bug

今天网站遇到个问题&#xff0c;后端返回异常&#xff0c;但是浏览器状态码200&#xff0c;但是看不到结果。经过排查发现&#xff0c;我们在返回结果的时候使用了json_encode返回给前端&#xff0c;结果里面的字符编码异常&#xff0c;导致json_encode异常&#xff0c;但是php…

禁止linux shell 终端显示完整工作路径,如何让linux bash终端不显示当前工作路径

在操作linux时&#xff0c;默认安装的linux终端会显示当前完整的工作目录&#xff0c;如果目录比较短还是可以接收&#xff0c;如果目录比较长&#xff0c;就显得比较别扭&#xff0c;操作起来不方便&#xff0c;因此需要关闭这种功能。 要关闭这个功能&#xff0c;请按如下步骤…

生命周期评估(LCA)与SimaPro碳足迹分析

SimaPro提供最新的科学方法和数据库以及丰富的数据&#xff0c;使您可以收集和评估产品和流程的环境绩效。通过这种方式&#xff0c;您可以将改变公司产品生命周期的想法提交给您的同事&#xff0c;以便阐明您的业务未来。 SimaPro软件的特点和功能&#xff1a; 完全控制产品生…

供应链和物流的自动化新时代

今天&#xff0c;当大多数人想到物流自动化时&#xff0c;他们会想到设备。机器人、无人机和自主卡车运输在大家的谈话中占主导地位。全自动化仓库的视频在网上流传&#xff0c;新闻主播们为就业问题绞尽脑汁。这种炒作是不完整的&#xff0c;它错过了供应链和物流公司的机会。…

基于安卓android微信小程序的刷题系统

项目介绍 面试刷题系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用jsp技术进行开发&#xff0c;中间件服务器是Tomcat服务器&#xff0c;使用Mysql数据库和Eclipse开发环境。该面试刷题系统包括会员、答题录入员和管理员。其主要功能包括管理员&#xff1a;个…

selenium 简单案例 <批量下载文件> <网页自动化点击上报>

一、批量下载文件 网页分析 点击跳转到下载页面 from selenium import webdriver import timedef get_link_list():# 创建浏览器对象driver webdriver.Chrome(executable_pathrC:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe)url https://www…

几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具&#xff1a; FindBugs&#xff1a;FindBugs是一个静态分析工具&#xff0c;用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…