外设驱动库开发笔记36:NTC负温度系数热电阻测温驱动
在嵌入式产品中,温度检测非常常见。在成本比较敏感而精度要求较低时,NTC电阻是个不错的选择。在这一篇中,我们将讨论如何和设计并实现一个通用的NTC驱动,以便在后续的项目中更方便的复用。
1、功能概述
NTC是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。NTC热敏电阻是以锰、铜、硅、鈷、铁、镍、锌等金属氧化物为主要材料,采用陶瓷工艺制造而成的,其电阻率和材料常数随材料成分比例、烧结气氛,烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。因此,在实现小型化的同时,还具有电阻值、温度特性波动小、对各种温度变化响应快的特点,可进行高灵敏度、高精度的检测。
NTC 热敏电阻是一种典型具有温度敏感性的半导体电阻。根据标准IEC 60539-1的规定,NTC的电阻与温度存在如下关系曲线:
对于NTC的这种电阻与温度的关系也可以使用近似的舒徐公式来表示:
其中,R是在绝对温度T时,NTC的零功率电阻。Ra是在绝对温度Ta时,NTC的零功率电阻。
B值是负温度系数热敏电阻器的热敏常数,每种既定的材料都只有一个B值。B值可以通过测量在25摄氏度和50摄氏度(或85摄氏度)时的电阻值后进行计算。B值与产品电阻温度系数正相关,也就是说B值越大,其电阻温度系数也就越大。
2、驱动设计与实现
NTC作为测温元件的原理我们已经明白了,在此基础上我们就可以来实现其测温的驱动程序。
2.1、对象定义
我们依然是将NTC当作一个对象,首先定义其对象类型。对于不同的NTC有三个参数是与其自身紧密相关的,或者说一旦制造就不会更改的。那就是B值、标称温度与标称电阻。B值与材质有关,标称温度通常定为25摄氏度,标称电阻则为标称温度下的电阻。所以我们定义NTC对象类型为:
/* 定义NTC电阻测温对象 */
typedef struct NTCObject{float BValue; //NTC的B常数float nominalT; //NTC标称温度(摄氏度)float nominalR; //NTC标称电阻
}NTCObjectType;
在一个对象使用之前必须对其实现初始化配置。主要是对指针进行检查及对属性变量和操作指针进行赋值。
/* NTC对象初始化函数 */
void NTCInitialization(NTCObjectType *ntc,float bValue,float nt,float nr)
{if(ntc==NULL){return;}ntc->BValue=bValue;ntc->nominalT=nt;ntc->nominalR=nr;
}
2.2、对象操作
在我们实现了对象的定义和初始化之后,我们就可以操作对象来得到温度值。那么如何操作对象得到温度值呢?我们前面已经提到过,NTC是一种随温度上升时,电阻值呈指数关系减小的热敏电阻。而这种指数关系就是我们前面提到的电阻与温度的关系表达式。于是我们就可以根据这一表达式推导出有电阻计算温度的公式:
根据以上公式我们可以通过检测电阻来计算温度:
/*公式法计算NTC温度值*/
float NTCTemperature(NTCObjectType *ntc,float resistance)
{float temp;float result=0.0;result=resistance/ntc->nominalR;result=(log(result)/ntc->nominalR)+(1/(ntc->nominalT+KELVIN_CONSTANT));temp=1/result-KELVIN_CONSTANT;return temp;
}
3、驱动的使用
接下来使用我们前面开发的驱动来实现NTC检测温度。首先需要使用NTCObjectType对象类型声明NTC对象变量。
NTCObjectType ntc;
这个对象变量必须初始化才能使用。所以我们采用初始化函数对这个变量进行初始化:
NTCInitialization(&ntc,bValue,nt,nr);
如果是有多个NTC对象可以使用数组等方式来处理。初始化完成后我们就可以操作该对象了。我们通常会采用一个电桥电路来检测NTC电阻,以测量当前的温度。电路图如下:
上图中我们通过一个电桥来采集NTC电阻的变化,因为电阻的变化会引起C17两端电压的变化。温度越高NTC电阻越小,C17两端电压差就越大,反之越小。我们采用了25摄氏度时,阻值为10K的NTC。不难推断出输出电压与NTC电阻值的关系。当输出电压为0V时,电阻约25K,查表可知温度为5摄氏度左右。当输出电压为5V时,电阻值接近0,查表可知在100摄氏度以上。这也便是这个电路的理论测量范围。
我们检测到当前的电阻后,调用NTCTemperature(NTCObjectType *ntc,float resistance);函数来计算对应的温度值。
4、应用总结
使用NTC作为测温和控温的元件所得到的结果基本与预期的一致。但在控温的精度和响应速度上略有不足,对于一般的应用是完全足够的。在要求较高的场合我们也可以通过软件提高控温精度。
使用NTC作为测温元件需要注意,由于阻值与温度的非线性,而我们解非线性方程可能会造成较大误差,所以测温有时候会有较大的误差。而且NTC的测温范围很有限,所以使用是需要考虑这个问题。同时NTC存在较大的个体差异。当然作为一般的应用这些都不是问题。
欢迎关注:
外设驱动库开发笔记36:NTC负温度系数热电阻测温驱动相关推荐
- 外设驱动库开发笔记38:RTD热电阻测温驱动
我们已经讨论过多种温度检测方式,但我们尚未关注热电阻温度检测,但热电阻测温在工业环境中是非常常见的.尽管有很多集成的数字式的热电阻接口元器件,但这些器件不但成本较高,灵活性也大打折扣.所以我们有时 ...
- 外设驱动库开发笔记53:MAX31856热偶变送器驱动
在我们的产品中经常有需要温度检测的地方,而热电偶温度检测电路是我们常用的.热电偶温度检测的方法很多,有时出于简单方便的考虑我们会选择热偶温度变送器来实现,这一篇我们就来讨论使用MAX31856热电 ...
- 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动
移动设备的广泛应用增加对移动过程中各种参数的检测需求.ADXL345三轴数字加速度计可以用来检测加速度.进而测量倾斜角度等.在这一篇中,我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现. ...
- 外设驱动库开发笔记37:S1336-5BQ光敏二极管作为光度计驱动
光敏二极管能够实现很多应用,用于光度检测即是其一.我们在一些产品中就曾使用S1336-5BQ光敏二极管进行光度值检测.所以在本篇中,我们将讨论如何设计并实现S1336-5BQ光敏二极管用于光度检测 ...
- 外设驱动库开发笔记46:MAX31855热偶变送器驱动
一些时候,我们需要通过热电偶获取温度数据.在这里我们将讨论如何实现并使用MAX31855热电偶温度便送去的驱动问题. 1.功能概述 MAX31855是具有冷端补偿,能将K.J.N.T或E型热电 ...
- 外设驱动库开发笔记15:DHT11温湿度传感器驱动
与DS18B20一样DHT11也是采用单总线,但所不同的是DHT11可同时实现温度和湿度的检测.在我们的产品中经常使用它来检测环境的温湿度信息.这一篇我们将设计并封装DHT11的驱动程序,以方便重复使 ...
- 外设驱动库开发笔记0:EPD总体设计
在产品开发过程中,不可避免需要使用很多外部的元件及传感器,这些元器件也许是板载的,也许是板外的,但不管怎样,为其开发驱动程序都是必须的.每次都需要为这些元器件编写驱动程序.但每次重复编写调试很麻烦,于 ...
- 外设驱动库开发笔记34:OLED显示屏驱动
现在OLED显示屏在嵌入式系统中应用的越来越多.对于一些显示信息不太复杂,以显示信息为主的需求,我们一般会选择OLED显示屏.在这一篇中,我们将讨论OLED显示屏驱动的设计与实现. 1.功能概述 ...
- 外设驱动库开发笔记16:MS5536C压力变送器驱动
压力检测也是经常会遇到的需求,比如环境压力或者低压气体等都会用到压力检测.这类检测压力都比较低,一般不会超过大气压,有时甚至是负压.这一篇我们要讨论的MS5536C就属于这类器件.接下来我们将设计并实 ...
最新文章
- pip如何安装whl
- random输出1到10之间_第43P,随机数,Python内置库之random
- django-celery
- 在安装keepalived出现问题:需要:libmysqlclient.so.18
- 请教Nutzwk项目,在beetl页面怎么用shiro标签呢?
- c语言toupper_在C中使用toupper()–实用指南
- Cadence, Orcad 教程
- 【LAMMPS系列】LAMMPS软件安装资料包
- ★★★5230打字慢的解决方法...绝对有用...只需要在手机上轻微的设置一下(转)...
- 怎样自制微信gif动态表情包?
- 【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
- 送书!我觉得说啥都不如送几本新书
- uni-app学习 style样式和三元运算符用法(三)
- css3直线运动_css3动画--边框线条动画
- 初试401 英语86分上岸苏州大学经验分享
- Mysql创建Create Function
- FCM 模糊C均值聚类算法
- 上海交大校长张杰院士:大学,重新定义你的人生
- 蒂森调试软件Tcm manager ,mc1-mc2系统,电脑端,可以调试蒂森电梯程序
- VS2019之wpf开发环境配置(非常详细)
热门文章
- NPOI “发现 中的部分内容有问题,是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法...
- day24 反射\元类
- k8s 基础概念和术语
- ubuntu-18.04 修改用户名密码
- CVTE前端笔试编程题
- 有用的Python模块 - pprint
- linux处置服务Iptables
- 牛客网--单词倒排(Java)
- 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
- 行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)