基于Matlab的小型温度检测系统设计
1 前言
温度是表征环境的一个重要的参数。在工程领域,尤其像工程热力学等,温度检测非常普遍,对温度精确测量以便实时控制也显得尤为重要。
在控制系统中,上位机与下位机之间实现通信的方法和应用平台很多。目前,以VB和VC开发的通信软件较多,然而,这类软件虽然功能完善,但是数据采集到计算机后要进行各种处理(例如滤波,系统辨识,曲线拟合等)就显得不方便,编程比较复杂。Matlab具有强大的数据处理能力及功能丰富的工具箱,被广泛的应用于信号处理、自动控制等领域[1]。它编程语言简单易学,利用简单的命令就可以代替复杂的代码,极大地提高了开发效率。
本实验基于Matlab环境下设计了一个小型温度检测系统,下位机使用AT89S51单片机和DS18B20完成温度数据采集,上位机在Matlab环境下,调用设备控制箱serial类操作RS-232串口,用串行通信方式交换数据,进而借助Matlab对数据进行分析和处理,得到了温度随时间变化的函数解析式,同时介绍了基于Matlab环境下PC机与单片机串行通信的实时数据处理的实现方法。
2 系统总体设计
图1 系统结构图
温度检测系统的整体结构如图1所示。PC机串口与单片机USART口通过MAX232电平转换芯片相连,构成一个主从式通信系统。系统工作时,单片机对串口和DS18B20初始化,在读取温度的同时等待中断。PC机通过调用Matlab设备控制工具箱中的serial类及相关函数来创建串口设备对象,并以读写文件的方式实现对PC机串行口的访问,PC机通过Matlab向串行口发送特殊指令从而触发单片机中断系统,单片机调用中断服务例程,读取即使温度并将采集的数据通过串行口回送给PC机。此时,Matlab通过查询的方式,实时接收单片机发送的数据,并完成对数据的分析处理及图形显示。
3 下位机部分
下位机部分由AT89S51单片机和DS18B20温度传感器构成,主要负责温度数据的采集工作,并通过串行通信实时地将数据传送到上位机进行处理,PC机与MUC串口通信技术相对而言已经比较成熟。
3.1串行通信协议
串口通信协议SPCP(Serial Port Communication Protocol)设计思想是基于帧传输方式,在本实验中,设定字符格式为1个起始位,8个数据位和一个停止位,无奇偶校验,中间8位即为有效数据,波特率设置为9600,为保证数据可靠传输,在传送数据前通过握手建立连接,软件握手协议规定如下:
上位机发送握手信号0xff给下位机,下位机如果接受到上位机的信号为握手信号,则回送数据包给上位机,其中第一个数据为握手信号,以二个数据为温度传感器采集到的温度数据,此时,上位机如果接受到的第一个数据不是握手信号,则丢弃该数据包,若是,则表示握手成功,直接存储第二个数据。
3.2温度数据采集(DS18B20)
本系统中采用DALLAS生产的"一线总线"可编程数字化温度传感器DS18B20,与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,在使用中不需要任何外围元件,设计可用数据线供电,简化系统的硬件,同时支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温,使用起来非常方便。尽管如此,DS18B20是以牺牲软件资源换取硬件资源的,由于采用单总线数据出数方式,DS18B20的数据I/O均由同一根线完成,因此,对读写的操作时序要求非常严格。
根据DTASHEET,对DS18B20的编程主要注意以下几个方面:
1,精确延时问题[2]:为了保证DS18B20的严格时序,可以将延时分为2种:10us以下的短延时和10us以上的长延时。短延时可以使用C51提供的内部函数_nop_()来实现,一个nop()函数相当于一条DJNZ汇编指令,约2us;长延时主要有15us,90us,270us,540us等,这些延时均为15us的整数倍,一次可以使用nop()函数编写一个延时15us的函数delay15(n)。
2,基本操作:DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。对DS18B20 进行所有的读写操作都是从初始化开始的,主要分为初始化操作,读操作和写操作。
基于以上分析,对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; i<8; i++)
{
DQ = 0; //复位
DQ = dat&0x01;//取数据的第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);
}
DS18B20传感器 Matlab编程 数据采集 相关文章:
- 8位高速A/D转换器TLC5510的应用(02-16)
- 毫欧姆电阻在汽车电子系统中的应用(05-11)
- 24位高精度模数转换器ADSl258的原理应用(11-28)
- 电子式互感器中数据采集系统误差补偿的设计与实现(01-01)
- 用于大型地震勘探网的高精度低功耗自检测数据采集系统(02-20)
- 为应变计应用选择合适的放大器(03-25)
- 妤傛ḿ楠囩亸鍕暥瀹搞儳鈻肩敮鍫濆悋閹存劕鐓跨拋顓熸殌缁嬪顨滅憗锟�
閸忋劍鏌熸担宥咁劅娑旂姴鐨犳0鎴滅瑩娑撴氨鐓$拠鍡礉閹绘劕宕岄惍鏂垮絺瀹搞儰缍旈懗钘夊閿涘苯濮幃銊ユ彥闁喐鍨氶梹澶歌礋娴兼ḿ顫呴惃鍕殸妫版垵浼愮粙瀣瑎...
- 娑擃厾楠囩亸鍕暥瀹搞儳鈻肩敮鍫濆悋閹存劕鐓跨拋顓熸殌缁嬪顨滅憗锟�
缁箖鈧拷30婢舵岸妫亸鍕暥閸╃顔勭拠鍓р柤閿涘奔绗撶€硅埖宸跨拠鎾呯礉閸斺晛顒熼崨妯烘彥闁喕鎻崚棰佺娑擃亜鎮庨弽鐓庣殸妫版垵浼愮粙瀣瑎閻ㄥ嫯顩﹀Ч锟�...
- Agilent ADS 閺佹瑥顒熼崺纭咁唲鐠囧墽鈻兼總妤勵棅
娑撴挸顔嶉幒鍫n嚦閿涘苯鍙忛棃銏n唹鐟欘枃DS閸氬嫮顫掗崝鐔诲厴閸滃苯浼愮粙瀣安閻㈩煉绱遍崝鈺傚亶閻€劍娓堕惌顓犳畱閺冨爼妫跨€涳缚绱癆DS...
- HFSS鐎涳缚绡勯崺纭咁唲鐠囧墽鈻兼總妤勵棅
鐠у嫭绻佹稉鎾愁啀閹哄牐顕抽敍灞藉弿闂堛垼顔夐幒鍦欶SS閻ㄥ嫬濮涢懗钘夋嫲鎼存梻鏁ら敍灞藉簻閸斺晜鍋嶉崗銊╂桨缁崵绮洪崷鏉款劅娑旂姵甯夐幓顡嶧SS...
- CST瀵邦喗灏濆銉ょ稊鐎广倕鐓跨拋顓熸殌缁嬪顨滅憗锟�
閺夊孩妲戝ú瀣╁瘜鐠佽绱濋崗銊╂桨鐠佸弶宸緾ST閸氬嫰銆嶉崝鐔诲厴閸滃苯浼愮粙瀣安閻㈩煉绱濋崝鈺傚亶韫囶偊鈧喕鍤滅€涳附甯夐幓顡塖T鐠佹崘顓告惔鏃傛暏...
- 鐏忓嫰顣堕崺铏诡攨閸╃顔勭拠鍓р柤
娑撳洣绗€妤傛ɑ銈奸獮鍐叉勾鐠у嚖绱濇潻娆庣昂鐠囧墽鈻兼稉杞扮稑閸︺劌鐨犳0鎴炲Η閺堫垶顣崺鐔枫亣鐏炴洘瀚甸懘姘剧礉閹垫挷绗呴崸姘杽閻ㄥ嫪绗撴稉姘唨绾偓...
- 瀵邦喗灏濈亸鍕暥濞村鍣洪幙宥勭稊閸╃顔勭拠鍓р柤閸氬牓娉�
鐠愵厺鎷遍崥鍫ユ肠閺囨潙鐤勯幆鐙呯礉缂冩垵鍨庨妴渚€顣剁拫鍙樺崕閵嗕胶銇氬▔銏犳珤閵嗕椒淇婇崣閿嬬爱閿涘本鍨滅憰浣圭壉閺嶉绨块柅锟�...