这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32F4 ADC之内部温度传感器【库函数操作】

共6条 1/1 1 跳转至

STM32F4 ADC之内部温度传感器【库函数操作】

高工
2013-06-01 13:30:39     打赏

测量芯片周围的环境温度用。这个温度传感器输出的电压与温度成一定比例,获取温度基本就是用ADC测量这个电压。

在芯片内部,温度传感器与ADC1的CH16相连。当不使用改传感器时,可将其设置为PowerDown模式以省电。

主要特性:

测温范围:-45~+125摄氏度

测温精度:±1.5摄氏度

使用步骤:

1、选择ADC1 CH16作为ADC的输入

2、设置采样时间

3、设置ADC1寄存器ADC_CCR的TSVREFE位,将温度传感器从PowerDown模式唤醒。

4、开始ADC转换

5、读取转换值Value并换算成电压Vsense,Vsense = Value×3300/4096  (mV)

6、计算温度。

温度计算公式:Temp = ((Vsense - V25)/Avg_Slope)+25

V25是Vsense 在25度时候的值,Avg_Slope 是温度转换率。这两个值可在datasheet里边查到。

V25 = 0.76V   Avg_Slope = 2.5 mV/°C

Temp = (Vsense– 760)/2500 + 25;

【代码实现】

首先,唤醒温度传感器:

ADC_TempSensorVrefintCmd(ENABLE);

将上一程序的4通道,改为16通道:

ADC_RegularChannelConfig(ADC1,ADC_Channel_16,4,ADC_SampleTime_144Cycles);

读取这个转换的值,用上边公式计算即可:

aa = adcvalue[i]-760;
printf("当前温度是: %f摄氏度 \n",(aa)/2.5+25);
printf("%d\r\n",adcvalue[i]);

这里要注意数据类型,adcvalue定义的是uint16_t的,是无符号数。

 

这里能读出温度了,但是还有点问题:温度不准,夜里读出的温度竟然有68度,我乖乖还活不了。不知道是片子工作久了内部温度高还是我的计算有错误。

但是这个温度确实是随着温度的变化而变化的,板子断电一会温度就下降了,但还是不准




关键词: STM32F4     内部     温度     传感器     函数     操作    

菜鸟
2014-09-18 13:14:03     打赏
2楼
因为它采集的是片内温度,和实际存在误差是必然的,还有楼主仔细看看datasheet看看这个温度计算方式是否正确,我记得是负温度系数的

院士
2014-09-18 19:33:09     打赏
3楼

这个本身就不准,官方也建议使用温度差来使用。

并不推荐使用单一值。


专家
2014-09-19 08:46:58     打赏
4楼
一定是不准的,我测试过,这个温度值随着单片机运行功耗的增加而剧增,不信可以监测一下看看

专家
2014-09-19 08:51:15     打赏
5楼
芯片内部温度嘛,正常。

高工
2014-09-23 19:19:00     打赏
6楼
很久的帖子了  又被你们挖出来了

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]