STM32 ADC采样不准怎么办

最近在使用STM32L011的ADC时,发现ADC采样值极其不准确。经过查找资料,和反复测试,总算摸出点门道。

如将VDDA接到VDD,那么电源的波动会极大的影响ADC精度。
不过使用内部参考电压可以计算实际的VDDA电压。
STM32 ADC采样不准怎么办_第1张图片
说明:
VREFINT_CAL:芯片出厂时固化在存储器中的。使用时需要通过软件读取。
VREFINT_DATA:ADC读取VREFINT(内部参考电压通道ch17)得到的值,每次采样序列,将ch17一并采集,用来后续的AD值补偿计算。

如何读取VREFINT_CAL?

首先,找到芯片的datasheet,是所使用的那款芯片的数据手册,因为同一系列的不同芯片,可能存在区别。例如,我需要找到的datasheet标题是这个

STM32 ADC采样不准怎么办_第2张图片

搜索:VREFINT_CAL

STM32 ADC采样不准怎么办_第3张图片
得到VREFINT_CAL的地址后,使用语句

#define VREF_CAL                         *(__IO uint16_t *)(0x1FF80078) 

然后data1 = VREF_CAL;就可以了。

怎样计算得到一个与电源电压无关的绝对精确的AD值?

STM32 ADC采样不准怎么办_第4张图片
使用这个公式就可以了。
说明:
VREFINT_CAL:使用前述的读取语句data1 = VREF_CAL;从芯片存储器中读出;
ADC_DATAx:你需要测量的通道,使用ADC读出;
VREFINT_DATA:前述,内部参考电压通道(ch17)读出的值;
full_SCALE:上面已经解释很好了。取值2^n-1,n是分辨率。

你可能感兴趣的:(STM32)