PT100温度巡检.docx

上传人:b****7 文档编号:9335748 上传时间:2023-02-04 格式:DOCX 页数:28 大小:987.66KB
下载 相关 举报
PT100温度巡检.docx_第1页
第1页 / 共28页
PT100温度巡检.docx_第2页
第2页 / 共28页
PT100温度巡检.docx_第3页
第3页 / 共28页
PT100温度巡检.docx_第4页
第4页 / 共28页
PT100温度巡检.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

PT100温度巡检.docx

《PT100温度巡检.docx》由会员分享,可在线阅读,更多相关《PT100温度巡检.docx(28页珍藏版)》请在冰豆网上搜索。

PT100温度巡检.docx

PT100温度巡检

[作者按]以下是我一年半前的一个作品,全部工作历时两个多月,其过程不乏坎坷与艰辛,走过很多弯路,然而当我真正完成它的时候,却是无比欣慰。

该作品的完成标志着我的技术上的一次蜕变。

可以说是终于跨进了单片机的大门了。

此次整理成章,并公开源代码,由于代码较多,完全的Keiluv2工程文件单独打包提交。

由于是手工制作,这里只附有原理图。

文中肯定会有不足之处,但是总体来说,内容完整,具体明了,对于51单片机的资源已经发挥得很全面,希望能对初学者有一点启示。

基于MCS-51的智能温度巡检仪的设计

孙卫兵

江苏,徐州,中国矿业大学(文昌校区)信电学院 

摘要:

本文介绍了铂热电阻Pt100的特性和采用Pt100测量温度的一般原理,采用两片AT89S52单片机协同工作,实现AD转换、键盘扫描、LCD显示、及开关量控制输出、串口通信等功能,完成16路温度的巡回检测和超限报警。

上位机采用VisualBasic高级语言设计友好的可视化人机界面,将其所接收的信号以表格形式显示出巡检对象的温度状况。

关键字:

Pt100;温度测量;单片机

1引言

在工业生产过程中,温度一直都是一个很重要的物理参数,温度的检测和控制直接和安全生产、产品质量、生产效率、节约能源等重大技术经济指标相联系,因此在国民经济的各个领域中都受到了人们的普遍重视。

随着传感器技术和电子测量技术的迅猛发展,以单片机为主的嵌入式系统已广泛应用于工业现场,新型的电子测温仪器不仅操作简单,而且精度比传统仪器有很大提高。

目前在工业生产现场使用最广泛的温度传感器主要有热电偶和热电阻,例如铂热电阻Pt100就是使用最广泛的传感器之一。

本文介绍的就是采用PT100设计的16路温度巡回检测仪,由两片AT89S52单片机协同工作完成。

2Pt100的特性

铂电阻是用很细的铂丝(Ф0.03~0.07mm)绕在云母支架上制成,是国际公认的高精度测温标准传感器。

因为铂电阻在氧化性介质中,甚至高温下其物理、化学性质都非常稳定,因此它具有精度高、稳定性好、性能可靠的特点。

铂电阻在中温(-200~650℃)范围内得到广泛应用。

目前市场上已有用金属铂制作成的标准测温热电阻,如Pt100、Pt500、Pt1000等。

它的电阻—温度关系的线性度非常好,如图1所示是其电阻—温度关系曲线,在-200~650℃温度范围内线性度已经非常接近直线。

由于铂电阻的测量精度、测量范围、线性度等特性都非常好,在工业生产中应用最广,市场上已有用金属铂制作成的标准测温热电阻,如Pt100、Pt500、Pt1000等。

本系统采用的是Pt100,它的电阻—温度关系的线性度非常好,如图1所示是其电阻—温度关系曲线,在-200~650℃温度范围内线性度已经非常接近直线。

图1Pt100的电阻—温度关系曲线

铂电阻阻值与温度的关系可以近似用下式表示:

在0~650℃范围内:

Rt=R0(1+At+Bt2)………………………

(1)

在-190~0℃范围内:

Rt=R0(1+At+Bt2+C(t-100)t3)…………

(2)

式中A、B、C为常数,

A=3.96847×10-3;

B=-5.847×10-7;

C=-4.22×10-12;

Rt为温度为t时的电阻值;R0为温度为0℃时的电阻值,对于Pt100这种型号的铂热电阻,R0就等于100Ω,即环境温度等于0度的时候,Pt100的阻值就是100Ω。

当温度变化的时候,通过以上电阻-温度表达式计算出环境的温度。

但由于该表达式相对来说比较复杂,若用单片机处理这相的计算过程,将会占用大量的资源,程序的编写上也相当复杂,所以一般采用先查表再插值的方法。

