零基础STM32单片机编程入门(四)ADC详解及实战含源码视频

news2024/11/25 21:25:02

文章目录

    • 一.概要
    • 二.STM32F103C8T6单片机ADC外设特点
    • 三.STM32单片机ADC内部结构图
      • 1.ADC相关引脚说明
      • 2.ADC通道分类
      • 3.触发源
      • 4.转换周期
      • 5.电压转换计算
      • 6.更精确电压转换计算
    • 四.规则通道ADC采集信号流向
      • 1.单次转换模式
      • 2.连续转换模式
    • 五.CubeMX配置一个ADC采集例程
    • 六.CubeMX工程源代码下载
    • 七.讲解视频链接地址
    • 八.小结

一.概要

ADC(Analog to Digital Converter),即模数转换器,是将连续的模拟信号转换为离散的数字信号的单片机外设。典型的模拟数字转是将模拟信号转换为表示一定比例电压值的数字信号,比如温度传感器等一些传感器,输出的信号是0~3.3V的电压信号。
例如温度传感器输出电压0V代表采集到的温度是0­°C,输出电压3.3V代表温度是100­°C,温度跟电压成线性比例关系,如果单片机ADC外设采集的到电压是1.65V,那就代表温度是50­°C(100°C*1.65/3.3),如果单片机ADC外设采集到的电压是3.3V,那就代表温度是100­°C。
在这里插入图片描述

二.STM32F103C8T6单片机ADC外设特点

STM32F103C8T6含有2个12位的模拟/数字转换器(ADC1,ADC2),每个ADC共用多达10个外部通道,可以实现单次或连续转换,1MHz转换速率,转换范围:0~3.6V,ADC供电要求:2.4V~3.6 V。ADC1同时含有2个内部通道:连接到芯片内部温度传感器和内部参考电压(VREFINT = 1.2V)

10个外部通道对应的单片机上的引脚如下图
在这里插入图片描述

三.STM32单片机ADC内部结构图

ADC内部结构图如下
在这里插入图片描述

1.ADC相关引脚说明

(1)VDDA(Analog Supply Voltage)
ADC模块的模拟电源引脚,通常连接到MCU的模拟电源线路。VDDA提供ADC模块所需的模拟电源电压,确保ADC的正常工作和准确的模拟信号转换。

(2)VSSA(Analog Ground Voltage)
ADC模块的模拟地引脚,通常连接到MCU的模拟地线路。

(3)VREF+(Positive Voltage Reference)
ADC模块的正参考电压引脚,通常连接到外部提供的正参考电压源。VREF+确定了ADC转换过程中的上限电压参考点,通常对应于模拟输入信号的最大量程值。在ADC转换过程中,被测量的模拟信号会与VREF+进行比较,以确定其对应的数字量,STM32F103C8T6是没有这个引脚,64脚和小于64脚的STM32F103型号,其VREF+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。

(4)VREF-(Negative Voltage Reference)
ADC模块的负参考电压引脚,通常连接到外部提供的负参考电压源或地。VREF-确定了ADC转换过程中的下限电压参考点,通常对应于模拟输入信号的最小量程值。
STM32F103C8T6也没有这个引脚。

2.ADC通道分类

在STM32的ADC模块中,分成了两种不同类型的通道类型:规则通道和注入通道,它们适应于不同的采集场景,在功能框图所示:
在这里插入图片描述

ADC规则通道
规则通道顾名思义就是,最平常的通道、也是最常用的通道,平时的ADC转换都是用规则通道模式的。它允许用户配置ADC以便按照预定的顺序对这些通道进行连续或单次采样。

ADC注入通道
注入通道是相对于规则通道的,注入通道可以在规则通道转换时,强行插入转换,相当于一个“中断通道”吧。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执行完毕后,再回到之前规则通道进行转换。这种功能使得注入通道特别适合于采集突发事件或需要高优先级响应的应用,比如实时监控或故障检测。

3.触发源

ADC转换的输入、通道、转换顺序都已经说明了,但ADC转换是怎么触发的呢?就像通信协议一样,都要规定一个起始信号才能传输信息,ADC也需要一个触发信号来实行模/数转换。
其一就是通过直接配置寄存器触发,通过配置控制寄存器CR2的ADON位,写1时开始转换,写0时停止转换。在程序运行过程中只要调用库函数,将CR2寄存器的ADON位置1就可以进行转换,比较好理解。
另外,还可以通过内部定时器或者外部IO触发转换,也就是说可以利用内部时钟让ADC进行周期性的转换,也可以利用外部IO使ADC在需要时转换,具体的触发由控制寄存器CR2决定。

4.转换周期

可独立设置各通道采样时间ADC会在数个ADCCLK周期内对输入电压进行采样,可使用ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位修改周期数。每个通道均可以使用不同的采样时间进行采样。
总转换时间的计算公式如下:
Tconv=采样时间+12个周期
示例:
ADCCLK = 30 MHz且采样时间=3个周期时:
Tconv= 3+12=15个周期=0.5us (APB2为60MHz时)
最小采样时间0.42us(ADC时钟=36MHz,采样周期为3周期下得到)。

