请教下高手用单片机的AD+NTC热敏电阻做温度计,能不能用单片机计算出取样到的温度值来显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教下高手用单片机的AD+NTC热敏电阻做温度计,能不能用单片机计算出取样到的温度值来显示相关的知识,希望对你有一定的参考价值。

我看过网上有些说NTC非线性会出现误差的,所以用查表。但NTC也有线性的呀,用线性的应该不用查表吧?我做得只是一般整数温度计,不用显示小数的。相差一两度也没问题的。

非线性的就不能用公式直接计算了,只能使用查表得办法,先预先测量NTC在不同温度时输出的电压值(即ADC转换得到的数据)是多少,做点修正后作为表格存储在单片机中,这样在测量未知温度的时候,根据查表数据推算出测量温度的真实值。追问

现在也有线性NTC的吧,能不能用线性的NTC来计算,查表占储存空间呀!谢谢

追答

线性的就非常好办了!只要得到温度和电压之间的公式即可,不用查表,哈哈!我喜欢线性的。

追问

请问下具体公式是怎么样的呢,?还有如果是零下的,负数的应该要怎么写好呢?

追答

这就不清楚了,不同型号的,计算方法就不一样吧,比如有的是1Ω/1℃,有的是10Ω/℃,根据实际情况来计算了。

对于零下温度的,我想处理方法是一样吧,比如器件在0℃时电阻是100Ω,10℃时是120Ω,-10℃时是80Ω。所以将100欧姆作为0℃时的数值,小于100的就是零下的了。

参考技术A 信号进行ad转换,根据你需要的精度ad用8位或12位的,单片机再做查表程序。 参考技术B 假设1.55v=30.0度 AD值=7FH

3.00V=59.5度 AD值=0FFH

假如某次读取的A/D值是:5FH

温度=(5FH*59.5)/FFH追问

如果是零下的,就是负的也能算出来吧,谢谢你超快的解答。

参考资料:百度一下

调试备忘录-NTC电阻的使用(教程 + 代码)

软件环境:CodeWarrior 11.1

硬件环境:NXP S9KEAZ64A

传感器参数:NTC热敏电阻(R25 = 50k,B25-50 3950) 

写在前面

  最近做小项目需要用到NTC电阻,因此写一个调试备忘录记录下。

什么是NTC电阻?

  NTC热敏电阻就是负温度系数的电阻,当温度升高时,电阻降低(反之则为PTC电阻)。NTC电阻灵敏度高,温度分辨率高,但

是测量温度范围较窄,通常低于100摄氏度。

NTC电阻与温度之间的关系

  NTC热敏电阻温度和电阻关系最常见的公式就是如下图基于参数“β”的指数公式,公式比较简单,也是非常常用的公式。(其中的

β,有些资料也称为B) 

技术图片

  其中,

  技术图片

 

  因此,如果知道了RT2 、T2和B的值,就可以计算出任意温度下NTC热敏电阻的阻值,或者计算出任意NTC热敏电阻阻值对应的温

度值。常规应用中,厂家一般会给出T=298.15k下的阻值和B值,不同型号的NTC热敏电阻其参数也是不同。

 

 

NTC电阻的实际应用

  在购买使用NTC电阻之前,我们需要先确认NTC电阻在25℃的阻值,然后设计温度采样电路。可以先和商家确认热敏电阻的阻值表。

例如:下表部分阻值表的截图,其中的R25=15KΩ就是热敏电阻在25℃时候的阻值,B25/50就是25℃-50℃时候的B值。

技术图片

  因此如果我想检测温度的话,直接将检测到的电阻值带入上面的公式,就可以得到当前的温度了。

 

 

  当然,如果你检测区间不在25℃-50℃,你也可以自己将阻值表里面的数据,带入公式中,得出你目标区间的B值,进而在一定区间内比较精准的检测温度。

  对于NTC热敏电阻的检测电路,直接使用最简单的分压电路就可以了。如下图:

                                                                                技术图片

RT1阻值的计算方法为:R = (adc_value * 20 * 1.0 /  (adc_all - adc_value))  ;

  其中,adc_all 为你的ADC采样精度,例如8位精度就是0xFF,adc_value为你的ADC实际采样值,20为电路中的分压电阻,20K。1.0是为了确保有小数结果。

所以最终的温度为:

ADC_Channel_Vlaue = ADC_Read(ch);					//Read ADC value from channel n 
R = (20 * ADC_Channel_Vlaue * 1.0 /(255 - ADC_Channel_Vlaue));		//8位精度
Temperature1_Value = 1/ (log( R / R25 )  / B + 1 / (273.15 + 25));
Temperature1_Value = Temperature1_Value - 273.15;


Temperature1_Value 为最终的温度。

附上函数的全部代码

float Temperature_Measurement(UINT8 ch)
{
	UINT8 Temperature_Counter = 0; 
	UINT8 ADC_Channel_Vlaue = 0;
	float Temperature1_Value;	
	float Temperature1_Sum_Value = 0;
	float Temperature1_Average_Value = 0;
	float R25 = 50;
	float R = 0;
	float B = 3950;
	
	while(Temperature_Counter<100)
	{
		Temperature_Counter++;
		ADC_Channel_Vlaue = ADC_Read(ch);		          //Read ADC value from channel n 
		R = (20 * ADC_Channel_Vlaue * 1.0 /(255 - ADC_Channel_Vlaue));	 //
		Temperature1_Value = 1/ (log( R / R25 )  / B + 1 / (273.15 + 25));
		Temperature1_Value = Temperature1_Value - 273.15;
		Temperature1_Sum_Value = Temperature1_Sum_Value + Temperature1_Value;	
		ADC_SC1 = 0	;						
	}		
	
	Temperature1_Average_Value = Temperature1_Sum_Value / Temperature_Counter;	
	
	return (Temperature1_Average_Value);	
}

  

 

 

 

 

 

 

 

 

 

以上是关于请教下高手用单片机的AD+NTC热敏电阻做温度计,能不能用单片机计算出取样到的温度值来显示的主要内容,如果未能解决你的问题,请参考以下文章

单片机测温,用NTC,那个NTC表格是怎么得出来的?

单片机 热敏电阻测温

NTC热敏电阻目前常用的采用电桥和单片机测量方法

温度传感器的AD值,电压和电阻的计算方法

怎样写用热敏电阻测温度的程序?我用单片机AD测的热敏电阻的AD值,怎样把数字量转换成温度?急求。

调试备忘录-NTC电阻的使用(教程 + 代码)