STM32之模数转换器ADC

目录

1、ADC介绍

1.什么是ADC?

ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器

 2.ADC的性能指标

3.ADC特性

12位分辨率

4.ADC通道

5.ADC转换顺序

 6.ADC触发方式

 7.ADC转化时间

 8.ADC转化模式

 9.模拟看门狗

实验:使用ADC读取烟雾传感器的值 

CubeMX配置  

​编辑 代码实现

 效果展示

1、ADC介绍

1.什么是ADC?

ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器

D数字信号,A模拟信号

  • 12ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
  • 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
  • ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

 2.ADC的性能指标

  • 量程:能测量的电压范围
  • 分辨率:ADC能分辨的最小模拟量,通常以输出二进制位数表示,比如:8、10、12、16位等;位数越多,分辨率越高,一般来说,分辨率越高,转化时间越长(STM32F103是12位)
  • 转化时间:从转换开始到获得稳定的数字量输出所需的时间称为转换时间

3.ADC特性

  • 12位分辨率

  • 12位分辨率下转化速度可高达1MHZ
  • 供电电压:VSSA:0V,VDDA:2.4V~3.6V
  • ADC输入范围:VREF-<=VIN<=VREF+
  • 采样时间可配置,采样时间越长,转换结果相对越准确,但是转换速度就越慢】
  • ADC的结果可以左对齐或者右对齐的方式存储在16位数据寄存器中(默认右对齐)

4.ADC通道

总共2个ADC(ADC1,ADC2),每个ADC有18个转换通道:16个外部通道、2个内部通道(温度传感器、内部参考电压)。

外部的16个通道在转换时又分为规则通道和注入通道 ,其中规则通道最多有16路,注入通道最多有4路。

规则组:就像正常排队的人

注入组:有特权的人,可以插队的人

5.ADC转换顺序

每个ADC只有一个数据寄存器,16个通道一起共用这个寄存器,所以需要指定规则转换通道的转换顺序。

规则通道中的转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器,SQR寄存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通道就是第x个转换

和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器来控制,控制关系如下:

注入序列的转换顺序是从JSQx[4:0] (x=4-JL[1:0])开始。只有当JL=4的时候,注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序来执行。

 6.ADC触发方式

  • 通过向寄存器ADC-CR2的ADON位写1来开始转换,写0停止转换。
  • 也可以通过外部事件(如定时器)进行转换。

 7.ADC转化时间

ADC是挂载在APB2总线(PCLK2)上的,经过分屏器得到ADC时钟(ADCCLK),最高14MHz

转换时间 = 采样时间 +12.5 个周期

12.5个周期是固定的,一般我们设置PCLK2=72,经过ADC预分频器能分频到最大的时钟只能是12M,采样周期设置为1.5个周期,算出最短的转换时间为1.17us。 

 8.ADC转化模式

扫描模式

  • 关闭扫描模式:只转换ADC_SQRx或ADC_ISQR选中的第一个通道
  • 打开扫描模式:扫描所有被DC_SQRx或ADC_ISQR选中的所有通道

单次转换/连续转换

  • 单次转换:只转换一次
  • 连续转换:转换一次之后,立马进行下一次转换

 9.模拟看门狗

  • 如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。阀值位 ADC_HTRADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE以允许产生相应中断。(简而言之就是如果开启模拟看门狗,那么被ADC转换的模拟电压低于低阀值或高于高阀值,系统就会产生复位)
  • 阀值独立于由ADC_CR2寄存器上的ALIGN位选择的数据对齐模式。比较是在对齐之前完成的
  • 通过配置ADC_CR1寄存器,模拟看门狗可以作用于1个或多个通道
模拟看门狗警戒区

 模拟看门狗通道的选择

实验:使用ADC读取烟雾传感器的值 

实验内容:通过ADC读取烟雾传感器的值,再通过串口发送给电脑然后在串口助手上显示

CubeMX配置  

 ADC的配置(其实大多用默认的就可以了)

 代码实现

#include <stdio.h>
//因为用到串口发送我们先重写printf函数
int fputc(int ch, FILE *f)
{
	unsigned char temp[1]={ch};
	HAL_UART_Transmit(&huart1,temp,1,0xffff);
	return ch;
}

