在嵌入式产品中,温度检测非常常见。在成本比较敏感而精度要求较低时,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负温度系数热电阻测温驱动相关推荐

  1. 外设驱动库开发笔记38:RTD热电阻测温驱动

      我们已经讨论过多种温度检测方式,但我们尚未关注热电阻温度检测,但热电阻测温在工业环境中是非常常见的.尽管有很多集成的数字式的热电阻接口元器件,但这些器件不但成本较高,灵活性也大打折扣.所以我们有时 ...

  2. 外设驱动库开发笔记53:MAX31856热偶变送器驱动

      在我们的产品中经常有需要温度检测的地方,而热电偶温度检测电路是我们常用的.热电偶温度检测的方法很多,有时出于简单方便的考虑我们会选择热偶温度变送器来实现,这一篇我们就来讨论使用MAX31856热电 ...

  3. 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求.ADXL345三轴数字加速度计可以用来检测加速度.进而测量倾斜角度等.在这一篇中,我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现. ...

  4. 外设驱动库开发笔记37:S1336-5BQ光敏二极管作为光度计驱动

      光敏二极管能够实现很多应用,用于光度检测即是其一.我们在一些产品中就曾使用S1336-5BQ光敏二极管进行光度值检测.所以在本篇中,我们将讨论如何设计并实现S1336-5BQ光敏二极管用于光度检测 ...

  5. 外设驱动库开发笔记46:MAX31855热偶变送器驱动

      一些时候,我们需要通过热电偶获取温度数据.在这里我们将讨论如何实现并使用MAX31855热电偶温度便送去的驱动问题. 1.功能概述   MAX31855是具有冷端补偿,能将K.J.N.T或E型热电 ...

  6. 外设驱动库开发笔记15:DHT11温湿度传感器驱动

    与DS18B20一样DHT11也是采用单总线,但所不同的是DHT11可同时实现温度和湿度的检测.在我们的产品中经常使用它来检测环境的温湿度信息.这一篇我们将设计并封装DHT11的驱动程序,以方便重复使 ...

  7. 外设驱动库开发笔记0:EPD总体设计

    在产品开发过程中,不可避免需要使用很多外部的元件及传感器,这些元器件也许是板载的,也许是板外的,但不管怎样,为其开发驱动程序都是必须的.每次都需要为这些元器件编写驱动程序.但每次重复编写调试很麻烦,于 ...

  8. 外设驱动库开发笔记34:OLED显示屏驱动

      现在OLED显示屏在嵌入式系统中应用的越来越多.对于一些显示信息不太复杂,以显示信息为主的需求,我们一般会选择OLED显示屏.在这一篇中,我们将讨论OLED显示屏驱动的设计与实现. 1.功能概述 ...

  9. 外设驱动库开发笔记16:MS5536C压力变送器驱动

    压力检测也是经常会遇到的需求,比如环境压力或者低压气体等都会用到压力检测.这类检测压力都比较低,一般不会超过大气压,有时甚至是负压.这一篇我们要讨论的MS5536C就属于这类器件.接下来我们将设计并实 ...

最新文章

  1. pip如何安装whl
  2. random输出1到10之间_第43P,随机数,Python内置库之random
  3. django-celery
  4. 在安装keepalived出现问题:需要:libmysqlclient.so.18
  5. 请教Nutzwk项目,在beetl页面怎么用shiro标签呢?
  6. c语言toupper_在C中使用toupper()–实用指南
  7. Cadence, Orcad 教程
  8. 【LAMMPS系列】LAMMPS软件安装资料包
  9. ★★★5230打字慢的解决方法...绝对有用...只需要在手机上轻微的设置一下(转)...
  10. 怎样自制微信gif动态表情包?
  11. 【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
  12. 送书!我觉得说啥都不如送几本新书
  13. uni-app学习 style样式和三元运算符用法(三)
  14. css3直线运动_css3动画--边框线条动画
  15. 初试401 英语86分上岸苏州大学经验分享
  16. Mysql创建Create Function
  17. FCM 模糊C均值聚类算法
  18. 上海交大校长张杰院士:大学,重新定义你的人生
  19. 蒂森调试软件Tcm manager ,mc1-mc2系统,电脑端,可以调试蒂森电梯程序
  20. VS2019之wpf开发环境配置(非常详细)

热门文章

  1. NPOI “发现 中的部分内容有问题,是否要恢复此工作薄的内容?如果信任此工作薄的来源。。。”的问题的解决方法...
  2. day24 反射\元类
  3. k8s 基础概念和术语
  4. ubuntu-18.04 修改用户名密码
  5. CVTE前端笔试编程题
  6. 有用的Python模块 - pprint
  7. linux处置服务Iptables
  8. 牛客网--单词倒排(Java)
  9. 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
  10. 行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)