OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8774|回复: 9

一个关于内部温度传感器使用要注意的问题,显示的温度总是0

[复制链接]

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
发表于 2014-3-20 23:16:19 | 显示全部楼层 |阅读模式
我之前弄过内部温度传感器的时候,显示的温度值总是0.000C,这是因为我们用电脑USB供电的话,那么参考电压Vref是不足3.3V的,大概是3.05V,所以导致了显示温度的时候总是0,希望能够帮一下和我遇到过同样问题的人,我是初学者。。。。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-21 09:40:14 | 显示全部楼层
回复【楼主位】STM32初学菜鸟:
---------------------------------
你板子有问题吧,就算电脑供电Vref可以达到3.3V的
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

9

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-9-24
在线时间
0 小时
发表于 2014-3-21 10:32:13 | 显示全部楼层
就算电压不足。。。也能转换啊。。怎么可能是0呢
人需要沐浴阳光,也必将经历风雨
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-21 11:10:07 | 显示全部楼层
是不是软件算法问题?我的正常喔
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-21 13:12:46 | 显示全部楼层
回复【2楼】xiaoyan:
---------------------------------
USB供电的,Vref不足的话也很正常啊。。。。
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-21 13:14:10 | 显示全部楼层
回复【3楼】LOVE_FYD:
---------------------------------
电压不足的话,得到的数据时负数,那么在显示函数的参数里面显示的是u32位的数据,那么显示为0.。。
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-21 13:16:24 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
没有吧,在此之前我用3.3V来做参考电压,得到的数据不正确的,后来用电压表测试了一下参考电压为3.05V,得到的数据就正确了。。应该用DC供电的话,Vref足3.3V,那么数据应该正确的。。。。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-21 14:16:36 | 显示全部楼层
回复【7楼】STM32初学菜鸟:
---------------------------------
贴代码
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

23

主题

81

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2013-10-28
在线时间
0 小时
 楼主| 发表于 2014-3-21 14:25:44 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
/*
内部温度传感器的计算公式:
T={(V25-Vsense)/Avg_Slope}+25
V25=1.43(典型值),最小是1.34,最大是1.52
Vsense:表示当前的电压值,小数
Avg_Slope=4.3mv/℃ (典型值),最小是4.0mv/℃,最大是4.6mv/℃
现在这个实验的测试时间为2014/3/16日,天气温度约为20℃,所以V25,Avg_Slope这两个数据不准确,这两个数据时在25℃的值。

要看看参考电压是不是3.3V,在我用USB供电使用的时候,实测参考电压是3.05V,所以设置参考电压为3.05V
*/
void ADC_Get_Sample_Voltage_Temp(void)
{
float adctmp=0,Temperature=0;
float Vsense=0,V25=1.43,Avg_Slope=0.0043,Vref=3.05;  //Vsense表示当前的电压

adctmp=(float)tem_adc_val.Sample*(Vref/4095);  //计算出实际的电压值,小数型的数据
Vsense=adctmp;  //Vsense:表示10进制的电压值,小数

tem_adc_val.Voltage_Int=adctmp;             //只是把整数位赋给tem_adc_val.Voltage_Int
tem_adc_val.Voltage_Dec=(adctmp-tem_adc_val.Voltage_Int)*1000;      //把小数部分扩大1000倍

Temperature=((V25-Vsense)/Avg_Slope)+25;  //获取当前的温度值。
tem_adc_val.Temperature_Int=Temperature;   //计算出温度值(小数型的)赋给u8的整数,得到整数部分
tem_adc_val.Temperature_Dec=(Temperature-tem_adc_val.Temperature_Int)*100;   //小数部分扩大100倍
}
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-21 15:59:02 | 显示全部楼层
回复【9楼】STM32初学菜鸟:
---------------------------------
adctmp=(float)tem_adc_val.Sample*(Vref/4095);这里是除以4096的吧

下面是我的计算

void Int_Temperature(uint8_t *Temp_dis)
{
float tem;
float Temperature;
u16 adcx;

adcx = ADC_Average_Value(INTCH_ADC_TEMP,10);    //得到10采样平均值
tem = (float)adcx*(3.3 / 4096);

Temperature = (float)(1.43 - tem) / 0.0043 + 25;

sprintf((char*)Temp_dis,"Temp is:%04f",Temperature);
Temp_dis[13] = 0x27; //'
Temp_dis[14] = 0x43; //C

// return((float)(1.43 - tem) / 0.0043 + 25);
}
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 09:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表