智能温度计设计Word格式文档下载.docx
《智能温度计设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能温度计设计Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。
而现在单片机在农业上也有了很多的应用。
温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。
测量温度的基本方法是使用温度计直接读取温度。
最常见到的测量温度的工具是各种各样的温度计,例如,水银玻璃温度计,酒精温度计,热电偶或热电阻温度计等。
它们常常以刻度的形式表示温度的高低,人们必须通过读取刻度值的多少来测量温度。
利用单片机和温度传感器构成的电子式智能温度计就可以直接测量温度,得到温度的数字值,既简单方便,又直观准确。
2 技术要求
本课题的研究重点是设计一种基于单片机的数字温度计控制系统。
利用数字温度传感器DS18B20,此传感器课读取被测量温度值,进行转换。
主要工作如下:
1.温度测试基本范围0℃—100℃。
2.精度误差小于1℃。
3.LED液晶显示。
3方案论证
该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。
3.1方案一
采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
数据采集部分则使用带有A/D通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。
热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。
系统主要包括对A/D0809的数据采集,自动手动工作方式检测,温度的显示等,这几项功能的信号通过输入输出电路经单片机处理。
此外还有复位电路,晶振电路,启动电路等。
故现场输入硬件有手动复位键、A/D转换芯片,处理芯片为51芯片,执行机构有4位数码管等。
系统框图如图3-1所示。
图3-1热电偶温差电路测温系统框图
3.2方案二
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
既可以单独对多DS18B20控制工作,还可以与PC机通信上传数据,另外AT89S51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
【1】
该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。
该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。
从以上两种方案,容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大。
方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用了方案二。
4硬件设计
4.1系统框图
4.2主要元器件
1.51单片机
2.温度传感器DS18B20
3.MAX232
4.液晶显示
4.3电路基本原理
利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,同时处理后的数据送到LED中显示。
4.4原理图
5软件设计
5.1主程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。
每一个执行软件也就是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。
各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
主程序流程见图5-1。
图5-1主程序流程图
5.2DS18B20初始化
图5-2DS18B20初始化流程图
6硬件安装
6.1系统的调试
硬件调试比较简单,首先检查电路的焊接是否正确,然后可以用万用表测试或通电检测。
软件程序使用keil2软件进行编程与编译,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
下载软件使用的是STC-ISP,STC-ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载到STC89系列和12C2052型单片机。
6.2性能分析
性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。
由于DS18B20的精度很高,所以误差指标可以限制在±
0.5℃以内。
另外,-55~+125℃的测量范围使得该温度计完全适合一般的应用场合,其低压供电特性可以做成电池供电的手持电子温度计。
DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意一下问题:
①DS18B20工作时电流高达1.5mA,总线上挂接点数较多且同时进行转换时要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFET供电。
②连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配等问题。
③在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号。
一旦某个DS18B20接触不好或短线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。
这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。
。
7总结
本系统结构简单,成本低廉,维护方便.在实际应用中工作性能稳定,测量温度准确,直接将温度数据进行编码,使用单根电缆传输温度数据,通信方便,传输距离远且抗干扰性强.
数字单总线温度传感器是目前最新的测温器件,它集温度测量,A/D转换于一体,具有单总线结构,数字量输出,直接与微机接口等优点。
既可用它组成单路温度测量装置,也可用它组成多路温度测量装置,因此本系统在同一条I/O口线上可以实现检测点数量的增加,可以通过一台电脑对多个场所环境温度进行多点监测、采集和控制,应用前景非常大,可以广泛地应用于农业蔬菜大棚、仓库以及其他对温度要求较高的场所。
参考文献
[1]张毅刚.单片机原理及应用[M].高等教育出版社.2004年1月,第1版:
137-156
[2]曹巧媛主编.单片机原理及应用(第二版).北京:
电子工业出版社,2002
[3]何力民编.单片机高级教程.北京:
北京航空大学出版社,2000
[4]金发庆等编.传感器技术与应用.北京机械工业出版社,2002
[5]王锦标,方崇智.过程计算机控制.北京:
清华大学出版社,1997;
36~40
[6]邵惠鹤.工业过程高级控制.上海:
上海交通大学出版社,1997;
58—62,78—101
[7]胡寿松.自动控制原理.北京:
国防工业出版社,2000;
103—124
[8]刘伯春.智能PID调节器的设计及应用.电子自动化,1995;
(3):
20~25
[9]KatsuhikoOgata.ModenControlEngineering.Publishinghouseofelectronicsindustry,2000:
196—202
[10]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:
航空航天大学出版社,2006.P321~P326
[11]王忠飞,胥芳.MCS-51单片机原理及嵌入式系统应用[M].西安:
西安电子科技大学出版社,2007.P268-273
[12]刘国钧,陈绍业,王凤翥.图书馆目录.第1版.北京:
高等教育出版社,1957
[13]傅承义,陈运泰,祁贵中.地球物理学基础.北京:
科学出版社,1985,447
DesignofDigitalThermomerBasedonSCM
Abstract
Mengshaoping
Abstract:
Inthispaper,bothhardwareandsoftwareforautomaticcontrolofwatertemperatureontheprocess,inthecontrolofthemainapplicationoftheprocessofAT89C51,ADC0809,LEDdisplay,LM324comparator,butmainlythroughthedigitaltemperaturesensorDS18B20collectingambienttemperaturetosingle-chipmicrocomputerasthecorecontrolcomponents,andthroughfourreal-timedigitaldisplayofadigitalthermometertemperature.Softwareusingassemblylanguageforprogramming,sothattheimplementationofDirectivespeed,tosavestoragespace.Inordertofacilitatetheexpansionandchangestothedesignofmodularsoftwarestructure,sothatthelogicoftherelationshipbetweenprogramdesignmoreconcise,Hardwaresoftwareco-operationunderthecontrolofit.
Keywords:
Single-chipmicrocomputersystem;
Sensor;
DataAcquisition;
ADC;
Temperature
致谢
二年的读书生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我将面对又一次征程的开始。
在这四年的求学生涯中师长、亲友给与了我大力支持,在这个翠绿的季节我将迈开脚步走向远方,怀念,思索,长长的问号一个个在求学的路途中被知识的举手击碎,而人生的思考才刚刚开始。
感谢教书育人的老师,我不是你们最出色的学生,而你们却是我最尊敬的老师。
大学时代的老师治学严谨,学识渊博,思想深邃,视野雄阔,为我营造了一种良好的精神氛围。
授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了对待知识,走向社会的思考方式。
在这里尤其要感谢辛宇老师,从论文题目的选定到论文写作的指导,感谢您的悉心的点拨。
感谢同学在我遇到困境时向我伸出援助之手,同窗之谊我们社会再续;
在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚谢意!
附录1
;
程序名称:
DS18B20
;
程序功能:
通过CPU模拟DS18B20时序,从而完成温度采集并显示
程序最终修改日期:
2007年1月11日
TEMP_LEQU30H;
存放读出的温度低8位
TEMP_HEQU31H;
存放读出的温度高8位
DATEQUP3.4
AAEQU20H;
存放要显示温度的十位(十进制数)
BBEQU21H;
存放要显示温度的个位(十进制数)
CCEQU22H;
存放要显示小数点后一位(十进制数)温度
DDEQU23H;
存放要显示小数点后第二位(十进制数)温度
RSBITP2.5
RWBITP2.6
EPBITP2.7
NUMEQUP0
ORG0000H
SJMPMAIN
ORG0040H
MAIN:
MOVR2,#10
LOOP_DEL1:
LCALLDEL_1MS
DJNZR2,LOOP_DEL1
LCALLLCD_INIT
MOVR1,#4
LCALLLCD_WCMD
MOVR3,#0
LOOP_W:
MOVA,R3
MOVDPTR,#TEMP
MOVCA,@A+DPTR
LCALLLCD_WDATA
LCALLDEL_1MS
INCR3
CJNER3,#9,LOOP_W
MAIN_18B20:
LCALLINT;
调用初始化程序
MOVA,#0CCH;
发SKIPROM(跳过ROM,代码为0CCH)命令
LCALLWRITE
MOVA,#44H;
发"
温度转换"
命令,代码为44H
LCALLDELAY;
延时500ms,等待DS18B20转换
LCALLINT;
调用复位程序
再次发送跳过ROM命令
MOVA,#0BEH;
读存储器"
命令
接下来将依次读18B20内部缓冲寄存器的第0到第8个字节内容,因本次只需读出温度,又因为先读第0和第1字节,故有如下程序
LCALLREAD
MOVTEMP_L,A;
读出温度的低8位
MOVTEMP_H,A;
读出温度的高8位
接下来调用显示子程序
LCALLDISP
SJMPMAIN_18B20
初始化程序,分以下几个步骤
INT:
SETBDAT;
将DS18B20数据线DAT拉高电平
MOVR0,#200
LOOP:
CLRDAT;
主机发出“复位脉冲”,将DS18B20数据线DAT拉低480-960微秒
DJNZR0,LOOP;
以上两句三个机器周期。
若晶振为11.0592MHZ,则约600多微秒
主机释放DS18B20数据线DAT,口线改为输入
MOVR0,#30
DJNZR0,$;
上拉电阻将DS18B20数据线DAT拉为高电平约15-60微秒,此时DS18B20处于等待状态
接下来判断DS18B20是否有响应(即DS18B20是否回送“存在脉冲”,也即DS18B20的数据线是否变低),若有响应则应维持60~240微妙
CLRC
ORLC,DAT
JCINT;
若DS18B20无响应(即未准备好,也即C=1),重新初始化;
若有响应(即C=0),顺序往下执行
MOVR0,#60
LOOP1:
JCLP;
响应是否结束,如结束则数据线应为高电平,就转LP;
否则继续查询响应是否结束
DJNZR0,LOOP1;
60已减完,响应仍未结束,重新开始
SJMPINT
LP:
MOVR0,#120;
响应已结束,再维持约240微秒
DJNZR0,$
RET;
返回
写入一个字节的子程序,要写的字节内容存在A中(先写字节的低位)
WRITE:
MOVR3,#8;
共需写入8个位(一个字节)
WR_BIT:
高电平
MOVR4,#7
CLRC;
本语句可以不写(因为C中原内容被覆盖掉了)
RRCA;
先移低位
主机先将DS18B20数据线DAT拉低
DJNZR4,$;
低电平持续时间14us(应该在15us左右)
释放数据线,结合下一条语句,本语句可有可无
MOVDAT,C;
写入一位
MOVR4,#15
写入一位的保持时间在15us-30us左右
DJNZR3,WR_BIT;
继续写下一位,直到8位写完为止
释放数据线
读一个字节的子程序(先读字节低位),读出的一个字节存入A中
READ:
MOVR6,#8;
共需读出8个位(一个字节)
RD_BIT:
主机先将DS18B20数据线DAT拉低(与写入的时序同)
MOVR4,#7
上拉电阻将DS18B20数据线DAT拉为高电平,时间应该在15us左右,此时口线改为输入
本语句同样可以不写
MOVC,DAT;
读取一位数据
RRCA
MOVR5,#15
DJNZR5,$;
读完一位需保持时间15us-30us左右
DJNZR6,RD_BIT;
继续读下一位,直到8位读完为止
显示程序
DISP:
MOVA,TEMP_H;
取高字节的低3位;
取低字节的高4位
ANLA,#07H
MOV50H,A
MOVA,TEMP_L;
ANLA,#0F0H
ORLA,50H;
进行或逻辑组成一字节,存放在A
SWAPA;
高低4位互换
MOVB,#10
DIVAB;
除之前,A中放被除数,除之后,A中放商,B中放余数
MOVAA,A;
AA存放要显示温度的十位(十进制数)
MOVBB,B;
BB存放要显示温度的个位(十进制数)
MOVA,TEMP_L;
再将低字节的低4位取出
ANLA,#0FH
MULAB
MOVB,#16
DIVAB
MOVCC,A;
CC中存放要显示小数点后一位(十进制数)温度
MOVA,B
MOVDD,A;
DD中存放要显示小数点后第二位(十进制数)温度
以下要注意R0和R1的取值对显示效果的影响
MOVR0,#1
NOP
MOVDPTR,#TAB;
查表
LOOP_DEL:
DJNZR2,LOOP_DEL
LCALLLCD_INIT1
MOVR1,#5
MOVR3,AA
MOVA,R3
MOVDPTR,#NUM1
MOVCA,@A+DPTR
MOVR3,BB
MOVR3,#10
MOVR3,CC
MOVR3,DD
MOVR6,#4
MOVR7,#50
LOOP2:
DJNZR7,LOOP2
DJNZR6,LOOP2
RET
SJMP$
LCD_INIT:
MOVR1,#0
MOVR1,#1
MOVR1,#2
MOVR