5.电压转换计算

转换后的数据是一个12位的二进制数,我们需要把这个二进制数代表的模拟量(电压)用数字表示出来。比如测量的电压范围是0~3.3V,ADC转换后的寄存器读到的数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以真实电压的计算方法就是: y=3.3* x / 4096(V)

6.更精确电压转换计算

STM32F103C8T6是VDD3.3V做参考电压,但是这种方法在供电电压有可能随外部一些其他用电器工作使用的大电流而导致电压不稳定,内部参考电压能更加精确计算采样到的电压,具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值(Vrefint Channel),记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:
Vchx = VREFINT * (ADchx/ADrefint)

四.规则通道ADC采集信号流向

在这里插入图片描述

1.单次转换模式

配置为单次模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,就停止转换,需要下一次启动才可以。

2.连续转换模式

配置为连续模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,接着进行下一次转换,不断连续。

五.CubeMX配置一个ADC采集例程

在这里插入图片描述

STM32F103C8T6小系统板PA4 引脚上的进行 ADC 电压采集,杜邦线连接 PA4 引脚与 VDD(3.3V),应该能读到单片机供电的电压值。
打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述
配置PA4引脚为ADC1的通道4,进行电压采集
在这里插入图片描述

配置系统主频
在这里插入图片描述
配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述
Main.c中添加代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

STLINK连接好板子后,Keil 5进入调试,在Watch界面查看两个变量的值,ADC采样到的值是0xfff,转换成电压值就是3300mV。

在这里插入图片描述
main代码如下:

/* USER CODE BEGIN 0 */
int ADCData;
uint16_t VolDta;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();//外部8M晶振,系统72M主频

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();//PA4引脚配置成ADC1 Channel4输入
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
 
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)//启动校准
  {
    Error_Handler();
  }
	HAL_ADC_Start(&hadc1);//启动ADC

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  ADCData=HAL_ADC_GetValue(&hadc1);//获取ADC采集值
		VolDta=ADCData*3300/4095;//ADC采集值转换成电压值,单位mV
		HAL_Delay(200);//等待200ms
		HAL_ADC_Start(&hadc1);//再次启动ADC	
		HAL_Delay(200);
    /* USER CODE BEGIN 3 */
  }
  
  /* USER CODE END 3 */
}


六.CubeMX工程源代码下载

在这里插入图片描述
链接:https://pan.baidu.com/s/1A3tst65eeeLbxwtFvOe0iA
提取码:7wht

如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

七.讲解视频链接地址

ADC外设视频讲解

八.小结

ADC外设是STM32单片机开发中的最基本操作,学会了ADC,可以采集外部的一些传感器的模拟信号,适应更多模块的驱动。

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

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

相关文章

通天星CMSV6车载监控平台CompanyList信息泄露漏洞

1 漏洞描述 通天星CMSV6车载视频监控平台是东莞市通天星软件科技有限公司研发的监控平台,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。通天星科技应用于公交车车载、校车车载、大巴车车载、物流车载、油品运输车载、警车车…

风控图算法之中心性算法(小数据集Python版)

风控图算法之中心性算法(小数据集Python版) 图算法在金融风控领域的应用已经超越了传统的社区发现技术,这些技术曾被主要用于识别和分析欺诈性行为模式,例如黑产团伙。当前,一系列图统计算法,包括介数中心…

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言,熟悉重装系统的方法可以帮助他们解决各种问题,从提高系统速度到修复软件故障。然而具体来讲,笔记本重装系统怎么操作呢?接下来&…

【01】Java代码如何运行

JRE: 包含Java虚拟机以及核心类库 JDK: 同样包含了JRE,并且附带了一系列开发、诊断工具 一、为什么Java要在虚拟机中运行 一、 Java语言特性:高级、语法复杂、抽象 Java语言-- 【编译器】 --> Java字节码 --【虚拟机】–> 实现 二、 托管环境 自…

正点原子rk3588编译sdk

1、编译SDK 1.1 安装 RK3588 Linux SDK .repo/repo/repo sync -l -j101.2 SDK 工程目录介绍 app:存放上层应用 app,包括 Qt 应用程序,以及其它的 C/C应用程序。 buildroot:基于 buildroot 开发的根文件系统。 debian&#xff1…

AIGC对图片行业的影响分析!

前言 自从去年生成式AI火起来之后,不论是文字领域还是图片领域受到的冲击都非常大。比如说SD和Midjourney的爆火,不止是创作者,还有交易平台和使用方,都在发生变化。 AIGC自2023年全面进入大家视野,对各行各业造成了或…

论证型大语言模型:促进可解释性与可质疑的决策制定

