【STC32G应用】NTC测温还在用查表法?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

测温是单片机经常应用的一项功能,记得早期在学校用DS18B20这种单总线传感器,后面还有温湿度一体的传感器。后面到了一些应用领域,尤其是养殖和种植行业,NTC电阻这种方式还是更多一点。一个是价格相对便宜,再一个应用领域里基本都是分布式,传感器与控制器之间可能间距百米,NTC电阻就更有优势一点。


提示:以下是本篇文章正文内容,下面案例可供参考

一、NTC测温原理

NTC其实就是一个随温度变化的电阻,有正温度系数和负温度系数,以前51在做NTC测温的时候,通常会选择查表法来推算温度。查表法也就是把各个温度对应的NTC阻值组成一个数组,单片机计算出NTC阻值后,在数组中进行查找,找到对应的温度值。这种方式的优点是速度快,缺点就是误差比较大,尤其是数组数量越小,误差越大,数组数量多的话,又占用存储空间。

其实NTC还有另外一种测试的方式,就是通过公式进行推算。
NTC电阻有一个参数,B值。B值与NTC电阻的制作材料有关系。
NTC热敏电阻B值公式为:B=T1T2 Ln(RT1/RT2)/(T2-T1)

其中的B:NTC热敏电阻的B值,由厂家提供;RT1、RT2:热敏电阻在温度分别为T1、T2时的电阻值; T1、T2:绝对温标。

之前51查表法用的多,也有一个原因是通过公式来计算效率比较低,但是现在STC32G出来以后,计算量来说就并不是问题了。

二、NTC测温函数

代码如下(示例):

const float Rp=10000.0; //100K
const float T2 = (273.15+25.0);//T2
const float B0 = 3950.0;//B
const float B1 = 3435.0;//B
const float Ka = 273.15;

float Get_Temp(float Rt,float Bx)
{
    
    
    float temp;
    //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;
}

总结

通过公式来计算NTC阻值,相对来说更加精确。但是计算前和计算后一般还需要进行一些滤波操作,来让温度值更加平滑。

猜你喜欢

转载自blog.csdn.net/lunzilx/article/details/131888957
今日推荐