//mian部分
uint32_t count = 0;//记录烟雾传感器的值


  while (1)
  {
		//每隔1秒转换一次
		HAL_Delay(1000);
		//先启动ADC转换
		HAL_ADC_Start(&hadc1);
		//等待ADC转换
		HAL_ADC_PollForConversion(&hadc1,100);
		//获取信号
		count = HAL_ADC_GetValue(&hadc1);
		//发送
        printf("count = %d\r\n",count);//这里发送的是检测到的模拟量个数
		printf("count = %f\r\n",count*(3.3/4060));//电压值
  }

 注意重构了printf要记得勾选这个

 效果展示

这里可以通过给PA0口接3.3V的电压或者接GND来测试我们得到的数据准不准确 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何集成一个TypeScript开发环境?

首先要安装个node.js。Node.js (nodejs.org) 然后我们随便建一个文件夹&#xff0c;并且打开它运行到终端 然后再运行命令&#xff1a; npm install typescript -g 成功后 尝试使用 tsc -v 查看版本 接下来再使用命令&#xff1a; tsc --init 我们在.ts文件中尝试输出一些…

Docker智驾开发环境搭建

文章目录 背景1. 什么是容器?2. 什么是Docker?2.1 Docker架构3. 为什么要使用Docker?3.1 Docker容器虚拟化的好处3.2 Docker在开发和运维中的优势4. Docker容器与传统虚拟化的区别4.1 区别4.2 Docker的优势5. Docker的核心概念6. Docker在嵌入式开发中的应用7. docker实践参…

python炒股自动化(1),量化交易接口区别

要实现股票量化程序化自动化&#xff0c;就需要券商提供的API接口&#xff0c;重点是个人账户小散户可以申请开通&#xff0c;上手要简单&#xff0c;接口要足够全面&#xff0c;功能完善&#xff0c;首先&#xff0c;第一步就是要找对渠道和方法&#xff0c;这里我们不讨论量化…

Fuzz进阶教学——人工智能在模糊测试中的应用

【参考文献】白海波.人工智能技术在模糊测试中的应用[J].数字技术与应用,2023,41(08):16-18.DOI:10.19695/j.cnki.cn12-1369.2023.08.05. 目录 摘要 一、模糊测试简介 1、原理 2、工作流程 3、分类 4、应用领域 二、人工智能在模糊测试中的应用 1、人工智能技术 2、人…

AIGC系列之:GroundingDNIO原理解读及在Stable Diffusion中使用

目录 1.前言 2.方法概括 3.算法介绍 3.1图像-文本特征提取与增强 3.2基于文本引导的目标检测 3.3跨模态解码器 3.4文本prompt特征提取 4.应用场景 4.1结合生成模型完成目标区域生成 4.2结合stable diffusion完成图像编辑 4.3结合分割模型完成任意图像分割 1.前言 …

前馈式神经网络与反馈式神经网络的区别,联系,各自的应用范围和场景!!!

文章目录 前言一、前馈式神经网络是什么&#xff1f;二、前馈式神经网络包括&#xff1a;三、反馈式神经网络是什么&#xff1f;四、反馈式神经网络包括&#xff1a;总结 前言 前馈式神经网络和反馈式神经网络是两种主要的神经网络架构&#xff0c;它们在网络结构和应用场景上…

Python接口自动化测试 ---Allure报告使用详解

这一节主要是记录allure的内容以及用法&#xff0c;怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下&#xff0c;它的可读性是最好、最直观的。这不仅仅是我想要的效果&#xff0c;也是很多小伙伴想要的结果&#xff0c;毕竟这是给领导看…

使用Prometheus监控Synology(群辉)

1、简介 在现代的IT环境中&#xff0c;对于服务器和网络设备的监控是至关重要的。Synology&#xff08;群辉&#xff09;作为一种流行的网络存储解决方案&#xff0c;为用户提供了高性能和可靠的存储服务。然而&#xff0c;了解Synology设备的运行状况和性能指标对于确保其正常…

有权图的最短路径算法

