【STM32笔记】HAL库ADC测量精度提高方案(利用内部参考电压VREFINT计算VDDA来提高精度)

news2024/11/13 22:21:35

【STM32笔记】HAL库ADC测量精度提高方案(利用内部参考电压VREFINT计算VDDA来提高精度)

多数STM32的MCU 都没有内部基准电压 如L496系列
但在外接VDDA时(一般与VCC 3.3V连接) 有可能VCC不稳定 导致参考电压不确定 从而使ADC测量不准确

STM32内置一个测量VREFINT的ADC通道 且在寄存器VREFINT_CAL中会存储在3.0V标准电压的情况下 该VREFINT的ADC测量数据结果(12位精度)

在这里插入图片描述
STM32L496的VREFINT_CAL地址如图 该值为16位数据

读取时:

#define VREFINT_CAL						(uint16_t)(*(__I uint16_t *)(0x1FFF75AA))

我读出来是1655

该值表示此芯片在30℃ 3.0V的标准电压下的VREFINT测量结果

根据手册:
在这里插入图片描述
由公式3即可校准ADC的测量

比如我对VREFINT的ADC测量出来是1400
我要测的ADC通道是1500
则实际被测ADC通道实测值为:

3.0f*1655*1500/1400/4095

代码示例:
在这里插入图片描述
我用ADC1来测量VREFINT 一定要配置为12位精度 方便计算

在这里插入图片描述
另外 ADC2 通道9是我要测的电压

/*!
 * @brief       	开启ADC通道,返回ADC值	
 *
 * @param 	[in]	hadc: ADC_HandleTypeDef 变量地址
 *
 * @return				ADC_Value: ADC平均值结果
 */
uint16_t Get_ADC_Value(ADC_HandleTypeDef *hadc)
{
	uint16_t ADC_Value=0;
	HAL_ADCEx_Calibration_Start(hadc,ADC_SINGLE_ENDED);
	HAL_ADC_Start(hadc);     //启动ADC转换
	HAL_ADC_PollForConversion(hadc, 5); //等待转换完成,5为最大等待时间,单位为ms
	if(HAL_IS_BIT_SET(HAL_ADC_GetState(hadc), HAL_ADC_STATE_REG_EOC))
	{
		ADC_Value = HAL_ADC_GetValue(hadc);   //获取AD值
	}
	return ADC_Value;
}

/*!
 * @brief       	计算ADC的真实值,包含VREFINT校准后的结果
 *
 * @param 	[in]	hadc: ADC_HandleTypeDef 变量地址
 *
 * @return				ADC_Real_Value: ADC校准后的真实值
 */
float Get_Real_ADC_Value(ADC_HandleTypeDef *hadc)
{
	uint16_t VREFINT_DATA = Get_ADC_Value(&hadc1);
	uint16_t ADC_DATA = Get_ADC_Value(hadc);
	float ADC_Real_Value = 3.0f*VREFINT_CAL*ADC_DATA/VREFINT_DATA/4095.0f;
	
	return ADC_Real_Value;
}

两个通用函数

float ADC = Get_Real_ADC_Value(&hadc2);

调用方式

这样测出来就不用考虑VDDA电压是否稳定了 在一定范围内还是相对来说比较精确的

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

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

相关文章

深度学习调参炼丹术(总结向)

调参控制变量,每次调一个值。 1.初始化方式:FC/CNN用kaiming uniform或normalize,Emendding选截断normalize 2.activation function:sigmoid(淘汰)、tanh(淘汰)、relu(推荐)、leakey-relu 3.优化器:SGD动量&#xff0…

若依配置教程(三)新建模块

若依模块化管理,使代码更加规范化,方便在不同文件夹下进行修改和开发。 接下来是新建模块的步骤: 文章目录**接下来是新建模块的步骤:**1.创建新的module2.配置pom.xml1.创建新的module 项目上鼠标右击: 然后修改项…

Kettle 实战教程

Kettle 实战教程1.引言....................................................................................81.1 编写目的...........................................................81.2 阅读对象...........................................................91.3 术…

DBCO-SS-Mal;DBCO二硫键-马来酰亚胺-点击化学

DBCO-SS-Maleimide;Mal-SS-DBCO 英 文 :DBCO-SS-Maleimide 中文:二苯并环辛炔-二硫键-马来酰亚胺 分子式:C30H30N4O5S2 分子量:590.71 存储条件:-20C,避光,避湿 用 途&#xff…

做自媒体,有哪些好用的工具和软件,这6大自媒体工具,力荐!

工具一:效率控 效率控是一个汇集很多工具的工具APP。使用它可以用来习惯养成,表情制作,二维码生成,倒数日,文字识别,配色方案等等。 它特别一个亮点的功能是剪切板增强,还有一个特别实用的功能是…

DevStyle,一个让Java开发更现代化的工具!

