江科大/江协科技 STM32学习笔记P21

文章目录

  • ADC模数转换器
    • ADC简介
    • 逐次逼近型ADC
    • STM32的ADC
    • ADC基本结构
    • 输入通道
    • 转换模式
      • 单次转换,非扫描模式
      • 连续转换,非扫描模式
      • 单次转换,扫描模式
      • 连续转换,扫描模式
    • 触发控制
    • 数据对齐
    • 转换时间
    • 校准
    • 硬件电路
      • 电位器产生可调电压的电路
      • 传感器输出电压的电路
      • 电压转换电路


ADC模数转换器

ADC简介

在这里插入图片描述
有ADC也有DAC数字模拟转换器,使用DAC可以将数字变量转化为模拟电压,与PWM相比较,PWM也有DAC的功能,同时PWM只有完全导通和完全断开两种状态,没有功率损耗,在直流电机调速这种大功率的应用场景使用PWM来等效模拟量比DAC更好。DAC的应用主要在波形生成,比如信号发生器、音频解码芯片等。
AD转换需要花一小段时间,1us表示从AD转换开始到产生结果需要1us,对应AD转换的频率就是1MHz,是STM32ADC的最快转换频率。
两个内部信号源是内部温度传感器和内部参考电压,温度传感器可以测CPU温度,内部参考电压是1.2V左右的基准电压,不随外部供电电压变化而变化,如果芯片的供电不是标准3.3V,测量外部引脚的电压可能不对,这时可以读基准电压进行校准。
普通的AD转换流程是启动一次转换读一次值,再启动再读值,但STM32的ADC可以列一个组,一次性启动一个组,连续转换多个值,并且有两个组,一个用于常规使用的规则组,一个用于突发事件的注入组。
ADC一般可以用于测量光线强度、温度这些值,并且经常有需求,如果高于某个阈值或低于某个阈值执行一些操作,判断高于或低于可以用模拟看门狗来自动执行,模拟看门狗可以监测指定的某些通道,当高于或低于它设定的阈值时申请中断,就可以在中断函数里执行相应的操作,这样就不用不断手动读值再if判断了。

逐次逼近型ADC

在这里插入图片描述

地址锁存和译码的作用是,想选中哪一路就把通道号放在ADDA、ADDB、ADDC这三个脚上,然后给一个锁存信号,上面对应的通路开关就自动拨好了。
之后看电压比较器,它可以判断两个输入信号电压的大小关系,输出一个高低电平指示谁大谁小,两个输入端,一个是待测电压,另一个是DAC的电压输出端,DAC内部是使用加权电阻网络来实现的转换,当输入一个未知编码的电压,和一个DAC输出的已知编码的电压,两个同时输出到电压比较器进行大小判断,如果DAC输出的电压比较小,就增大DAC数据,直到DAC输出的电压和外部通道输入的电压近似相等,这样DAC输入的数据就是外部电压的编码数据了。电压调节的过程就是逐次逼近SAR来完成的,通常用二分法进行寻找电压,比如这里八位DAC,编码0-255,第一次比较给255的一半128,如果DAC电压大了,第二次比较给128的一半64…,对于8位ADC,依次判断8次就能找到未知电压的编码,对于12位的ADC判断12次。这就是逐次逼近的过程。
EOC是End of Convert转换结束信号,START是开始转换,给一个输入脉冲开始转换CLOCK是ADC时钟,因为ADC内部是一步一步进行判断的,需要时钟进行推动,VREF+和VREF-s是DAC的参考电压,DAC的参考电压也决定了ADC的输入范围,所以也是ADC参考电压

STM32的ADC

在这里插入图片描述
规则通道组最多选16个通道,但是规则通道取出结果时前15个数据会被覆盖掉,依次只能留一个数据,需要配合DMA进行数据转运。注入通道最多选4个通道,而且有四个数据寄存器,不用担心数据覆盖
在这里插入图片描述

