在做低功耗产品的时候读取芯片温度和当前电压是十分重要的一件事情。
通过当前供电电压可以知晓电池电量是否低于水平值实现电池缺电报警。
读取芯片温度也很重要,可以在使用内部振荡器的时候通过校准算法根据温度变化来实现实时校准芯片(另外文章有介绍)。
如果不使用或尽量少使用外部元器件来实现这两个功能是摆在我们面前一个很重要的事情,遗憾的是现在网上的资料非常混乱,基本上直接使用总有点那么别扭。
在这里hoowa告诉你测试有效的方法。
如何读取芯片电压:
当然肯定是需要用ADC了。不过这个时候需要有一个参考电压作为比对,很多人提出在外面使用一组LDO实现参考电压,那样其实LDO本身也有一定能耗,在我们追求极致低消耗的时候也不适合。
当然很多人说了为什么不使用PVD来做,那么我来说说,PVD本身是做电压曲线检测的,如果你要求低于2.5V就报警,你会发现如果你启动电压< 2.5V的时候无法检测出来。所以还是自己做把。
还好STM32L0单片机在内部有一个核心电压,并且有一个寄存器VREFINT_CAL值可以用作基准参考从而计算出相当比较精准的电压。经过hoowa测量,误差还是在0.0X V左右的基本满足电池供电检测的要求。
不过网上很多资料用参考值1.224作为核心电压量,其实这样不够精准,因为实际核心电压是有偏移的。而且就VREFINT_CAL这个寄存器,取出来以后要通过运算得到mV级电压情况。
但是运算公式原理很简单,通过VDDA接入实际电池供电,对比芯片核心相对稳定的1.2xV电压,实现检测当前实际输入电压,可惜的是网上公式很混乱。
还好!&#