概述
NTC作为一种负温度系数热敏电阻,其阻值随温度升高而降低。利用热敏电阻的特性可以做温度传感器检测温度应用在单片机中。下面简单介绍下,在单片机中AD检测热敏电阻电压值,然后转换成电阻值,求出当前的实际温度。
一、热敏电阻公式
NTC 热敏电阻温度计算公式:Rt = R *EXP(B*(1/T1-1/T2))
其中,T1和T2指的是K度,即开尔文温度。
Rt 是热敏电阻在T1温度下的阻值。
R是热敏电阻在T2常温下的标称阻值。100K的热敏电阻25℃的值为100K(即R=100K)。T2=(273.15+25)
EXP是e的n次方
B值是热敏电阻的重要参数
通过转换可以得到温度T1与电阻Rt的关系T1=1/(ln(Rt/R)/B+1/T2) (所以对应只有一个Rt未知数即可求出T1实时温度)
对应的摄氏温度t=T1-273.15,同时+0.5的误差矫正。
二、硬件连接方式
单片机通过ADC检测热敏电阻电压值,或者相关分压值。一般在热敏电阻上串联与Rt阻值相同的分压电阻。因为计算T1公式中需要知道Rt/R的比值关系,所以在这样的串联分压电路时电阻比值即等于电压比值,不需要将测得电压值再换算成电阻值。具体电路图如下:
图中的检测电压是测分压电阻R3的,一般来说直接测RTC更为直观。R2由于单片机IO的高阻态等设置,R2上相当于开路,所以测得电压可以当作为R3上的电压。
三、程序实现
ADC获取过程就不再赘述了,相关程序可以在前一篇博客中查看,我这边直接将获取了相应温度后如何处理程序展示下:
uint16_t TempValue_Calculate( float TempADCValue )
{
float TempValue = 0;
float res_proportion = (vdd_value-TempADCValue)/TempADCValue;
//电阻比值相当于电压比值,根据电路图计算,
TempValue = 1.0/( (log(res_proportion))/3950.0 + 1.0/(273.15+25.0) ) - 273.15;
//JlinkPrintf("current temp is %.2frn,", TempValue);
return (uint16_t)TempValue;
} // vdd_value为内部电压值,TempADCValue为对应AD检测的电压值(在这边是电路图中的R3电压)
补充下知识点:
数学中的公式和c语言中有小小的区别。
1、数学中
log是对数符号,右边写真数和底数(上面是真数,下面是底数)
lg是以10为底数(例lg100=2)(lg为常用对数)
ln是以e为底数(lne2=2)(ln为自然对数 e=2.7182818284590452353602874713527...)
2、c语言中
c语言里面只有两个函数log和log10
其中
函数 log(x) 表示是以e为底的自然对数,即 ln(x)
函数 log10(x) 以10为底的对数,即 lg(x)
以其它数为底的对数用换底公式来表示
函数如下:
double logab(double a,double b)
{
return log(b)/log(a);
}
最后
以上就是欣喜小伙为你收集整理的NTC负温度系数的热敏电阻——通过ADC检测计算出相应温度值的全部内容,希望文章能够帮你解决NTC负温度系数的热敏电阻——通过ADC检测计算出相应温度值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复