左下角是触发转换的部分,也就是START信号开始转换。对于STM32的ADC,触发转换的信号有两种,一种是软件触发,在程序中手动调用一条代码启动转换,另一种是硬件触发,就是左下角这些触发源,主要来自于定时器,有定时器的各个通道还有TRGO定时器主模式的输出,定时器可以通向ADC、DAC这些外设用于触发转换,因为ADC经常需要过一个固定时间段转换一次,比如每隔1ms转换一次,如果正常用定时器每隔1ms申请一次中断会频繁进中断对程序有影响,像这种需要频繁进中断,并且在中断只完成了简单工作的情况,用硬件进行支持,比如这里给TIM3定1ms时间,并且把TIM3的更新事件选择为TRGO输出,然后在ADC选择开始触发信号为TIM3的TRGO(‌Trigger Output)‌,这样TIM3的更新事件就能通过硬件自动触发ADC转换,这就是定时器触发的作用。
在这里插入图片描述
V R E F + V_{REF+} VREF+ V R E F − V_{REF-} VREF是ADC的参考电压,决定了ADC输入电压的范围,下面VDDA和VSSA是ADC的供电引脚,一般情况下 V R E F + V_{REF+} VREF+接VDDA,但我们学的这款芯片没有,在内部已经和VDDA连接在一起了,VDDA接3.3V 、VSSA接GND,所以ADC的输入电压范围就是0-3.3V。
右边的ADCCLK是ADC的时钟,也就是上面的CLOCK,用于驱动内部逐次比较的时钟,来源于以ADC预分频器,来源与APB2时钟。
在这里插入图片描述

模拟看门狗里面可以存一个阈值高限和阈值低限,如果启动了模拟看门狗,并且指定了看门的通道,那这个看门狗就会关注它看门的通道,一旦超过阈值范围就是申请看门狗的中断,最后通向NVIC。对于规则组和注入组而言,转换完成后,也会有一个EOC转换完成的信号,EOC是规则组的完成信号,JEOC是注入组完成的信号,这两个信号会在状态寄存器里置一个标志位,读取标志位就能知道是不是转换结束了,同时这两个标志位也可以去NVIC申请中断,如果开启了NVIC对应的通道,它们就会触发中断

ADC基本结构

在这里插入图片描述

输入通道

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

ADC12_IN0的意思是ADC1和ADC2和IN0都是在PA0上,下面全是ADC12说明ADC1和ADC2的引脚全都是相同的,作用是双ADC模式,ADC1和ADC2一起工作,他俩可以配合组成同步模式、交叉模式等,交叉模式就是ADC1和ADC2交叉对一个通道进行采样,进一步提高采样率,ADC1和ADC2也可以分开使用,分别对不同的引脚进行采样

转换模式

单次转换,非扫描模式

在这里插入图片描述

非扫描模式下只有序列一的通道有效,触发转换ADC就会对通道2进行模数转换,过一小段时间转换完成,结构放在数据寄存器,同时给EOC标志位置置1,判断EOC标志位来决定什么时候读数据寄存器。如果想要再一次转换,就需要再触发一次,如果想换一个通道转换,转换之前把第一个位置的通道2改成其他通道,然后再启动转换

连续转换,非扫描模式

在这里插入图片描述

非扫描模式还是只用序列1,但连续转换,转换结束后不会停止,而是立刻开启下一轮转换,一直持续下去,这样只需要一开始触发一次,之后就可以一直转换了。这个模式的好处是开始转换之后不需要等待一段时间,因为一直在转换,想要读AD值的时候直接从数据寄存器读就是了。

单次转换,扫描模式

在这里插入图片描述

单次转换,没触发一次,转换结束后停下来。扫描模式会用到“菜单列表”,可以在菜单里点菜,第一个菜是通道2,第二个菜是通道5…初始化结构体力多了一个通道数目参数,告诉主机用到了几个序列,比如指定通道数目为7,就只看前7个位置,每次触发后依次对前7个位置进行AD转换,转换结果都放在数据寄存器里,为了防止数据被覆盖需要用DMA及时将数据挪走。7个通道转换完成之后产生EOC信号转换结束,然后再触发下次,开始新一轮转换。

连续转换,扫描模式

一次转换后立刻开始下一次的转换。另外注意扫描模式的情况下还有一种模式是间断模式,它的作用是在扫描的过程中每隔几个转换就暂停一次,需要再次触发才能继续

触发控制

在这里插入图片描述

具体是引脚还是定时器,需要用AFIO重映射来确定。软件控制位是我们之前说的软件触发,这些触发信号可以通过设置右边寄存器来选择

数据对齐

在这里插入图片描述

