《基于DS18B20的多路温度采集系统设计系统(共32页).doc》由会员分享,可在线阅读,更多相关《基于DS18B20的多路温度采集系统设计系统(共32页).doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上湖南机电职业技术学院 毕业设计 课题名称 基于DS18B20的多路温度采集系统设计 院 系 电气工程学院 学生姓名 禹涛 专 业 机电一体化 班 级 机电1202 指导老师 朱光耀 评阅老师 2014年10月23日目 录 专心-专注-专业毕业设计(论文)任务书题目:基于DS18B20的多路温度采集系统设计任务与要求:以MCS-51系列单片机为处理器,利用数字式测温仪DS18B20实现对4路温度检测;利用显示装置显示4路温度,并能实现温度超限报警,便于送到计算机处理系统,进行必要的控制,主要技术指标有:1、采集路数,4路;2、测温精度较高,达0.10C;3、采样时间,每
2、隔一秒采样一次;4、可以通过键盘设置系统参数,用四行汉字显示温度;5、温度可存储。基本要求1、硬件系统设计:包括MCS-51的I/O接口,LED显示电路,信号输入处理和输出驱动电路的设计。2、软件部分设计:包括系统流程图,系统初始化编程和功能软件编程3、系统调试:在硬、软件设计好的前提下,进行系统安装、调试并改进,直到达到控制要求为止毕业设计(论文)进度计划表 日期工作内容执行情况指导教师签 字9月25号9月27号论述毕业设计的实施方案。9月28号9月30号查找DS18B20的多路温度采集系统方面知识,完成初稿。10月7号10月14号向导师提出可行想法,与导师共同确定设计。通过实验和文献获取所
3、需数据。11月6号11月16号通过反复验证,确定设计可行性,完善论文。11月17号 11月20号完成论文的最后作者声明部分,申请答辩交由导师打分。 指导教 师对进 度计划 实施情 况总评签名 年 月 日 摘 要本文基于DS18B20设计了一种多路温度数据采集系统,系统主要由单片机电路和一组DS18B20 数字传感器构成,同时具有温度显示、数据存储和串行通讯模块。软件方面,我们采用keil软件对程序进行编写以及调试,硬件方面,我们通过Proteus软件对硬件电路进行仿真以及测试,该系统结构简单,功耗较低,测温范围为- 55 + 125,通过LCD1602显示所测温度。同时,可以实现高低温报警,若
4、所测温度超出设定范围,相关器件就会自动报警。我们也可以通过对按键的处理来改变显示不同通道的温度。我们还可以把测得的温度存储到24C02芯片中,并且可以实现串行通讯,把温度传送到上位机。该系统硬件分为3部分:DS18B20 温度测量模块、单片机模块、温度显示模块、数据存储模块、上位机与单片机通讯接口电路。系统的测温精度可以达到±0.5 ,并且能稳定的与单片机和上位机通讯。关键词:DS18B20、多路温度测控、高低温报警、串行通讯1 绪论1.1 课题研究的背景和意义在工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。其中,温度控制也越来越重要。在工业生产的很多
5、领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用单片机对温度进行控制不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而大大提高产品的质量和数量。因此,单片机对温度的控制问题是工业生产中经常会遇到的控制问题。目前应用的温度检测系统大多采用由模拟温度传感器、多路模拟开关、AD转换器及单片机等组成的传输系统。这种温度采集系统需要大量的测温电缆,才能把现场传感器的信号送到采集卡上安装和拆卸繁杂,成本也高。同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也比较大,不利于控制者根据温度变化及时做出决定。针对这种情况,本文提出一种采用数字
6、化单总线技术的温度采集系统,并利用Proteus和Keil软件对设计电路进行综合虚拟仿真,实现了温度实时测量和显示。1.2 本设计的主要要求 设计一多路温度测控系统,能实现8路及以上的温度点测量和实时显示,可根据设定的上下限输出报警及显示,具有RS485或RS232总线接口。设计完整的电路原理图和编写相关程序。 用MCS-51系列单片机或其它CPU作为控制器设计一完整测控仪器,包括以下内容: 温度可采用标准系列热电耦或标准热电阻或DS18B20; 用LCD1602显示或用LED显示; 用输入按键可以暂停、转换、通道的显示; 日历时钟显示; 数据记录存贮功能 RS485或RS232通讯 PROT
7、EUS仿真以上一种功能2 系统方案设计与选型 系统主要由硬件和软件两大部分构成,当接收到系统发出的温度转换命令后, DS18B20开始进行温度转换操作并把转化后的结果放到16 位暂存寄存器中的温度寄存器内, 然后与系统进行数据通信,系统将温度读出并驱动LCD显示。如果温度值低于设定下限值或高于设定上限值,则自动启动报警装置。 同时,基于本设计的设计要求,存储芯片选用了24C02C,时钟芯片选用了DS1302,显示模块选择的是LCD显示。 由于DS18B20 单总线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。该系统结构图单 片 机 按键输入电路测温电路时钟电路显示电路串行通讯报
8、警电路图1、系统结构图3 主要硬件介绍3.1 DS18B20 DSl820数字温度计是美国Dallas公司生产的数字温度计,它提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线。DSl820的电源可以由数据线本身提供而不需要外部电源。因为每一个DSl820在出厂时已经给定了唯一的序号,因此任意多DSl820可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件。DSl820的测量范围从-55到+125,增量值为0.5,可在l s(典型值)内把温度变换成数字。每一个DSl820包括一个唯一的
9、64位长的序号,该序号值存放在DSl820内部ROM(只读存贮器)中。开始8位是产品类型编码(DSl820编码均为10H)。接着的48位是每个器件唯一的序号,最后8位是前面56位的CRC(CRC=X8+X5+X4+1)码。下图为DS18B20的实物图。 图2、DS18B20 DS1820方框图(图1) 存储器和控制逻辑64位ROM和单线端口 暂存器 温度传感器 内部VDD 上限触发TH 下限触发TL电源探测8位CRC产生器 DS1820温度转换期间的强上拉供电(图2) +5V DS1820 P +5V GND VDD 4.7K I/O 图3、DS18B20内部结构 温度/数据关系(表1) TE
10、MPERATURE DIGITAL OUTPUT (Binary) DIGITAL OUTPUT (Hex)+1250000 0111 1101 0000 07D0h+850000 0101 0101 0000 0550h* +25.06250000 0001 1001 0001 0191h+10.1250000 0000 1010 0010 00A2h+0.50000 0000 0000 1000 0008h+00000 0000 0000 0000 0000h0.51111 1111 1111 1000 FFF8h10.1251111 1111 0101 1110 FF5Eh25.0625
11、1111 1110 0101 1111 FF6Fh551111 1100 1001 0000 FC90h根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 指令 约定代码功能读ROM33H读DS1820ROM中的编码(即64位地址)符合ROM55H发出此命令之后,接着发出
12、64位ROM编码,访问单线总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写作准备。搜索ROMOFOH用于确定挂接在同一总线上DS1820D的个数和识别64位ROM地址,为操作各器件作好准备。跳过ROMOCCH忽略64位ROM地址,直接向DS1820发温度变换命令,适用于单片工作。 告警搜索命令OECE执行后,只有温度超过设定值上限或下限的片子才做出响应。指 令约定代码功能温度变换 44H启动DS1820进行温度转换,转换时间最长500m,(典型为200m),结果存入内部9字节RAM中。读暂存器 OBEH读内部RAM中9字节内容写暂存器 4EH发出向内部RAM的第3
13、、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据复制暂存器 48H将RAM中第3、4字内容复制到EPRAM中重调EPRAM OBBH将EPRAM中内容恢复到RAM中的第3、4字节读供电方式 OB4H读DS1820的供电模式,寄生供电时DS1820发送“0”,外接电源供电DS1820发送“1”。 图4、DS18B20内部指令3.2 AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储
14、技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。ATC9C51实物图如图3。主要参数如下: ·与MCS-51产品指令系统完全兼容·4k字节可重擦写Flash闪速存储器·1000次擦写周期·全静态操作:0Hz24MHz·三级加密程序存储器·128×8字节内部RAM 图5丶单片机·32个可编程IO口线·2个16位定时计数器 ·6个中断源·可编程串行UART
15、通道·低功耗空闲和掉电模式 3.3 LCD1602 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。LCD1602的实物图如图4,主要参数如下: ·显示容量:16
16、15;2个字符 ·芯片工作电压:4.55.5V 图6丶·工作电流:2.0mA(5.0V)·模块最佳工作电压:5.0V·字符尺寸:2.95×4.35(W×H)mm 3.4 DS1302DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1
17、202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 X1,X2 32.768kHz晶振引脚GND/RST 地/复位SCLK 串行时钟 VCC1 电池引脚 VCC2 主电源引脚3.5 24C02C24C02是低工作电压的2K位串行电可擦除只读存储器,内部组织为256个字节,每个字节8 位,该芯片被广泛应用于低电压及低功耗的工商业领域。主要特性 工作电压:1.8V5.5V 输入/输出引脚兼容5V 应用在内部结构:256x8(2K) 二线串行接口
18、48715; 输入引脚经施密特触发器滤波抑制噪声 双向数据传输协议 兼容400KHz(1.8V,2.5V,2.7V,3.6V ) 支持硬件写保护 高可靠性:读写次数:1,000,000 次 数据保存:100 年4 软件介绍4.1 Proteus Proteus是英国Labeenter electronics公司研发的EDA工具软件。Proteus不仅是模拟电路、数字电路、模数混合电路的设计与仿真平台,更是目前世界最先进、最完整的多种型号微控制器系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计、电路分析与
19、仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整电子设计与研发过程。Proteus产品系列也包含了革命性的VSM技术,可以对基于微控制器的设计连同所有的外围电子器件一起仿真。4.2 KeilKeil C51美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WI
20、NXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 5 硬件设计系统硬件设计包括温度采集设计、单片机控制电路设计、通信接口电路设计。采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和单片机构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温
21、系统的结构就比较简单,体积也不大。采用DS1302时钟芯片可以方便地得到系统时间并且输出方便。采用了24C02这种应用广泛的芯片进行数据存储。采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。该系统利用单片机控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。 下面分别介绍了各个硬件部分的电路连接图。5.1温度采集电路采用DS18B20一线制芯片,其中1脚接地,3接电源,2为数据传输线,每个传感器有一个独立的光刻地址,用于区分数据传输次序。理论上说,这个电路最多能连
22、接8个DS18B20,但是要连接更多,DQ端需要外加驱动电源。图7.温度采集电路5.2 单片机最小系统 单片机最小系统包括51系列单片机、晶振电路、复位电路。如下所示:图8.单片机最小系统5.3 按键输入电路按键输入如下,其中按下“开始/暂停”按钮LCD开始显示通道的温度,“通道+”用于向上切换测量通道,“通道-”用于向下切换测量通道。图9.按键输入电路5.4 报警电路 如下所示,LED-H为当高限报警时报警,LED-L为当低限报警时的报警。图10.报警电路5.5 LCD显示电路 本设计中,LCD只用了四线,实现四线显示。图11.LCD显示电路5.6 24C02存储电路图12.24C02电路5
23、.7 DS1302时钟电路图13.DS1302电路5.8 串行通讯电路图14.串行通讯电路图中模拟了一个上位机和一个RS232串行接口。6 软件设计6.1 功能概述本系统的软件由C语言编写,程序的主要功能是负责温度的实时测量、显示、存储并读出存储器中的当前温度值给上位机。6.2 系统软件流程图 开始执行初始化程序系统时间为2MS获取温度值扫描按键显示、发送、存储温度,并判断报警NY系统时间为2MS系统时间为2MS系统时间为2MST0,T1计数器图15.系统软件流程图 7 实验结果7.1 温度显示仿真图中可以看出,LCD第一行显示“0 27.0”表示0通道的温度为27.0度,第二行显示“22:0
24、4:19”表示测量温度时的时间。图16.温度显示仿真7.2 温度存储与串行通讯如图所示,左边对话框为24C02内存空间,其中“00 00 1B 00”意义是“00”为0通道,“00”为正温度,“1B”为十六进制温度(27),“00”为小数部分为0。右边对话框中模拟的是上位机显示,也是十六进制表示。图17. 温度存储与串行通讯总 结经过两周多的设计以及调试,实现实验的部分设计要求,能读出并显示DS18B20采集的温度,并且能够实现高低温报警,能够实现温度数据的存储和串行通讯,能通过对按键的处理来切换需要显示的通道温度,使得1条总线上可以读取到8个温度传感器的温度值并将其依次显示在液晶屏幕上,同时
25、液晶屏幕可以清楚显示温度传感器温度值的具体时间。我在这为期两周多的设计性实验中,我们在老师的指导下,有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。我希望自己能在今后的深入学习中设计出更好的,力求创新,努力地提升自己,寻求更大的进步!最后用一句话来结束吧。“实践是检验真理的唯一标准”。参 考 文 献1DS18B20、lcd LM1602说明书、DS1302说明书、24C02说明书;2 黄惟公等 单片机原理与应用技术 西安电子科大出版社 2007;3周润景等 基于PROTEUS的电路及单片机系统设计与仿真 北航出版社 2006.54常敏等 单片机
26、应用程序开发与实践 电子工业出版社 2009;5马建国、孟宪元.电子设计自动化技术基础.清华大学出版 ,20046姜威.实用电子系统设计基础,2008 7姜威.单片机系统的PROTEUS设计与仿真 ,2007 8陈小忠 等 单片机接口技术实用子程序.北京:人民邮电出版社 2005.99徐爱钧,彭秀华编著 Keil Cx51 V7.0单片机高级语言编程与 Vision2应用实践 北京: 电子工业出版致 谢为期两周的课程设计也接近了尾声。此次课程设计的完成,凝聚着许多人的关怀和帮助。首先要感谢我敬爱的指导教师朱光耀。他们在学术上的精心指导和严格要求,在系统研究和调试过程中给予的及时帮助。
27、在完成设计期间给我许多帮助和建议,他们兢兢业业、对工作认真负责的态度为我们做出了好的表率,时刻鞭策着我们向他们学习。这些使我的课程设计得以顺利完成,并激励着我们在今后的人生道路上不断开拓进取,勇往直前。在此,我再一次对老师的培养和关怀表示诚挚的谢意!同时,非常感谢我的同学们,在与他们共同的学习、工作、生活过程中,他们给予了我及时的帮助和建议,开拓了我的思路。我对他们致以真诚的谢意和衷心的祝福。最后,向所有帮助过我的人致以最诚挚的谢意! 附录A 电路原理图附录B 主要程序IIC驱动电路:#include"iic.h" uchar slaw=0xa0; uchar slar=0
28、xa1; void delay(uchar n) uchar i; for(i=0;i<n;i+) nop; /* 功能:毫秒延时函数 参数:当晶振为11.0592时x为毫秒数*/ void delayms(unsigned int x) uchar j; while(x-) for(j=0;j<113;j+); /* 功能:起始信号函数 说明: */void sta(void)SDA=0;SCL=1; SDA=1;delay(4);SDA=0;SCL=0;delay(4); /* 功能:停止信号函数 说明: */void stop() SDA=0; /SDA初始化为低电平“0”
29、_n SCL=1; /*这两句顺序不可以改变*/delay(4);SDA=1;delay(4);/*发送应答位函数*/ void ack() SDA=0;SCL=1;nop;SCL=0;SDA=1; /*发送应答非位函数*/ void nack() SDA=1;SCL=1;nop;SCL=0;SDA=0; /* 功能:应答检查 参数:返回检查值 =1表示返回异常 说明:每次发送一个数据后,从即会发送一个0的信号应答 这里先让SDA=1;没有返回值 则一直=1 应答异常 */ bit cack() bit rdflag; SDA=1; /先释放SDA SCL=1; nop;nop; if(SDA
30、=1) rdflag=1; else rdflag=0; SCL=0; return rdflag; /* 功能:写入当前位置的一个字节的函数 写入顺序7-0; 说明:调用此函数前使用sta(void);已经让SCL为0 在上升沿写入数据 */ void WrbytCurrent(uchar dat) uchar i;for (i=0;i<8;i+)nop; SDA=(bit)(dat&0x80);nop;SCL=1;dat<<=1;nop;nop;SCL=0; /* 功能:在address写入一个字节的函数 写入位顺序7-0; 说明:调用此函数前使用sta(void
31、);已经让SCL为0 在上升沿读取数据 */void wrbyt(uchar address,uchar dat) bit flag;do sta(); /开始 WrbytCurrent(slaw); flag=cack(); /应答while(flag=1);WrbytCurrent(address);flag=cack(); /应答while(flag=1);WrbytCurrent(dat);flag=cack(); /应答while(flag=1);stop();delayms(5);void WriteSetN(uchar address,uchar wr,uchar n) ucha
32、r i;bit flag;do sta(); /开始 WrbytCurrent(slaw); /器件地址 flag=cack(); /应答while(flag=1); /一直发送到应答成功WrbytCurrent(address); /数据地址flag=cack(); /应答while(flag=1);for(i=0;i<n;i+) /从address开始写入n个字节数 WrbytCurrent(wri); flag=cack(); /应答while(flag=1);stop();delayms(5); /* 功能:读取当前位置的一个字节的函数 读取顺序7-0; 说明:调用此函数前使用s
33、ta(void);已经让SCL为0 在下降沿读取数据 */ uchar RdbytCurrent() uchar dat,i;for(i=0;i<8;i+) SCL=1;nop;nop;dat=(dat<<1)|SDA;SCL=0; nop;nop;return dat; uchar ReadByte(uchar address) uchar dat; sta(); /开始WrbytCurrent(slaw); /器件地址ack(); /应答WrbytCurrent(address); /写入数据地址ack();sta(); /应答WrbytCurrent(slar); /器
34、件地址ack();dat=RdbytCurrent(); /读取数据nack();stop();delayms(5);return dat;Timer.c驱动函数:#include<reg52.h>#include"const.h"#include"Timer.h"bit g_systTime2Ms=0;bit g_time10Ms=0;bit g_time50Ms=0;void Timer0_com_Init()TMOD=0X21;SCON=0xd0;TH0=0XF8;TL0=0XCC;ET0=1;TR0=1;TH1=0xfd; /波特率设置为9600 TL1=0xfd; TR1=1; /开定时器T1运行控制位void Timer0() interrupt 1static s_countFor10Ms=0;static s_countFor50Ms=0;TH0=0XF8;TL0=0XCC;g_systTime2Ms=1;if(+s_countFor10Ms>=5) s_countFor10Ms=0; g_time10Ms=1; if(+s_countFor50Ms>=25) s_countFor50Ms=0; g_ti