单片机
返回首页

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

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 永不缺相启动运行的电动机控制电路

  • CCFL的工作原理及电子驱动电路解析

  • MT3608构成3.7V转12V的升压电路图

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 基于M66T旋律发​​生器的电路图解析

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章