我们在使用ADC采集外部电压时,一般默认参考电压为MCU的供电电压,例如单片机供电电压为3.3V时,我们计算采集电压的公式为:
假设12位ADC
采集电压=(AD值/4096)*3.3;
但是如果因为某些原因导致的供电不稳定,而我们任然按照3.3V计算,ADC采集计算出来的电压就会出现误差。
在STM32手册中关于ADC的介绍中提到使用内部参考电压计算实际的VDDA电压。
使用内部参考电压计算实际的 VDDA 电压:
施加给微控制器的 VDDA 电源电压可能会有变化,或无法获得准确值。在制造过程中由 ADC
在 VDDA = 3.3 V 的条件下获得的内置内部参考电压 (VREFINT) 及其校准数据可用于评估实际
的 VDDA 电压。
以下公式可求得为器件供电的实际 VDDA 电压:
VDDA = 3 V x VREFINT_CAL / VREFINT_DATA
其中:
VREFINT_CAL 是 VREFINT 校准值
VREFINT_DATA 是由 ADC 转换得到的实际 VREFINT 输出值
将电源相关的 ADC 测量值转换为绝对电压值:
如何使用内部参考电压
使用STM32CubeMX配置ADC是除了选取自己的需要的ADC通道,还要勾选Vrefint channel,这个通道也可以看做是一路ADC采集,用于后边的计算。
RANK分配,采用DMA模式时,定义数组时直接对应到数组。
使能DMA。
STM32手册中提到:VREFINT 的精确电压由 ST 在生产测试期间对每部件单独测量,储存于系统存储区。这个值是固定的,计算前我们需要将它读出来。文章来源:https://www.toymoban.com/news/detail-610534.html
u16 ADC_Buffer[3];//定义u16数组 0.通道4 1.通道7 2.参考电压Vref
u16 VREFT_CAL = 0;//内部基准
VREFT_CAL = *(uint16_t*)(VREFINT_CAL_ADDR);//读取内部基准
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Buffer,3);//开启 ADC---DMA
V= (3*VREFT_CAL*ADC_Buffer[0])/(ADC_Buffer[2]*4096); //校准后的通道4采集电压
以上就是STM32使用内部参考电压提高ADC采集准确度的方法,不过计算电压值,我还是喜欢自己再去实际校准得到一个系数。文章来源地址https://www.toymoban.com/news/detail-610534.html
到了这里,关于STM32使用内部参考电压提高ADC采集准确度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!