有2种解法:上拉NTC,和下拉NTC。自己根据实际情况决定。然后就是AD计算NTC的电阻值。再带入公式计算。
#include "use.h"
#include "Ver.H"
#include <math.h>
#define K_TEMP (273.15)
#define NTC_R1 (10) //25°C时的电阻值(10K)
#define NTC_T1 (25+K_TEMP) //温度值
#define NTC_B (3900) //B值
#define Rm (10) //标准电阻值(单位k)
//*************************************************************************
extern float CountAD(unsigned char ch);
extern void UpPower (unsigned int flag);
extern void DownPower(unsigned int flag);
extern void Get_U_AD(void);
/*************************************************************************
B=(ln(r1)-ln(r2))/(1/t1-1/t2) t1=25c-->[273.15+25c]
1/t2=1/t1-(ln(r1)-ln(r2))/B
**************************************************************************/
float Count_NTC(float NTC_R2){
float i,j,r1,r2;
r1=log(NTC_R1);
r2=log(NTC_R2);
j=(r1-r2)/NTC_B;
i=1/NTC_T1-j;
j=1/i-K_TEMP;
return (j);
}
//****************************************************************************
//计算温度值 //得到电压值//单位mv
//****************************************************************************
float NTC_GetTemp_Do(float u1){
float i1,r2;
if(u1 !=0){
Err.T_r=0;
i1=((float)MAX_U_REF-u1)/Rm; //得到电流
r2=u1/i1; //计算电阻
u1=Mp1.Cb+Count_NTC(r2)+CBK;;
if(fabs(u1-LedMenu.C) >0.25) LedMenu.C=u1;
if(LedMenu.C > MAX_TH){ LedMenu.B=0; Err.T_r=1; }
if(LedMenu.C < MIN_TL){ LedMenu.B=0; Err.T_r=2; }
}else{
Err.T_r=3;
}
return LedMenu.C;
}
|