历史上的今天
今天是:2024年11月06日(星期三)
2019年11月06日 | stm32 精确电压测量法(内部参考电压)
2019-11-06 来源:eefocus
芯片型号: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
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 数字电视地面标准推迟出台 不含手机电视部分 2006-7-5 虽然已进入7月,原来“铁定”在6月底前出台的数字电视标准(即数字电视地面传输标准)却仍然迟迟不见踪影。 负 ...… 查看全部问答> |
|
我想用一个红外对射开关控制欧姆龙MY2NJ继电器工作,对射开关的型号见图片 我用黄颜色的线接到继电器,继电器不能工作,继电器都是好的,我用12V电压直接控制继电器,是可以工作的,但用感应的不知道怎么接法。 红外对射开关工作电压是5V,继电器 ...… 查看全部问答> |
|
想在动车组两个车厢中实现数据的无线传输。 也考虑到一些实现方法,但是由于动车组有屏蔽大,速度快特点,造成无线数据包传输难度很大。 请问各位高手,用什么方式能达到这个目的呢?前提是不对车厢作出改造,比如车体外安装天线等 … 查看全部问答> |
|
现在软键盘基本上可以用了,但还有一个字符:小数点\'.\'不能用,发送字符小数点消息,可在我的应用程序里收到的消息却是: 第一个消息是:pMsg->hwnd为编辑框的句柄,但pMsg->message为15,也就是WM_PAINT,wParam和lParam为0, & ...… 查看全部问答> |
|
Fluke 27-II 工业多用表 新型 Fluke 27 II数字多用表树立了在困难情况下进行测量的新标准,它具有优异的功能和准确度,可以轻松解决大多数电气故障。 这款多用表均符合 IP 67(防水和防尘)规格,正在接受 MSHA 的认证审批,并且拥有更广的工作温 ...… 查看全部问答> |




