ST意法半导体
直播中

刘军

8年用户 1480经验值
私信 关注
[问答]

请问STM32F373内部基准为什么不准确?

大家好,
我读取VREFINT_CAL校正值,然后校正ADC1后读取ADC值,按文档计算VDDA:
即:电源电压=芯片内部校正值/ADC1读出值(漂移校正后)*3.3V,(代码如下),
用芯片厂3.3V,计算,得到我的VDDA为3.57~3.59V之间,用泰克6位半万用表测量VDDA为3.50V左右,用其它万用表也是测到3.5V左右,比如胜利表,示波器等。
按照计算出的VDDA,重新计算VREFINT=1.251V。文档里面的最大值为1.25V,略超上限。
这意味着电源有2%左右的误差。如果我的电压是准确的,则意味着ST工厂校正时的3.3V电压偏差有2%。当然一般电源芯片误差1~3%很正常,不过芯片厂用来生产芯片的校正电压如果也偏差2%,就有点不好理解?是不是?
现在我不找不到原因,请有经验的大师指点一下,谢谢。(为了减少外部因素干扰,VREFSD+这些脚,都移除了负载,其它模拟功能模块都是关闭的)。
谢谢!!!!!!!!!!!!!!!!!!!!!!!!
串口输出:
u32AdcVcali(offset)= 0x00000047, DataCal32(30)=0x0611, Vadc1Vintref_VccA= 0x0599fVint by Vcc( 3.576 V) from adc1:  1.251 V
代码:
DataCal32_30 = [i](__IO uint16_t )(0X1FFFF7BA); //3.3VDataCal32_110 = [i](__IO uint16_t )(0X1FFFF7BA); //3.3V
HAL_ADCEx_Calibration_Start(&hadc1);u32AdcVcali = HAL_ADC_GetValue(&hadc1);DelayMs(1);HAL_ADC_Start(&hadc1);sum = 0;for (i=0;i 2.5f)){g_fVcc = fVx;}

回帖(2)

丁浩

2025-3-13 16:08:46
STM32芯片内部都内置这个VERFINT电压信号,其值在ST官方数据手册里都写明了范围,
有些系列还给出了给定温度下的校准数据,并存放在特定位置。


有些时候我们可以使用它来监视VDD的变化、或作为内部比较器的比较电压、或作为某些ADC
模块的参考电压。


对它进行测量时,注意保证足够的采样时间、芯片电源尽量稳定。
举报

李鸿洋

2025-3-17 18:06:00

针对STM32F373内部基准(VREFINT)校正后VDDA计算值偏高的问题,以下是逐步排查与解决方案:




1. 确认硬件电源设计



  • 问题:电源芯片输出偏差可能导致VDDA实测3.5V(高于标称3.3V)。

  • 检查点

    • 测量电源芯片输出是否稳定,确认LDO/DC-DC的反馈电阻配置是否正确。

    • 检查负载电流是否在电源芯片额定范围内,避免因过载导致电压跌落或升高。

    • 增加去耦电容(如10μF钽电容+100nF陶瓷电容)以减少电源噪声。





2. 验证VREFINT_CAL读取与计算逻辑



  • 问题:校准值读取错误或公式应用不当。

  • 检查点

    • 确认VREFINT_CAL地址:STM32F373的VREFINT_CAL值应存储在0x1FFFF7BA(12位ADC,参考数据手册)。

    • 校准公式修正:正确公式为:
      VDDA = (VREFINT_CAL * 3.3V) / ADC_RAW_VALUE;

      需确保计算中使用浮点数运算,避免整数截断误差。


    • 代码示例
      uint16_t vrefint_cal = *((uint16_t*)0x1FFFF7BA);
      float vdda = (3.3f * vrefint_cal) / adc_value;





3. 优化ADC配置



  • 问题:ADC采样时间不足或配置不当导致采样误差。

  • 调整点

    • 延长采样时间:VREFINT通道阻抗较高,建议设置最大采样时间(如STM32F3的ADC_SAMPLETIME_480CYCLES)。

    • 启用ADC校准:调用HAL_ADCEx_Calibration_Start()进行硬件校准,消除偏移误差。

    • 禁用其他干扰:关闭未使用的外设,减少电源噪声。





4. 环境因素影响



  • 问题:温度变化导致VREFINT值漂移。

  • 应对措施

    • 在恒定温度下测试(如25°C),观察误差是否减小。

    • 若工作温度范围广,需在固件中增加温度补偿(参考数据手册中的温度系数)。





5. 多次采样与滤波



  • 问题:单次采样易受噪声干扰。

  • 改进方法

    • 连续采样多次(如64次),取平均值或中值。

    • 使用软件滤波算法(如滑动平均、卡尔曼滤波)。





6. 交叉验证ADC准确性



  • 步骤

    1. 使用外部高精度基准源(如TL431或ADR425)输入到ADC的某个通道。

    2. 对比ADC测量值与万用表测量值,确认ADC整体精度。

    3. 若外部基准测量准确,则问题集中在VREFINT或电源设计;若不准,需优化ADC配置。





7. 检查VREFINT规格



  • 数据手册核对

    • 确认VREFINT的典型值(如1.2V或1.25V)及误差范围(如±1%)。

    • 若计算出的VREFINT超过标称范围,可能需更换芯片或启用外部基准。





8. 电源监控与动态校准



  • 高级方案

    • 实时监测VDDA(通过VREFINT或外部电压),动态调整ADC校准参数。

    • 在关键应用中,使用外部基准芯片(如REF3033)直接连接VREF+引脚。





总结建议



  1. 优先调整电源电路,确保VDDA稳定在3.3V。

  2. 优化ADC配置,延长采样时间、多次采样取平均。

  3. 交叉验证:用外部基准源确认ADC精度,排除内部基准问题。

  4. 固件修正:检查校准值的地址与计算公式,避免计算误差。


通过上述步骤,可系统性定位问题根源并提升测量精度。

举报

更多回帖

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