资讯详情

基于Matlab的小型温度检测系统设计

原标题:基于Matlab小温度检测系统设计

1 前言

温度是表示环境的重要参数。在工程领域,尤其是工程热力学,温度检测非常普遍,对于实时控制温度的精确测量尤为重要。

在控制系统中,有许多方法和应用平台可以实现上下机之间的通信。目前,以VB和VC开发了更多的通信软件。然而,虽然这些软件功能完善,但在计算机后进行各种处理(如滤波器、系统识别、曲线拟合等)并不方便,编程也更加复杂。Matlab具有强大的数据处理能力及功能丰富的工具箱,被广泛的应用于信号处理、自动控制等领域[1]。它的编程语言简单易学,可以用简单的命令代替复杂的代码,大大提高了开发效率。

本实验基于Matlab小型温度检测系统设计在环境中,使用下位机AT89S并完成温度数据采集,上位机在Matlab在环境下,调用设备控制箱serial类操作RS-232串口,通过串行通信交换数据,然后借助Matlab分析和处理数据,得到温度随时间变化的函数分析,同时介绍了基础Matlab环境下PC实现机与串行通信实时数据处理的方法。

2 总体设计系统

7d0650d06f3116e01e09c58f2e3a26e1.png

图1 系统结构图

温度检测系统的整体结构如图1所示。PC与单片机串口USART口通过MAX连接232电平转换芯片,形成主从式通信系统。当系统工作时,单片机对串口和DS18B20初始化,在读取温度时等待中断。PC机通过调用Matlab在设备控制工具箱中serial类和相关函数创建对象,并通过读写文件实现对象PC机串行口的访问,PC机通过Matlab向串行口发送特殊指令,触发单片机。单片机调用中断服务例程,读取即使温度并通过串行口返回收集到的数据PC机。此时,Matlab单片机发送的数据通过查询实时接收,数据分析处理和图形显示完成。

3 下位机部分

下机部分由AT89S51单片机和DS18B20温度构成,主要负责采集温度数据,并通过串行通信将数据实时传输到上位机进行处理,PC机与MUC技术相对成熟。

3.1串行通信协议

串口通信协议SPCP(Serial Port Communication Protocol)设计理念是基于帧传输模式。在本实验中,将字符格式设置为一个起始位、八个数据位和一个停止位。无奇偶验证,中间8位为有效数据,波特率设置为9600。为了确保数据的可靠传输,在传输数据之前通过握手建立连接,软件握手协议如下:

上位机发送握手信号0xff对于下位机,如果下位机接收到上位机的信号为握手信号,则将数据包返回到上位机。第一个数据是握手信号,温度数据为两个数据。此时,如果上位机接收到的第一个数据不是握手信号,则丢弃数据包。如果是,则表示握手成功,并直接存储第二个数据。

3.2采集温度数据(DS18B20)

本系统采用DALLAS生产的一线数字温度传感器DS18B20微处理器微处理器连接时,只需一条口线即可实现DS18B20双向通信设计可用数据线供电,简化系统硬件,支持多点功能和多个功能DS18B可并联于唯一的三线,实现多点测温,使用非常方便。尽管如此,DS18B以牺牲软件资源换取硬件资源为代价,采用单总线数据出数法,DS18B20的数据I/O都是同一条线完成的,所以对读写的操作时序要求很严格。

根据DTASHEET,对DS18B编程主要注意以下几个方面:

1.精确延迟问题[2]:确保DS18B延迟可分为2种:10us以下短延迟和10us上述长延迟。可使用短延时C51提供的内部函数_nop_()来实现,一个nop()函数相当于一个函数DJNZ,约2us;主要有15个延迟us,90us,270us,540us等等,这些延迟是15us整数倍可以一次使用nop()函数编写延迟15us的函数delay15(n)。

二、基本操作:DS18B20一线工作协议流程为:初始化→ROM操作指令→存储操作指令→数据传输DS18B20 所有的读写操作都是从初始化开始的,主要分为初始化操作、读写操作。

基于以上分析,是的DS18B编程源代码如下:

Init_DS18B20(void) ///初始化函数

{DQ = 1; //DQ复位

Delay15(1); //稍作延迟

DQ = 0; ///单片机将DQ拉低

Delay15(32); //精确延迟 大于 480us

DQ = 1; ///拉高总线

Delay15(6); //延时90us

x=DQ; ///读有脉冲

delay15(20); //延时约270us

}

Write_DS18B20(unsigned char dat)///写字节

