STM32Cube HAL库——ADC电压采集

2023-11-16

STM32Cube HAL库——ADC电压采集

一、ADC基本介绍

模拟数字转换器,即A/D转换器,或简称ADC(Analog to Digital Converter),通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。

A/D转换的作用是将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号,因此,A/D转换一般要经过取样、保持、量化及编码4个过程。在实际电路中,这些过程有的是合并进行的,例如,取样和保持,量化和编码往往都是在转换过程中同时实现的。

这种转换器的基本原理是把输入的模拟信号按规定的时间间隔采样,并与一系列标准的数字信号相比较,数字信号逐次收敛,直至两种信号相等为止。然后显示出代表此信号的二进制数,模拟数字转换器有很多种,如直接的、间接的、高速高精度的、超高速的等。每种又有许多形式。同模拟数字转换器功能相反的称为“数字模拟转换器”,亦称“译码器”,它是把数字量转换成连续变化的模拟量的装置,也有许多种和许多形式。
如果还有不懂,请看其它博主的文章。

二、STM32CubeMX配置

为体现ADC实际效果,本例中用ADC采集电池电压。
OLED显示屏程序是在完成调试接口任务的基础上进行的(所有编程都在这个基础上进行,没有完成则无法烧录),可以在链接代码或者上一期代码的基础上进行编程。

1.确定引脚

查看控制板电路图,确定与电池相关的引脚(或者自己设计电路)。
在这里插入图片描述
在这里插入图片描述
发现PB1引脚与电池电压有联系,确定以PB1引脚来采集电池电压。

2.配置引脚

点击PB1引脚选择ADC1_IN9并修改名字,选中IN9,开启连续转换模式的使能(选为Enabled),具体如下图。
在这里插入图片描述
在这里插入图片描述
点击右上角GENERATE CODE按钮生成代码。

三、STM32CubeIDE编程

1.计算引脚电压与电池关系

将电压的范围设置在0-3300mV,电压转换关系:Voltage=(3300X)/2^12 mV。(X为ADC转换后的值,即原始数据)
根据电路图计算PB1引脚电压与电池电压的关系:V电源=11
VPB。
首先获取ADC转换后的值,并显示(原始值),再通过电路图计算并显示电池电压的实际值。

1.编程

首先在主函数main.c中定义变量:

//在int main和while之间定义,位置一定要对,在begain和end之间。
	  int adcval[0];
	  float V_value1;

在while循环中加入以下代码:

	  adcval[0] = HAL_ADC_GetValue(&hadc1);   //ADC1中获取转换后的值,并将其存储在adcval[0]变量中
	  HAL_ADC_PollForConversion(&hadc1, 50);   //轮询函数,它等待ADC转换完成,最多等待50毫秒
	  OLED_ShowString(0,10,"ADC:");
	  OLED_ShowNumber(30,5,adcval[0],4,16);//输出原始值

	  HAL_ADC_Start(&hadc1);//函数启动ADC1,让它开始进行转换
	  HAL_ADC_PollForConversion(&hadc1,100);//轮询函数,它等待ADC转换完成,最多等待100毫秒。
	  if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))//判断ADC是否转换成功
	  {
		  //读取
		  adcval[0]=HAL_ADC_GetValue(&hadc1);
		  V_value1 = (adcval[0]/4096.0*3300*11);//计算
		  HAL_Delay(300);
		  OLED_ShowString(70,10,"V:");
		  OLED_ShowNumber(85,10,(uint32_t)V_value1,5,12);//输出实际值
		  OLED_ShowString(120,10,"m");
	  }
	  OLED_Refresh_Gram();
  }

烧录代码运行后效果如下(分别显示原始值和电池电压实际值):
在这里插入图片描述

三、小结

本例中以电池电压为例讲解了ADC采集电压的过程,学会这个,我们就可以将模拟信号转化为数字信号并进行显示,比如温度传感器,压力传感器等。
大家一起学习一起进步,变得更强,希望大家点赞和关注,下期将带来电机控制的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32Cube HAL库——ADC电压采集 的相关文章

