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

news2024/11/26 16:55:00

【极海APM32替代笔记】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是我要测的电压

STM32的ADC最大的转换速率为1MHz,也就是说最快转换时间为1us,为了保证ADC转换结果的准确性,ADC的时钟最好不超过14M。

其中 T = 采样时间 + 12.5个周期,其中1周期为1/ADCCLK

例如,当 ADCCLK=14Mhz 的时候,并设置 1.5 个周期的采样时间,则得到: Tcovn=1.5+12.5=14 个周期=1us。

当ADCCLK=50Mhz的时候,设置37.5个采样周期 37.5+12.5=50

/*!
 * @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/364918.html

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

相关文章

【并发编程十八】线程局部存储(TLS)

【并发编程十八】线程局部存储(TLS)一、定义二、线程局部存储的实现1、windows系统2、linux系统3、c11三、windows系统1、线程局部存储是分块的(TLS_MINIMUM_AVAILABLE)2、获得索引3、通过索引:存储数据、取出数据4、释放索引和内…

《计算机网络:自顶向下方法》实验1:协议分析软件的使用

实验1:协议分析软件的使用 实验步骤 启动主机上的web浏览器。 启动Ethereal(或WireShark)。你会看到如图2所示的窗口,只是窗口中没有任何分组列表。 开始分组捕获:选择“capture”下拉菜单中的“Start”命令,会出现如图所示的“Ethereal(或WireShark): Capture Options”…

(02)Cartographer源码无死角解析-(56) 2D后端优化→class MapById、MapById::lower_bound

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

Flink04: Flink核心API之DataSet

DataSet API主要可以分为3块来分析:DataSource、Transformation、Sink。 DataSource是程序的数据源输入。Transformation是具体的操作,它对一个或多个输入数据源进行计算处理,例如map、flatMap、filter等操作。DataSink是程序的输出&#xf…

攻击者查看邮件就被溯源到家?

本文通过分享实际攻防演练中真实案例,防守方在未暴露任何敏感信息的情况下,仅通过邮件往来最终溯源到攻击方相关真实信息。 作为攻击溯源技术的引子,供各位从业和爱好者交流学习。 场景描述 攻击者伪造邮件,称其申请防守方靶标系…

洛谷P5736 【深基7.例2】质数筛 C语言/C++

【深基7.例2】质数筛 题目描述 输入 nnn 个不大于 10510^5105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 第一行输入一个正整数 nnn,表示整数个数。 第二行输入 nnn 个正整数 aia_iai​&…

基于 esp-idf SDK ,如何在 .cpp 工程中加入.c 的文件调用?

把外部 .c 文件放到 .cpp 工程下的 main 文件夹然后在 .cpp 工程下声明 .c 文件下的 hello_main 函数同时在 cpp 工程的 CmakeLists.txt 文件下加上 .c 文件最后在 .cpp 工程下调用 hello_main 函数即可 可基于 esp-idf/examples/storage/nvs_rw_value_cxx 例程来测试 &#x…

mysql 8.0.32安装 windows server 超详细

官网下载mysql包,官网地址(中文版): http://mysql.p2hp.com/cloud/index.html 我是下载的这个(第一个) 内容解压后是这样的,其实windows版本无需安装,只需要配置后启动即可 同时,建议下载下这个Visual Studio&#xf…

Nebula测试

LDBC benchmark 这是官方文档 https://ldbcouncil.org/ldbc_snb_docs/ldbc-snb-specification.pdf 主要有几点 Scale Factors 是生成数据的一个大小,For both workloads, the SF1 data set is 1 GiB, the SF100 is 100 GiB, and the SF10 000 data set is 10 000 G…

关于CSS的简单知识

CSS是什么首先,在之前的html仅仅是写了一个框架,页面并不工整,美观。而CSS正是解决了这一问题。HTML仅仅只是表示页面的结构和内容,而CSS描述的是页面的样式(包括大小/位置/字体/颜色/背景等)基本语言规范选…

[element plus] 对话框组件再封装使用 - vue

学习关键语句: 饿了么组件dialog组件使用 dialog组件二次封装 vue3中封住的组件使用update触发更新 vue3中封装组件使用v-model:属性值来传值 写在前面 这是我遇到的一个页面需求 , 其中一个对话框的内容是很常用的 , 所以我将它封装出来才写的一篇文章 现在给出如下需求: 封…

Git(分布式版本控制系统)

提到git了,我们先来说一下什么是git? 1、通俗一点,就是一个人工版本控制器 通过人工的复制行为来保存项目的不同阶段的内容,添加适当的一些描述文字加以区分 繁琐、容易出错 产生大量重复数据 2、什么是版本控制? 版本控制是指对…

JVM16命令行

2. JVM 监控及诊断工具-命令行篇 2.1. 概述 简单命令行工具 在我们刚接触 java 学习的时候,大家肯定最先了解的两个命令就是 javac,java,那么除此之外,还有没有其他的命令可以供我们使用呢? 我们进入到安装 jdk 的…

JAVA并发编程面试题合集

1.在Java中守护线程和本地线程的区别? Java中的线程分为两种:守护线程(Daemon)和用户线程(User)任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolean);true表…

框架开发有哪些优势?Java主流框架

什么是框架“框架(Framework)"一词最早出现在建筑领域,指的是在建造房屋前期构建的建筑骨架。在编程领域,框架就是应用程序的骨架,开发人员可以在这个骨架上加入自己的东西,搭建出符合自己需求的应用系…

mac电脑数据恢复?真正实用的方法(2023最新)

使用电脑的用户都知道,被删除的文件一般都会经过回收站,想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样,但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站,或者是废纸篓里面的数据被清空了&…

Nginx第一讲

目录 一、Nginx01 1.1 Nginx简介 1.1.1 Nginx介绍 1.1.2 Nginx的应用 1.1.3 关于代理 1.1.4 负载均衡 1.1.5 动静分离 1.2 安装Nginx 1.2.1 安装依赖环境 1.2.2 安装nginx 1.2.3 nginx配置文件(nginx.conf) 1.2.4 反向代理实例1 1.2.5 安装tomcat 1.2.6 反向代理…

插画教育培训机构最新排名

学原画插画在哪里学比较好,最新插画培训班排名,给大家梳理了国内最新5家专业的插画师培训班排名,各有优势和特色,给大家借鉴! 一:国内插画培训机构排名 1、轻微课(五颗星) 主打课程有…

flutter 微信通讯录

Flutter 仿制微信通讯录效果,致效果如下: 有几个技术细节: 总体可滑动,少于屏幕长度也可滑动对于数据的处理。昵称 拼音首字母排序,右侧字母导航,点击/滑动;移动到指定位置当点击/滑动 右侧移动…

大数据实操项目分享:餐饮智能推荐服务在线实习项目

项目背景:在“互联网"背景下,餐饮企业的经营方式发生了很大的变革:团购和020拓宽了销售 渠道,电子点餐、店内WIFI等信息技术提升了服务水平,大数据、私人定制更好地满足了细分市场的需求等。但是与此同时&#xf…