{

unsigned char i="0";//定义循环变量

for (i=0; i<8; i )

{

DQ = 0; //复位

DQ = dat&0x01;///取数据并发位并发出

Delay15(1)

DQ = 1; //停止

dat>>=1;//右移

}

}

Read_DS18B20(void)///读一个字节

{

unsigned char i="0";

unsigned char dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 复位

dat>>=1;

DQ = 1; // 给

if(DQ)

dat|=0x80.//取位脉冲dat

delay15(1)

}

return(dat);

}

4 上位机部分(PC)

上位机通过串口向下位机发送命令,控制下位机,实时接受下位机传输的数据,分析处理,用图形显示和存储结果,完成人机交互过程。

Matlab不具备直接访问硬件的能力,但通过调用支持面向对象技术Instrument Control Toolbox中的serial类函数创建串口对象,串口对象操作是串口操作,使用非常方便。同时,Matlab串口对象支持串口的异步读写操作,使计算机在读写串口时能够同时进行其他处理,从而大大提高了计算机的执行效率。Matlab这种异步操作采用多线程技术实现。通过异步读写设置,计算机可以在执行读写串口函数时立即返回,无需等待串口传输数据。 当指定的数据传输结束时触发事件时,可以在事件回调函数中编程并处理数据,以免浪费等待串口传输数据造成的时间。

4.1 Matlab下串口编程

MATLAB的Instrument Control Toolbox提供了 MATLAB与仪器通信的功能 ,它支持 GPIB 通用接口总线 、VISA、TCP/ IP、UDP、RS2232等多个协议 ,具有同步和异步读写功能、事件处理和回调操作功能,可读写和记录二进制和ASCII文本数据。与串口相关的主要函数如下[3]:

(1)建立串口对象函数:obj=seril(’port’,’property name’,propertyvalue……),主要属性有:baudrate(波特率),databits(数据位),parity(验证方法),stopbits(终止位)等,可以在初始化时进行赋值或者使用set函数。

(2)打开串口设备对象:fopen(obj)

(3) 串口读写操作:当通信数据采用二进制格式时,串口读写设备的命令是fread()和fwrite()当通行数据使用文本时(ASCII)在格式上,读写串口设备的命令是fscanf()和fprintf()。

(4)关闭并清除设备对象:

Fclose(obj);%关闭串口设备对象

Delete(obj);在内存中删除串口设备对象%

基于系统串口通信协议,对串口对象的读写程序如下:

Obj=serial(’com1’,’baudrate’,9600,’parity’,’none’,’databits’,8,’stopbits1);%初始化串口

Fopen(obj);%打开串口对象

Fwrite(obj,256)xff

TMP=fread(obj,3,’unit8);%从串口读取3字节数据,后两个是16bit温度数据

If TMP(1)= =256 判断第一个字节是否有握手信号

For i = 1:3

Dat(i)=TMP(i 1);%去除第一个握手信号字节

End

End

Fclose(obj);%关闭串口设备对象

Delete(obj);在内存中删除串口设备对象%

4.2 Matlab数据分析

一般来说,单片机可以处理简单的八位无符号四个操作,而DS18B20可以程序设置9~12位的分辨率,精度可达±0.5℃,温度以16bit读取具有符号位扩展的二进制补码形式。如果使用单片机进行快速实时处理,则更加费力。同时,单片机还需要与DS18B20及上位机通信,系统资源也比较紧张。因此,可以读取16bit直接发送温度数据PC机,上位机来完成。Matlab强大的计算能力和绘图功能给数据分析带来了极大的方便,这不仅可以合理利用系统资源,也使得系统的通信过程更流畅。

图2所示的是用DS18B20测得的连续10个温度数据的变化曲线图。使用max()和min()函数可以求出温度的极大极小值,调用polyfit()函数还可以进行最小二乘回归分析与曲线拟合,进而求出温度变化的解析式,本实验中使用二阶拟合后,得到的温度随时间变化的函数解析式为:F(T)= 0.0125*T2 - 0.0145T+27.3083.

5 结语

Matlab是一款在控制领域应用十分广泛的软件,本实验基于Matlab环境下PC机与单片机实时通信及数据处理的方法,设计了一个小型温度检测系统,串口通信使用,极大的提高了开发效率,充分利用了Matlab的强大的数据分析能力,得到了温度随时间变化的函数解析式,取得了较好的效果,扩展了Matlab的使用范围,具有一定实用性。

本文作者创新观点:使用DS18B20传感器简化了硬件结构,采用Matlab编程,充分利用其数据分析能力,合理利用系统资源,提高了开发效率,扩展了Matlab的使用范围。

责任编辑:

标签: t7560温度传感器的精确度表

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台