你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f103c8t6在ADC时怎样用内部的基准电压去教对不稳定的VDD?

[复制链接]
hqw 提问时间:2019-12-13 18:58 /
请教大家个问题,我用3.7v的锂电池供电,进行NTC测温度。经过3.3V的稳压芯片再供给MCU,但在电池电压由4.2v慢慢降到3.7v时,MCU的VDD也就会从3.3v降到2.8V。所以,要想办法,测准真实的vdd,这样才能得到正确的温度。
     我在网上看到有利用内部的基准电压去教对不稳定的VDD的方法,但对48pin的stm32f103c8t6,ADC1没有IN17,在cubemx上选了Vrefint Channel,所生成的程序也没啥变化,所以不知道怎样才利用得到这内部的1.2v。(有附件和附图)

网上的方法如下:
(3条消息)STM32内置参照电压的使用(转) - oushaojun2的专栏  http://blog.csdn.net/oushaojun2/article/details/7735286
STM32内置参照电压的使用(转)

每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。


根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化。


不少人把这个参照电压与ADC的参考电压混淆。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。


在ADC的外部参考电压波动,或因为Vref+在芯片内部与VCC相连而VCC变化的情况下,如果对于ADC测量的准确性要求不高时,可以使用这个内部参照电压得到ADC测量的电压值。


具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:


Vchx = Vrefint * (ADchx/ADrefint)


其中Vrefint为参照电压=1.20V。


上述方法在使用内置温度传感器对因为温度变化,对系统参数进行补偿时就十分有效。


(3条消息)stm32 精确电压测量法(内部参考电压) - qq_34672688的博客  http://blog.csdn.net/qq_34672688/article/details/91874371


stm32 精确电压测量法(内部参考电压)
芯片型号:stm32l051c8(其它型号请参考datasheet,仅供参考)

使用ADC采集电压时若使用外部参考电压,如果外部电压变化,且低于正常LDO工作电压时,输出的电压将发生改变,导致基准电压改变而导致ADC电压出现偏差,因此在该芯片上查看datasheet后得知,厂家已经为我们考虑到这种情况,并在出厂时将类似于基准电压的值写在flash中。该值的环境:25°C, VDD = 3V时的情况,可以直接地址访问读取,我读取了两个芯片的值,大概在1670值左右。通过该值我们就有一个标准。

附图请打开链接来看

接下来看参考手册中对该款芯片的介绍,

附图请打开链接来看



我们可以看到,通过读取ADC IN17可以获得内部参考电压值,假设我们现在要读取电池电量,需要读取两个通道的值:

1、ADC IN17内部参考电压原始数据,也就是下图公式中的 VREFINT_DATA

2、读取电池电量连接通道原始数据,也就是下图公式中的ADC_DATAX值,我在板子上接的是ADC IN4

下图的计算公式就是利用内部参考的校准电压值和实际读取的内部参考电压值作一个线性关系,将这个斜率对应到我们需要测量的通道值。

说明:VREFINT_CAL:内部参考电压校准值,直接地址读取。比如该款芯片地址:0X1FF80078,那么我们可以这么做:

VREFINT_CAL = *(__IO uint16_t *)(0X1FF80078);

FULL_SCALE:根据我们设置的ADC分辨率而定,12位ADC分辨率值:2^12 - 1 = 4096 - 1.



实测数据:

VREFINT_CAL:1669 VREFINT_DATA: 1716

ADC_DATAX: 2046 FULL_SCALE: 4095

根据公式计算到电压值: VOL = 3 * 1669 * 2046 / (1716 * 4095) = 1.4578

电池电量: 1.4578 * 2 = 2.915 V

用万用表测量的电压值:1.44~ 1.45V波动, 校验成功。





************************************************************************************************************

2019-08-10补充

最近在项目中使用到ADC电压采集,由于使用的模拟量输出,所以对精度要求较高,使用上文的方式精度还不错,不过怎么调节都会与实际测量电压有偏差,为了降低这个误差,在软件上做处理。由于工程使用的是CubeMx生成的代码,经过调试,在采集电压前进行ADC校准会得到更好的精度。所以在采集前可加入这么一句代码:

HAL_ADCEx_Calibration_Start(&hadc);                     //校准ADC
————————————————
版权声明:本文为CSDN博主「qq_34672688」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:http://blog.csdn.net/qq_34672688/article/details/91874371


收藏 评论3 发布时间:2019-12-13 18:58

举报

3个回答
hqw 回答时间:2019-12-13 19:10:23
这贴没附件,我另外又发了个新贴,请大家看新贴
wenyangzeng 回答时间:2019-12-13 20:29:14
hqw 发表于 2019-12-13 19:10
这贴没附件,我另外又发了个新贴,请大家看新贴

当使用内部基准时,如果VCC变化了,内部基准当然也变化了。建议用DC-DC将供电升压后再经过LDO稳压给CPU供电,以避开VCC变化所引起的转换结果的不准确。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

butterflyspring 回答时间:2019-12-23 17:40:23
wenyangzeng 发表于 2019-12-13 20:29
当使用内部基准时,如果VCC变化了,内部基准当然也变化了。建议用DC-DC将供电升压后再经过LDO稳压给CPU供 ...

内部基准是不会变化的,所以才会叫基准电压。也就是在工作电压范围内保持不变。具体可以看看官方数据手册。所以可以用这个电压推测外部电源电压变化。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版