我也做过类项目,通过电压、电流关系、计算出电阻值,然后再用公式计算得到温度:
限流电阻100K
//***********************************************
//设计人:洋洋
//日期:2017.05.22
//版本:V1.1
//函数功能:求电阻值函数
//入口参数:无
//出口参数:电阻值,单位为KΩ
//备 注:
//************************************************
float ResCalculate(void)
{
float Value_Res = 0.0;//电阻值,单位为KΩ
float Average_Code = 0;
Average_Code = (float)Get_Adc(5); //获取AD值
Value_Res = 100000 * Average_Code / (4095.0-Average_Code); //换算电阻值,限流电阻100000欧姆
return Value_Res;
}
//设计人:洋洋
//日期:2017.05.22
//版本:V1.1
//函数功能:求NTC热敏电阻的温度值
//入口参数:电阻值,单位为KΩ
//出口参数:摄氏度
//备 注:
//NTC热敏电阻温度计算公式:
//Rt = R *EXP(B*(1/T1-1/T2))
//这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;其中T2=(273.15+25)
//Rt:是热敏电阻在T1温度下的阻值;
//R:是热敏电阻在T2常温下的标称阻值;
//B:值是热敏电阻的重要参数;
//EXP是e的n次方;
//求:T1 =1/(ln(Rt/R)/B+1/T2)
//程序:
//
const float Rp =10000.0; //10K
const float T2 = (273.15+25.0); //T2
const float Bx = 3950.0; //B
const float Ka = 273.15;
float Get_Temp(float Value_Res) //温度计算公式
{
float Rt;
float temp;
Rt = Value_Res;
//like this R=5000, T2=273.15+25,B=3470, RT=5000*EXP(3470*(1/T1-1/(273.15+25)),
temp = Rt/Rp;
temp = log(temp); //ln(Rt/Rp)
temp /= Bx; //ln(Rt/Rp)/B
temp += (1/T2);
temp = 1/(temp); //开尔文温度
temp -= Ka; //摄氏度
return temp;
}
//END
|