RTD热电阻测温的驱动设计与实现

我们已经讨论过多种温度检测方式,但我们尚未关注热电阻温度检测,但热电阻测温在工业环境中是非常常见的。尽管有很多集成的数字式的热电阻接口元器件,但这些器件不但成本较高,灵活性也大打折扣。所以我们有时会使用更简单灵活的电路来驱动rtd。而在这一篇中,我们将讨论如何设计并实现rtd热电阻测温的驱动。
1、功能概述  rtd热电阻是常用的测温元件。rtd的英文全称为“resistance temperature detector”,因此准确来说,它应该翻译为“电阻温度检测器”。rtd是一种特殊的电阻,其阻值会随着温度的升高而变大,随着温度的降低而减小。工业上利用它的这一特性进行温度测量,因此rtd也被俗称为“热电阻”。
  并不是所有的金属都适合做成rtd,符合这一特性的材料需要满足如下几个要求:
该金属的电阻值与温度变化能呈线性关系;该金属对温度的变化比较敏感,即单位温度变化引起的阻值变化(温度系数)比较大;该金属能够抵抗温度变化造成的疲劳,具有好的耐久性;  符合该要求的金属并不多,常见的rtd材料有:铂(pt)、镍(ni)和铜(cu)。对应的国家统一生产工业标准化热电阻有三种:wzp型铂电阻、wzc型铜热电阻和wzn型镍热电阻。
1.1、铂热电阻  铂电阻是我们常用的rtd,铂热电阻采用温度系数为3.885x10-3的元件,温度和电阻的关系表达式:
  在-200℃~0℃为:
在0℃~850℃为:
其中:rt温度为t℃时的电阻;r0是温度为0℃时的电阻。而各个系数均为常数:
  常数a=3.9083×10-3
  常数b=-5.775×10-7
  常数c=-4.183×10-12
  铂热电阻对应的测温范围是:-200℃~850℃。常见的型号pt50、pt100、pt200、pt500和pt1000等。名称中的数值表示热电阻在0℃下的标称电阻值。
1.2、铜热电阻  铜热电阻也是在工业上常用的rtd,铜热电阻采用温度系数为:4.28x10-3的元件。温度和电阻的关系表达式:
其中,rt是温度为t℃时的电阻,r0是温度为0℃时电阻,而各个系数长数的取值为:
  常数α=4.28x10-3
  常数β=-9.31x10-8
  常数γ=1.23x10-9
  铜热电阻对应的测温范围是:-50℃~150℃。而常见的分类型号有:cu50、cu100等。名称中的数值表示热电阻在0℃下的标称电阻值。
1.3、镍热电阻  另一种工业标准rtd则是镍热电阻。镍热电阻采用温度系数为6.17x10-3的元件。温度和电阻的关系表达式:
其中,rt是温度为t℃时的电阻,r0是温度为0℃时电阻,而各个系数长数的取值为:
  常数a=5.485x10-3
  常数b=6.65x10-6
  常数c=2.805x10-11
  镍电阻对应的测温范围是:-60℃~180℃。而常见的分类型号有:ni100、ni300、ni500等。名称中的数值表示热电阻在0℃下的标称电阻值。
