温度是一个重要的物理量,在工农业生产和日常生活中,经常需要对环境温度进行监测。本文设计了一个温度监测系统,温度传感器采用DS18B20,下位机采用AT89S52单片机,实现温度测量、显示、超限报警等功能,上位机采用PC机,利用Matlab设计了友好人机交互界面,实现温度的采集、显示、绘图、报警、保存数据等功能。
1 系统总体设计
系统采用AT89S52单片机作为下位机,PC机作为上位机,二者通过串口发送或接收数据,实现环境温度的测量、显示、超限报警、测温数据保存等功能。系统总体设计框图如图1所示。
单片机最小系统包括单片机工作所必需的复位电路、时钟电路和电源电路。温度传感器采用DS18B20芯片,测量温度范围为-55~+125 ℃,该芯片不需要外接电源,可编程的分辨率为9~12位,测温分辨率最高可达0.062 5℃,数据传送只需要一条通信线,接单片机的P2.0口。温度显示部分使用4个八段LED共阳极数码管,采用动态驱动方式,数码管的a,b,c,d,e,f,g,DP八段由单片机P0.0—P0.7口控制,单片机的P1.0—P1.3口控制4个数码管轮流动态显示。超限温度报警采用蜂鸣器,由单片机的P2.1口控制发声。
PC机的串行口采用的是标准的RS 232接口,而单片机的串行口电平是TTL电平,与RS 232的电气特性不匹配,所以系统采用常用芯片MAX 232来完成电平的转换,使单片机的串行口能与RS 232接口通信。上位机动态温度监测系统利用Matlab软件设计友好人机交互界面,实现温度数据的设置、采集、计算、显示与保存等功能。
2 下位机程序设计
单片机作为下位机,其主要任务是:
1)通过DS18B20实现温度数据的采集和处理,并在LED数码管上实时显示当前温度,保留小数点后1位;
2)通过串口接收上位机设定的上下限报警温度,并在LED数码臂上显示;
3)通过串口接收要求发送温度数据的命令,向上位机发送温度数据;
4)判断当前温度,如果超限启动蜂鸣器报警,设定不同频率的方波驱动蜂鸣器发出不同声音,用来区分超上限还是超下限。
单片机采用Keil C51编写程序,DS18B20分辨率设为12位,其主程序流程图如图2所示。主程序主要完成系统的初始化,主要包括DS18B20和串口的初始化;4个LED数码管显示“0000”,等待上位机发送上限温度数据;接收数据后显示,等待上位机发送下限温度数据;接收数据,显示下限温度并延迟约2秒后开始测湿。读DS18B20温度值,将读取的低8位字节和高8位字节组成16位无符号整型温度数据(其中低4位为沮度的小数部分,中间8位为温度的整数部分),处理沮度数据并在数码臂上显示温度值;判断温度,超限报警;接收到上位机发送的命令字“255”就向上位机发送由DS18B20读出的16位温度数据,先发送低8位字节,后发送高8位字节;返回读DS18B20温度值。
[page]
3 上位机程序设计
PC机作为上位机,主要任务包括:
1)设定上下限报警温度,通过串口发送给下位机;
2)通过串口发送要求单片机传送温度数据的命令,命令数据为“255”;
3)通过串口接收下位机的温度数据,做各种运算后显示温度值,并绘图;
4)判断当前温度,如果超限启动报警指示和发声报警;
5)保存测温时间及数据,以备查询。
上位机采用Matlab编写程序实现与下位机通信及温度监测。Matlab是MathWorks公司开发的科学计算软件,具有强大的数值计算和图形显示功能,利用Matlab,用户还可以操作计算机的串口与外部设备进行通信,并且支持BS-232、RS422和RS485接口标准。Matlab内置了GUI(Gr aphie UserInterface)模块,具有界面设计开发功能。本文利用MatlabGUI设计了上位机系统界面,采用M文件编程设计的方式,比GUIDE(Graphical User Interface Development Environment)辅助设计的方式功能更强,且代码易于修改。系统测温的界面如图3所示。
测温界面保留了MATLAB窗体框架窗口的菜单,利用菜单设计函数uimenu()设计了一级菜单About和二级菜单Operation steps和Contact us,可以弹出窗口显示系统的操作步骤和作者的联系方式。
利用函数uicontrol()的Style属性的text类型在窗口左下角建立设定上下限温度的显示、超限报警指示、测温开始和结束时间显示,在窗口右上角建立当前、最大、最小和平均温度显示。利用函数axes()建立1个位于窗口中心坐标轴,用于绘制动态温度曲线。利用函数uicontrol()的Style属性的pushbutton类型在窗口右下角建立5个按钮。对各控件编辑Callback回调函数,实现完整的上位机温度监测功能。
“打开串口”按钮操作主要完成串口初始化,其中利用了obi=serial(‘coml’,‘baudrate’,9600,‘parity’,‘none’,‘databits’,8,‘stopbits’,1)语句设定串口对象obj连接到串口com1,设定波特率为9600,不做奇偶校验,设定传输的数据位数目为8位,字节终止位数为1位。再利用fopen(obj)打开串口对象。
“关闭串口”按钮操作主要利用fclose(obj)和delete(obj)语句完成串口的释放。
“开始测温”按钮操作是系统软件的核心,利用了fwrite(obj,255)语句发送命令字“255”,要求下位机发送温度数据;利用fread(obj,2)语句接收2字节的16位温度数据,先接收低8位字节,后接收高8位字节,16位数据中低12位为温度数据,首先判断温度正负,再计算当前温度,累计测量温度的最大值、最小值和平均值,小数点后保留1位显示在界面的右上角数据显示区;根据当前温度利用plot()函数实时
绘制温度曲线;判断温度是否超限,如果超限进行报警指示,当前温度显示红色,并利用sound()函数发声报警。当温度超限时的报警界面如图4所示。
“保存数据”按钮操作打开文件保存对话框,选择路径、保存测温数据及测温时间,其中调用了Matlab保存文件对话框函数uiputfile(),用save函数保存.mat格式的数据。
上位机操作步骤为鼠标单击“打开串口”按钮,用户先后输入报警上限和下限温度;单击“开始测温”按钮开始测温。测温结束时单击“关闭串口”按钮;再单击“保存数据”按钮,选择保存路径,输入文件名保存测温数据及测温时间;最后单击“退出”按钮关闭窗口退出系统。
4 结论
设计的基于单片机和PC机的动态温度监测系统分别在上位机和下位机实现了温度显示和报警功能,上位机还实现了绘制动态温度曲线,保存数据以备查询。系统利用了Matlab强大的数值计算、图形显示和申口操作功能,具有友好的人机交互界面,实现了温度的动态监测。
上一篇:一种便携式的多功能SLD数字测控系统设计
下一篇:MCS-51单片机嵌入式Internet技术的工作原理简述
推荐阅读最新更新时间:2024-03-16 13:16