STM32F030F4P6-提高ADC采集精度

STM32F0/F1系列的ADC都是12位的,通常情况下我们都需要将AD采集的码值进行转换得到实际的电压值,然后根据不同类型的传感器,换算为对应的温度、压力等数据。

常规的算法是,将ADC采集到的值ad_value用3.3V对应的码值(4096 = 2^12,因为是12的ADC)来进行换算,ad_value*3.3/4096,这种情况对于要求不是很高的场合可以适用,但是对于采样精度要求较高的场合就不合适了。因为电源电压3.3V通常都不是稳定的3.3V,所以采集的值会随着电源电压波动。

为了解决上述的问题,有以下几种解决办法:

1.外接电压基准芯片,如LM385,TL431;

2.利用芯片内部的电压基准;

第一种方法:

以LM385-2.5为例,将LM385的电压输出引脚接到PA0(任意ADC_INx都可以),假设PA0通道采集的码值为ad_cal,其他通道的采集的值ad_vaule,可以使用这个码值进行校准,ad_value * 2.5/ad_cal,得到的电压值相对来说更加准确(相对于ad_value*3.3/4096来说)。

第二种方法:

使用芯片内部的电压基准,STM32F030芯片,芯片内部0x1FFF F7BA-0x1FFF F7BB这个地址上存入了,在3.3V供电时,ADC_IN17通道采集的内部1.2基准的码值,如我实测的VREFINT_CAL = 1521,在进行ADC采集的时候,打开ADC_IN17这个通道,将得到的码值,如VREFINT = 1528(实测),用来校准电源供电,校准后的电源供电时1528 * 3.3/1521 = 3.315,其他通道采集的ADC值ad_value,进行校准后得到的电压值(VREFINT/VREFINT_CAL) *( 3.3/4096),经过此校准后ADC的采集精度可以达到0.1%,对于常规的应用来说,这个精度可以达到要求了。

下班了,下次再补充,也欢迎大家提出意见。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页