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

news2024/11/15 22:25:36

文章目录

  • 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.coloradmin.cn/o/2033941.html

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

相关文章

Python图像背景去除

目录 🎁库的导入 🎀库的安装 🎁rembg库去除背景 🎁效果 🎁文末彩蛋 今天来介绍一个特别有趣的python库,rembg库,全称是“Remove Background”的缩写,意为“去除背景”&#xff…

边缘计算与物联网实训室解决方案

一、引言 随着物联网(IoT)技术的迅猛发展,数据量呈爆炸性增长,对数据处理和实时响应能力提出了更高要求。传统的云计算模式由于数据传输延迟和带宽占用等问题,难以满足物联网场景中对低延迟和高可靠性的需求。边缘计算…

QT判断操作系统类型和CPU架构

一、判断操作系统类型 1.在.pro文件中判断 macx { # mac only } unix:!macx{ # linux only } win32 { # windows only }2.在代码中判断 可以包含QGlobal头文件&#xff0c;判断预定义宏 #include <QtGlobal> ... #ifdef Q_OS_MAC // mac #endif#ifdef Q_OS_LINUX // …

Datawhale X 魔搭 AI夏令营 Task1 从零入门AI生图原理实践笔记

赛题内容 参赛者需在可图Kolors模型的基础上训练LoRA模型&#xff0c;生成无限风格&#xff0c;如水墨画风格、水彩风格、赛博朋克风格、日漫风格… 基于LoRA模型生成8张图片组成连贯故事&#xff0c;故事内容可自定义&#xff1b;基于8图故事&#xff0c;评估LoRA风格的美感度…

企业大模型落地从0到0.1

现在人工智能里的“大明星”——大模型&#xff0c;正在悄悄改变各行各业。这就像给企业装上了一颗聪明的大脑&#xff0c;能帮助解决各种棘手问题&#xff0c;提升工作效率。今天&#xff0c;我们就来分析下企业如何一步一步让这个“大脑”在自家地盘里真正派上用场&#xff0…

LVS 实现四层负载均衡项目实战--DR模式

一、环境准备 主机名IP地址router eth0&#xff1a;172.25.254.100 eth1&#xff1a;192.168.0.100 clienteth0&#xff1a;172.25.254.200lvseth1&#xff1a;192.168.0.50web1web2 1、client配置 [rootclient ~]# cat /etc/NetworkManager/system-connections/eth0.nmconne…

ArrayList 动态扩容

目录 一、 构造函数1、有参构造函数2、无参构造函数 二、数组扩容三、总结 一、 构造函数 1、有参构造函数 1.1如果指定了容量大小&#xff0c;创建该大小的数组 1.2如果没有指定大小&#xff0c;默认创建空数组 1.3如果是指定小于0的大小&#xff0c;抛出异常 2、无参构造…

前端工程化15-邂逅ES6的语法规范

4、ES6邂逅 3.1、什么是ECMA ECMA&#xff08;European Computer Manufacturers Association&#xff09;中文名为欧洲计算机制造商协会&#xff0c;这个组织的目标是评估、开发和认可电信和计算机标准。1 994年后该组织改名为Ecma国际。 3.2、什么是ECMAScript ECMAScript…

怎样找回U盘里误删的文件?试试这些方法!

在日常工作和生活中&#xff0c;我们经常会使用U盘来存储和传输重要的文件。然而&#xff0c;由于操作失误或其他原因&#xff0c;我们有时会误删U盘中的文件。当遇到这种情况时&#xff0c;很多人可能会感到焦虑和无助。不过&#xff0c;幸运的是&#xff0c;有几种方法可以帮…

三十六、【人工智能】【机器学习】【监督学习】- Bagging算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

【清空大脑】

清空大脑&#xff0c;就是把大脑里的想法&#xff0c;都写下来&#xff0c;放到一个地方。这样&#xff0c;可以降低大脑的压力。 我记得我第一次清空大脑的时候&#xff0c;使用的事微软OutLook的便签功能&#xff0c;一共记录了200多项。 看着这200多项&#xff0c;我感觉自…

ubuntu设置开机自动执行脚本、ubuntu设置开机自动启动java服务

使用 crontab 编辑器添加一个任务&#xff0c;该任务将在系统启动时执行你的脚本。在终端中运行以下命令&#xff1a; crontab -e添加开机自启任务&#xff1a; 在打开的编辑器中&#xff0c;添加以下行&#xff1a; reboot /home/demo.jar &这行代码告诉 cron 在每次系统…

微调神器LLaMA-Factory官方保姆级教程来了,从环境搭建到模型训练评估全覆盖

1. 项目背景 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&…

探索AI角色扮演的新前端工具:SillyTavern

在人工智能&#xff08;AI&#xff09;领域&#xff0c;角色扮演&#xff08;Roleplay&#xff09;无疑是一个富有趣味且充满潜力的应用场景。无论你是AI爱好者还是开发者&#xff0c;找到一个合适的前端工具来访问并与语言模型进行互动是至关重要的。今天&#xff0c;我们将介…

[2024_08_12日志]ONNX Runtime的使用

问题&#xff1a;Segmentation 错误。在 C API 上使用自定义 onnx 模型运行。模型在 Python 上按预期工作&#xff0c;但在 C API 上运行相同的模型时&#xff0c;会收到一个分段错误 python的模型代码如下&#xff1a; class Facenet(nn.Module):def __init__(self, backbone…

lvs详解及实例配置

目录 1.什么是负载均衡 1.1为什么用负载均衡 1.2.负载均衡类型 1.2.1.四层负载均衡 1.2.2.七层负载均衡 1.3 四层和七层的区别 2.LVS介绍 2.1LVS 的优势与不足 2.2LVS 核心组件和专业术语 3.ipvsadm命令 4.LVS集群中的增删改 4.1.管理集群服务中的增删改 4.2.管理集…

C:每日一题:单身狗

​​​​ 一、题目&#xff1a; 在一个整型数组中&#xff0c;只有一个数字出现一次&#xff0c;其他数组都是成对出现的&#xff0c;请找出那个只出现一次的数字。 整型数组 int arr[ ] {1,1,2,2,3,4,4} 二、思路分析&#xff1a; 1.&#xff0c;明确目标&#xff0c;选择…

【linux】nvidia AGX orin 多方法开机自启 .sh 文件

背景&#xff1a; 安装搜狗输入法时候&#xff0c;发现etc/xdg/autostart路径下写desktop文件的方式&#xff0c;于是把所有方案整理一下 为了让 .sh 文件在用户登录时自动执行&#xff0c;可以采用如下多种方法。 1. 使用 .desktop 文件 创建一个 .desktop 文件&#xff0c;将…

链表的奇偶节点重新排列及空指针问题分析【链表、空指针】

在处理链表问题时&#xff0c;重组链表节点是一种常见需求。本文将详细探讨如何在链表中将奇数索引节点放在偶数索引节点之前&#xff0c;并深入分析实现过程中的空指针问题及其解决方案。 1. 问题描述 给定一个单链表&#xff0c;要求将链表中的节点按照奇数索引节点在前、偶…

掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析

PyTorch提供了几种张量乘法的方法&#xff0c;每种方法都是不同的&#xff0c;并且有不同的应用。我们来详细介绍每个方法&#xff0c;并且详细解释这些函数有什么区别&#xff1a; 1、torch.matmul torch.matmul 是 PyTorch 中用于矩阵乘法的函数。它能够处理各种不同维度的张…