STM32
直播中

李勇

7年用户 1298经验值
私信 关注
[问答]

STM32L011的ADC采样值为什么会不准确呢

如何读取VREFINT_CAL?
STM32L011的ADC采样值为什么会不准确呢?怎样计算得到一个与电源电压无关的绝对精确的AD值?

回帖(1)

陶天瑛

2021-10-26 09:19:14
  最近在使用STM32L011的ADC时,发现ADC采样值极其不准确。经过查找资料,和反复测试,总算摸出点门道。
  如将VDDA接到VDD,那么电源的波动会极大的影响ADC精度。
  不过使用内部参考电压可以计算实际的VDDA电压。
  
  说明:
  VREFINT_CAL:芯片出厂时固化在存储器中的。使用时需要通过软件读取。
  VREFINT_DATA:ADC读取VREFINT(内部参考电压通道ch17)得到的值,每次采样序列,将ch17一并采集,用来后续的AD值补偿计算。
  如何读取VREFINT_CAL?
  首先,找到芯片的datasheet,是所使用的那款芯片的数据手册,因为同一系列的不同芯片,可能存在区别。例如,我需要找到的datasheet标题是这个
  
  搜索:VREFINT_CAL
  
  得到VREFINT_CAL的地址后,使用语句
  #define VREF_CAL *(__IO uint16_t *)(0x1FF80078) 然后data1 = VREF_CAL;就可以了。
  怎样计算得到一个与电源电压无关的绝对精确的AD值?
  
  使用这个公式就可以了。
  说明:
  VREFINT_CAL:使用前述的读取语句data1 = VREF_CAL;从芯片存储器中读出;
  ADC_DATAx:你需要测量的通道,使用ADC读出;
  VREFINT_DATA:前述,内部参考电压通道(ch17)读出的值;
  full_SCALE:上面已经解释很好了。取值2^n-1,n是分辨率。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分