Argumentative Large Language Models for Explainable and Contestable Decision-Making 论文地址: https://arxiv.org/abs/2405.02079https://arxiv.org/abs/2405.02079 1.概述 在探讨大型语言模型(LLMs)在决策支持系统中的应用时,我们需正视其面临的核心问题。这些问题…

MYSQL函数进阶详解:案例解析(第19天)

系列文章目录 一、MySQL的函数(重点) 二、MySQL的窗口函数(重点) 三、MySQL的视图(熟悉) 四、MySQL的事务(熟悉) 文章目录 系列文章目录前言一、MySQL的函数1. 聚合函数2. group_c…

基于Vue,mysql,JavaEE的简单投票与投票管理系统

项目介绍 ​ 本项目,基于Vue2.6,mysql,JavaEE 实现简单的投票与投票管理系统 项目地址 VotingSystem: 投票系统1.0 管理员和普通用户 (gitee.com) 有问题请评论私聊哦 项目分类 数据库 创建投票人,被投票人,投票关系(追踪谁…

python基础语法 003-4 数据类型集合

1 集合 1.1 什么是集合 什么是集合?ANS:集合set是一个无序的不重复元素序列集合怎么表示?ANS: {} , 用逗号隔开打印元组类型,type()一个元素的集合怎么表示?:ANS:存储多种类型{"a", 1} """…

海外媒体发稿:2个必选媒体宣发套餐引爆影响力-华媒舍

本文旨在介绍2个必选媒体宣发套餐的特点及其如何引爆影响力。 在当今竞争激烈的媒体环境中,有效的宣传和推广策略对于企业和个人的成功至关重要。这就是为什么选择正确的宣发套餐成为了一个关键的决策。 2. 媒体宣发套餐概述 媒体宣发套餐是一种综合性的宣传方案&…

把飞书云文档变成HTML邮件:问题挑战与解决历程

一、背景 云文档转HTML邮件 基于公司内部的飞书办公套件,早在去年6月,我们就建设了将飞书云文档转译成HTML邮件的能力,方便同学们在编写邮件文档和发送邮件时,都能有较好的体验和较高的效率。 当下问题 要被邮件客户端识别&am…

电脑数据恢复篇:如何恢复误删除的文件

在清理电脑或优化存储设备时无意中删除重要文件是人类常见的错误。不可否认的是,在批量删除文件时,您经常会同时删​​除垃圾文件和重要文件。后来您发现一堆重要的文档或文件不见了。在这种情况下,您唯一的选择就是寻找恢复已删除文件的方法…

DC-DC原理,升降压原理,BUCK,BOOST

DC-DC简述 开关电源包括电源模块,可以直接使用,不需要外部电路,提供的功率比较小。还有电源稳压器,这种功率MOS一般集成在芯片内部,但是需要选择外部电感。另外还有PWM控制器,需要选择功率MOS,二…

2024年河北省计划招聘“特岗计划”教师2300名

2024年河北省计划招聘“特岗计划”教师2300名 报名时间:6月28日9:00至7月2日18:00 笔试准考证打印:7月11日-7月13日 笔试时间:7月14日上午9:00-11:30 面试时间:8月3日至8月5日 报名网站:河北教师教育网 报名照规格&…

C#微信预约挂号系统全套源码,适用于各级公立和民营医院,与院内his、lis、pacs系统对接。

C#微信预约挂号系统源码,团队自主研发,三甲医院应用多年,系统稳定,功能齐全,支持二次开发,项目使用。 微信预约挂号系统可以让患者足不出户就可以利用微信进行在线挂号,实现分时段就诊&#xff…

Github忘记了Two-factor Authentication code

意外重置了edge浏览器 码农家园github自从开启开启了2FA认证,每次输入auth code确实麻烦,于是下载了浏览器插件 Open two factor authenticator, 最近edge频繁宕机,而且提示磁盘空间不足,要不要立即清理并重置浏览器临…

kafka 消费者 API 使用总结

前言 应用程序使用KafkaConsumer向Kafka订阅主题,并从订阅的主题中接收消息。不同于从其他消息系统读取数据,从Kafka读取数据涉及一些独特的概念和想法。如果不先理解这些概念,则难以理解如何使用消费者API。本文将先解释这些重要的概念&…

【10分钟速通webpack,全流程打包,编译,发包,全干货,附代码 】

需求 后端有个nodejs 基础库,用typescript编写,需要发包到代码仓库上,被其它业务引入。这其中就涉及了: 编译, 打包,发包。 工作流速览 前提依赖 webpack主体 npm install --save-dev webpack webpack…

Python测试框架 pytest : 从零开始的完全指南

pytest : 从零开始的完全指南 一、pytest 简介1.1 pytest 的背景和发展历史1.2 pytest 的概念1.3 pytest 的特点1.4 测试阶段分类1.5 单元测试框架的主要功能 二、pytest 的基本使用2.1 pytest 默认测试用例2.2 全局配置文件 pytest.ini2.3 执行 pytest2.4 跳过方法2.5 pytest …