怎么根据读到的ADC值,推算实际电压值(二)

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

 XX  作       者:文化人

 XX  联系方式:

 XX  版权声明:原创文章,欢迎评论和转载~转载时能告诉我一声就最好了

 XX  要说的话:作者水平有限,难免有不足之处,恳请指正!

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

写在前面:接上一篇文章,理论上能够根据读到的ADC值,推算出实际电压值;但是,对于管脚少于64pin封装的STM32芯片,采用的ADC参考电压是内部电源引脚上的输入电压,所以,就有可能造成不同的锂电池、LDO会有不同的参考电压值,虽然STM32可以正常工作,但是参考电压不同,就会造成根据读到的ADC值,推算的电压值并不准确。

无独有偶,笔者在实际开发中就遇到了这样的问题:在研发新项目时,延用了上个项目的电压处理模块,由于上个项目使用的是3V的LDO,而目前项目使用的是3.3V的LDO,这就导致在新项目里推算出的电压值出现了拐点,如下图:

由于出现了拐点,所以低电判断就不准确,后来根据数据手册,找到了两个内部的ADC通道,这个参考电压值的典型值为1.20V,而且基本不随外部供电电压的变化而变化。

STM32的ADC可以直接测量2个内部信号源,其中一个是温度传感器,另一个是内部参考电压。其中,温度传感器和通道ADCx_IN16相连接。内部参考电压VREFINT和ADCx_IN17相连接。

具体操作方法为:在测量某个通道的电压值之前,先读出ADCx_IN17引脚参考电压的ADC转换数值,记为AD_CH17,再读出要测量通道的ADC的转换数值,记为AD_CHX。则要测量的电压数值为:

V_CHX = 1.2 * 100 * (AD_CHX / AD_CH17);

因为用到浮点运算,所以扩大100倍,便于比较,注意把电压检测的间隔调大一点,保证浮点运算的时间;

注:必须设置TSVREFE位激活内部通道:ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文化人Sugar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值