NTC热敏电阻查表法读取温度

NTC热敏电阻查表法读取温度


前言

本文介绍一种查表法读取热敏电阻的方法



#define TEM_NUM 181

/* 
温度参数表:
分别对应着热电偶从 -55度到125度的电阻值 
*/
float const temp1212[TEM_NUM]={
1034.600,959.006,889.452,825.419,766.434,712.066,661.926,615.656,572.934,533.466,
 496.983,463.240,432.015,403.104,376.320,351.495,328.472,307.110,287.279,268.859,
 251.741,235.826,221.021,207.242,194.412,182.460,171.320,160.932,151.241,142.196,
 133.750,125.859,118.485,111.589,105.139, 99.102, 93.450, 88.156, 83.195, 78.544,
  74.183, 70.091, 66.250, 62.643, 59.255, 56.071, 53.078, 50.263, 47.614, 45.121,
  42.774, 40.563, 38.480, 36.517, 34.665, 32.919, 31.270, 29.715, 28.246, 26.858,
  25.547, 24.307, 23.135, 22.026, 20.977, 19.987, 19.044, 18.154, 17.310, 16.510,
  15.752, 15.034, 14.352, 13.705, 13.090, 12.507, 11.953, 11.427, 10.927, 10.452,
  10.000,  9.570,  9.161,  8.771,  8.401,  8.048,  7.712,  7.391,  7.086,  6.795,
   6.518,  6.254,  6.001,  5.761,  5.531,  5.311,  5.102,  4.902,  4.710,  4.528,
   4.353,  4.186,  4.026,  3.874,  3.728,  3.588,  3.454,  3.326,  3.203,  3.085,
   2.973,  2.865,  2.761,  2.662,  2.567,  2.476,  2.388,  2.304,  2.223,  2.146,
   2.072,  2.000,  1.932,  1.866,  1.803,  1.742,  1.684,  1.627,  1.573,  1.521,
   1.471,  1.423,  1.377,  1.332,  1.289,  1.248,  1.208,  1.170,  1.133,  1.097,
   1.063,  1.030,  0.998,  0.968,  0.938,  0.909,  0.882,  0.855,  0.829,  0.805,
   0.781,  0.758,  0.735,  0.714,  0.693,  0.673,  0.653,  0.635,  0.616,  0.599,
   0.582,  0.565,  0.550,  0.534,  0.519,  0.505,  0.491,  0.478,  0.465,  0.452,
   0.440,  0.428,  0.416,  0.405,  0.395,  0.384,  0.374,  0.364,  0.355,  0.345,
   0.337 
};


/*
说明:
使用3.3V供电,热电偶的分压电阻为2.2K,单片机ADC为12位转换,读取到的ADC的值为 value_ADC
据此计算出 热电偶阻值为 value_R=(2.2*value_ADC)/(0xFFF-value_ADC);
*/

/* 温度计算函数: */
int get_temp(void)
{
	uint16_t value_ADC = 0;        	//读取到的ADC的值 
	float value_R = 0;   			//计算出当前的热电偶阻值       
	
	value_ADC = readADC();
	if (value_ADC>4095)
	{
		return 127;   // 表示温度读取出错
	}	
	
	value_R = (2.2*value_ADC)/(0xFFF-value_ADC);
	/* 人为限定读取温度范围必须在 -50~120 摄氏度之间 */
	if (value_R > 712.066)
	{
		return 127;   // 表示温度读取低于最小读取范围 (-50摄氏度)
	}
	if (value_R < 0.384)
	{
		return 127;   // 表示温度读取高于最大读取范围 (120摄氏度)
	}	

	float value_R_temp;
	int temp;  
	for(uint8_t i = 0;i < TEM_NUM;i++)
	{
		value_R_temp = (temp1212[i]+temp1212[i+1])/2;
		if(value_R_temp < value_R)
		{
			temp = i-54;
			return temp;             //温度
		}
	}
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值