3Pt100测温原理

Pt100是电阻式温度传感器,测温的本质其实是测量传感器的电阻,通常是将电阻的变化转换成电压或电流等模拟信号,再将模拟信号转换成数字信号,再由处理器换算出相应温度。

采用Pt100测量温度一般有两种方案:

1.设计一个恒流源通过Pt100热电阻,通过检测Pt100上电压的变化来换算出温度;

2.采用惠斯顿电桥,电桥的四个电阻中三个是恒定的,另一个用Pt100热电阻,当Pt100电阻值变化时,测试端产生一个电势差,由此电势差换算出温度。

两种方案的区别只在于信号获取电路的不同,其原理上基本一致,如图2所示。

本文采用恒流源做为信号获取电路的测温方案,恒流源通过Pt100热电阻,温度变化引起Pt100电阻值的变化,从引起电压的变化,放大后经AD采用后,送由单片机处理,换算出相应温度。

为了达到高精度、宽量程的测温要求,选用的是AD转换芯片是12位串行AD芯片MAX1270。

图2Pt100测温原理

4系统结构与实现方法

根据智能仪器的基本设计思想,系统采用模块化设计,根据仪器的功能要求和技术指标,遵循自上而下,由大到小,由粗到细的思想,按照仪器的功能层次,把硬件和软件分成若干个功能模块,分别进行设计和调试;然后把它们连接起来,进行总调。

本智能温度巡检仪的结构框图如图3所示,主要由四大部分:

图3智能温度巡检仪的原理框图

4.1恒流源的设计

由于温度信号是由恒流源通过铂热电阻Pt100,通过检测Pt100上的电压变化量而获得的,所以设计一个稳定的恒流源尤为重要。

如图4所示,是一个由两个三极管和一个运算放大器构成的恒流源电路,其中Rc是100Ω的标准精密电阻。

NPN型三极管9013的Vce相当于一个PN结的压降,实际测量约等于0.6V,由运算放大器具有很大有输入阻抗和很小的输出阻抗,由其虚短和虚断的特性可以知道PNP型三极管9012的射极电压等于三极管9013的射极电压,因此电阻Rc两端的电压等于三极管9013的Vce,即等于V恒值0.6V,则9012的射极电流Ie=0.6V/100Ω=6mA

由三极管的电流放大特性可知,三极管9012的基极电流Ib非常小,可以忽略不计,则集电极电流Ic近似等于Ie,即Ic=6mA。

由此在9012的集电极就构成了一个非常稳定的恒流源。

图4恒流源电路

4.2Pt100的四线式接线方法对导线电阻进行补偿

铂热电阻的使用,一般有三种接法,分别是二线制接法、三线制接法和四线制接法,如图5所示,不同的接法适应于不同的精度要不求。

(a)二线制(b)三线制(c)四线制

图5Pt100三种接线方式

1.二线制接法:

如图4(a)所示,这种接法不考虑Pt100电缆的导线电阻,将A/D采样端与电流源的正极输出端接在一起,这种接法由于没有考虑测温电缆的电阻,因此只能适用于测温距离较近的场合。

2.三线制接法:

如图4(b)所示,这种接法增加了用于A/D采样的补偿线,三线制接法消除了连接导线电阻引起的测量误差,这种接法适用于中等测温距离的场合。

3.四线制接法:

如图4(c)所示,这种接法不仅增加了A/D采样补偿线,还加了一条A/D对地的补偿线,这样可以近一步的减小测量误差,可以用于测温距离较远的场合。

如果只从精度上考虑,采用四线制接法效果最好。

4.3多通道的巡回切换

本系统是一个多路巡检的系统,为了实现多路检测,如果在每一路都接一个恒流源和一个A/D采样通道,显然太浪费资源,所以要使用模拟通道开关芯片,可以实现多个通道的快捷切换,这样只要一路恒流源,一路A/D采样通道即可实现多路巡检功能,同时还可以保证各通道电流的一致性。

本系统使用的模拟通道开关芯片是MAXIM公司的16路模拟通道芯片MAX396。

该芯片通过地址线A3~A0结合使能端EN,选择一路通道与COM端接通,因此只要由单片机控制地址线A3~A0的地址递增,即可实现16路通道的巡回切换,使用非常方便。

本系统中使用了两片MAX396,分别用于恒流源的A/D采样通道的切换,因为恒流源与A/D采样通道是要同步进行切换的,因此两片MAX396的的地址线是并连的。

本系统中MAX396的接口电路如图6所示,没有外围元器件,非常简单。

图6MAX396的接口电路

