stm32 精确电压测量法(内部参考电压)

芯片型号:stm32l051c8(其它型号请参考datasheet,仅供参考)

使用ADC采集电压时若使用外部参考电压,如果外部电压变化,且低于正常LDO工作电压时,输出的电压将发生改变,导致基准电压改变而导致ADC电压出现偏差,因此在该芯片上查看datasheet后得知,厂家已经为我们考虑到这种情况,并在出厂时将类似于基准电压的值写在flash中。该值的环境:25°C, VDD = 3V时的情况,可以直接地址访问读取,我读取了两个芯片的值,大概在1670值左右。通过该值我们就有一个标准。

接下来看参考手册中对该款芯片的介绍,

 

我们可以看到,通过读取ADC IN17可以获得内部参考电压值,假设我们现在要读取电池电量,需要读取两个通道的值:

1、ADC IN17内部参考电压原始数据,也就是下图公式中的 VREFINT_DATA

2、读取电池电量连接通道原始数据,也就是下图公式中的ADC_DATAX值,我在板子上接的是ADC IN4

下图的计算公式就是利用内部参考的校准电压值和实际读取的内部参考电压值作一个线性关系,将这个斜率对应到我们需要测量的通道值。

说明:VREFINT_CAL:内部参考电压校准值,直接地址读取。比如该款芯片地址:0X1FF80078,那么我们可以这么做:

VREFINT_CAL = *(__IO uint16_t *)(0X1FF80078);

FULL_SCALE:根据我们设置的ADC分辨率而定,12位ADC分辨率值:2^12 - 1 = 4096 - 1.

实测数据:

VREFINT_CAL:1669 VREFINT_DATA: 1716

ADC_DATAX: 2046 FULL_SCALE: 4095

根据公式计算到电压值: VOL = 3 * 1669 * 2046 / (1716 * 4095) = 1.4578

电池电量: 1.4578 * 2 = 2.915 V

用万用表测量的电压值:1.44~ 1.45V波动, 校验成功。

 

 

************************************************************************************************************

2019-08-10补充

最近在项目中使用到ADC电压采集,由于使用的模拟量输出,所以对精度要求较高,使用上文的方式精度还不错,不过怎么调节都会与实际测量电压有偏差,为了降低这个误差,在软件上做处理。由于工程使用的是CubeMx生成的代码,经过调试,在采集电压前进行ADC校准会得到更好的精度。所以在采集前可加入这么一句代码:

HAL_ADCEx_Calibration_Start(&hadc);                     //校准ADC

 

源码参考链接:https://download.csdn.net/download/qq_34672688/11239849


版权声明:本文为CSDN博主「Hi,Mr.Wang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34672688/article/details/91874371

分享不易,点个赞再走吧☺☺☺


 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi,Mr.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值