使用stm32的ADC得到准确的电压

探讨了STM32单片机ADC模块的供电方式及其对精度的影响,介绍了如何利用内部参考电压和温度传感器校准ADC,以及采样时间对精度的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引脚多一点的stm32单片机存在VREF-和VREF+引脚

由上面的供电图知道,如果存在VREF-和VREF+引脚,那么ADC是由这两个引脚供电的,ADC的采集电压范围为:VREF-<VIN<VREF+。给VREF+接入稳定的电压参考,那么使用ADC就能测量到精确的电压值。如:精度为12位(4096),VREF+参考为3V,转换时间足够,得到的值是2048,那么采样对象电压就是1.5V。(ADC转换时间会影响精度)

 

二、引脚少的单片机(48脚)没有引出VREF-和VREF+引脚

VREF-和VREF+引脚在单片机内部与VDDA和VSSA连在一起,因为不像上面单独给VREF+一个稳压源,因此可能存在供电电压不稳的问题。于是需要一些方法来对转换结果进行矫正。

ADC的通道17就是单片机内部的一个稳压源。可以读取它的数据来进行矫正。

该稳压源电压为1.16V到1.24V,精度不是很准确,要求不高,可以凑合着用。

具体使用方法是:增加一个通道17的采集(如本来要采集2个通道,现在采集3个通道),把通道17的测量数值记为ADrefine,目标通道测量数值为ADchx,则目标电压为:

Vchx = Vrefine* (ADchx/ADrefine),其中Vrefine为参照电压=1.20V。

程序上:

在STM32提供的库函数中,如果要开启内部参考电压功能,使用的库函数和开启温度内部温度传感器的函数是一样的,只是在后面采集ADCx_Channel_x通道的时候不同而已。开启函数为: ADC_TempSensorVrefintCmd(ENABLE);

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

关于操作源码,可以参考正点原子不完全手册 第二十一章 内部温度传感器实验,对于内部电压值的测量和温度传感器的方法是一样的,只是使能的ADC通道不一样,其他都是一样的,所以,可以直接参考。

 

三、引脚少的单片机(48脚)没有引出VREF-和VREF+引脚(方法二)

在某些stm32单片机中还存在VREFINT_CAL(直接在数据手册中搜索VREFINT_CAL)

这个值是ST在出厂测试时,25度,VDDA电压3V,读通道17的数值。我们知道引脚少的单片机VREF+与VDDA是连在一起的,因此当参考电压为3V,25度,ADC测量1.2V的结果就是VREFINT_CAL。这样我们可以测量通道17的数值来计算VDDA的电压:

        比如:参考电压为3V,25度,ADC测量1.2V的结果VREFINT_CAL=100,现在我读通道17的数值是200,因为测量对象一直是稳压源1.2V,可是测量数值翻倍了,那肯定是参考电压折半了嘛。

        这样相当于我能测量参考电压大小,于是就能计算目标电压大小:(把上面的式子代入)

 

四、采样时间会影响采样精度

因为ADC的采样需要一定的电流大小,因此外部阻抗的大小会影响采样的时间。阻抗越大,电流越小,需要采样时间越长。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qlexcel

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

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

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

打赏作者

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

抵扣说明:

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

余额充值