4.4使用MAX1270进行AD转换

图7MAX1270接口电路

本系统采用的AD转换器是MAXIM公司的单电源12位串行AD转换芯片MAX1270,采用内部4.096V的参考电压,时钟由外部的单片机的I/O口提供,单片机采用软件模拟SPI与MAX1270通信,从而控制A/D采样和获取量化后的数字量。

电路如图7所示。

需要注意的是MAX1270具有多种工作模式:

时钟有内部外部之分,参考电压有内部4.096V和外部参考电压之分。

工作模式的选择由输入控制字决定,其输入控制字格式如表1所示:

START是开始位,在/CS置低后START为逻辑“1”时表示输入控制字的开始;SEL2~SEL0表示A/D采样通道的选择位,RNG表示满刻度输入电压选择位,RNG=0时,电压VDD=5V,RNG=1时,电压VDD=10V;BIP是单极性与双极性输入电压模式选择位,BIP=0时,表示单极性输入电压,BIP=1时,表示有正负双极性输入电压;PD1、PD0是电源和时钟模式选择位,PD0=0表示内部时钟,PD0=1表示外部时钟。

表1MAX1270控制字

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

START

SEL2

SEL1

SEL0

RNG

BIP

PD1

PD0

本系统采用的是外部时钟工作模式,其时序如图8所示,只要编程时严格按照此时序图读写数据,就可以正确地采样到外部被采样的电压。

本系统中MAX1270使用5V电压供电,外部时钟,采样通道为CH7,因此输入控制字为11110001B。

图8MAX1270的外部时钟工作模式时序图

4.5信号的处理

由于外界干扰或某些不可预知的因素,模拟量在受到干扰后,经A/D转换后的结果偏离了真实值,可能会出现一些随机的误差,如果只采样一次,无法确定结果是否可信。

必须通过多次采样得到一个A/D转换的数据序列,通过软件算法处理后才能得到一个可信度较高的结果。

这种方法就是数字滤波。

数字滤波的前提是对同一数据进行多次采样,在单片机系统中一般有:

中值滤波、算术平均滤波、去极值平均滤波、加权平均滤波、滑动平均滤波等。

在本系统中采用的是去极值均值滤波,程序流程图如图9所示。

算法原理如下:

对于温度信号对应的电压采样值,连续采样n次,将其累加求和,同时找出其中最大值和最小值,再从累加和中减去最大值和最小值,按n-2个采样值求平均,即有效采样值。

图9去极值平均滤波程序流程图

由Pt100的特性可知,虽然Pt100的线性度比较好,但是由于其温度—电阻函数关系并非线性,用单片机运算则占用资源和时间都比较多。

通常采用查表和线性插值算法进行标度变换的方法计算出温度,不仅运算快、占用单片机内部资源少,而且可以一定程度上对Pt100进行线性化校正,从而达到非常精确的测温效果。

图10插值算法示意图

要查表首先要在单片机的ROM区建立一个电阻—温度分度表,在检测值的范围内均匀选择若干个标定点,标定的点数越多则表格越大,对系统的描述也越精确。

Pt100的铂电阻温度分度表,可以向Pt100的厂商索要,考虑到单片机的程序存储空间资源和实际的测量精度要求,并不需要每隔一摄氏度就取一个标定点,根据精度要求选择适当的温度间隔。

例如在-200~650℃范围内每隔5℃标定一个Pt100的电阻值,即共171个标定点,分别记作R[i],对应的温度记作T[i],i取0~170。

如图10所示,采用线性插值算法进行标度变换时,将检测值Rx通过顺序查表,与标定点R[i]比较,确定区间R[i]

因为是每隔5℃标定一个电阻值,所以T[i+1]-T[i]=5,即:

[举例]:

现经A/D采样和滤波得Pt100的电阻值为Rx=112.68Ω,求此时实测对象的温度Tx。

解:

已知查Rx=112.68Ω,

表得R[46]

R[46]=111.67Ω,R[47]=113.61Ω,

T[46]=30℃,

代入式2得:

(℃)

答:

此时实测对象的温度Tx为32.60℃。

4.6键盘的扫描

本系统主要是采用了常用的4×4矩阵式键盘,工作方式采用的是外部中断扫描,如图11所示。

中断式键盘扫描原理是:

当有键按下将会触发一个中断源,提醒处理器进行键值扫描查询。

键盘的中断方式一般有定时中断和外部中断两种,本系统采用的是外部中断INT0。

单片机先让行线输出低电平,当有键按下时列线电平不全为高,四输入与门输出端产生下降沿,将触发外部中断INT0,单片机进入中断后先延时去抖动,再扫描查寻键盘,读出键值,然后处理相应的键值处理子程序,无键按下则不进入中断,单片机不扫描,从而节约了大量的资源。

