笔记: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:
笔记:STM32的ADC参考电压与参照电压(电源监测)_第1张图片
在理解时可以把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,stm32)