double ntc_temp_trans(uint16_t ADC_value)
{
double temp;
//数据进入前,可先做滤波处理
double Rt = 0; //NTC电阻
double Rb = 0; //并电阻
double R = 29.9; //B值最小温度值对应的电阻值
double T0 = 273.15+150; //转换为开尔文温度
double B = 5300; //B值
double Ka = 273.15; //K值
double VR = 0; //电压值
VR=(double) ((double)ADC_value/4096.0*3.3); //转换成电压值
Rb=(3.3-VR)*10/VR; //计算并电阻Rb
Rt = Rb*2200.0/(2200.0-Rb); //计算NTC电阻Rt
if( Rt>= NTC_B_MIN && Rt<=NTC_B_MAX ){
temp=1.0/(1.0/T0+log(Rt/R)/B)-Ka+0.5; //计算温度
}
else{
if( Rt<ntc_res_list[NTC_RES_MAX-1] ){
return 300*100;
}
else if( Rt>ntc_res_list[0] ){
return 0;
}
else{
uint16_t m;
m = ntc_res_serch(Rt);
if( m<150 ){
temp = m + (ntc_res_list[m]-Rt)/(ntc_res_list[m-1]-ntc_res_list[m]);
}
else{
temp = 250 + (m-149) + (ntc_res_list[m]-Rt)/(ntc_res_list[m-1]-ntc_res_list[m]);
}
}
}
return temp*100;
}
混合使用公式法与查表法计算NTC温度,在B值范围内使用公式法,范围外使用查表法,M4主频80M,公式法最大时间94us,查表法最大时间147us,得益于M4的DSP指令集,公式法计算时间比查表法还快50us,即使查表法使用了对半搜索算法