本文主要是介绍笔记:STM32的ADC参考电压与参照电压(电源监测),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
STM32的ADC 电压输入范围为: VREF- ≤ VIN ≤ VREF+。一般设计的时候会把VREF-和地相连, VREF+和VDDA相连。若MCU供电电压为3.3V,则ADC输入电压范围为0~3.3V。此时ADC模块的参考电压即为MCU供电电压。
系统如果使用电池供电,想要使MCU供电电压稳定,就要加LDO等对系统电源进行处理。如果直接使用电池供电,那么MCU的供电电压会随着电池的电量损耗而降低,此时ADC模块的参考电压已经改变,那么通过AD转换求出来的电压值也就不准确了,此时就达不到对系统电源监测的目的。
STM32内部都有个相对稳定,且不受MCU供电电压变化影响的参照电压,在内部连接至ADC1的输入通道17。
以下资料来自STM32L151手册
The internal voltage reference (VREFINT) provides a stable (bandgap) voltage output for the ADC and Comparators. VREFINT is internally connected to the ADC_IN17 input channel. The precise voltage of VREFINT is individually measured for each part by ST during production test and stored in the system memory area。
根据数据手册中的描述,VREFINT的典型值为1.224V,最小1.202V,最大1.242V。不同的系列的MCU,值也会有所差别,可以查看手册得出:
VREFINT的精确AD值由ST在生产测试期间分别测量每个部件,并存储在系统内存区域。该值是在特定温度和供电电压下测得的,可以用来校准ADC:
在理解时可以把VREFINT当做是ADC模块内部的一个测试点,在某一固定的ADC参考电压情况下,所有被测电压点的AD转换值与该点电压值保持同一比例关系。对于不同的参考电压,1.224V对应的AD转换值也是不一样的,这里AD的参考电压就是VDD,VDD越大,VREFINT电压对应的AD转换值越小。
对于某一个参考电压来说,如果能测得1.224V所对应的AD转换值(通过ADC1通道17),假设记为Vrefint_ad ,那参考电压VDD对应的AD转换值自然是此时该AD的满量程值FULL_SCALE(12位ADC为4096,10位ADC为1024)。不管VDD怎么变动,某时刻的VDD对应的满量程值FULL_SCALE跟内部基准电压VREFINT的AD转换值Vrefint_ad 的线性比例关系总是存在的。即有:
VDD:FULL_SCALE = 1.224:Vrefint_ad则:VDD = (1.224/Vrefint_ad)*FULL_SCALE
这样就可以在使用电池直接供电的情况下求出MCU供电电压,同理,也可以测出在电压波动情况下其他待测点的电压。若待测点AD转换值记为Vtemp_ad,待测点电压记为Vbatt:
Vbatt = Vtemp_ad*VDD/4096;= Vtemp_ad*(1.224/Vrefint_ad)*4096/4096;= 1.224*Vtemp_ad/Vrefint_ad;
如果使用库函数,则需要调用如下函数来使能内部温度传感器和参照电压,温度传感器内部连接至ADC1的通道16,参照电压内部连接至ADC1的通道17。
ADC_TempSensorVrefintCmd(ENABLE);
参考:利用ST MCU内部基准参考电压监测电源电压及其它
这篇关于笔记:STM32的ADC参考电压与参照电压(电源监测)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!