随机推荐

  • document.referrer的用法

    在JavaScript中 document对象有很多属性 其中有3个与对网页的请求有关的属性 它们分别是URL domain和referrer URL属性包含页面完整的URL domain属性中只包含页面的域名 而referrer属性中则保
  • 【模型评估与选择】sklearn.model_selection.train_test_split

    1 描述 Split arrays or matrices into random train and test subsets 2 语法 train test split arrays options 3 参数 1 arrays sequ
  • 多版本php安装swoole失败问题

    问题描述 使用命令 pecl安装报错 查看报错提示使用的是低版本的php 问题原因 pecl设置的环境变量指向的路径是低版本的所以如果想使用高版本的php 需要使用全路径命令 解决方法 usr local php7 26 bin pecl
  • Ubuntu 安装elasticsearch集群

    环境准备 准备三台服务器搭建集群环境 node1 192 168 177 171 node2 192 168 177 172 node3 192 168 177 173 其中node1为master节点 node2 node3为slave节
  • 图像分割汇总

    Image Segmentation 图像分割 所谓图像分割是指根据灰度 彩色 空间纹理 几何形状等特征把图像划分成若干个互不相交的区域 使得这些特征在同一区域内表现出一致性或相似性 而在不同区域间表现出明显的不同 简单的说就是在一副图像中
  • Python——遗传算法简介及其在二次分配中的运用(含详细源代码)

    一 遗传算法简介 二 二次分配问题描述 三 Python代码实现 import math import random import matplotlib pyplot as plt def getPermutation n x n为全排列的
  • 集训第一周 Linux

    1 创建一个用户user1 用root身份给user1修改密码为redhat 提示 创建用户用useradd user1 2 切换到user1用户 给自己修改一个密码 密码任意 3 在 root 目录中创建一个以自己的汉语拼音为名字的文件
  • QML学习一:QtCreator编译器主题背景设置

    效果如下 QML学习一 QtCreator编译器主题背景设置 前言 一 工具栏菜单栏背景设置 二 文本编辑区域设置 总结 前言 工欲善其事必先利其器 为了更好地开发代码 我们先将QtCreator界面改为模仿Vs2019主题样式 这样开发起
  • Unity3d中所有特殊的文件夹

    1 Editor Editor文件夹可以在根目录下 也可以在子目录里 只要名子叫Editor就可以 比如目录 xxx xxx Editor 和 Editor 是一样的 无论多少个叫Editor的文件夹都可以 Editor下面放的所有资源文件
  • svn清理本地已经删除的文件,注意事项

    点击项目目录下空白处点击trotoiseSVN后点击检查修改 在里面删除你想要删除的已删除文件即可 分支操作注意事项 在切换分支前记得提交本地代码的修改 否则会合并到切换后的分支去 切记 哎
  • Java使用MongoTemplate实现多条件、模糊查询、排序、范围、分页查询

    场景 查询客户列表 不同条件之间取交集 且的关系 单个条件内取并集 或的关系 实现细节如下 1 全等于 手机号全字匹配 2 模糊查询 客户名称模糊搜索 3 单个条件查询多个字段 客户编号 4 日期范围 近期消费时间 5 数值范围 消费总金额
  • Ubuntu使用haar+adaboost训练进行手势识别

    手势识别开源代码千千万 为啥我要用此方法 原因有三 首先 我们项目要求这个手势识别是不分环境的 也就是半夜三更黑灯瞎火也能用 这一下子就把纯RGB的方式给去除了 而且也要考虑用户戴手套 手套颜色不限制 使用 那么肤色过滤什么的咱们再见 其次
  • 毕业设计 2023-2024年最新python毕设选题题目推荐汇总

    文章目录 0 前言 1 python 算法类 毕设选题 2 python 数据挖掘 毕设选题 3 python 大数据处理 云计算 区块链 毕设选题 4 python 网络安全 毕设选题 5 python 游戏设计 动画设计类 毕设选题 适
  • Java实现Kruskal算法

    一 kruskal算法简介 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法 与prim算法不同 它的时间复杂度为O eloge e为网中的边数 所以 适合于求边稀疏的网的最小生成树 二 实现步骤 部分流程图 废话不多说 直接上代码 这张图
  • python绘制余弦曲线图_Python可视化中的Matplotlib绘图(1.画图,网格,子图,画正余弦图,坐标轴界限,画圆,)...

    1 一张基本的图标包含的元素 x轴和y轴 以及他们的刻度线 标签 绘图区域 import matplotlib pyplot as plt 导入绘图模块 import numpy as np 导入需要生成数据的numpy模块 只有一个曲线图
  • 计算机网络常见面试题总结(二)

    本文主要内容转载自 http blog csdn net u013408431 article details 62442670 locationNum 10 fps 1 面试中网络方面的知识被问到的概率很大 尤其是互联网公司 要熟悉osi
  • 垃圾短信识别python步骤详细_python数据挖掘第三篇-垃圾短信文本分类

    文本分类总体上包括8个步骤 数据探索分析 数据抽取 文本预处理 分词 去除停用词 文本向量化表示 分类器 模型评估 重要python库包括numpy 数组 pandas 用于处理结构化数据 matplotlib 绘制词云 便于直观表示 sk
  • java压缩包打不开_java.util.zip.ZipException: error in opening zip file 问题处理

    java util zip ZipException error in opening zip file 这个问题的字面意思是压缩包打不开 我这出现的问题是jar包损坏 打不开 linux系统可以使用命令判断jar 是否正常 jar vtf
  • Axure RP 万能的标签切换面板-动态面板切换

    切换面板在网页中算是非常常见的 如视频网站的电视剧分类标签 资讯网站的资讯分类等 这些交互效果都可以利用动态面板的几个状态来进行相互切换得来 下面来介绍一下如何制作这样的标签 步骤1 从部件库中拖拽一个动态面板到线框图编辑区中 并在 部件交
  • STM32Cube HAL库——ADC电压采集

    STM32Cube HAL库 ADC电压采集 一 ADC基本介绍 模拟数字转换器 即A D转换器 或简称ADC Analog to Digital Converter 通常是指一个将模拟信号转变为数字信号的电子元件 通常的模数转换器是将一个