图11矩阵中断式扫描键盘

4.7LCD显示驱动设计

在本文设计的智能温度巡检仪中使用了金鹏公司的OCMJ5*10B型的160×80图形点阵LCD显示模块,它自身带有汉字字库,不仅软件操作简单,而且外围电路也很简单。

系统用它显示通道序号、温度和系统参数等信息。

由于屏幕较大,全屏可以同时显示8路通道的温度信息,使用户不用繁琐地按键就可以查看到多路温度信息,非常方便,LCD电路如图12(a)所示:

1、2端为背光电源端;3、4端为LCD模块电源端;5~12为数据端;13为BUSY应答信号端,1表示已收到数据并正在处理中,0表示模块空闲;14为REQ是请求信号,高电平有效;15为复位端节;16为空脚下;17、18为LCD灰度调节端。

(a)LCD显示器(b)发光二极管显示

图12系统显示器电路

另外,系统还加了三个发光二极管,分别是绿、黄、红三种不同颜色,用于显示检测对象的温度情况。

绿色表示温度正常,黄色检测对象温度超过报警温度,红色表示温度已超过危险温度。

发光二极管电路如图11(b)所示。

4.8串口通信

本系统与上位机的通信使用的是RS-232标准,驱动芯片是常用的MAX232A,电路芯片手册里的参考电路,非常简单,如图13所示。

图13RS-232驱动电路

4.9控制输出电路

系统针对两个温度上限(报警温度和危险温度)设计了两个开关量输出。

输出电路如图14所示,单片机的I/O口输出的TTL电平经过经由光电耦合来打开或关闭可控硅,从而开关外部设备,如设备散热风扇、检测对象的加热器的电源等。

图14开关量控制输出电路

4.10通信数据格式的约定

系统中共有两个单片机和一个上位机PC,彼此之间都需要进行数据通信,为了方便通信,系统应该约定一个通用的数据格式。

就此对本系统的通信数据帧做以下约定:

控制命令与数据都采用ASCII码表示,通过串口传输ASCII码,单片机或上位机PC发送或接收的数据都严格按照以下帧格式操作:

一.串口参数设置

波特率,校验位,数据位,停止位,端口号

可选Null81可选

二.格式符号约定

开始标志:

X

结束标志:

Y

类型标识符:

×(A,B,C……)

报警温度T1:

××××(末位为小数)

危险温度T2:

××××(末位为小数)

波特率序号:

×

通道序号N:

××

通道温度T:

××××(ASC码,末位为小数,对上位机)

通道温度t:

××(flag_abs)0(整型,对单片机A)

三.帧结构设计

(一)更新数据命令(PC与单片机都可以用)

1.更新报警温度(A)

帧结构:

开始+类型+T1+结束

XA××0000Y

2.更新报危险温度(B)

帧结构:

开始+类型+T2+结束

XB××0000Y

3.更新波特率(C)

帧结构:

开始+类型+波特率序号+结束

XC×00000Y

4.更新各通道温度(D)(对上位机)

帧结构:

开始+类型+通道序号+温度+结束

XD××××××Y

5.更新各通道温度(d)(对I/O接口部分的单片机)

帧结构:

开始+类型+通道序号+温度+结束

Xd××××(flag_abs)0Y

(二)请求命令(只有PC端可以用)

6.PC机请求读取单片机的设置参数的请求命令(E)

帧结构:

开始+类型+结束

XEY

7.PC机请求更新温度请求命令(F)

帧结构:

开始+类型+结束

XFY

(三)控制命令(只有PC端可以用)

8.PC机控制单片机的状态自检命令(G)

帧结构:

开始+类型+结束

XGY

5本设计中C51编程的例子

我个人对C51的认识是:

C51与标准C相比,只是对单片机定义一个头文件,使程序与单片机的IO口和内部寄存器关联起来,另外,针对单片机的特点,多了一种位变量的数据类型。

在使用Keil的时候,不要忘了加上正确的头文件,除了单片机相应的头文件,KeilC也自带了一些常用头文件,如string.h、intrins.h等,具体都有哪些函数,还是自己找到这些头文件好好研读一遍最好。

网上相应的教程也不少。

多上技术论坛,会有意外的惊喜!

也许真正的高手不会天天泡论坛,但是,三人行,必有我师!

5.1液晶模块的驱动

目前很多LCD液晶模块已经做得很完善,使用也很简单,称为LCM,以金鹏公司的OCMJ5*10B型LCM为例:

