完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用STM32L4的ADC测量其内部温度传感器数据时,我遇到了一个问题。 STM32L4参考手册中提供的等式似乎显示不正确的结果。 等式是: *温度=((110-30)*(TS_DATA - TS_CAL_1)/(TS_CAL_2 - TS_CAL_1))+ 30 * 其中,TS_DATA = 945(温度的原始ADC数据),TS_CAL_1 = 1035(从预定义的存储器地址读取校准点),TS_CAL_2 = 1373(从预定义的存储器地址读取校准点) 这导致室温(约26摄氏度)的“温度= 8.69”,这显然是不正确的。 我的代码是:
|
|
相关推荐
11个回答
|
|
这不是ST的RM0394参考指南中找到的公式(第446页)。来自哪里?为什么在源代码中硬编码?
|
|
|
|
在参考手册的旧版本中给出了类似的内容。ST似乎改变了他们在何时校准不同设备时的想法。他们曾经在110和30°C的温度下工作,现在有一些设备在130和30°C完成。您必须从数据表中读取该值。
|
|
|
|
您正在使用的确切设备以及您正在使用的电压。如果它不是校准期间使用的参考值,则必须相应地缩放值。
|
|
|
|
我使用的是STM32L432KBUx,我已经将3.3V作为参考电压
|
|
|
|
您需要应用缩放,因为当校准的部件时,参考电压与参考电压不同。
它们在校准期间使用3 V基准电压源,使用3.3 V基准电压源。 因此,温度传感器的绝对值不会改变,因此您获得的ADC值将小于校准期间获得的ADC值。 因此,您的ADC值必须按3.3 V / 3.0 V或1.1倍进行调整。 如果您在公式中输入(并使用130和30°C的正确校准温度),最终会达到31°C。仍然有点偏离你的26°C,但这可能是因为你的电子实际上更温暖,即使使用校准值我们在测试中测得高达6 K偏差,所以我认为这是好的。 (与小代码片段类似的答案,但它是110和30°C) |
|
|
|
因此,新方程应为((TS_CAL2_TEMP - TS_CAL2_TEMP)/(TS_CAL2 - TS_CAL1))*((TS_DATA * VDD / 3000) - TS_CAL1)+ 30,其中VDD = 3000 * VREFINT_CAL / VREFINT_DATA(RM0394 Rev4第448页提供的公式是吗?)
|
|
|
|
疑问:数据表Rev4表示校准温度为30和130,我不知道如何阅读它们。我的CubeMX生成的代码有2个#define变量:TEMPSENSOR_CAL2_TEMP = 110和TEMPSENSOR_CAL1_TEMP = 30.你对这个冲突有什么看法吗?
|
|
|
|
这些值在设备中无法读取,您必须检查数据表(在您的情况下,它是130和30°C)。您当然可以使用参考电压的测量值,但如果您的参考电压来自稳定电源,通常它足以应用静态因子。好像CubeMX和参考手册有相同的错误(你使用的是最新版本吗?)
|
|
|
|
实际上你应该回顾内部带隙,通过查看电源读取的内容,然后从中计算电源,最后从电源计算温度传感器。
|
|
|
|
最准确的结果是。虽然校准温度为+ - 5 K,但无论如何都会限制精度。
|
|
|
|
STM32内部的温度传感器精度比较差
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
请问ad9910芯片的ram模式在接收数据时为什么会出现一段方波?
1822 浏览 1 评论
767 浏览 0 评论
不懂真得问!FREERTOS在中断里面,可以调用有任务级临界段代码的函数吗?
1763 浏览 1 评论
2000 浏览 1 评论
2174 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-26 12:55 , Processed in 0.829161 second(s), Total 93, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191