最近在进行原理图设计的时候遇到了一个问题,就是STM32的100管脚一下芯片没有Vref的问题。64Pin及以下封装的芯片电源管脚有:VDD - 单片机3.3V 电源正,VSS - 单片机3.3V 电源负,VDDA - 单片机A/D 转换器电源正,VSSA - 单片机A/D 转换器电源负。
插一句:由于STM32F103系列单片机的内部高速RC 振荡器(HSI)由VDDA、VSSA 供电,故即使不使用单片机自带的A/D 转换器,也必须保证VDDA、VSSA 的供电,否则STM32F103单片机不能正常启动。
言归正传
在小于等于64Pin的芯片中,在芯片的内部Vref+是和VDDA连接在一起的,也就是说ADC的是以VDDA为参考电压的。那么还有一点需要注意的就是VDDA和VDD的压差必须小于300mV ,否则可能由于上电断电的非同时性,导致数据的丢失。然而这就有可能导致了ADC参考电压的非精确性。
如何解决ADC参考电压的问题呢?
一、每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化。
不少人把这个参照电压与ADC的参考电压混淆。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VDDA信号线相连,没有引到片外,这样AD的参考电压就是VDDA上的电压。
如果对于ADC测量的准确性要求不高时,可以使用这个内部参照电压得到ADC测量的电压值。具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:
Vchx = Vrefint * (ADchx/ADrefint)。其中Vrefint为参照电压=1.20V。
二、选用外部参考基准电压,其原理同第一种是一样一样的,只不过将第一种中的参照电压换成了自己设定的基准源的电压,公式同上。
欢迎大家批评指正。