该LCM是160×80图形文字液晶,自带字库,并行接口,只要按时输入厂家的命令即可完成图形、文字、点、线、反白等功能。

如图15所示是处理器对模块写命令的时序图。

举例如下:

图15LCD模块写命令时序图

//---------------------------------------------------------

//硬件连接线定义,使用时需另外定义

#defineLCD_OUTP2//P2口作为LCD的数据端口

sbitLCD_BUSY=P3^4;//P3.4口为忙标志信号

sbitLCD_REQ=P3^5;//P3.5口为请求信号

//---------------------------------------------------------

//程序名:

externvoidsub_lcd(ucharin)

//功能:

OCMJ5*10B型LCD驱动子程序

//说明:

在in中传入要发送的字节

externvoidsub_lcd(ucharin)

{while(LCD_BUSY);//等到LCD不忙的时候,方能开始写命令字

_nop_();

LCD_OUT=in;//要数据端口准备好数据

_nop_();

LCD_REQ=1;//请求输入命令

while(!

LCD_BUSY);//接收数据中,BUSY会保持“1”状态,完成接收命令,恢复“0”

_nop_();

LCD_REQ=0;//完成接收一个命令后清除请求信号

_nop_();

}

//---------------------------------------------------------

//程序名:

externvoidini_OCMJ(void);

//功能:

OCMJ5*10B型LCD初始化子程序

externvoidini_OCMJ(void)

{LCD_OUT=0xff;//输出端口初始化

_nop_();

LCD_REQ=0;//表示无请求

_nop_();

LCD_BUSY=1;//置为输入

_nop_();

sub_lcd(0xf4);//0xf4是清屏命令,更多命令见LCM的说明书

_nop_();

_nop_();

}

如上,sub_lcd(ucharin)是按时序送命令的函数,ini_OCMJ(void)是LCD初始化函数,其实就是送入一个清屏命令字(0xf4),更多功能的函数源代码见附件程序包中OCMJ_LCD.c文件。

5.2串口通信

在“helloworld.c”的例子里有输出函数printf(),对于Keil中的51单片机,printf()函数的输出设备是串口,因此,使用前必须设定好单片机的串口相关的寄存器。

这就是为什么有些同学直接把“标准C”里的没有问题的“helloworld.c”Copy到Keil里却不见有输出的原因。

另外,串口输出可以直接对SBUF寄存器赋值,而不需要用printf(),对于串口的设置例子如下:

//---------------------------------------------------------------

//串口初始化设置

voidinitUart(void)

{SCON=0x50;//串口方式1,允许接收

TMOD=0x20;//定时器1定时方式2

TCON=0x40;//设定时器1开始计数

TH1=0xE6;//12MHz1200波特率

TL1=0xE6;

TI=1;

TR1=1;//启动定时器1

ES=1;

}

//---------------------------------------------------------------

//向串口发送一个字符

voidsend_char_com(unsignedcharch)

{SBUF=ch;

while(TI==0);

TI=0;

}

//向串口发送一个字符串,strlen为该字符串长度

voidsend_string_com(unsignedchar*str,unsignedintstrlen)

{unsignedintk=0;

do

{send_char_com(*(str+k));

k++;

}while(k

}

5.3数字信号处理

前面已经介绍过单片机中常用的数字信号处理方法,下面是一个对串行12位AD芯片MAX1270进行10次采样,去极值平均滤波并进行温度插值换算的函数。

其中用到的一些变量和函数可以在程序包里找到。

intRead_T()

{floatRx;intVin[10];intTx,Vmax=0,Vmin=0,Vsum=0;uchari;

for(i=0;i<10;i++)

{SPI(0xf0);

Vin[i]=((BUFH4&0x0f)*256+BUFL8);

Vsum=Vsum+Vin[i];

}

Vmax=Vin[0];Vmin=Vin[0];

for(i=0;i<10;i++)

{if(Vmax<=Vin[i])Vmax=Vin[i];

if(Vmin>=Vin[i])Vmin=Vin[i];

}

Rx=(Vsum-Vmin-Vmax)/(8*I_mA);

for(i=0;i<133;i++)

{

if(Rx<=Pt_R[i])

{Tx=(((Rx-Pt_R[i-1])*5/(Pt_R[i]-Pt_R[i-1]))+5*i-55)*10;

break;

}

}

returnTx;

}

6结论

本方案充分利用单片机的数据处理及实时检测能力,采用Pt100标准热电阻温度传感器的四线制接法,对导线电阻进行补偿,通过单片机对信号进行采样、数字滤波,使用插值算法对传感器进行非线性校正处理,使得此

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1