外部供电不稳定时准确测量ADC电压基于STM32L151最新HAL库实现方案

当外部供电不稳定导致STM32 VDD电压波动时,通过利用STM32的内部参考电压,可以实现ADC管脚电压的精确测量,精度达0.01v。采用公式:PinAdcV = (3 * VREFINT_CAL * PinAdcData) / (VREFINT_Data * (4096-1))进行计算,其中VREFINT_CAL和VREFINT_Data为常量,PinAdcData为ADC测量值。已验证适用于STM32L151,并提供完整代码下载链接和开发板购买信息。

当使用电池直接供电 或 外部供电低于LDO的输入电压时,会造成STM32 VDD电压不稳定,忽高忽低。

此时通过使用STM32的内部参考电压功能(Embedded internal reference voltage),可以准确的测量ADC管脚对应的电压值,精度 0.01v左右,可以满足大部分应用场景。



计算公式:

        PinAdcV = (float)(3 * VREFINT_CAL * PinAdcData) / (float)(VREFINT_Data * (4096-1));

说明:

  •         VREFINT_CAL = *(__IO uint16_t *)(0X1FF80078);
  •         VREFINT_Data 即 ADC_IN17的ADC数值;
  •         PinAdcData 为 待测管脚的ADC数值

基于STM32L151的具体实现:

{
        sConfig.Channel = ADC_CHANNEL_0;
        sConfig.Rank = ADC_REGULAR_RANK_1;
        sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
        if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
        {
            _Error_Handler(__FILE__, __LINE__);
        }
        HAL_ADC_Start(&hadc);
        HAL_ADC_PollForConversion(&hadc,100);
        adcPA0Data=(uint16_t)HAL_ADC_GetValue(&hadc);
        HAL_ADC_Stop(&hadc);
}
{
        uint16_t VREFINT_CAL = *(__IO uint16_t *)(0X1FF80078);
        uint16_t adcVerfData = 0;
        float pa0Volt = 0.0f;
        

        // #define ADC_CHANNEL_VREFINT     ADC_CHANNEL_17
        sConfig.Channel = ADC_CHANNEL_VREFINT;
        sConfig.Rank = ADC_REGULAR_RANK_1;
        sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
        if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
        {
            _Error_Handler(__FILE__, __LINE__);
        }
        HAL_ADC_Start(&hadc);
        HAL_ADC_PollForConversion(&hadc,100);
        adcVerfData=(uint16_t)HAL_ADC_GetValue(&hadc);
        HAL_ADC_Stop(&hadc);
        
        pa0Volt = (float)(3 * VREFINT_CAL * adcPA0Data) / (float)(adcVerfData * 4095);
        
        HAL_Delay(1000);
}

运行效果:

完整代码下载链接:

https://download.youkuaiyun.com/download/ioterr/12972941

 

本代码已经在下述开发板验证通过,如需实际验证,请移步淘宝:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-17393307877.5.7fcc4ecd4r0GYG&id=587323418069

 

如有任何疑问,欢迎留言交流!

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值