专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机DS18B20实时温度监控系统软硬件设计

作者:mcu110   来源:51hei   点击数:  更新时间:2007年08月05日   【字体:


    下面让我们共同来学习一个基于单片机和DS18B20温度传感器的实时温度监控系统,这是一个温度监控综合实验,需要全套餐客户的相关配件配合才能完成。在这个实验中,大家可以一起来学习,如何综合开发出实用的单片机应用系统。其实,这个实验中并没有涉及到高深的新技术,我们也就是把光盘实验例程中几个简单技术综合应用起来,开发了这个实验程序, 美国DALLAS公司生产的DS18B20单总线数字温度传感器,具有微型化、低功耗、高性能、抗干扰能力强、可组网等优点,DS18B20的测温分辨率较高,为12位,即温度分辨率可以达到0.0625 ℃;在0 ~85 ℃温度范围内误差误差仅0.5 ℃。DS18B20可直接将温度转化成串行数字信号,因此特别适合和单片机配合使用,直接读取温度数据。目前DS18B20数字温度传感器已经广泛应用于恒温室、粮库、计算机机房温度监控及其他各种温度测控系统中。

首先让我们来看看实时温度监控系统软件运行的界面及S51增强型单片机实验板的实际效果。。。

实时温度监控系统软件运行的界面

 

 
图 1    
实时温度监控系统软件运行的界面
 
注:
电脑软件上实时显示监测到的温度、传感器序ID、记录实时温度曲线、上限高温报警、下限低温报警等信息
 

S51增强型单片机实验板实时采集温度

 

 
图 2
 
注: S51增强型实验板采集实时温度,显示在实验板上液晶模块上,同时通过实验板的RS-232串口通信将监控数据传输到电脑上,电脑上的实时监控软件接收后,进一步处理,绘制温度曲线,判断报警等。。。
1、液晶模块第一行显示“ DS18B20 OK!”, 表示温度传感器DS18B20正常
2、液晶模块第二行显示“ TEMP: 28.6250 ℃ ”,表示测到的实时温度为 28.6250 ℃
 
   

    从上面两幅图中可以看到,我们实现主要目标如下:

    1、在S51增强型单片机实验板上,AT89S51单片机程序检测DS18B20温度传感器状态,如果DS18B20不存在或损坏,则发出相应的蜂鸣报警,如果存在,则读取DS18B20监测的实时温度,显示在实验板的1602液晶模块上,同时把检测到的温度通过RS-232串口通信发送到电脑上,供实时监控软件进一步处理。同时,单片机接受电脑发送过来的继电器控制命令,

    
    2、在计算机上,VB6.0编写的实时温度监控系统软件通过RS-232串口接收S51增强型单片机实验板发送过来的实时数据,经过运算处理后将DS18B20的传感器ID、实时温度显示在软件界面上;同时,绘制出温度变化曲线,根据我们设定的上限报警温度和下线报警温度,判断当前温度有无高温报警或低温报警,如果温度超限,则给出相应的报警信息。

  3、单片机接收计算机对单片机的控制指令,当计算机发送“继电器ON指令”时,则单片机驱动实验板上的继电器吸合;相反,如果计算机发送“继电器OFF指令”时,单片机驱动继电器释放,我们可以学习掌握计算机智能控制的原理,只要掌握了这种方法,我们要在电脑上轻轻点击鼠标就可以控制家里的电气开关了就不难了(操作方法,点击软件的“继电器”按钮,实验板的继电器吸合,再次点击按钮,继电器释放)。

    4、实时温度监控软件检测用户的继电器控制命令,如果点击软件上“继电器”控制按钮,则发出继电器控制指令给单片机,控制实验板上的继电器产生相应动作。

    【通信实验程序的开发】

    该系统程序由单片机实时监控程序程序和电脑实时监控程序两部分软件构成。在微机测控系统中,一般称计算机为上位机、而前端采集控制的单片机系统称为下位机。上位机主要负责所有测控数据的综合管理与下位机的调度控制,而下位机由单片机构成前端的测控系统,进行原始数据的采集及设备的控制,将采集到的原始数据发送给上位机处理,下位机受上位机的管理控制。

    一、单片机程序开发

    51单片机有一个全双工的串行通信口,非常适合与电脑进行通信,51单片机的串口开发在各种教科书上都有详细的介绍,我们这里不在重复,大家可以参考一下书籍。单片机程序功能主要如下:初始化串口、打开串口中断、检测DS18B20温度传感器状态、读取实时温度、将实时温度显示在1602液晶模块上、将监控数据发送到电脑RS-232串口、接收继电器控制命令、控制继电器动作等。

    单片机通信参考程序如下:

        ORG    0000H
        AJMP   START         ;转到初始化程序

        ORG    0023H
        AJMP   PGUART        ;转到串行中断服务子程序