2、驱动设计与实现  我们已经了解了rtd的特性,以及不同材质的rtd温度与点组的关系表达式。接下来我们就实现通过rtd检测温度的驱动。
2.1、对象定义  在实现rtd的驱动之前,我们依然需要抽象并定义rtd对象,并将其声明为对象类型。
2.1.1、对象的抽象  在实现对rtd的操作之前,我们先抽象rtd对象。每一个rtd对象都有几个共同的属性:标称电阻,温度和类型。类型就是前面所描述的三种,我们将其定义为枚举。对象的声明如下:
/* 定义rtd类型枚举 */typedef enum rtdcategory { wzp, wzc, wzn}rtdcategorytype;/* 定义rtd对象 */typedef struct rtdobject{ float nominalr; //rtd标称电阻 float temperature; //所测温度 rtdcategorytype type; //rtd类型}rtdobjecttype;2.1.2、对象的初始化  声明一个rtd对象后,仅仅只是声明了一个对象变量,在赋值之前尚不能使用。所以我们要使用初始化函数将其初始化之后才可使用。rtd对象的初始化函数如下:
/* 初始化rtd对象 */void rtdinitialization(rtdobjecttype *rtd,rtdcategorytype type,float nr){ if(rtd==null) { return; } rtd->type=type; rtd->nominalr=nr;}2.2、对象操作  前面我们已经提到了各类热电阻的电阻与温度的关系表达式。在这些表达式中,二次以上的项的系数其实是非常小的,所以在一般要求不高,温度变化不是很大的场合基本就是线性关系。所以我们将其简化为线性方程:
2.2.1、wzp铂电阻  铂电阻的温度与电阻的关系在0度以上和0度以下略有差别,但如果我们采用线性近似的话则是一样的。所以我们采用线性方程实现如下:
/* 计算铂电阻温度 */static float calcwzptemperature(rtdobjecttype *rtd,float rt){float temp=0.0;float a=0.0039083; temp=((rt/rtd->nominalr)-1.0)/a;rtd->temperature=temp; return temp;}2.2.2、wzc铜电阻  铜电阻的温度与电阻的关系表达式相对复杂,但好在高次项的影响相对较小,我们依然可以使用线性近似来实现它。
/* 计算铜电阻温度 */static float calcwzctemperature(rtdobjecttype *rtd,float rt){float temp=0.0;float alpha=0.00428; temp=((rt/rtd->nominalr)-1.0)/alpha;rtd->temperature=temp; return temp;}2.2.3、wzn镍电阻  镍电阻的电阻温度系数比铂电阻和铜电阻都要好,但其线性度则不如铂电阻,同样的是其高次项的影响也相对较小,在温度并不大范围变化时仍然可以采取线性近似。
/* 计算镍电阻温度 */static float calcwzntemperature(rtdobjecttype *rtd,float rt){float temp=0.0;float a=0.005485; temp=((rt/rtd->nominalr)-1.0)/a;rtd->temperature=temp; return temp;}2.2.4、统一温度获取  面向不同类型的rtd,我们实现了各自的温度转换函数,但作为驱动函数库,我们总是希望能进行无差别调用。所以我们希望设计一个统一的接口函数。所幸每种类型rtd操作函数均有相同的格式,于是我们就很容易想到使用函数指针来处理它。
float (*calctemperature[])(rtdobjecttype *rtd,float rt)={calcwzptemperature,calcwzctemperature,calcwzntemperature};/*计算热电阻测得的温度*/float calcrtdtemperature(rtdobjecttype *rtd,float rt){ float temp=0.0; temp=calctemperature[rtd->type](rtd,rt); return temp;}3、驱动的使用  我们采用rtd测温时可以使用这一驱动。其实用步骤分两步:声明并初始化对象;调用函数计算温度值。接下来我们就来实现之。
3.1、声明并初始化对象  首先使用rtdobjecttype类型定义rtd对象,如果有多个可以使用数组方式定义。rtdobjecttype rtd;或rtdobjecttype rtd[n];的形式。其中n为数量。
  定义对象变量后和以调用初始化函数对齐进行初始化:
  rtdinitialization(&rtd,type,nr);
  其中type为rtdcategorytype枚举类型,可以是铂热电阻(wzp)、铜热电阻(wzc)和镍热电阻(wzn)。nr为所操作对象在0摄氏度时的标称电阻值。
3.2、调用函数计算温度值  对象初始化后就可以操作对象来获取对象当前时刻的温度值。具体如下:
  calcrtdtemperature(&rtd,rt);
  其中rt为当前对象的电阻值。
4、应用总结  我们实现了rtd的检测,对得到的当前温度电阻值,使用根本驱动就可以计算得到当前的温度。
  本驱动支持铂热电阻(wzp)、铜热电阻(wzc)和镍热电阻(wzn)。对于不同该类型,不同标称值的对象均可以使用。不过需要注意:铂热电阻对应的测温范围是:-200℃~850℃;铜热电阻对应的测温范围是:-50℃~150℃;镍电阻对应的测温范围是:-60℃~180℃。超过范围的将不被支持。

无人驾驶车辆的自动行驶控制系统设计
Supermicro在2011年国际超级计算大会上展示计算(HPC)解决方案
PCIe两种中断传递方式
NI PXI-4110: 业内分辨率最高的可编程直流电源
基于SA605和AD9850的接收电路设计及应用
RTD热电阻测温的驱动设计与实现
分享关于系统基础芯片各模块功能分析及选型
国美U7Mini评测 给低价位的智能手机带来了更多的可能
活动回顾 | 芯来RISC-V全栈技术分享
NVIDIA推出超级计算加速卡:英伟达的GPU能否取代AMD的CPU
C波段雷达功率放大器CMPA5259050 CREE
PCR仪温度校准装置、基因扩增仪(PCR仪)测温系统校准装置
iOS最新消息汇总:借鉴越狱的iOS11要来了,iOS10.2越狱和iOS10.3越狱你还等吗?
深圳5G产业规模、5G基站和终端出货量均位居全球第一
数字孪生技术发展迅猛正与人工智能深度结合
汽车用 小型晶振的开发
君正X2000/X1600处理器的主要特点及应用场景
FPGA常用运算模块-除法器
“最强音乐手机”小米10S上手初体验
PCB电路板设计中的12要点