《环境温度测量与报警系统.docx》由会员分享,可在线阅读,更多相关《环境温度测量与报警系统.docx(30页珍藏版)》请在三一办公上搜索。
1、等级: 湖南工程学院课 程 设 计课程名称 单片机原理与应用 课题名称 环境温度与报警 专 业 电气工程及其自动化 班 级 1192班 学 号 201101019220 姓 名 李再兵 指导教师 赵葵银 2013年09月02 日湖南工程学院课 程 设 计 任 务 书 课程名称 单片基原理与应用 课 题 环境温度与报警 专业班级 电气工程及其自动化 学生姓名 李再兵 学 号 201101019220 指导老师 赵葵银 审 批 赵葵银 任务书下达日期 2013年09月 02 日 任务完成日期 2013年09月13日设计内容与设计要求设计内容:以51系列单片机为核心,以开发板为平台;设计一个环境温度
2、监测与保护系统,要求使用温度传感器DS18B20测量温度,再经单片机处理后,由LED数码管显示测量的温度值。测温范围为0100,超过100度报警;并要求焊接好开发板,在开发板上进行调试。设计要求:1)确定系统设计方案; 2)进行系统的硬件设计;3)完成必要元器件选择;4)开发板焊接及测试5)系统软件设计及调试;6)系统联调及操作说明7)写说明书主 要 设 计 条 件1. MCS-51单片机实验操作台1台;2. PC机及单片机调试软件,仿真软件proteus;3. 开发板1块; 4. 制作工具1套;5. 系统设计所需的元器件。说 明 书 格 式1. 封面2. 课程设计任务书3. 目录4. 系统总
3、体方案设计5. 系统硬件设计6. 软件设计(包括流程图)7. 系统的安装调试说明8. 总结 9. 参考文献10. 附录11. 课程设计成绩评分表。进 度 安 排设计时间分为二周第一周星期一、上午:布置课题任务,课题介绍及讲课。下午:借阅有关资料,总体方案讨论。星期二、分班级焊接开发板星期三、确定总体方案,学习与设计相关内容。星期四、各部分方案设计,各部分设计。星期五、设计及上机调试。星期六、设计并调试第二周星期一:设计及上机调试。星期二:调试,中期检查。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。 星期五下午:答辩。参 考 文 献参考文献1、王迎旭编.单片机原理
4、与应用M.机械工业出版社,2010。2、楼然苗编.51系列单片机设计实例M.北京航空航天大学出版社,2006。3、黄勤编.计算机硬件技术基础实验教程M.重庆大学出版社,2004。4、刘乐善编.微型计算机接口技术及应用M.华中科技大学出版社,2004。5、陈光东编.单片微型计算机原理及接口技术M.华中科技大学出版社,2005。 目 录摘要1第1 章 引2 1.1课题背景2 1.2研究内容和意义3第2章 DS18B20概述4 2.1 DS18B20封装形式及引脚功能4 2.2 DS18B20内部结构5 2.3 DS18B20供电方式6 2.4 DS18B20的测温原理6第3章 总体设计方案8 3.
5、1设计目的8 3.2设计任务与要求8 3.2.1设计任务8 3.2.2设计要求8 3.3基本思路8 3.4总体设计框图8第4章 系统硬件设计9 4.1 单片机最小系统的设计9 4.2温度采集电路的设计10 4.3 LED显示电路的设计10 4.4 报警电路的设计11第5章 系统软件设计12 5.1主程序设计12 5.2温度测量模块程序设计13第6章 系统的安装调试与仿真14 6.1安装与调试14 6.2 仿真14 6.2.1 软件仿真14 6.2.2系统性能测试14第7章 总结16参考文献17附录A:元件清单18附录B:硬件原理图18附录C:源程序清单19 摘 要 随着时代的进步和发展,温度的
6、测试已经影响到我们的生活、工作、科研、各个领域,已经成为了一种非常重要的事情,因此设计一个温度测试的系统势在必行。 本文主要介绍了一个基于STC89C52单片机的数字温度报警器系统。详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度的采集和报警,并可以根据需要任意上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当做温度处理模块潜入其他系统中,作为其他主系统的辅助
7、扩展。DS18B20与STC89C52结合实现最简温度报警系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。关键词:单片机、温度检测、STC89C52、DS18B20第1章 引言1.1课题背景温度是工业对象中主要的被控参数之一,广泛使用的各种加热炉、热处理炉、反应炉等,对工件的温度处理要求严格控制。随着科学技术的发展,要求温度测量的范围向深度和广度发展,以满足工业生产和科学技术的要求。基于单片机系统的可移植性、扩展性,利于现代测控、自动化、电气技术等专业实训要求。以单片机为核心设计的温度报警器,具有安全可靠、操作简单方便、智能控制等优点。温度对于工业生产如
8、此重要,由此推进了温度传感器的发展。温度传感器主要经过了三个发展阶段:(1)模拟集成温度传感器。该传感器是采用硅半导体集成工艺制成,具有功能单一、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗、外围电路简单等特点。它是目前在国内外应用最为普遍的一种集成传感器,典型产品有AD590、AD592、TMP17、LM135等;(2)模拟集成温度控制器。模拟集成温度控制器主要包括温控开关、可编程温度控制器,如LM56、AD22105和MAX6509。某些增强型集成温度控制器(例如TC652/653)中还包含了A/D转换器以及固化好的程序,这与智能温度传感器有某些相似之处。但它自成系统,工作时
9、并不受微处理器的控制,这是二者的主要区别;(3)智能温度传感器 (亦称数字温度传感器)。智能温度传感器是在20世纪90年代中期问世的,其内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。进入21世纪后,智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片机测温系统等的方向发展。数字化温度传感器可以直接将温度量以数字脉冲信号形式输出,具有测量精度高、抗干扰能力强、传输距离远、外围接口电路简单等诸多优点。同时数字温度传感器还可直接与微处理
10、器进行接口,大大方便了传感器输出信号的处理.数字单总线温度传感器是目前最新的测温器件,它集温度测量,A/D转换于一体,具有单总线结构,数字量输出,直接与微机接口等优点。1.2研究内容和意义本温度报警器以STC系列单片机为控制核心,开发板为平台,数字温度传感器DS18B20测量被控温度,结合7段LED组合而成。当被测量值超出预设范围则发出警报,且精度高,适用于大多数工业生产以及教育教学领域。温度是一种最基本的环境参数,它是与人类的生活、工作关系最密切的物理量,也是各门学科与工程研究设计中经常遇到和必须精确测量的物理量。从工业炉温、环境气温到人体温度;从空间、海洋到家用电器,各个技术领域都离不开测
11、温和控温。因此,研究温度的测量和控制方法具有重要的意义。第2章 DS18B20概述DS18B20是Dallas公司继DS1820后推出的一种改进型“单总线”智能数字温度传感器,只需一根线就能直接读出被测温度值,并可根据实际需求来编程实现912位数字值的读数方式。2.1 DS18B20封装形式及引脚功能 图2.1 DS18B20封装形式和引脚功能如图2.1所示,DS18B20引脚名称及定义如下表: 引 脚 定 义 GND 电源负极 DQ 信号输入输出 VDD 电源正极 NC 空2.2 DS18B20内部结构C 64位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配
12、置寄存器8位CRC发生器Vdd图2.2中出示了DS18B20 的主要内部部件,下面对DS18B20内部部分进行简单的描述:(1)64位ROM:64位ROM是由厂家使用激光刻录的一个64位二进制ROM代码,是该芯片的标识号,如表2.1所示:表2.1 64位ROM标识8位循环冗余检验48位序列号8位分类编号(10H)MSB LSBMSB LSBMSB LSB 第1个8位表示产品分类编号,DS18B20的分类号为10H;接着为48位序列号。它是一个大于281*1012的十进制编码,作为该芯片的唯一标示代码;最后8位为前56位的CRC循环冗余校验码,由于每个芯片的64位ROM代码不同,因此在单总线上能
13、够并接多个DS18B20进行多点温度实习检验。(2)温度传感器:温度传感器是DS18B20的核心部分,该功能部件可完成对温度的测量通过软件编程可将-55125范围内的温度值按9位、10位、11位、12位的分辨率进行量化,以上的分辨率都包括一个符号位,因此对应的温度量化值分别为0.5、0.25、0.125、0.0625,即最高分辨率为0.0625。如果测得的温度大于0,这5位为0,只要将测得的数值乘上0.0625即可得到实际温度;如果温度小于0,这5位为1,测得的数值需要取反加1再乘上0.0625即可得到实际温度。(3)高速缓存器:DS18B20内部的高速缓存器包括一个高速暂存器RAM和一个非易
14、失性可电擦除的EEPROM。非易失性可点擦除EEPROM用来存放高温触发器TH、低温触发器TL和配置寄存器中的信息。(4)配置寄存器:配置寄存器的内容用于确定温度值的数字转换率。DS18B20工作是按此寄存器的分辨率将温度转换为相应精度的数值,它是高速缓存器的第5个字节,该字节定义如表2.2所示: 表2.2 匹配寄存器TMR0R111111TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分辨率。DS18B20依靠一个单线端口通讯。在单线端口条件下,必须先建立ROM 操作协议,才能进行存储器和控制操作。因此
15、,控制器必须首先提供下面5个ROM 操作命令之一: 1)读ROM; 2)匹配ROM; 3)搜索ROM; 4)跳过ROM; 5)报警搜索。2.3 DS18B20供电方式 DS18B20可以采用外部电源供电和寄生电源供电两种模式。外部电源供电模式是将DS18B20的GND直接接地,VDD与外部电源正极相连。DQ与单总线相连作为信号线。寄生电源供电模式时DS18B20的GND和VDD均直接接地,DQ与单总线相连,单片机其中一个I/O口与DS18B20的DQ端相连。2.4 DS18B20的测温原理 DS18B20的测温原理如图2.5所示, 其主要由斜率累加器、温度系数振荡器、减法计数器、温度存储器等功
16、能部件组成。 DS1820测温原理:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于-55的一个值。如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55)的值增加,表明所测温度大于-55。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨率。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获
17、得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。DS18B20内部对此计算的结果可提供0.5的分辨率。温度以16bit带符号位扩展的二进制补码形式读出,表2.4 给出了温度值和输出数据的关系。表2.4 温度数据关系温度数据输出(二进制)数据输出(十六进制)+12500000000 1111101000FA+2500000000 001100100032+0.500000000 000000010001000000000 000000000000-0.511111111 11111111FFFF-2511111111 11001110FFCE-5511111111 10010
18、010FF92S18B20遵循单总线协议,每次测温时都必须有4个过程: 初始化; 传送ROM 操作命令; 传送ROM操作命令; 数据交换;第3章 总体设计方案3.1设计目的 本次课题主要是锻炼学生自主学习和动手能力。加深对单片机的认识,培养学生创新、开发简单程序技能。培养学生发现问题、解决问题的能力,从理论上升到实验,理论与实验相互结合,相互促进。3.2设计任务与要求3.2.1设计任务 基于STC89C52单片机设计温度报警,可以采集周围的温度信息进行显示,并且可以根据应用环境要求作出报警提示。3.2.2设计要求 (1)实时温度检测并显示对应的温度值。 (2)具有上下限温度报警功能。3.3基本
19、思路 该系统主要由温度采集,信号处理,显示模块以及报警系统等及部分组成。单片机发出信号控制数字温度传感器DS18B20采集温度模拟信号,温度传感器将模拟信号转换成电信号回馈给单片机控制中心。电信号经单片机处理后通过显示模块将温度显示出来。当温度达到预定值时,单片机会做出指示,报警系统发出报警提示。3.4总体设计框图 STC 89C52 单片机数字温度传感器双限报警系统译码显示电路第4章 系统硬件设计4.1 单片机最小系统的设计 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能
20、集成到一块硅片上构成的一个小而完善的计算机系统。本次课程设计中选用STC89C52式单片机,其最小系统主要由电复位、振荡电路组成。单片机的最小系统如图4.1所示。单片机的复位电路原理是在单片机的复位引脚RST上电阻和电容,实现上电复位。当复位电平持续两个时钟周期以上时复位有效。复位电路由按键复位和上电复位两部分组成,上电复位是在复位引脚上连接一个电容到VCC,再连接一个电阻到GND。AT89C51单片机使用12MHZ的晶振最为振荡源,由于单片机内部有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容一般在15pF至50pF之间。外部晶振结合单片机内部电路产生单片机所需的时钟频率。 图4.1
21、 单片机最小系统4.2温度采集电路的设计温度采集电路部分,采用数字温度传感器DS18B20进行温度采集。温度测量范围为-55+125,测量精度为0.5;被测温度用符号扩展的16位数字量方式串行输出;CPU只需用一个端口线就可以与DS18B20通信。温度采集电路如图4.2所示。DS18B20采用单线进行数据传输,与单片机的P1.0口相连进行数据的双向传输。 图4.2 温度采集电路4.3 LED显示电路的设计 LED数码管与单片机的P0口相连,单片机将采集到的温度值转化为与数码管对应的数据,通过P0口输出显示。即信号通过译码管的端口a、b、c、d、e、f、g 、dp 端来控制每段译码管的亮灭与否,
22、同时通过端口1、2、3、4 四个端口来控制四个译码管。在本次设计中,采集到的温度值超过所设置的范围时,单片机会输出一信号,通过三极管放大后驱动蜂鸣器发出报警信号。LED数码显示电路如图4.3所示。 图4.3 数码显示电路4.4 报警电路的设计报警电路中加一PNP三极管驱动,基极接单片机P11口,当端口变成低电平时,驱动三极管会导通,VCC电压加载到蜂鸣器使其发声、报警发光二极管亮,如图4.4所示。 图4.4 报警电路第5章 系统软件设计系统程序主要包括主程序,温度传感器初始化子程序,温度传感器读写子程序,温度转换与计算子程序以及显示子程序。5.1主程序设计主程序的主要功能是负责读出并处理DS1
23、8B20的测量的当前温度值,温度的实时显示,并根据设置的上下限判断是否报警。系统开始运行时,温度传感器测量并计算温度值通过P1.0口传输进单片机里进行处理,经过处理后的数据再通过P0口传输到数码管进行显示。通过按键设置温度报警界限,当超过报警界限时单片机将相应的数据通过P3.7口传输报警,其程序流程见图5.1所示。 图5.1 主程序流程图5.2温度测量模块程序设计温度测量程序完成的功能是读出数字温度传感器的温度值。要正确的读出温度值,必须严格遵守单总线器件的命令序列,否则,单总线器件不会响应主机。单总线器件命令序列如图5.2.1所示。温度测量模块程序流程图如图5.2.2所示。发DS18B20复
24、位命令开始发跳过ROM命令发温度转换开始命令结束 图5.2.1 单总线器件命令序列 图5.2.2温度测量模块程序流程图第6章 系统的安装调试与仿真系统调试以程序为主,硬件调试比较简单,软件调试可以先编写显示程序并进行硬件正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示刷新等子程序的编程及调试,由于DS18B20 与单片机采用串行数据传送,因此,对DS18B20 进行读写编程时必须严格的保证读写时序,否则将无法读取测量结果。6.1安装与调试 根据STC89C52单片机版原理图焊接好元器件,并检查个焊点是否出现虚焊,焊盘脱落等情况。然后上电检测各模块的通电情
25、况,尽可能排除一切故障保证调试顺利。 按照设计要求选好单片机引脚接通线路。本课程设计主要应用了单片机为主控元件,温度传感器DS18B20采集温度信号从P1.0口传送给单片机,单片机对温度电信号处理后经P0口送显示模块显示相应温度,P2口作为位选控制LED灯的选通与否。当温度达到预设值时,单片机会从P3.7口发出报警信号,做出报警提示。本程序采用单片机C语言编写,用Keil编译器编程调试,能很好的找出编程出现的错误以及逻辑功能等问题。Keil 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。6.2 仿真6.2.1 软件仿真 将Keil生
26、成的hex文件调入Proteus电路图的单片机中,点击图左下角的开始键运行,程序初始化后通过调节DS18B20温度传感器的数值,数码管会显示相应的数值,仿真结果如图6.2.1所示。(例如25的其结果)6.2.2 系统性能测试性能测试可用制作的温度计和已有的成品温度计来同时测量比较,由于DS18B20 的精度很高,所以误差指标可以限制在0.1 以内,另外55 至+125 的测温范围使得该温度计完全适合一般的应用场合,其低压供电特性可作成用电池供电的手持电子温度计。 图6.2.1 程序正常运行结果仿真图 第7章 总结通过本次单片机课程设计,我学到了很多东西,同时在做的过程中也发现很多的问题,从最初
27、的课题选择到对相关课题资料的搜集与摘选,再到自己报告内容的思路的设计、编写以致最后阶段的修改与完善。在这一过程中,我对前两学年所学习的相关电子知识又有了更深一层的学习和理解,让我对自己所学的又有了更深的掌握。虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事。再者,系统调试是较为麻烦、复杂的过程。只要一点点不对就会直接影响调试结果,而且只能从头到尾一步一步的排除检测,而且如果你检查的方法不对,不能耐心仔细的查找、测量,很难发现错误。同时也会影响整个人的心情和状态。还有
28、就是要由问题推测各种可能的原因,追根溯源。不要总是在一个地方纠结。这样是很难找到故障并解决的。这个过程既能很大程度上减少工作量,也可以提高分析问题的能力,这就课程设计要达到目的。在大学里这样的机会是很难的,抓紧这有限的机会,让自己得到锻炼是非常有必要的,也是非常重要的。从这次课程设计中,我真真正正的意识到,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西而不结合实践是很难理解的,更谈不上掌握。在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。参考文献: 1、王迎
29、旭编.单片机原理与应用M.机械工业出版社,2010。 2、楼然苗编.51系列单片机设计实例M.北京航空航天大学出版社,2006。 3、黄勤编.计算机硬件技术基础实验教程M.重庆大学出版社,2004。 4、刘乐善编.微型计算机接口技术及应用M.华中科技大学出版社,2004。 5、陈光东编.单片微型计算机原理及接口技术M.华中科技大学出版社,2005。附录A:元件清单1)8路LED 指示;2)4位7段数码管以及驱动电路;3)1个44矩阵式键盘以及接口电路,1个独立式中断按键;4)1个蜂鸣器;5)2个继电器输出电路,含常开常、闭触点;7)一个塑封一体化红外线接收头;8)1个4位拨码开关;9)1根RS
30、232串口通讯接口以及下载线,可完成程序下载、在线仿真(用SST芯片),并实现与PC机以及与其他单片机之间的通信;10)1个可对S5X系列单片机编程的ISP接口;11)可对用户开放的全部I/O口引脚,方便用户根据需要进行功能扩展和二次开发;12)1个整流、滤波稳压电路,可采用712V电源输入(交、直流均可),对本机提供5V工作电压,并可对扩展功能模块提供5V和12V直流电源。附录B:硬件原理图附录C:源程序清单#include #define uchar unsigned char#define uint unsigned intsbit DQ=P10; sbit beep=P37;uint
31、temp;uchar b; uchar code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳uchar code table_bit=0x0e,0x0d,0x0b;/*延时函数*/void delay(uint k) while(k-); /*DS18B20初始化函数*/void init_18b20(void) uchar x=0; DQ=1; delay(8); DQ=0; /拉低总线 delay(80); DQ=1; /拉高总线 delay(14); x=DQ; delay(20);/*从DS18B20读一个字节
32、数据*/uchar read_byte_18b20(void) uchar i=0; uchar date=0; for(i=8;i0;i-) DQ=0; date=1; DQ=1; /拉高总线,准备读数 if(DQ) date|=0x80; delay(4); return(date); /*向DS18B20写一个字节数据*/void write_byte_18b20(uchar date) uchar i=0; for (i=8;i0;i-) DQ=0; DQ=date&0x01; delay(5); DQ=1; date=1; /*从DS18B20读取温度*/int read_tempe
33、rture(void) uchar p=0; uchar q=0; uchar a=0; int temp1=0; float tt=0; init_18b20(); write_byte_18b20(0xcc); write_byte_18b20(0x44); /启动温度转换 delay(100); init_18b20(); write_byte_18b20(0xcc); write_byte_18b20(0xbe); /读温度寄存器 delay(100); a=read_byte_18b20(); /读温度值低位LSB b=read_byte_18b20(); if(b127) /判断温
34、度是否是负值/ p=b; q=a+1; temp1=p; temp1=8; /度温度值高位MSB temp1=temp1|q; else temp1=b; temp1127) P2=0x07; P0=0xbf;/共阳 delay(1000); else if(b127) P2=0x0b; P0=0xbf;/共阳 delay(1000); i-; /*报警函数*/ void alarm() if(b127) if(temp=50) beep=1; else beep=beep; else if(temp=300) beep=1; else beep=beep; /*主函数*/void main () P1=0xff; init_18b20(); while(1) temp=read_temperture(); display();