数据右对齐,高位补0,数据左对齐,低位补0。一般用数据右对齐,因为右对齐直接读出寄存器的值就是转换结果,如果选择左对齐,直接读得到的数据会比实际的大,因为数据左对齐实际上是把数据左移了四次,相当于把结果乘以16。左对齐的作用是如果不想要很高的分辨率,可以选择左对齐,再把数据的高8位取出,这样就舍去了后四位的精度,12位的ADC退化为8位ADC。

转换时间

在这里插入图片描述

为什么需要采样和保持?
AD转换就是后面的量化编码,需要一小段时间,如果这一小段时间里输入的电压还在不断变化,就无法定位输入电压到底在哪,所以在量化编码之前设置一个采样开关,先打开采样开关收集外部的电压,比如可以用一个小容量的电容存储一下电压,存储好之后断开采样开关再进行后面的AD转换。这样在量化编码的期间,电压始终保持不变,这样才能精确定位未知电压的位置,这就是采样保持电路,采样保持的过程中需要闭合采样开关,过一段时间再断开。
采样时间是采样保持花费的时间,可以在程序中配置,采样时间越大越能避免毛刺信号的干扰,不过转换时间也会相应延长,12.5个ADC周期是量化编码花费的时间,因为是12位ADC,所以花费12个周期,ADC周期就是从RCC分频过来的ADCCLK,最大是14MHz,下面是最快1us时间计算来源。

校准

在这里插入图片描述
校准过程是固定的,只需要在ADC初始化的最后加几条代码就行了。

硬件电路

在这里插入图片描述

电位器产生可调电压的电路

电位器产生一个可调的电压,电位器两个固定端一个接3.3V一个接GND,中间滑动端电压在这之间,一般接KΩ级的电阻,比如这里10k的电阻,这就是电位器产生可调电压的电路。

传感器输出电压的电路

中间是传感器输出电压的电路,一般像光敏电阻、热敏电阻、红外接收器、麦克风等,都可等效为一个可变电阻,电阻阻值没法直接测量,通过和一个固定电阻串联分压来得到一个反应电阻值电压的电路,传感器阻值变小,下拉作用变强,输出端电压就下降…固定电阻一般选和传感器阻值相近的电阻,这样可以得到一个位于中间电压区域比较好的输出。

电压转换电路

使用电阻进行分压,上面阻值17K,下面33K,加一起50K,根据分压公式,中间电压是VIN/50K*33K,最后得到的电压范围就是0-3.3V,就可以进入ADC转换了,如果电压再高不建议使用这个电路,高电压采集最好使用专门的采集芯片,比如隔离放大器等等,做好高低电压的隔离,保证电路安全

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

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

相关文章

DC-4靶机

扫描IP 端口扫描 目录扫描 访问80端口,发现一个登录界面 爆破密码 hydra -l admin -P rockyou.txt 192.168.254.153 http-post-form "/login.php:username^USER^&password^PASS^:Slogout" -F-l admin:指定用户名为 admin。 -P rockyou.t…

three.js 安装方法、基础简介、创建基础场景

threejs简介 Three.js是一个基于JavaScript编写的开源3D图形库,‌利用WebGL技术在网页上渲染3D图形。‌ 它提供了许多高级功能,‌如几何体、‌纹理、‌光照、‌阴影等,‌使得开发者能够快速创建复杂且逼真的3D场景。‌ threejs提供了丰富的功…

【Linux系列】known_hosts详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

通过Go示例理解函数式编程思维

一个孩子要尝试10次、20次才肯接受一种新的食物,我们接受一种新的范式,大概不会比这个简单。-- 郭晓刚 《函数式编程思维》译者 函数式编程(Functional Programming, 简称fp)是一种编程范式,与命令式编程(Imperative Programming)、面向对象编…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载: https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题:首先需要检查网络连接是否正常。可以尝试通过ping其他…

模型部署 - docker

docker简介 Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个标准化的单元中,称为“容器”。这些容器可以在任何支持 Docker 的系统上运行,无需担心环境差异。 为什么需要 Docker? 在传统的开发中&…

MySQL 5.7 DDL 与 GH-OST 对比分析

作者:来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面,对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…

MyBatis--XML映射文件