START:  MOV    SP,#60H       ;堆栈指针初始化
        MOV    P0,#0FFH      ;P0端口初始化
        MOV    P1,#0FFH      ;P1端口初始化
        MOV    P2,#0FFH      ;P2端口初始化
        MOV    P3,#0FFH      ;P3端口初始化
        MOV    TMOD,#20H     ;定时器T1工作于模式2,自动重装载
        MOV    TH1,#0FFH     ;TH1初值为"0FFH",57600bps
        MOV    TL1,#0FFH     ;TL1初值为"0FFH",57600bps
        MOV    PCON,#80H     ;波特率加倍
        MOV    SCON,#50H     ;串行口工作于方式1,允许接收
        SETB   TR1           ;启动定时器T1
        SETB   ES            ;允许串行口中断
        SETB   EA            ;开总中断
MAIN:   LCALL  GETROM         ;读取DS18B20温度传感器的序列号ID
        LCALL  GETTEMP       ;读取实时温度
        ......               ;主程序处理其他任务,等待串口中断
        AJMP MAIN
;-------------------单片机通信参考程序----------------------------------

PGUART: ......               ;串口中断服务子程序,接收执行计算器控制指令
        RETI

        END

    二、RS-232串行通信测试软件开发

    计算机RS-232串行通信测试软件采用VB6.0开发,VisualBasic 6.0(简称VB6.0)以其简单易学,功能强大而倍受广大计算机开发人员的青睐,VB6开发的各种软件已广泛地应用于各个领域,VB6提供了多种控件,其中MSCOMM.OCX是用于串行通信的控件,我们可将该控件添加到工具箱(Toolbox)内,这样就可以利用该控件进行串行通信程序的设计了。

    下面介绍Mscomm控件的主要属性和方法:
   1) CommPort:设置或返回串行端口号,VB6的取值范围为1~16,表示打开或返回通信端口号COM1~COM16
   2) Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。如:Mscomm1.Setting=“9600,N,8,1”
   3) PortOpen:打开或关闭串行端口,格式为:Mscomm1.PortOpen=『True/False』
   4) InBufferSize:设置或返回接收缓冲区的大小,缺省为1024字节
   5) InBufferCount:返回接收缓冲区内的等待读取的字节个数,可通过设置该属性为0来清除接收缓冲区
   6) RThreshold:该属性为一阀值,当接收缓冲区内字节个数达到或超过该值后就产生OnComm事件
   7) InputLen:设置或返回接收缓冲区内用Input读入的个数。若取0,则Input将读取整个缓冲区的所有内容
   8) Input:该属性表示从接收缓冲区InputLen个字符
   9) OutBufferSize:设置或返回发送缓冲区大小,缺省为512字节
   10) OutBufferCounter:返回发送缓冲区内等待发送的字符数,可用来清空缓冲区
   11) Output:向发送缓冲区传送一字符串,即向串口发送数据

    VB6.0为可视化编程开发软件,开发程序简单易学,VB程序开发主要分为两步:第一步、使用VB控件设计出软件界面,第二步、给各种控件编写相应的执行程序代码,代码编写完成后可以运行查看结果了。

第一步:开发程序界面

    打开VB6.0 -> 新建“标准 EXE”建立一个新的工程。在工程窗口Form1中添加我们要使用的各种按钮和控件,其中一个图标如电话一样的控件就是MSCOMM串行通信控件了,该控件在界面设计时候可见,在程序运行时候不可见。最后,放置好了各种控件后,程序的界面界面就出来了,是不是很简单呀!如下图4所示:

实时温度监控系统软件界面开发

 

 
图 4
 

第二步:VB软件编写

    当软件的界面设计完成后,我们就可以给程序添加代码了,在程序中实现的主要功能如下:RS-232端口初始化、接收处理S51增强型单片机实验板发送过来的实时数据、将实时温度数据显示在软件界面中,根据设定的上下限报警温度判断有无超限报警、绘制实时温度变化曲线、接收用户的继电器控制指令、发送继电器控制命令。。。如下图5所示:

