1、微机接口与控制课程论文 基于单片机与LABVIEW的测温系统 2011年3月 Microcontroller-based temperature Measurement System With Labview 上海大学 10 ~ 11 学年冬季学期研究生课程考试 课程名称: 微机接口与控制专题 课程编号: 091101908 论文题目: 基于单片机与LABVIEW的测温系统 研究生姓名: 金志祥
2、 学 号: 10721142 论文评语: 成 绩: 任课教师: 陆明刚 评阅日期: 基于单片机与LABVIEW的测温系统 金志祥 (上海大学 机电工程与自动化学院,上海200072) 摘要:在工业生产中的许多场合,我们都需要对温度进行监控,并对其进行数据分析。本文介绍了一种由单片机和LABVIEW相结合的温度测控方法,能及时的获取当前的温度值和温度变化曲线,便于
3、对温度进行适当调节。 关键词:单片机;LABVIEW;变化曲线 Microcontroller-based Temperature Measurement System With LABVIEW JIN Zhixiang (Shanghai University, Electrical Engineering and Automation, Shanghai 200072, China) Abstract:In industrial production in many occasions, we all need to monitor the temperature,
4、and its data analysis. This paper introduces a LABVIEW by the microcontroller and the combination of temperature control methods, timely access to the current temperature and temperature curves, easy to properly adjust the temperature. Keywords:MCU;LABVIEW;Curve 1 引言 温度量是工业对象控制中的一项重要参数,对它的测量
5、与控制具有十分重要的意义。采用51单片机为核心的温度系统对温度进行控制,是比较常用的一类工业控制系统。这类系统不仅具有控制方便、组态简单、灵活性大、成本较低,可靠性高等优点,而且可以大幅度提高被控制温度的技术指标,从而大大提高产品的质量和数量。本人根据实验室现有设备,设计了一套基于51单片机和LABVIEW相结合的温度测控系统,能很好的完成对温度的实时监测和控制。 2 设计方案 本系统的电路设计方框图如图1所示,它由以下几个部分组成: STC89C58RD+ 单片机 DS18B20 数码管显示 LABVIEW显示与监控 图1 温度测控系统总体设计方案 (1) 控
6、制部分:主芯片采用单片机STC89C58RD+; (2) 显示部分:采用四位LED数码管动态扫描以及LABVIEW实现温度显示和获得温度曲线。 (3) 温度采集部分:采用DS18B20温度传感器。 2.1 控制部分 STC89C58RD+是美国STC公司设计,国内宏晶公司贴牌生产的新一代51增强型单片机。它具有加密性强、超强坑干扰、超低功耗、系统可编程、内含MAX180专用复位电路,且内含32KB的FLASH和16KB的EEPROM,同时内含1280byte的内部SRAM存储空间。 2.2 显示部分 显示部分采用四位共阴极的数码管和LABVIEW相结合,实现对温度的动态监测。
7、 2.3 温度采集部分 DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。 图2.1 DS18B20引脚图与实物图 DS18B20温度传感器特性: 适应电压范围宽,电压范围在3.0~5.5V,在寄生电源方式下可由数据线供电。 (1) 独特的单线接口方式,它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。 (2) 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。 (3) 在使用
8、中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。 (4) 测温范围-55°~+125°,在-10°~+85°时精度为±0.5℃。 (5) 可编程分辨率为9~12位,对应的可分辨温度分变为0.5℃,0.25℃,0.125℃和0.0625℃,可实现高精度测温。 (6) 在9位分辨率时,最多在93.75ms内把温度转换为数字;12位分辨率时,最多在750ms内把温度值转换为数字,显然速度更快。 (7) 测量结果直接输出数字温度信号,以“一线总线”串行送给CPU,同时可传送CRC检验码,具有极强的抗干扰纠错能力。 (8) 负压特性。电源极性接反时,芯片不会一发热
9、而烧毁,但不能正常工作。 3 硬件电路的设计 该系统的部分电路如图3.1所示,DS18B20的第2管脚(即DQ)接在STC89C58RD+单片机的P1.1脚。 图3.1 温度测试系统的部分硬件原理图 4 软件设计 我们先来了解一下DS18B20的工作时序图。 (1) DS18B20的初始化,其时序图如图4.1所示。 图4.1 初始化时序图 其操作方法为: l 先将数据线置高电平1; l 延时(该时间要求不是很严格,但是要尽可能短一点); l 数据线拉到低电平0; l 延时(480~960us之间); l 数据线拉到高电平1; l 延时等待,如果初始化成
10、功则会在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限的等待,否则程序会进入死循环,所以要进行超时判断。 l 若CPU读到数据线上的低电平后,还要进行延时,其延时的时间从发出高电平算起(第5步的时间算起)最少要480μs。 l 将数据线再次拉到高电平之后结束。 (2) DS18B20写数据其时序图如图4.2所示。 图4.2 写数据时序图 其操作方法为: l 数据线先置低电平0。 l 延时确定的时间为15μs。 l 按从低位到高位的顺序发送数据(一次只发送一位)。 l 延时45μs。 l 将数据线拉到高电平1。 l
11、 重复以上5个步骤,直到发送完整个字节。
l 最后将数据线拉高到1。
(3) DS18B20读数据,其时序图如图4.3所示。
图4.3 读数据时序图
其操作方法为:
l 将数据线拉高到1,再延时2μs。
l 将数据线拉低到0,延时6μs。
l 将数据线拉高到1,延时4μs。
l 读数据线的状态得到一个状态位,并进行数据处理,延时30μs。
l 重复以上步骤,直到读完一个字节。
该系统的程序主要包括主程序、获取温度值子程序、串口发送程序等。系统主程序的源代码为:
#include
12、 unsigned char #define uint unsigned int sbit ds=P1^1; //温度传感器信号线 sbit dula=P2^0; //数码管段选线 sbit wela=P2^3; //数码管位选线 uint temp; float f_temp; uint warn_l1=260; uint warn_l2=250; uint warn_h1=300; uint warn_h2=320; unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d
13、0x07, 0x7f,0x6f,0xbf,0x86, 0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0xff,0xef}; //不带小数点的编码 void delay(uint z)//延时函数 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void dsreset(void) //18B20复位,初始化函数 { uint i; ds=0; i=103; while(i>0)i--; ds=1; i=4; while(i>0)i--;
14、 } bit tempreadbit(void) //读1位函数 { uint i; bit dat; ds=0;i++; //i++ 起延时作用 ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return (dat); } uchar tempread(void) //读1个字节 { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<
15、<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat); } void tempwritebyte(uchar dat) //向18B20写一个字节数据 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //写 1 { ds=0; i++;i++; ds=1;
16、 i=8;while(i>0)i--; } else { ds=0; //写 0 i=8;while(i>0)i--; ds=1; i++;i++; } } } void tempchange(void) //DS18B20 开始获取温度并转换 { dsreset(); delay(1); tempwritebyte(0xcc); // 写跳过读ROM指令 tempwritebyte(0x44); // 写温度转换指令 } uin
17、t get_temp() //读取寄存器中存储的温度数据 { uchar a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b; temp<<=8; //两个字节组合为1个字 temp=temp|a; f_temp=temp*0.0625; //温度在寄存器中为12位 分
18、辨率位0.0625° temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; //temp是整型 } ////////////////////显示程序////////////////////////// void display(uchar num,uchar dat) { uchar i; dula=0; P0=table[dat]; dula=1; dula=0; wela=0; i=0XFF;
19、 i=i&(~((0X01)<<(num))); P0=i; wela=1; wela=0; delay(1); } void dis_temp(uint t) { uchar i; i=t/100; display(0,i); i=t%100/10; display(1,i+10); i=t%100%10; display(2,i); } void warn(uint s,uchar led) //蜂鸣器报警声音 ,s控制音调 { uchar i;i=s; dula=0;
20、 wela=0; while(i--) { dis_temp(get_temp()); } P1=0XFF; i=s; while(i--) { dis_temp(get_temp()); } } void deal(uint t) { uchar i; if((t>warn_l2)&&(t<=warn_l1)) { warn(40,0x01); } else if(t<=warn_l2)
21、
{
warn(10,0x03);
}
else if((t
22、nit_com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } void comm(char *parr) { do { SBUF = *parr++; //发送数据 while(!TI); //等待发送完成标志为1 TI =0; //标志清零 }while(*parr);
23、 //保持循环直到字符为'\0' } void main() { uchar buff[4],i; dula=0; wela=0; init_com(); while(1) { tempchange(); for(i=10;i>0;i--) { dis_temp(get_temp()); } deal(temp); sprintf(buff,"%f",f_temp); for(i=10;i>0;i--) { d
24、is_temp(get_temp());} comm(buff); for(i=10;i>0;i--) { dis_temp(get_temp()); } } } LABVIEW部分程序代码如图4.4所示:(其中串口波特率为9600bps,数据比特为8位,无奇偶校验位)。 图4.4 LABVIEW部分程序代码 5 系统效果及数据分析 LABVIEW是一种业界领先的工业标准图形化编程工具,主要用于开发测试、测量与控制系统。它是专门为工程师和科学家而设计的直观图形化编程语言。它将软件和各种不同的测量仪器硬件及计算机
25、集成在一起,建立虚拟仪器系统,以形成用户自定义的解决方案。利用NI的虚拟仪器技术,让以往复杂的数据采集工作变得异常简单,大大提高了数据分析和得出结论的效率。 图5.1为本系统在实验室(装有空调)所测得的数据结果及温度变化曲线。 图5.1 LABVIEW前面板数据采集结果 由图5.1,我们可以很好的根据温度曲线分析室内温度的变化情况,而且能及时的获得实时的温度值,可以很方便的对室内温度进行测控。 致谢:感谢陆明刚老师对本工作的大力支持,通过对微机接口这门课程的学习,我进一步加深了对单片机的了解,陆老师那种严谨的科学态度也深深的感染了我们! 参考文献 [1] 陈锡辉,
26、张银鸿.LABVIEW8.20程序设计从入门到精通[M].北京:清华大学出版社,2007.7. [2] 郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2009.1. [3] 张义和,王敏男等.例说51单片机[M].北京:人民邮电出版社,2010.6. [4] 杨旭.C语言程序设计案例教程[M].北京:人民邮电出版社,2005.1. [5] DONG Xiao You, BAI Ze Sheng, LIU Ru.Temperature measurement based on MCS-51 single chip microcomputer[J]. Journal of Ya
27、nan University ,2005(02) :32-35. [6] 李毅, 余少群, 周步洲. 基于DS18B20 的测温系统的设计[J]. 电子技术,2009(01):31-33. [7] 明德刚.DS18B20 在单片机温度控制系统中的应用[J]. 贵州大学学报(自然科学版),2006(12):43-44. [8] 徐玮.51单片机综合学习系统——DS18B20温度实验篇[J]. 电子制作,2008,(05). [9] 马云峰.单片机与数字温度传感器DS18B20的接口设计[J]. 计算机自动测量与控制,2002,(04). [10] 赵永杰, 徐源. 基于DS18B2
28、0的温度测量系统[J]. 现代电子技术,2008,(10). [11] 黄河.基于DS18B20的单总线数字温度计[J]. 湘潭师范学院学报(自然科学版) ,2008,(04). [12] 马云峰; 陈子夫; 李培全. 数字温度传感器DS18B20的原理与应用[J]. 电子元器件应用,2002,(Z1). [13] 管继斌,白雁钧改编, 林伸茂编著.8051单片机彻底研究[M]. 北京:人民邮电出版社,2004. [14] 龚运新编著. 单片机C语言开发技术[M]. 北京:清华大学出版社,2006. [15] 马忠梅等编著.单片机的C语言应用程序设计[M]. 北京:北京航空航天大学出
29、版社,2003. [16] Jon,Titus. 不断发展的8051单片机[J]. 电子产品世界,2005,(06). [17] 赵海兰. 智能温度传感器DS18B20[J]. 电子世界,2003,(07). [18] 王金亮, 张强.数字温度传感器DS18B20在化学工业中的应用[J]. 国外电子测量技术,2005,(02). [19] 江太辉,邓展威. DS18B20数字式温度传感器的特性与应用[J]. 电子技术,2003,(12). [20] 袁海林. 具有语音播报功能的温控系统的设计[J]. 电脑知识与技术(学术交流), 2007,(05). [21] 李凝. 温度采集系
30、统设计[J]. 科技促进发展,2009,(06). [22] 冯国珍.利用温度传感器的分布式系统[J]. 电气时代,2004,(02). [23] 毕娟,崔光照等. DS18B20及其在化学荧光免疫定量检测仪恒温系统中的应用[J]. 仪表技术与传感器,2004,(04). [24] 韦珑珅,杨荣松. 基于DS18B20的单片机多点温度测量系统[J]. 机械与电子,2007,(11). [25] 居荣,郭怡倩. DS18B20在温控系统中的应用[J]. 农机化研究,2005,(01). [26] 管力锐,南光;,高宁. 单片机在大型冷库温度测量中的应用[J]. 长春光学精密机械学院学报
31、2000,(02). [27] 孙少伟,戴义保,章高琴. 基于DS18B20组网测温的研究[J]. 自动化仪表,2006,(10). [28] 吉顺祥,刘旺锁,宋晓婷. 基于LabVIEW的数据库访问技术[J]. 船海工程,2007,(03). [29] 杨忠仁,饶程, 邹建等. 基于LabVIEW数据采集系统[J]. 重庆大学学报(自然科学版),2004,(02). [30] 熊焕庭,董超俊等. 虚拟仪器的几个应用实例[J]. 五邑大学学报(自然科学版) ,1999,(04). [31] Gary W. Johnson. LabVIEW Graphical Programmin
32、g: Practical Applications in Instrumentation and Control. McGraw-Hill School Education Group. Jul. 1997. [32] Richard Bitter, Rick Bitter.LabVIEW Advanced Programming Techniques. CRC Press, Inc[M]. Aug. 2000. [33] Jianping Zhang. On-Line Measure System of the Temperature in the Synthetic Ammonia
33、Tower Based on the DS18B20 Temperature Sensor. Proceedings of the 2009 International Conference on Measuring Technology and Mechatronics Automation. Apr. 2009. [34] Yu Zhang, ZhiShan Wang, JinHua Li.Design a Wireless Temperature Measurement System Based on NRF9E5 and DS18B20. Proceedings of the 201
34、0 International Conference on Measuring Technology and Mechatronics Automation .Mar, 2010. [35] Korinne Resendez, Ray Bachnak. Labview programming for internet-based measurements. Journal of Computing Sciences in Colleges . Apr. 2003. [36] Robert H. King .Introduction to Data Acquisition with Lab
35、VIEW. McGraw-Hill Science/Engineering/Math[M]. Sep. 2008 . [37] Gary W. Johnson, Richard Jennings .LabVIEW Graphical Programming. McGraw-Hill Science/Engineering/Math[M]. Jul. 2001. [38] Mihaela Lascu, Dan Lascu.LabVIEW based biomedical signal acquisition and processing. Proceedings of the 7th W
36、SEAS International Conference on Signal Processing, Computational Geometry & Artificial Vision. Aug. 2007. [39] Guimei Wang, Shanlin Jiao, Hui Song.Mine Pump Comprehensive Performance Testing System Based on Labview. Proceedings of the 2009 International Conference on Measuring Technology and Mechatronics Automation. Apr. 2009. [40] Lin Xinmei, Zhao Ziyu. A Study of Transient Temperature Measuring System Based on LabVIEW for Droplets. Proceedings of the 2008 International Conference on Computer Science and Software Engineering. Dec. 2008 .