目录 单源最短路径问题 Dijkstra算法 原理 ​ 获得最短路径长度的Dijkstra代码实现 时间复杂度 算法优化 优先队列优化后的代码实现 时间复杂度 可以具体获得最短路径的Dijkstra代码实现 Bellman-Ford算法 原理 代码实现 Floyed算法 原理 代码实现 单源最短路…

TLS、对称/非对称加密、CA认证

1. SSL与TLS SSL/TLS是一种密码通信框架&#xff0c;他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码&#xff0c;消息认证码&#xff0c;公钥密码&#xff0c;数字签名&#xff0c;伪随机数生成器等&#xff0c;可以说是密码学中的集大成者。 TLS…

flask web开发学习之初识flask(一)

一、概念 flask是一个使用python编写的轻量级web框架&#xff0c;作者为Armin Ronacher&#xff08;中文名&#xff1a;阿尔敏罗纳彻&#xff09;&#xff0c;它广泛被应用于web开发和API。flask提供了简洁而灵活地方式来构建web应用&#xff0c;它不会强加太多约束&#xff0…

父进程隐藏——ConsoleApplication903项目

首先我发现用calc来做进程隐藏实验是失败的&#xff0c;父进程一直都是svhost.exe 那么我用我自己生成的cs木马beacon903.exe试试 试试explorer.exe 再试试cmd.exe 可以看到成功变成cmd.exe 可以看到我们可以通过这种方式虚假父进程 以上我们是直接获得的pid&#xff0c;那…

Opencv | 直方图均衡化

import cv2 #opencv 读取的格式是BGR import numpy as np import matplotlib.pyplot as plt #Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() cv2.calcHist(images,channels,mask,histSize,ranges) - …

Swift下如何使用#if条件编译

一、OC使用条件编译 OC中可以使用宏定义&#xff0c;再使用条件编译 #define USER_CUSTOM使用 #if USER_CUSTOM //其他代码 #endif二、Swift使用条件编译 Swift 不像ObjectC一样&#xff0c;通过定义一个变量&#xff0c;然后使用**#if #endif** 方法。swift需要设置一下才能…

群晖NAS配置之自有服务器frp实现内网穿透

什么是frp frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。今天跟大家分享一下frp实现内网穿透 为什么使用 frp &a…

实战Flask+BootstrapTable最简动态表头及数据(ajax方法)

话不多说,有图有源码 1.实现原理:通过ajax从后端获取表头及数据 前端页面内容 <!DOCTYPE html> {% from "common/_macro.html" import static %} <html> <meta charset"utf-8"> <head> <!-- 引入bootstrap样式 --> <l…

解读向量数据库

不论是RAG&#xff0c;还是Agent&#xff0c;几乎每个LLM 驱动的应用程序都可能会用到向量数据库。那么&#xff0c;向量数据库是什么&#xff1f;与传统数据库有何不同&#xff1f; 又如何选择向量数据库呢&#xff1f; 本文是老码农关于向量数据库的学习笔记。 1. 什么是向量…

鸿蒙4.0开发笔记之ArkTS语法的基础数据类型[DevEco Studio开发](七)

文章目录 一、基本数据类型的定义1、变量声明2、数字类型3、字符串类型4、布尔类型5、数组类型6、元组类型7、枚举类型8、联合类型&#xff08;少用&#xff09;9、未知Unkown类型10、未定义和空值类型 二、数据类型的使用1、组件内部声明变量不需要使用let关键字2、使用Divide…

基于U2-Net如何训练一个一键抠图模型

1. 前言 抠图是图像编辑的基础功能之一&#xff0c;在抠图的基础上可以发展出很多有意思的玩法和特效。比如一键更换背景、一键任务卡通化、一键人物素描化等。正是因为这些有意思的玩法。 最近也是对此模型背后的网络很感兴趣&#xff0c;收集数据训练了人脸素描化模型&…

Docker基本操作---镜像与容器操作

Docker基本操作---镜像与容器操作 1. 操作镜像1.1 查看镜像1.2 删除镜像1.2.1 删除镜像1.2.2 强制删除镜像1.2.3 删除所有镜像 1.3 启动镜像1.4 常见错误1.4.1 image is being used by stopped container e3b9df6dc6ae 2 操作容器2.1 新建启动容器2.2 查看正在运行的容器2.3 退…