我们在使用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 在生产测试期间对每部件单独测量,储存于系统存储区。这个值是固定的,计算前我们需要将它读出来。
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采集准确度的方法,不过计算电压值,我还是喜欢自己再去实际校准得到一个系数。
————————————————
版权声明:本文为CSDN博主「家养钢铁侠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45325304/article/details/130728503
|