MyBatis–XML映射文件 lombok工具包 为了解决声明实体类的get()和set()函数臃肿的问题,我们使用lombok工具包。 我们看一下lombok工具包为我们提供的注解: XML映射文件 我们需要遵守下面的规则: 首先XML映射文件和Mapper接口包应该在同…

wps怎么找回未保存的文件?分享三个文件恢复方法

在编辑WPS文档时,偶尔会遇到未保存就意外关闭的情况,这不仅令人沮丧,还可能导致重要信息的丢失。但幸运的是,WPS提供了多种途径来帮助用户找回这些未保存的宝贵文件。从利用WPS的自动备份与恢复功能,到检查最近文档列表…

树形结构查找(B树、B+树)

平衡树结构的树高为 O(logn) ,平衡树结构包括两种平衡二叉树结构(分别为 AVL 树和 RBT)以及一种树结构(B-Tree,又称 B 树,它的度大于 2 )。AVL 树和 RBT 适合内部存储的应用,而 B 树…

堆(数据结构)

堆的概念与结构 堆的底层逻辑是一个完全二叉树(或满二叉树)。 堆的分类 大根堆和小根堆 大根堆 所谓大根堆就是每一个父节点都要大于等于子结点 小根堆 所谓小根堆就是每一个父节点都要小于等于子结点 堆的实现 (未完待续 待续......)

力扣高频SQL 50题(基础版)第四十四题之626. 换座位

文章目录 力扣高频SQL 50题(基础版)第四十四题之626. 换座位626. 换座位题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第四十四题之626. 换座位 626. 换座位 题目说明 表: Seat --------------…

【网络】IP-VPN技术概述

目录 引言 核心协议 封装与加密 工作流程 IP-VPN的应用场景 MPLS-VPN 个人主页:东洛的克莱斯韦克-CSDN博客 引言 IP-VPN(Internet Protocol - Virtual Private Network)是一种通过公共网络实现私密、安全通信的技术。它主要依赖于互联网…

力扣系统刷题-树(一)

放松了一周,也一周都没写题了,接下来,我做题的方式可能会更趋向于成体系的学习,今天就先从树的章节开始学起,主要参考的学习资料还是博客,知乎等网上较为系统的教材,涉及到的参考内容我都会进行标注,并以力扣题目作为导向来学习. 一.树 1. 什么是树 根据维基百科的定义:在计…

InfluxDB Studio 下载,时序数据库Windows图形界面操作

下载地址: https://github.com/CymaticLabs/InfluxDBStudio/releases解压缩后,双击 InfluxDBStudio.exe 运行。 参考 windows下 influxDB 操作工具 InfluxDBStudio 吐槽 现在 CSDN 太恶心了,动不动就让订阅或者积分下载资源。诚然&#…

主机组装笔记

参考资源:B站【装机教程】全网最好的装机教程,没有之一,仅供探讨学习 9大部件一览 其中得到固态和机械,是硬盘,存储空间,可以只选固态 CPU,主要有 AMD 和 Intel (AMD,基板的背面布…

nvm的下载和使用(Windows)

NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具,它允许用户在同一台机器上安装和使用多个Node.js版本。 一、NVM的基本功能 多版本支持:NVM允许用户在同一台机器上安装多个Node.js版本,方便处理不同…

docker:在官方停止国内服务的情况下安装使用docker

前言 很烦,前段时间docker官方已经全面停止国内网络访问了,但业务又依赖docker,所以这里只能通过科学的方案来处理这件事: 系统:ubuntu 22.04 desktop 目的:在官方停止国内服务的情况下,安装使用docker 关键技术:科学工具(小猫猫) 安装科学工具 没有安装包的,可以自…

Re常见简单密码

Re常见简单密码 起码没有Crypto专项那么柜物。。。 文章目录 Re常见简单密码1. RC4算法2. TEA算法3. XTEA算法4. XXTEA算法5. DASCTF strangeprograme参考 C语言stdint.h提供如下类型 int8_t 八位有符号整数 uint8_t 八位无符号整数 int16_t int32_t int64_t 64为有符号整数c…

定时器介绍

定时器介绍 STM32F103C8T6微控制器内部集成了多种类型的定时器,这些定时器在嵌入式系统中扮演着重要角色,用 于计时、延时、事件触发以及PWM波形生成、脉冲捕获等应用。下面是对STM32F103C8T6中几个定时器的 简单介绍:TIM1:这是一…