新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Matlab的小型温度检测系统设计

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

作者: 时间:2013-10-10 来源:网络 收藏


基于以上分析,对DS18B20的编程源码如下:
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; i8; i++)
{
DQ = 0; //复位
DQ = dat0x01;//取数据的第i位并送出
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)

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

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

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) 串口读写操作:当matlab通信数据采用二进制格式时,读写串口设备的命令为fread()和fwrite();当通行数据采用文本(ASCII)格式时,读写串口设备的命令为fscanf()和fprintf()。

(4)关闭并清除设备对象:
Fclose(obj);%关闭串口设备对象
Delete(obj);%删除内存中的串口设备对象

基于本系统串口通信协议,对串口对象的读写部分程序如下:
Obj=serial(’com1’,’baudrate’,9600,’parity’,’none’,’databits’,8,’stopbits’,1);%初始化串口
Fopen(obj);%打开串口对象
Fwrite(obj,256);%向串口发送握手信号0xff
TMP=fread(obj,3,’unit8’);%从串口读取3字节数据,后2个即是16bit温度数据
If TMP(1)= =256 %判断第一个字节受否是握手信号
For i = 1:3
Dat(i)=TMP(i+1);%剔除第一个握手信号字节
End
End
Fclose(obj);%关闭串口设备对象
Delete(obj);%删除内存中的串口设备对象

4.2 Matlab数据分析

单片机一般能处理简单的8位无符号数的四则运算,而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的强大的数据分析能力,得到了温度随时间变化的函数解析式,取得了较好的效果,扩展了Matlab的使用范围,具有一定实用性。

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


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