如果您喜欢Eclipse的强大功能,但对它的可用性和美观度没有很高的要求,那么从今天开始,请准备好从全新的角度来看待Eclipse。在之前暗黑的插件基础上,MyEclipse官方团队为大家带来了DevStyle。使用DevStyle,开发人员可以…

小程序提升篇-组件

提升篇学习目标如何自定义小程序组件小程序组件中behaviors的作用安装和配置vant-weapp组件库如何使用MobX实现全局数据共享如何对小程序API进行Promise化小程序组件学习目标创建并引用组件(全局、局部、usingComponent)修改组件样式(option-…

Java JVM:字节码执行引擎(六)

执行引擎是 Java 虚拟机核心的组成部分之一,执行引擎由软件自行实现 目录一、运行时栈帧结构二、方法调用三、基于栈的字节码解释执行引擎四、OSGI:灵活的类加载器架构一、运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元,“栈帧”则…

如何用ffmpeg截取视频片段 以及 截取时间不准确的坑

之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用ffmpeg命令行就可以很容易实现,这里也记录下我们使用过程中遇到的坑,希望对大家也有所帮助。    举个例子,当我们要截取视频文件中input.mp4的第15秒到第9…

【C语言练习】逻辑分析题

目录题目一:求名次题目详情:解题思路:题目二:找凶手题目详情:解题思路:题目一:求名次 题目详情: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A…

(02)Cartographer源码无死角解析-(52) 2D点云扫描匹配→ceres扫描匹配:CeresScanMatcher2D→栅格地图残差

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

上海洲邦携手图扑建设数字孪生工厂,获 2022 智能制造优秀场景

前言 12 月 2 日,工信部公示了 2022 年度智能制造示范工厂揭榜单位和优秀场景名单。图扑软件和上海洲邦合作建设的宁波甬友数字孪生工厂被评为优秀场景,全国共有 369 个智能制造典型场景入选。 《智能制造试点示范行动实施方案》包括智能制造优秀场景和…

ESP-IDF:快速排序测试

ESP-IDF:快速排序测试 /快速排序测试/ void printArray(int arr[], int len) { for (int i 0; i < len; i) { cout << arr[i] << " "; } cout << endl; } void QuickSort(int arr[], int start, int end) { int i start; int j end; // 找…

【IoT】蔽障智能车设计:带有无线调试系统的蔽障小车

说明 近年来随着计算机在社会领域的渗透和大规模集成电路的发展&#xff0c;单片机的应用正在不断地走向深入&#xff0c;由于它具有功能强&#xff0c;体积小&#xff0c;功耗低&#xff0c;价格便宜&#xff0c;工作可靠&#xff0c;使用方便等特点&#xff0c;因此越来越广…

Activiti7工作流-使用idea插件actiBPM设计请假流程---工作流工作笔记005

首先我们看一下我们之前写的测试类, ProcessEngine 这个流程引擎,打开 看源码可以看到有几个常用的, HistoryService就是用来管理之前_hi表的,关于历史的 TaskService用来管理任务的 RuntimeService用来管理_run那些运行时的表的 然后我们还可以通过,上面定义的processEngi…

程序员的成长离不开哪些软技能?

道破一个残忍的真相&#xff1a;一个程序员的成长往往是软技能&#xff1e;硬技能&#xff0c;想纯靠技术能力一路挺过35岁基本是不可能的任务&#xff0c;作为一个优秀的程序员&#xff0c;离不开以下这些软技能。 较真 所有在技术上的较真都是一次专业技能的提升&#xff0…

Ruoyi-Cloud框架学习-【07 新增功能模块】

根据该博客新建模块后&#xff0c;在添加具体的数据表实现增删改查 在ruoyi-cloud中建立数据表 新建business_device表中【与gen_table、gen_table_column在一个库】 CREATE TABLE business_device (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(255) COLLA…

USB转双串口芯片 CH342 兼容替代CP2105

概述CH342是一个USB总线的转接芯片&#xff0c;实现USB转两个异步串口。每个串口都支持高速全双工&#xff0c;支持奇偶校验&#xff0c;提供了常用的MODEM联络信号&#xff0c;用于为计算机扩展异步串口&#xff0c;或者将普通的串口设备或者MCU直接升级到USB总线。特点全速US…

PySpark数据分析基础:核心数据集RDD原理以及操作一文详解(一)

目录 前言 一、RDD概念 二、RDD与DataFrame之间的区别 特性区别 本质区别 三、PySpark中RDD的操作 1.aggregate 2.aggregateByKey 3.map 4.mapPartitions 5.getNumPartitions 6. glom() 点关注&#xff0c;防走丢&#xff0c;如有纰漏之处&#xff0c;请留言指教&am…

< 每日算法 - JavaScript解析:用两个栈实现队列 >

每日算法 - JavaScript解析&#xff1a;用两个栈实现队列一、任务描述&#xff1a;拓展知识二、问题解析三、解决方案&#xff1a;参考文献往期内容 &#x1f4a8;一、任务描述&#xff1a; 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和…