最近在做一个智能电饭锅的程序,由于具有炒菜功能,所以需要处理的温度范围要求比较宽,需要从0~230度,AD是12位的,但是用12位的处理这个温度范围,会导致有的区间出现同一个AD值对应不同温度的情况。所以在这里想问问各位,在不增加AD位数的情况下,怎么来处理同一个AD值对应不同温度的情况,采用的是查表法,表里面存的是各个温度对应的AD值。假如出现500这个AD值对应51~55度,即51~55度对应的AD值都是500,这个时候应该怎么来处理温度显示问题?各位有懂的么,希望指教下!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
參考看看!! 我使用 10K NTC 讀取0~100度
unsigned const int tempresist[]={28709,27421,26200,25042,23943,22899,21908, 20967, 20072, 19221, 18412, 17642, 16910,16213, 15549,14916,14314,13740,13192,12670,12172, 11696,11243, 10809, 10395,10000,9622,9261, 8916, 8585, 8269, 7967,7677,7400,7135,
6880, 6637, 6403, 6179, 5964, 5758, 5561, 5371, 5189, 5014, 4846, 4685, 4530, 4381, 4238, 4101, 3968, 3841, 3719,
3601, 3487, 3378, 3273, 3172, 3074, 2980, 2890, 2803, 2718, 2637, 2559, 2483, 2411, 2340, 2272, 2207, 2144, 2082, 2023, 1966, 1911, 1858, 1807, 1757, 1709, 1662, 1617, 1573, 1531, 1491, 1451, 1413,
1376, 1340, 1305, 1271, 1239, 1207, 1177, 1147, 1118, 1090, 1063,1037, 1011,987,963,939,917,895,874,853,833,813,794,776,758
};//b值3435 25度 10k NTC電阻=((1024count/NTCcount)-1)/10k
unsigned char Compare_tempres(unsigned int TR)//電阻查表成為溫度
{
unsigned char cmp_cnt;
cmp_cnt =0;
while (TR<tempresist[cmp_cnt])
{
cmp_cnt++;
if (cmp_cnt>140)
break;
}
return cmp_cnt;
}
void ADC_Temperature(void)
{
NTCvalue=NTCresist();//溫度AD值轉換成溫度電阻
Degree_C = Compare_tempres(NTCvalue);//溫度電阻查表成溫度值
Degree_0C= ((tempresist[Degree_C-1]-NTCvalue)*10)/(tempresist[Degree_C-1]-tempresist[Degree_C]);//差分成小數
}
一周热门 更多>