MCU内部参考电压几种妙用你都知道嘛

近期接触到STM32L0系列MCU,为了发挥超低功耗特性使用的也是干电池供电,想要获取当前干电池组的电量。 起初的方案设计是在MCU的IO口找一路ADC,使用分压方式直接让MCU采集电量,之后在查找资料如何实现时发现了参考电压的问题,步步深入后发现原来还有一种解决方案,即使用内部参考电压直接演算出VDDA的供电,在此做个记录并分享

MCU内部参考电压几种妙用你都知道嘛_第1张图片MCU内部参考电压几种妙用你都知道嘛_第2张图片

对ADC工作比较重要的电压一般就两个,VDDA供电让ADC运行,VREF+提供ADC转换的参考电压值。经查阅该型号的数据手册,直接通过供电给VREF+的方式定ADC的基准电压是不可行的,于是下图中也标注了芯片生产制造时已经根据一定环境测试出了一个精准的电压值,此值存储在内存地址如图所示处,这个VREFINT_CAL下面会用到。   MCU内部参考电压几种妙用你都知道嘛_第3张图片

查阅ADC的编程手册,发现了如下公式,基本意思就是在VDDA不能准确知道的情况下,使用VREFINT和ADC获取内部参考电压的模拟值计算出VDDA的过程。怎么获得VREFINT_DATA呢,手册中已说明内部参考电压已经连接到了ADC_IN17通道上,无需外部连接,那么我们只要打开这一路的ADC转换就可以像正常获取ADC转换值一样获得VREFINT的AD转换值。MCU内部参考电压几种妙用你都知道嘛_第4张图片MCU内部参考电压几种妙用你都知道嘛_第5张图片

公式里的NREFINT_CAL和VREFINT_DATA都有了,代入计算可以算的VDDA的值,经本人实际测量有0.1V左右的误差,对我来说这还不够精准,只能说提供了这个途径让我们不用外接线路可以实时获得MCU供电电压了(在VDDA和VCC相同时)。

/**********************************************************小分割*********************************************************/

于是回到最初的方案,使用IO口采样电压的模拟值,打开PA1对应的ADC通道,在正常获得了正常AD转换值后怎么办呢,数据手册是个好东西! 它又一次给了我们答案......让我们上图MCU内部参考电压几种妙用你都知道嘛_第6张图片

好了,大体意思就是公式里的VDDA如果不知道,那可以用内部参考电压计算的值代替VDDA计算通道上获取的电压值,剩下的两个参数为实际从通道获得的AD值ADC_DATAx和用户自己配置的ADC最大分辨率输出值full_SCALE,这两个值都很好得知,在此不做阐述(如有需要可以评论处提问),这样IO口处的电量值就被计算出误差在0.0x,已达到需要的标准。

两种方式都做了说明,在此记录一下,与君分享

你可能感兴趣的:(STM32平台开发)