6470|12

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于内部传感器的问题 [复制链接]

从datasheet上可以看到Vrefint的电压在1.2V左右,可是我现在采样到的数据是2080左右,如果按照这个推算,Vref1.2*4096/2080 =2.35V,不知道我的这个推算对不?
一个关键问题,使用其内部传感器测量CPU温度,公式中的Vdd,为什么会是Vdd,而不是Vref,为什么datasheet上没有其回路图,4.3mV/℃按照这个标准0~100℃电压变化只有0.43V,如果按照STM的公式进行计算,带入不同的值,计算到的数据误差比较大,我想这个公式是不是可以简化,就像datasheet上讲串口波特率的事情一样,说什么12整数,4位小数,算了半天还要除以16,其实寄存器的值就是系统时钟除以波特率,费劲!!!
我想这个测量值肯定跟Vdd、V25没有什么关系
此帖出自stm32/stm8论坛

最新回复

vu16 GetTemp(vu16 advalue) {      vu32 Vtemp_sensor;      vu16 Current_Temp;       //    ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下: //          V25 - VSENSE //  T(℃) = ------------  + 25 //           Avg_Slope //   V25:  温度传感器在25℃时 的输出电压,典型值1.43 V。 //  VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为:  //            ADC_ConvertedValue * Vdd //  VSENSE = -------------------------- //            Vdd_convert_value(0xFFF) //  Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。      Vtemp_sensor = ((vu32)advalue )* 3300>>12 ;   //工作电压3.3伏.      Current_Temp = 25 +((vu16)Vtemp_sensor - 1430)*10/43;       return Current_Temp; }   大佬这个是什么问题啊,这个是我找的一个,这个我的芯片算出来就是52,你写的我不太懂 Vdd_convert_value什么意思,还有这一句ADC_ConvertedValue = ADC1->DR & Vdd_convert_value;这个DR是什么意思?   详情 回复 发表于 2021-2-13 07:03
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

读取STM32内部温度传感器

首先,关于VREFINT的推算是正确的。

关于内部温度传感器的计算公式,请看下图是STM32技术参考手册中的有关部分,公式中没有你说的Vdd。

温度转换是一条直线,Avg_Slope给出了这条线的斜率,V25给出了这条线的一个点,这样才能唯一确定这条线。如果没有V25这个点,光有斜率时不足以定义一条直线的。
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

看看这个链接,源码已经提供了,呵呵,

STM32内置的温度传感器应用 2008-11-30 13:02:15 
此帖出自stm32/stm8论坛
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 

那个温度,只可作参考。

                                 不要用来做测量什么的,做个参考还可以的。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 

仅仅注意公式正确是不够的,整数运算,要特别注意有效数

void ADC_Temperature_Read(void)
{
    
#define Vdd 34600
#define V25 14300
#define Avg_Slope 43
#define Vdd_convert_value 0xFFF    

    vu32 ADC_ConvertedValue;
    vu32 Vsense;
    vs32 Vtemperature;

    ADC_ConvertedValue = ADC1->DR & Vdd_convert_value;
         Vsense = ADC_ConvertedValue * Vdd / Vdd_convert_value; 
    Vtemperature = V25-Vsense;    
         D_Temperature = (Vtemperature*100/Avg_Slope) + 2500; 
}
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 

有问题

                                 有问题,Vref1.2*4096/2080 =2.35V是不对的。Vref1.2*2080/4096差不多
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 

哈哈,我太笨了,6楼才是正确的

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

8
 

版主,看看5楼的回复

#define Vdd 34600,这个定义可以推算Vsense,3.3V电压是有很大偏差的,
如果按照这个电压来计算的话,误差势必会超出datasheet上的数据范围的,
我想测量温度时,如果将Vref传入温度传感器,如果Vref变化的话,ADC16采样到数据将是不变的,可是我不知道是否是将温度传感器和一个电阻串联后施加一个Vref电压,要是这样,就与参考电压无关了,但根据公式,好像问题跟Vref有关联
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 

#define Vdd 34600 因该是330000

                                 但是我实测我的3.3V电压不准,偏高,所以我用的是实测电压值。否则测量结果偏差较大。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 

xxx

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 

Vref

                                 我觉得可以先读Vref,再算温度需要的电压,然后再带入公式
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 

请大家各抒己见

                                 我说的Vref不是内部的Vref,而是参考电压引脚的Vref,也就是64脚或更小芯片的Vdda,也就是通常说的3.3V电压,如果这个变化,那么STM32提供的公式就会误差很大,因为该芯片的AD工作电压为2.4V~3.6V,这工作电压我们可以要求电压电压不一定就是某个特定的值,肯定对于相同产品的不同设备,这个电压肯定各不相同,一个3.2V,3.3V,有的甚至3.4V,那么这个温度偏差是很大的,我们不可能对每个设备定义一次#define Vdd 34600,这样就比较麻烦了
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
haimao 发表于 2008-12-1 23:18 void ADC_Temperature_Read(void){    #define Vdd 34600#define ...

vu16 GetTemp(vu16 advalue)
{
     vu32 Vtemp_sensor;
     vu16 Current_Temp;
     
//    ADC转换结束以后,读取ADC_DR寄存器中的结果,转换温度值计算公式如下:
//          V25 - VSENSE
//  T(℃) = ------------  + 25
//           Avg_Slope
//   V25:  温度传感器在25℃时 的输出电压,典型值1.43 V。
//  VSENSE:温度传感器的当前输出电压,与ADC_DR 寄存器中的结果ADC_ConvertedValue之间的转换关系为: 
//            ADC_ConvertedValue * Vdd
//  VSENSE = --------------------------
//            Vdd_convert_value(0xFFF)
//  Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃。

     Vtemp_sensor = ((vu32)advalue )* 3300>>12 ;   //工作电压3.3伏.
     Current_Temp = 25 +((vu16)Vtemp_sensor - 1430)*10/43; 
     return Current_Temp;
}  

大佬这个是什么问题啊,这个是我找的一个,这个我的芯片算出来就是52,你写的我不太懂 Vdd_convert_value什么意思,还有这一句ADC_ConvertedValue = ADC1->DR & Vdd_convert_value;这个DR是什么意思?

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表