• 924.62 KB
  • 2022-04-22 13:33:49 发布

仓库温度多点温度监控系统毕业论文.doc

  • 36页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'仓库温度多点检测器仓库温度多点温度监控系统毕业论文目录中文摘要1Abstract:2一、绪论41、仓库温度检测技术的发展状况42、研究的意义53、本课题的任务6.基本功能6.主要技术参数64、方案论述6.设计方案一:6.设计方案二:6.设计方案三:7二、AT89C51单片机功能介绍81、芯片简介82、AT89C51各引脚介绍9三、方案元件的选择111、温度传感器的比较与选择112、显示器的比较与选择133、继电器的选择14四、硬件电路设计141、振荡电路的设计142、上电手动复位电路的设计153、温度检测电路设计16.DS18B20产品的特点及引脚介绍16.DS18B20的使用方法16.DS18B20内部结构及工作原理17.设计原理184、显示电路设计185、温度控制电路及超温报警电路设计196、整体硬件电路图(详见附录一)21五、软件设计211、软件开发工具的选择212、软件实现分析22.主程序流程图22第36页共36页 仓库温度多点检测器.温度检测电路流程图243、程序代码(详见附录三)25六、调试分析25总结25致谢及心得体会26参考文献27附录一:系统硬件电路图29附录二:系统PCB板图30附录三:系统程序代码31一、绪论有一个因素在人们日常的生活、生产、甚至科研中都需要考虑,它与我们的生活息息相关,这就是温度。热胀冷缩反应的是温度,化学变化放热涉及的是温度,就连动植物的生长也存在一个最佳温度,所以在物理、化学、生物等学科都离不开对温度这一因素进行讨论。温度对微生物的生长、繁殖都有很大的影响,大多数菌种生长繁殖的适宜温度是28℃-30℃,要保证粮食的安全,则要求粮仓的温度至少低于25℃。控温储粮是使粮食在储藏期间保持一定的温度水平,达到安全储藏的目的。目前通过控制粮食温度而达到粮食安全保存的方法已经成为了一种比较安全、方便且绿色的技术。由于该方法的实现也比较容易,许多地区都是采用的该方法。据了解,粮食的最佳储藏温度与粮食所含水分有关,一般含水量是14%以上时则要求温度不能超过15度,若含水量为13.5%则要求温度不能超过25度,13以下的就问题不大了,一般温度都可以了。根据重庆的温湿度状况,粮仓的温度控制在5℃-20℃,此时粮食是安全的。1、仓库温度检测技术的发展状况第36页共36页 仓库温度多点检测器在早期时候,主要是采用温度计测量温度的方法来监测粮食的情况。其具体做法是将一支温度计直接放进特制的插筒里面,工作人员根据自己总结的经验将多个这样制作好的温度计放于粮堆的多个测温点处,然后再定期将其拔出进行读数,根据粮食温度的高低再决定是否需要采取相应的措施或者是否需要倒掉粮。这样的方法对于储藏粮食虽然具有一定的作用,但因为温度计的精度相对比较低再加之人工读数一般有一定的误差并且人工导致实时性不强等这些因素,致使这种方法检测温度不仅速度比较慢慢,精度低,抽样还不彻底,当某一部分的粮食温度过于高的时候往往不容易被及时的发现,从而导致粮库中因为局部粮食发生变质接着引起大面积的粮食发霉变质的情况。随着当今社会的科技不断进步,从1978年开始,由采样器、模数转换器、电报警器、阻式温度传感器等组成的粮食储藏监测系统,该系统可以对粮食仓库的各个测温点进行实时的循环检测,这不仅使得检测的精度大大提高,而且速度也加快了许多,从而大大降低了劳动的强度,但由于电阻传感器的灵敏度低,检测精度不够、系统可靠性还不够理想,这一方法仍未满足广大人民的需求。至1990年,粮情检测系统得到了极大的改善和提高。布线方式上采用的是矩阵式布线技术,这使得系统数据采集部分的线路得到了简化;传感器方面主要应用了热电偶、半导体等器件;线路传输方式上主要采用的是串行方式传输,这种方式可以减少所需要的传输线;在数据处理方面采用的是单板机,尽可能采用各种方法提高数据检测速度及传输速度,通过结合软件技术和硬件技术,可以在很大程度上提高可靠性和检测精度。尽管如此,由于传感器的线性度比较差,致使系统的检测精度仍然不理想,这使得该系统仍不能得到广泛的推广。近年来,人们越来越重视单片机功能的扩展以及单片机与计算机的结合应用,这让粮食情况检测系统的准确性、稳定性也越来越高。在中国,对于温度检测控制技术的研究起步得比较晚,大约从1980年才开始。近年来,我国引进了多达16个国家和地区的工厂环境控制系统,在总体上,正从借鉴、简单的应用、深化研究最后到综合性应用,这对推动工厂温度自动检测产生了积极的作用。与此同时,我国温度检测控制系统的计算机应用大多是通过单片机控制且一般为一个参数一条回路,还没有真正的多个参数多条回路的综合控制系统。另外,在实际的生产过程中仍然存在许多的问题,例如无法实现共享软件和硬件资源、控制环境的技术水平比较落后、可靠性差等缺点。与发达国家相比较,还是存在一定的差距的。基于我国目前这样的状况,更需要我国更多的人能在这方面做更多更深入的研究。2、研究的意义第36页共36页 仓库温度多点检测器我国是一个农业大国,人口中很大一部分人常年从事耕作生活,再加之机械化的普及,我国成为了一个储粮大国,粮食的年产量以及储存量均居世界首位。粮食的储藏安全是国家粮食安全的重要组成部分。因此,只有重视粮食储藏,改善其条件,提高这方面的技术,才能使整个国家粮食的储藏处于一个安全的状态。在我国南方地区,雨水较多,平均温湿度较高,这就为粮食的储藏带来一些麻烦。再加上农户对粮食储藏知识比较缺乏并且农户用于粮食储藏的环境比较简陋,这些因素都会导致农户手中的许多粮食发生变质。像对于重庆这样的地区,常年温湿度相对于一般地区都偏高,粮食储藏的环境若不通过一定的技术加以控制,必会造成部分粮食出现发霉、生虫甚至长芽。基于以上的分析,增强人民对粮食安全储藏的观念,普及安全储粮知识,提高安全储粮的技术迫在眉睫,只有通过这些方法,才能真正让农民辛勤劳作所得的粮食实现其真正的价值。3、本课题的任务设计基于单片机的仓库温度多点检测器器,用于温度的显示、调节与监控。具体要求如下:.基本功能   检测温度;   显示温度;   超温调节;   过限报警;.主要技术参数   温度检测范围:-55~+125℃   温度调节范围:+5~+20℃   测量精度:正负0.5℃   显示方式:五位显示第36页共36页 仓库温度多点检测器4、方案论述.设计方案一:采用分立元件,如电容、电感等非线形元件,实现该功能。虽然该方案简单易懂,价格便宜,但是分散性大,测量误差也大,故在实际应用中并不常采用该方案。.设计方案二:本方案采用AT89C51单片机为核心,通过温度传感器AD590采集温度信号,经信号放大器放大后,送到A/D转换芯片,最终经单片机检测处理温度信号。如图所示,该方案技术虽然已经成熟,但AD转换电路设计较烦琐,而且使用AD590进行温度检测时必须对冷端进行补偿,以减小误差。温度传感器单片机A/D转换器放大器温度显示图1.1方案二设计框图.设计方案三:本系统是以AT89C51单片机为核心且基于数字温度传感器DS18B20的系统。DS18B20利用单总线的特点可以很容易的对多个点的的温度进行测量,从而轻松的构建出一个测温网络,并且,该温度传感器的工作电源既可从远端引入,也可通过寄生电源产生。另外,该系统的设计简单且设计灵活并且还具有抗干扰能力强、使用方便、能够在环境比较恶劣的情况下对温度进行现场的测量等优点。基于以上的优点,本系统常用在大型工业及民用的温度检测环境之中,例如粮食仓储系统、楼宇自动化系统。具体系统框图如下:第36页共36页 仓库温度多点检测器图1.2方案三设计框图综合比较方案一、方案二与方案三,方案三以DS18B20为传感器、AT89C51单片机为控制核心组成多点温度测试系统,该系统由温度检测电路、温度显示电路、温度调节电路等电路组成。相对于方案1,在功能、性能、可操作性等方面都有较大的提升。相对与方案2,硬件电路简单,易于操作,具有更高的性价比,更大的市场。所以我采用方案3完成本设计。在本方案中,AT89C51单片机是本系统的核心,其他所有的操作都要受到它的控制。在本系统中该单片机就相当于人的大脑控制着整个系统。温度信号由芯片DS18B20采集,由于该芯片自带模数转换的功能,能直接将测量的温度模拟信号变换成9位的数字信号,该数字信号再通过连接于温度芯片与单片机之间的总线将数据传送给主机。单片机通过对接受的温度信号进行比较而做出相应处理,从而实现温度控制的目的。上下限温度主要是通过DS18B20中提供的TH与TL位的设定来确定的,由于DS18B20的单总线结构,可以让五个DS18B20通过一根总线与单片机的一个I/O口相连。外围的大功率驱动电路主要是利用继电器的开关驱动功能来实现的。另外在显示电路的设计上,考虑实际应用中,便于工作人员的观察以及为了减少一定的的成本,使其更容易在市场上推广,本方案需要采用大尺寸LED数码管,这样可以让工作人员采集温度数据时变得更加方便简洁。将该方案运用于本课题的具体设计中,功能体现大致如下:能对五个不同检测点的温度进行实时监控。正常温度范围为5至20度,当温度超出正常温度时,通过单片机驱动外围的降温或升温设备,同时,驱动声光报警器。另外,五个点的温度依次在五个LED数码管上进行显示。第36页共36页 仓库温度多点检测器二、AT89C51单片机功能介绍1、芯片简介89系列的单片机是由8031核构成的,所以它和51系列是兼容的。因此它可以很容易的取代和构造以8051为基础的系统。所以熟悉8051性能原理的用户对于ATMEL公司的89系列单片机的运用就可以变得得心应手了。89系列单片机有许多优点,其中比较突出的如下:1.内部含Flash存储器因为89系列单片机内部含有个存储器,可以使对该单片机的程序进行修改变得更简单更方便,并且也可以大大减短系统开发所以的时间。2.静态时钟方式89系列采用的是静态时钟,这种方式最大的优点就是省电,在能耗这方面的确有优势,故在一些便携式产品研发过程中芯片的时钟方式常考虑此方式。3.错误编程不会产生废品89系列单片机内部含有flash存储器,当编程出现错误时,编程者可以进行重新编写,并且这种重新编写可以一直到编写正确为止,故其不会产生废品。4.可反复多次进行系统试验采用89系列设计的系统,可以反复进行系统的检验,而对于每一次的检验,工作者的编程都可以不一样,这样系统最后就能达到最佳情况。2、AT89C51各引脚介绍本设计中所用的单片机,其引脚分布如图所示,具体引脚功能定义如下:第36页共36页 仓库温度多点检测器图2.1AT89C51的引脚图Vcc:电源引脚,接+5V电源。Vss:接地。XTAL1,XTAL2:时钟引脚。两引脚间外接晶体与片内反相放大器构成一个振荡器,为单片机提供时钟控制信号。本设计根据需要外接6MHZ晶体。RST/Vpd:RST是复位信号输入端,高电平有效。Vpd为备用电源输入端。XTAL1,XTAL2:外部中断0的触发信号输入端,低电平或下跳沿有效;:外部中断1的触发信号输入端,低电平或下跳沿有效。T1:定时器/计数器T1外部输入。:外部数据存储器和外部I/O口的写控制信号,输出,低电平有效。:外部数据存储器和外部I/O口的读控制信号,输出,低电平有效。ALE/:地址锁存允许信号输出端,ALE用于将地址总线的低8位锁存。该信号频率为振荡器频率的1/6,可作为外部定时或时钟使用。第36页共36页 仓库温度多点检测器/Vpp:内外程序存储器选择控制端,输入。当为低电平时,CPU对程序存储器的操作仅限于单片机外部程序存储器。当为高电平时,CPU对程序存储器的操作就会先从内部程序存储器开始,如果有需要再延伸到单片机的外部程序存储器。鉴于单片机于实际系统中的用处,本端口接的是高电平。P0口为双向I/O口,它的结构与P2口相似,可作输入/输出口使用,也可作系统扩展的地址/数据总线口。本系统将P0口用于作为驱动8段LED的段选。P1口是8位准双向I/O口,可以驱动4个TTL负载,是真正的单纯的I/O口。P2口是一个准双向I/O口,它有两种功能:一种是作为一般的输入输出口来用;另一种是作系统扩展的地址总线口来用,输出高8位的地址。本系统中用P2.0、P2.1、P2.2、P2.3和P2.4作为控制LED的位选择端。P3口为多功能口,他既可以作为特殊功能端口使用也可作为一般输入输出口使用,它的每一位都可定义为第二功能口。而实际上,如果把复用输出功能控制端置1,则P3.x端可实现复用的输入功能。三、方案元件的选择1、温度传感器的比较与选择方案一:采用热电阻温度传感器热电阻的工作原理不同于与热电偶。对于热电偶,它是一种将温度变化量转换为电势变化的热电势传感器。对于热电阻,大多数是金属导体和半导体,它们是基于电阻的热效应来测量温度,即电阻的电阻率随温度的变化而变化最后反应到电流的变化中,通过测量电路中电流的变化就可知道温度情况。对于金属热电阻,其适应的温度范围更宽,大约在-200~500℃范围内,其优点在于稳定性好、测量准确并且性能可靠,因为这些原因其广泛应用于程控制中。对于铂电阻,其阻值与温度之间的关系接近于线性,在0~85℃范围内可表示为即Rt=R0[1+At+Bt^2]式中,Rt为温度t时的阻值;R0为温度t0(通常t0=0℃第36页共36页 仓库温度多点检测器)时对应电阻值;A、B为常数。铂是贵金属,在测量精度要求不高、测量范围比较小的情况下(-50~150℃),可采用铜做热电阻材料,价格便宜,其电阻温度函数表达式为Rt=R0(1+at),式中a=4.25×10^-3~4.28×10^-3/℃。大部分热电阻是由纯金属材料制作而成,此外,目前已开始采用锢、锰和碳等材料制造。锢电阻在4.2~15K温度域内,其测温灵敏度比铂电阻高十倍,是一种高准确度低温热电阻,缺点是材料很软,复制性差。锰电阻相对来说灵敏度更高,在2~16K的温度范围内其电阻率与温度的平方成正比,但锰的缺点在于很脆且难以控制成形。对于碳电阻,它具有对磁场不敏感且热容量小等特点适合作液氢温度域的温度计,缺点在于其热稳定性较差。方案二:采用AD590温度传感器AD590是由AD公司生产的一款电流输出型的两端温度传感器,其工作原理是利用PN结的正向电流与温度具有一定关系这一特性。当测量的温度一定时,它的功能可被视为一个恒流源。该器件具有很多优点例如具有测量精度高、线性和互换性好且测温范围宽并且容易实现。AD590封装外形如图3.1所示,它采用金属壳3脚封装,其中1脚为电源正端V+;2脚为电流输出端Io;3脚为管壳,一般不用。集成温度传感器的电路符号如图3.2所示图3.1AD590的外形电路图3.2集成温度传感器电路符号采用AD590,它的测温范围在-55℃~+150℃之间,而且精度高。M档在测温范围内非线性误差为±0.3℃。AD590的测量信号可远传百余米。但缺点在于其采集的信号需通过模数转换模块将信号转换成数字信号才能被单片机“识别”第36页共36页 仓库温度多点检测器。故所需电路相对较复杂。 方案三:采用集成芯片DS18B20DS18B20是DALLAS公司生产的一线式数字温度传感器,每一片芯片内部都有一个全球惟一的64位编码,在多路测温时就是通过匹配这个编码(ID)来确定下一步对那一个温度传感器进行操作,故在同一总线上可以挂接多个传感器芯片。该芯片具有三引脚TO-92小体积封装形式,测量范围从-55℃到+125℃,等效的华氏温标范围是-67°F到+257°F,以9到12位数字值方式读出温度并且能够在750毫秒内把12位的温度变换为数字。另外,该器件的工作电源既可从远端引入,也可通过寄生电源产生。由于DS18B20独特的单线接口特性,使得CPU只需一个I/O口就能和多个DS18B20进行通信,故可节省许多的逻辑电路和引线。从而可以看出DS18B20可以非常方便的被用于多点温度检测系统。综合比较方案一、二、三,方案三更为满足本设计对该器件的性能要求。故最终本系统中采用温度芯片DS18B20测量温度。该芯片的物理化学性很稳定,它能用做工业测温元件,且此元件线形较好。在0—100摄氏度时,最大线形偏差小于1摄氏度。该芯片直接向单片机传输数字信号,便于单片机处理及控制。图3.3温度芯片DS18B202、显示器的比较与选择方案一:使用LCD液晶显示屏LCD液晶显示屏显示的信息量大,但相对来说程序和电路都较复杂些。具体优缺点如下:LCD优点:体积小,画面清晰度高,使用方便灵活LCD缺点:面积小,视角小,亮度低,观看距离小,寿命短第36页共36页 仓库温度多点检测器方案二:使用LED数码管LED是LightEmittingDiode的英文缩写。LED应用可分为两大类:一是LED显示屏;二是LED单管应用,包括背光源LED,红外线LED等。LED数码管根据连接方法的不同可分为共阴极和阳两类,了解LED的特性,可以使编程更为简单,不同类型的数码管,不仅在其连接的硬件电路方面的一些差异,编程方法也有一定的差异。由于本系统是用于粮食仓库中,为便于工作人员对温度数据的采集我们采用的是大尺寸LED数码管。结合本系统具体的使用环境,所以我们选用数码管实现我们温度的显示。我最终选用的是3英寸的一位数码管其型号为XSM-S30011B(共阳ShareAnode)。该数码管能在低电压、小电流条件下驱动发光,段驱动电压约为8V,小数点驱动电压约为4V,其发光响应时间极短(<0.1us),高频特性好,单色性好,亮度高并且具有寿命长、显示效果良好、视度宽等优点。该数码管外形尺寸为65.00mm×86.00mm×12.00mm,其具体内部结构如下:ǖ图3.43英寸LED内部结构图3、继电器的选择第36页共36页 仓库温度多点检测器在本系统中涉及到驱动声光报警器以及驱动制冷器和制热器的电路,即需要利用单片机发出的信号来控制温度调节电路的工作状态。由于单片机I/O口的输出电压最大为5V,不能直接驱动这些电器进行工作,于是我们引入了继电器,它可以实现小电流控制大电流的功能。在声光报警器电路中,我采用的是电磁继电器,而在制冷制热电路中我采用的是固态继电器。固态继电器与电磁继电器相比它具有无触点无动作噪音,开关速度快无火花干扰和可靠性高等优点。在制冷制热电路中,其被控制回路接入的是220V交流电,为了保证其可靠性更高,于是我选择了固态继电器。四、硬件电路设计1、振荡电路的设计本系统采用内部方式产生单片机所需的时钟信号。图4.1中,由振荡器OSC和电容C1和C2构成了并联谐振回路作为定时元件,振荡源可选用晶体振荡器或陶瓷振荡器,频率为1.2~12MHz,电容C1、C2为5~30pF,起频率微调作用。在本电路系统中选用的是晶体振荡器,晶振频率为6MHz,C1和C2均为15pF。晶振的频率越高,则单片机的时钟频率越高,单片机运行速度越快。具体电路如下:   图4.1振荡电路图例2、上电手动复位电路的设计第36页共36页 仓库温度多点检测器我设计的复位电路,其实现的功能是既能实现上电复位,又能实现按键复位,故该电路更能满足系统实际应用要求。当按钮开关S1未按下时,电容被充电,当经过一定时间后,电容电压达到5V,当开关按下,电容开始放电,电阻R26和R27构成一个串联的分压网络,只要让电阻R27上的分压达到高电平的阀值,因为我们按动按钮开关使其闭合的时间远远大于单片机复位所用的时间,所以就可以使单片机复位。由于充电公式:Uc(t)=Uc(0)+[Uc(无穷)-Uc(0)](1-e^-t/RC);放电公式:Uc(t)=Uc(无穷)+[Uc(0)-Uc(无穷)]e^-t/RC其中Vc(无穷)为电容电压充、放电终值,Vc(0)为电容电压起始值。由于晶体振荡器选用6MHz,故机器周期为2us,而要保证开关按下后单片机实现复位,需保证复位端口的高电平至少保持时间是2个机器周期以上,即此时电压值为2.5V以上的时间至少维持4us。通过放电公式的计算,可知C3取22uF,R26取200,R27取1K就能满足要求。具体电路图如下:图4.2上电手动复位电路图例3、温度检测电路设计DS18B20数字温度计是DALLAS公司生产的1-Wire器件,即单总线器件,具有线路简单,体积小等特点。DS18B20数字温度传感器接线方便,在不同的场合当中其“封装”形式多样,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。故DS18B20的体积小,使用方便,封装形式多样等优点,使其特别适合在一些空间比较小以及温度变化的速度比较缓慢的环境中工作。.DS18B20产品的特点及引脚介绍只要求其通过一个端口即可实现通信。在DS18B20中的每个器件上都有独一无二的序列号,运用时可根据这个序列号判断其温度值是来自那一个DS19B20。实际应用中可以不需要任何器件就可实现温度的测量,故大大简化了电路。温度可测量的范围是-55℃到+125℃之间。第36页共36页 仓库温度多点检测器对于温度读数的位数,用户可以从9位到12位做选择,对于不同位数其分辨率也不同。芯片内部具有有温度上限值和下限值设置功能即通过TH与TL位的设置图4.3DS18B20管脚及封装.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,而AT89C51在硬件上是不支持单总线的协议,因此,我们采用的是通过软件模拟单总线的协议来实现对访问DS18B20。因为DS18B20是在一根I/O线上读数据和写数据,所以对该数据位具有很高的要求。在数据传输过程中DS18B20需要通过严格的通信协议来保证其数据的完整性和准确度。这个协议定义了初始化时序以及读写时序,这些时序都是把单片机作为系统的主设备,DS18B20作为从设备。而每一次命令和传输数据都得从主设备启动写时序开始,如果主设备要求从设备回送一些数据,则会在写命令结束后,再启动读时序来接收回送回来的数据。在传输命令和数据时都会遵循低位在先高位在后的原则。具体的读写时序功能介绍。对于DS18B20的读时序可以分为读0时序和读1时序。在DS18B20的读时序中首先是通过主设备把总线电平拉低,在15秒之内释放该总线,这样才能够让DS18B20把检测到的数据传送到总线上。对于这整个过程,DS18B20至少要用60us才能够实现。对于DS18B20的写时序同样可分为写0时序和写1时序,但这两个时序的要求是不同的。写0时序的时候,单总线至少要被拉低60us,在这个过程中需要保证DS18B20在15us到45us之间正确地采样IO总线上的“0”电平。当要写1时序时,拉低单总线后,要求在15us内就得释放该总线。第36页共36页 仓库温度多点检测器.DS18B20内部结构及工作原理图4.4DS18B20内部结构图DS18B20测温原理如图4.5所示。对于低温度系数晶振来说,温度这个因素对其振荡频率影响比较小,故可以用来产生固定频率的脉冲信号送给计数器1。而对于高温度系数的晶振来说,其受温度的影响比较明显,故其所产生的脉冲信号可以送给计数器2.图4.5DS18B20测温原理框图第36页共36页 仓库温度多点检测器.设计原理本系统采用的是温度传感器DS18B20。使用集成芯片的优点在于能够有效地减小外界对其的干扰,从而可以提高测量的精度。同时,集成芯片还简化电路。根据系统性能所需,该模块共有五个DS18B20,故可检测到五个点的温度变化。由于每一个DS18B20都有一个64位的编号,单片机通过一根端口线就能与多个DS18B20进行通信,于是减少了微处理器占用的端口数并且节省了大量的引线和逻辑电路。详细电路如下所示:图4.6温度检测电路4、显示电路设计本系统要将温度传感器监测的温度显示出来。基于需求本系统需要5个LED数码管,第一位用于显示温度是来自那一个DS18B20,后四位用于显示具体的温度,其中三位用于整数显示,最后一位用于小数位显示。由于五个LED数码管若使用静态显示方法则需要占用太多的I/O口,使得AT89C51的I/O口无法满足需求,因此我们采用动态显示方式,让数码管依次显示五个点的温度。由于采用动态显示方式时数码管采用的是段驱动电压为8V的数码管,单片机的输出电压无法直接驱动器发光,故需要借助一个能驱动大尺寸数码管发光的器件,经过相关资料的查阅,我最后选择了UDN2981A作为段驱动器件,UDN2596A作为位驱动器件。这样的设计避免了占用大量的I/O口,详细电路如下:第36页共36页 仓库温度多点检测器图4.7温度显示电路5、温度控制电路及超温报警电路设计单片机通过三极管控制继电器的通断,最后达到控制相应的电器的目的。当温度范围保持在5℃-25℃时,单片机将P1.0口置1,此时三极管发射极与基极之间的PN结未正向导通而使三极管处于截止状态,故电器不工作。当温度超过25摄氏度时,单片机向相应的端口发送低电平,从而使三极管处于饱和状态,驱动制冷器工作,而达到降温的作用,同时,声光报警器被驱动工作。同理,当温度低于5℃时,单片机驱动加热器工作,达到升温的作用,同时,声光报警器被驱动工作。在继电器的选择上,对于声光报警器电路选择的是型号为SRD-05VDC-SL-C的5V电磁继电器。对于加热和降温电路选择的是型号为N23100D的大功率固态继电器。使用固态继电器(SSR)可以使系统具有较高的机能。详细电路如下图所示:第36页共36页 仓库温度多点检测器图4.8声光报警器图例图4.9制冷器图例第36页共36页 仓库温度多点检测器图4.10制热器图例6、整体硬件电路图(详见附录一)五、软件设计1、软件开发工具的选择要使单片机系统按照人的意图办事,需要设法能够让人与计算机进行对话,从而使其能够听从人的指挥。而要完成这项工作,就需要涉及到一个工具——程序设计语言。程序设计语言可分为机器语言、汇编语言和高级语言。机器语言用二进制编码表示每一条指令,它可以由计算机直接执行,执行效率高。但机器语言的指令不直观,难理解,难记且繁琐,编写的程序缺乏通用性。第36页共36页 仓库温度多点检测器为了克服机器语言的这些缺点,采用了一种借用具有一定含义的符号来表示的语言,这些符号一般都采用某些有关的英文单词的缩写。这样就出现了另一种程序语言——汇编语言。汇编语言和机器语言之间也存在一种对应关系,所以对于不同的计算机其汇编语言也是不尽相同的,并且程序编写时仍需要对计算机内部结构比较熟悉,依然比较繁琐。但相对于机器语言来说,汇编语言要简单多了。因此,在实际中,如果程序运行时间要求比较严格,程序与硬件操作联系密切,人们还是需要采用汇编语言进行编程。相对于高级语言,汇编语言还是有许多的不足,例如与CPU的硬件结构密切相关、对程序设计人员要求较高。在实际中,我们更偏向于用高级语言进行编程,如C语言、C++。C语言和C++语言都是一种非常优秀的面向对象的程序设计语言它们都属于高级语言。对象是对客观事物的抽象,面向对象的编程,就是针对客观事物而设计的程序。所以,直观性是面向对象的程序设计语言的最为明显的优点。经分析得知,本课题采用C语言进行编程是最方便的。2、软件实现分析从测量温度到对其进行监督控制需要经过以下几个步骤:单片机接受来自DS18B20的检测信号,通过UDN2598A控制位选,并通过UDN2981A驱动LED显示,比较当前温度是否在5至20摄氏度,若温度超过20摄氏度则驱动制冷器和声光报警器进行处理,直到温度降至正常复位,控制电路和报警电路才会停止工作。若温度低于5摄氏度则驱动制热器的同时驱动声光报警器进行报警。.主程序流程图第36页共36页 仓库温度多点检测器开始初始化单片机初始化DS18B20设定温度上、限读取温度显示当前温度Y是否启动制热器低于下限温度5℃超过上限温度25℃判断当前温度值Y  是N启动制冷器器NY启动声光报警器启动声光报警器图5.1主程序流程图第36页共36页 仓库温度多点检测器.温度检测电路流程图本设计采用的是单端口单总线的多点温度检测法,在某一刻对于众多的在线的DS18B20单片机需要对其中的某一个进行操作。在这个过程中,首先是发出匹配ROM命令,单片机接着会从EPROM中取出存储器中的的64位序列号发送到总线上,由于每一个DS18B20的序列号是不同的,故单片机可以通过此序列号识别出与那一个进行通信,匹配好DS18B20后,此后的操作便是针对该DS18B20进行的。下面是该过程的具体工作流程图,其中有一步骤叫跳过ROM命令,此后的操作是针对所有的DS18B20。在本系统中,先发送跳过ROM命令,即启动所有的DS18B20进行温度转换,再通过匹配ROM命令,逐个读取DS18B20的温度数据。开始初始化DS18B20发跳过ROM命令发温度转换命令等待转换完成I=1初始化DS18B20I=I+1发匹配ROM命令发第一个DS18B20的ID读取温度到缓冲区调用温度处理子程序N第n个DS18B20处理完否Y返回图5.2温度检测电路流程图第36页共36页 仓库温度多点检测器3、程序代码(详见附录三)六、调试分析在调试过程中需要对软件和硬件分别作出细致的“检测”,在做完这两步之后再将软件导入,观察其具体的效果。在程序编写过程中涉及到一个温度的采集,在这一个模块当中,基于我们的系统是多点温度检测,故需要知道当前检测到的温度是来源于那一个温度传感器,这样才能针对某一个测量点进行温度的调节。针对这一问题,我们通过将每一个DS18B20单独与单片机相连,通过一个简单的程序获得其编码,由于每一个DS18B20的编码是不一样的,故我们可以通过比较这个编码来判断出测出的温度是来自那一个传感器。在电路板焊接完成后,我们首先需要对其进行目测,观察是否存在有虚焊或漏焊等情况。接着利用万能表,通过检测一些可能发生短路的点看其是否处于正常状态,检测无误后再接通电源,测量三极管是否处于正常工作状态,各模块的输入电压是否正常,保证无误后,再将程序导入,进行进一步的调试。在本系统中需要注意的是,由于DS18B20是分时完成单线通信功能的,因此它遵循严格的时隙概念。故对DS18B20和各种操作需严格遵守协议,即:初始化DS18B20(发复位脉冲)—发ROM功能命令—发存储器操作命令—处理数据。现场所有测量点的温度都直接以“一线”的数字方式进行传输,每一个温度传感器自带地址,使系统的整个工作更加稳定可靠。调试中我们发现DS18B20具有许多优点,但仍存在一些缺点,如:虽硬件连接简单但编程复杂,当处于温度快速变化的环境中时其灵敏度不够高。故该系统不适合用于温度跨度大,对实时性要求高的环境当中。总结第36页共36页 仓库温度多点检测器在日常的生活中,温度控制系统的应用范围都比较广泛,而对它的要求主要是以下几个方面:温度变化范围有限,稳定性较好,灵敏度较高。在本设计说明书当中简单分析了单片机温度控制系统设计过程及实现方法。本系统的测温范围比较大,这主要归因于DS18B20的性能,温度检测系统再根据用户设定的温度范围完成一定范围的温度控制。本文利用Protel99SE进行电路设计与仿真利用KeilCX51V7.0单片机高级语言进行编程。利用Protel进行单片机系统的仿真可以极大地简化单片机程序在目标硬件上的调试工作,大幅度节省制作电路板的时间,对于提高产品的开发效率、降低开发成本等都有重要的作用.致谢及心得体会回想此次单片机毕业设计的整个过程,我感慨颇多,从最开始的选题到定稿,从理论到实践,在整整一个学期的日子里,可以说得是苦多于甜,但是我学到了很多很多的东西。通过这次毕业设计我明白了理论与实际之间是有很大差距的并且懂得了将理论与实际相结合是非常重要的。通过这次课程设计,让我对89系列单片机的运用有了更为熟练的掌握,同时对其工作的原理也有了更为清晰的认识。另外,由于此次软件部分的编程采用的是C语言,故让我对C语言的基本知识的使用更加熟练了。这次毕业设计基本完成了,在设计过程中我遇到了很多问题,比如说在显示器的选择上不知道是用LCD液晶显示屏还是用数码管。不过最后在谈学老师的辛勤指导下,我知道了用数码管显示温度不仅具有成本低的优点而且可视度更大更方便读数。在本次毕业设计即将完成之际,首先要向我的指导老师谈学老师表示感谢,谢谢他一直以来对我的细心指导。记得我从最开始一个对单片机一无所知到现在能较熟练的应用并且懂得其中的一些原理,这个过程看似是一小步,但对于我来说却是一个很大的进步。谈学老师治学严谨,平易近人,他让我了解到了许多大学课程上无法学到的专业知识和技能,同时他对工作的热情、认真与负责更给我留下了深刻的印象。在大学的最后一个学期能够得到他的指导我感到很幸运。第36页共36页 仓库温度多点检测器同时,我要感谢大学期间给我授课的各位老师,正是因为他们的授业、解惑,不仅让我从他们身上学到了知识,还学会了求知治学的方法和为人处事的智慧。我还要感谢我的学校和学院,是它给我们提供了如此好的学习环境和生活环境,让我们有了这样一次把理论运用于实践的机会,让我们的大学生活丰富多姿,为我们的人生留下精彩的一笔。参考文献[1]段晨东.单片机原理及接口技术[M].北京:清华大学出版社,2008.[2]刘文涛.单片机语言C51典型应用设计[M].北京:人民邮电出版社,2010.[3]苏家健,曹柏荣,汪志锋.单片机原理及应用技术[M].北京:高等教育出版社,2004.[4]毛谦敏.单片机原理及应用系统设计[M].北京:国防工业出版社,2005.[5]童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2001.[6]刘建清,鲁金,王春生.从零开始学单片机[M].北京:国防工业出版社,2006.[7]李广弟.单片机基础(修订本)[M].北京:北京航空航天大学出版社,2001.[8]李朝青.单片机原理及接口技术(简明修订版)[M].北京:北京航空航天大学出版社,1998.[9]赵广林.Protel99SE电路设计与制版[M].北京:电子工业出版社,2005.[10]金伟正.单线数字温度传感器的原理与应用[J].电子技术与应用,2000(9).[11]李钢.1-Wire总线数字温度传感器DS18B20原理及应用.现代电子技术,2005.[12]阎石.数字电子技术基础(第三版)[M].北京:高等教育出版社,1989.[13]张毅刚,彭喜元,蒋守达.新编MCS-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,2003.第36页共36页 仓库温度多点检测器[14]潘永雄,沙河.电子线路CAD实用教程.西安:西安电子科技大学出版社2007.[15]徐爱钧,彭秀华.KeilCx51V7.0单片机高级语言编程与μVision2应用实践[M].北京: 电子工业出版,2006.[16]张齐,杜群贵.单片机应用系统设计技术—基于C语言编程[M].北京: 电子工业出版,2004.第36页共36页 仓库温度多点检测器附录一:系统硬件电路图第36页共36页 仓库温度多点检测器附录二:系统PCB板图第36页共36页 仓库温度多点检测器附录三:系统程序代码#include#include#defineucharunsignedcharunsignedcharcodeucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示段码表,共阳极ucharcodeTemperature_Char[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};//温度字符ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//温度小数对照表unsignedcharcodewei[]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ff};uchardatadisdata[5];//读取温度后存在里面ucharng;//正负数标志位,ng=0,为正数,反之为负数,正数负数的处理方法不同unittemph=25;//初始上限值unittempl=5;//初始下限值sbitJDQR=P1^2;//定义加热继电器引脚sbitJDQL=P1^4//定义制冷继电器引脚sbitP10=P1^0;//报警引脚,P10=1时报警sbitDQ=P1^7;//定义单总线端口ucharcodestr1[]={0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28};//四个DS18B20的64位ROM地址ucharcodestr2[]={0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28};ucharcodestr3[]={0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28};ucharcodestr4[]={0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28};ucharCurrentT=0;//当前读取的温度整数部分ucharTemp_Value[]={0x00,0x00};//从DS18B20读取的温度值/***********ds18b20延迟子函数(晶振12MHz)*******/voiddelay_18B20(unsignedinti){while(i--);}ds18b20初始化函数voidInit_DS18B20(void)第36页共36页 仓库温度多点检测器{unsignedcharx=0;DQ=1;//DQ复位delay_18B20(8);//稍做延时DQ=0;//单片机将DQ拉低delay_18B20(80);//精确延时大于480usDQ=1;//拉高总线delay_18B20(14);x=DQ;If(x=1)Init_DS18B20();//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}ds18b20读一个字节unsignedcharReadOneChar(void){uchari=0;uchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}ds18b20写一个字节voidWriteOneChar(uchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;第36页共36页 仓库温度多点检测器}}//*************************************//64位的ROM序列号匹配//*************************************bitmatch_rom(uchar*rom){uchari;ds18b20_init();write_byte(0x55);for(i=8;i>0;i--){write_byte(*(rom+i-1));}return1;}//从ds18b20中读出64位序列号//************************************/*uchar*read_rom(void){ucharrom[8],i;ds18b20_init();write_byte(0x33);for(i=8;i>0;i--){rom[i-1]=read_byte();}return&rom[0];}*///将64位序列号显示在数码管上显示出来//*************************************/*voidprint_char(uchara){if(a>=0&&a<=9)WriteOneChar(a+0x30);elseif(a>=0x0a&&a<=0x0f)WriteOneChar(a+0x37);}*/读取温度值voidReadTemp1(ucharz){ds18b20_rom=read_rom();第36页共36页 仓库温度多点检测器Init_DS18B201();WriteOneChar1(0xCC);//读序号列号的操作WriteOneChar1(0x44);//启动温度转换match_rom(ds18b20_rom);匹配delay_18B20(100);//thismessageisweryimportantInit_DS18B201();WriteOneChar1(0xCC);//跳过读序号列号的操作Init_DS18B201();WriteOneChar1(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);Temp_Value[1]=ReadOneChar1();//读取温度值低8位Temp_Value[0]=ReadOneChar1();//读取温度值高8位}//对温度判断处理viodProcess_Temperature(){ucharng;//负数标识//高5位全为1(0)则为负数,为负数时取反加1,并设置负数标识if((Temp_Value[1]&0xF8)==0xF8){Temp_Value[1]=~Temp_Value[1];Temp_Value[0]=~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;//负数标识置1ng=1;}elseng=0;//查表得到温度小数部分datadisdata[0]=df_Table[Temp_Value[0]&0x0F];//获取温度整数部分(高字节中的第三位与低字节中的高四位,无符号)CurrentT=((Temp_Value[0]&0xF0)>>4)|((Temp_Value[1]&0x07)<<4);//将整数部分分解为3位待显示数字datadisdata[3]=CurrentT/100;datadisdata[2]=CurrentT%100/10;datadisdata[1]=CurrentT%10;}第36页共36页 仓库温度多点检测器温度显示电路voidds1820disp()//温度值显示staticnum=0;switch(num)//通过一个Switch语句来实现对数码管的扫描{case0://在数码管上显示当前温度值{P0=table[datadisdata[0]];//小数后面的一位P2=0x20>>0;}break;case1:{P0=table[datadisdata[1]]&0x7f;//有小数点的位要&0x7fP2=0x20>>1;//小数位,个为}break;case2://十位{if(datadisdata[2]==0){if(datadisdata[3]==0)//若十位为零且百位也为零,则都显示十位为空P0=0xff;P0=0xff;}elseP0=table[datadisdata[2]];//否则,正常显示当前十位的值P2=0x20>>2;}break;case3:{if(datadisdata[3]==0)//若百位为零,则不显示,P0=0xff;第36页共36页 仓库温度多点检测器else//否则正常显示P0=table[datadisdata[3]];P2=0x20>>3;}case4://对负数的处理{if(ng==1)//若ng=1,表示当前表示当前获得的温度值为负数,{if(datadisdata[3]==0)//因为考虑到温度为负数的时候最小值为-55.0所以,只可能在十位,和百位这两个位置可能出现负号{if(datadisdata[2]==0)//百位和十位都为零,则,在十位的位置添加一个负号,P0=0xbf,{P0=0xbf;P2=0x08;}else//否则直接在百位的位置添加一个负号、{P0=0xbf;P2=0x04;}}}}break;Case5:for(i=0;i<8;i++)//显示序列号{print_char(ds18b20_romA[i]/16);print_char(ds18b20_romA[i]%16);num=(num+1)%5;//num值不断在0-6直接循环}}继电器控制子程序Voidcontrol(void)第36页共36页 仓库温度多点检测器{ReadTemp1(void);Process_Temperature();unittvalue=Temp_Value[];while((((tvalue/10)%100)