adc电压计算 Vread =(Adc(readx)/4096(根据ADC位数不同,此处值不同))* Vref。读取通道17,因为是个定值,所以可以计算出Vref = 1.2*4096/Adc(read17)); 任意通道的电压值 Vread = (Adc(readx)/4096)*(1.2*4096/adc(read17))) = 1.2*Adc(readx)/Adc(read17)
其中参照电压=1.20V
选用外部参考基准电压,其原理同第一种是一样一样的,只不过将第一种中的参照电压换成了自己设定的基准源的电压,公式同上。
STM32的内部参照电压VREFINT和ADCx_IN17相连接,它的作用是相当于一个标准电压测量点,内部参照电压VREFINT只能出现在主ADC1中使用。
内部参照电压VREFINT与参考电压不是一回事。ADC的参考电压都是通过Vref+提供的并作为ADC转换器的基准电压。
当我们使用的Vref+是直接取自用VCC电压时,当VCC电压波动比较大时或稳压性能比较差时,可以借用STM32的内部参照电压VREFINT校正测量精度。
以测量1通道的电压值为例,先读出参照电压的ADC测量结果,记为ADre;再读出要测量通道1的ADC转换结果,记为ADch1;则要测量的电压为:
【12位精度=2^12=4096
3.3V/4096=将1V分为几段】
Vch1 = VREFINT* (((ADch1*(VREF/4096))/(ADre*(VREF/4096)))
注:VREFINT=1.2V,VREF为参考电压值=3.3V
公式简化:Vch1 = VREFINT*(ADch1/ADre)
这种方法等于变相将内部参照电压VREFINT当成是ADC参考电压,也就是说,此时Vref参考电压的准确度已在此已对结果影响不大了,ADC的转换结果基本由VREFINT的精度决定。
我们知道,STM32中64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压,
ADC的供电要求是2.4V到3.6V,ADC输入范围:VREF-LDO造成不同的参考电压值,虽然STM32是可以正常工作,但是参考电压的不同,也就造成我们使用ADC采集外部模拟信号值时,无法还原真实数据。所以,在这里介绍一下STM32的内部2个ADC通道。
STM32的ADC可以直接测量2个内部信号源,其中一个是温度传感器,一个是内部参考电压。
其中,温度传感器和通道ADCx_IN16相连接。内部参考电压VREFINT和ADCx_IN17相连接。
根据数据手册中的数据,这个参考电压值的典型值为1.20V,最小值为1.16V,最大值为1.24V。这个电压基本不随外部供电电压的变化而变化。
其使用的具体为:在测量某个通道的电压值之前,先读出ADCx_IN17引脚参考电压的ADC的测量数值,记为AD_REFINT,再读出要测量通道的ADC的转换数值,记为AD_CHX。则要测量的电压数值为:
V_CHX=V_REFINT*(AD_CHX/AD_REFINT)
其中,V_REFINT为参考电压:1.2V(典型值)。
在STM32提供的库函数中,如果要开启内部参考电压功能,使用的库函数和开启温度内部温度传感器的函数是一样的,只是在后面采集ADCx_Channel_x通道的时候不同而已。开启函数为: ADC_TempSensorVrefintCmd(ENABLE);
注:必须设置TSVREFE位激活内部通道:ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换。