实时监控系统软件程序代码编写

 

 
图 5
 


    【实时温度监控实验操作】

    完成了单片机通信程序及PC上我VB程序开发后,我们编译工程,得到单片机芯片烧写的HEX格式目标文件lcdtemp.hex和串口测试程序可以执行文件Temp Ver1.0.exe,然后我们就可以拿出S51增强型单片机实验板,马上进行实时温度监控实验实验了。

    1、使用ISP编程器将目标文件lcdtemp.hex烧写到AT89S51单片机中(见下图6)

图6: ISP编程器烧写目标文件rs232test.hex

    2、如前面的图2所示:我们将烧写好了通信程序的AT89S51芯片锁紧到S51单片机实验板上,然后把1602字符型液晶模块插到实验板的1602接口上,用RS232串口通信电缆和USB电缆将实验板和电脑连接好,按压实验板的电源开关,开启电源,此时实验板上的电源指示灯亮起来,1602液晶模块上会显示出DS18B20传感器状态和实时温度,同时将实时数据发送到RS-232串行通信接口,我们可以看到实验板上的“通信”指示灯在闪烁,表示正在发送监控数据。

    3、双击我们编写的实时温度监控PC软件Temp Ver1.0.exe,启动实时温度监控系统软件,在软件上正确设置好和实验板连接的通信端口。从实验板发送过来的温度数据就会实时显示在软件的左上角,同时在软件的右边窗口中绘制出温度变化曲线,比如:我们用手去抓住温度探头,DS18B20温度传感器受我们的体温加热后,温度将逐渐上升,在温度曲线中将详细记录温度变化的过程,比起只在实验板上看到一个温度数据就更加直观了,在电脑软件中显示的实时温度和S51增强型实验板上1602液晶模块上显示的温度是始终保持一致的。然后,我们可以点击实时温度监控软件的“继电器”按钮,实验板上的单片机接收到电脑的控制指令后,就会控制继电器产生相应的开关动作,实现电脑软件对实验板上继电器的控制。


    【实验总结】

    通过该温度监控实验,我们可以发现:基于DS18B20数字温度传感器构成的实时监控系统确实具有精度高、抗干扰能力强、电路简单等诸多优点,温度传感器得到电缆长度达到几十米都可以正常读取温度数据,并且已经在站长开发的机房安全监控系统中得到了实际考验,那可是要365天从不间断地对机房及相关设备提供实时温度监控的哦。

    相比之下,传统的温度检测系统采用热敏电阻等温度敏感元件,热敏电阻成本低,但需要后续信号调理、AD转换处理电路才能将温度信号转换成数字信号,不但电路复杂,而且热敏电阻的可靠性相对较差,测量温度的精度差,很难保证热敏电阻的一致性和线性,在应用中需要很好的解决引线误差补偿问题、共模干扰问题和放大电路零点漂移误差等技术问题。

    因此,如果你开发的系统对温度监控精度要求不是非常高,而且测温的范围DS18B20的-55~+125 ℃之间的话,那么采用DS18B20是一个不错的选择,通过软件的插值运算,其实DS18B20的测温精度还可以进一步提高的,具体的实现方法大家可以参考DALLAS公司相关技术资料。当然,如果你有条件的话,也可以预先对每一个DS18B20进行一次校验,在标准恒温箱中测量并记录下每个传感器的测温误差,在实际应用中,我们就可以根据每个传感器的实际校准对读出的实时温度进行适当的误差纠正,这样也不失为提高DS18B20测温精度的一个好办法。可惜的是,并非大家都有这种高精度的恒温箱来校验传感器,如果你的参考温度不准确,那么校准将会适得其反。

    好了,这个实验到此结束了,希望大家通过对这个软件的学习,掌握单片机实时温度监控的开发、串口通信程序的开发及计算机串口实时控制开发原理及PC监控软件的开发,为开发其他功能更加完善的单片机综合应用系统打好基础。

    欢迎本站的单片机全套餐客户下载教程配套的软件进行测试实验,给我们提供更多的宝贵意见和建议!再次感谢大家长期对电子驿站的关心与大力支持,我们会不断开发出更多的有意义的实验教程提供给大家学习研究,祝大家学习愉快!

点击下载实时温度监控系统软件


注意:
 
1、
本实时温度监控系统软件为配合本站S51增强型实验板学习而开发,仅适用于和本站产品配套学习使用,并且需要本站单片机学习全套餐客户的相关实验器材配合才能完成实验。
2、
实验源程序代码随产品提供给本站全套餐客户学习研究使用,本站保留对本实验例程的所有权利,未经授权请勿随意转载或修改软件相关版权信息。
关闭窗口

相关文章