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; //温度
}
}
}