您的当前位置:首页正文

基于DS18B20的多点温度采集系统设计

来源:化拓教育网
ELECTRONICS WORLD・技术交流 基于D¥18B20的罗 点温度采集系统设计 岭南师范学院网络与信息技术中心 叶小乐 【摘要】 ̄XDSI8B20数字温度传感器和AT89C52单片机为核心,设计了一种多点温度采集系统。系统由Ds18B20i ̄度采集模块、RS一232串 .口通信模块、LCD1602液晶显示模块和声光报警等模块组成。给出了系统的具体硬件电路与程序设计,实现了对多点温度的采集、显示、传 输和异常报警。系统可以广泛应用于粮仓、温室大棚等农业生产领域,具有广阔的应用前景。 【关键词】温度采集;DS18B20;单片机 Design of Multi-point Temperature Acquisition System Based on DS18B20 YE Xiao—le (Information and Educational Technique Center,Zhanjiang Normal University,Zhanjiang 524048,China) Abstract:A multi-point temperature acquisition system iS designed based on DS I 8b20 digital thermometer and AT89C52 MCUThe system consists .of temperature acquisition module,RS-232 serial communication module,LCDI602 module,voice and light alarm moduleThe design method of .concrete hardware and software ofthe system is given,and the system realizes the acquisition,indication。transmission and abnormal alarm ofmulti— point temperature.The system can be widely applie in agriculture domain such as granary,green house and SO on,it has wide application prospects. key words:Temperature Acquisition:DS18B20:MCU 0引言 温度是农业生产中的一个重要参数,在众多农业生产领域中需 要对温度进行监测,大型粮仓需要对上百个点的温度进行监测,掌 握各个点在不同时刻的温度变化,以提高仓储量,同时有效地避免 发生霉变现象。针对这种需要多点温度采集的情况,本文设计提出 了一种基于AT89C52单片机和DS18B20数字温度传感器的多点温度 采集系统。系统可以实时获取多点温度数据,并将温度值与报警设 定值进行比较,判断是否发出声光报警,同时将温度值送LCDI602 进行实时显示,并把温度数据通过串口通讯传输给上位PC机,由 PC机处理后通过网络传输到控制中心。 232串行接口,通信距离能够达到l5米,上位PC机通过VC程序控制 串口来接收单片机发送的温度数据,所以系统能够满足在需要较大 范围温度测控的场合布置使用。 1 多点温度采集系统设计 1.1系统结构设计 系统的控制核心选用8位单片机AT89C52,由DSI8B20温度采 集模块、RS.232串口通信模块、LCDI602液晶显示模块和声光报警 模块组成,如图1所示。 图2系统电路图 2硬件模块设计 图1系统结构图 1.2系统电路设计 根据系统结构设计出包含AT89C52单片机与DSl 8B20数字温度传 感器、串L1、LCD以及声光报警电路的整体电路图,如图2所示。 这里AT89C52单片机采用DIP一40封装,包括4组8位的输入/输 出口:LCD1602的DO~D7引脚连接单片机的P0.O~P0.7口,RS引 脚连接单片机的P3.5口,E引脚连接单片机的P3.4口;声光报警电 路连接单片机的P2_3口;DSl8B20数字温度传感器采用单总线技术 (1.WireBus),即在单片机接口中只用一根导线(I/0信号线)就 可以连接多个数字温度传感器,并能够直接把被测温度值转化为串 行信号在单总线上传输,这里选用单片机的P2.1口通过单总线与两 个DSl8B20的数据线引脚DQ相连,单总线通过1OK的上拉电阻R6 连接+5v电源,DSI8B20传感器可位于离单片机l50m以内的任何地 方:并且为了能够和上位PC机进行长距离数据传输,系统选用RS. 2.1 DS18B20温度采集模块 系统使用的是美国DALLAS半导体公司推出的系列单总线温 度传感器芯片DS1 8B20…,该芯片具有以下优点: (1)体积 小,只有电源、接地、数据线共3个引脚,极大地节约了系统资 源 J: (2)功耗低、成本低、性能高; (3)测温范围, 。可 测范围在.55℃到+125℃之间; (4)可组网,每个DSl8B20都有 唯一的序列号,可用于多点测温: (5)线路简单,DSl8B20作为 1.wire单总线数字温度传感器,采用一根信号线实现信号的双向传 输,接El简单,便于扩展和维护 ,只需要占用单片机的一个端 口即可通信,本设计采用AT89C52单片机的P2.1端口与DSl8B20 进行通信,详见图2所示: (6)适用电压宽,从3V一直到5.5V: (7)用户可以在9位到l2位之间选择数字温度的分辨率,传感器直 接输出温度值的数字信号,抗干扰能力好: (8)可在内部设置温 度的上、下限告警。 基金项目:岭南师范学院自然科学基金项目(L1211)。 ・1O0・电子世再 ELECTRONICS W0RLD・ : 2_2 AT89C52单片机 系统选用美国ATMEL公司制造的8位单片机AT89C52做主控 制器。这种单片机采用ATMEL公司的高密度非易失存储器技术生 产,兼容工业标准的MCS一51指令系统和8052的产品引脚,片内含 有8k字节可擦写Flash只读程序存储器(PEROM)与256字节随机数 据存储器(RAM)。该单片机拥有1个8位CPU,1个片内振荡器及 时钟电路,3个16位定时/计数器,21个特殊功能寄存器,4个8位并 行I/O口,共32条可编程I/O端线,1个可编程全双工串行口,8个中 断源H 。AT89C52单片机可以为嵌入式系统行业提供高性价比、 高灵活度的解决方案。 2.3 LCD1 602液晶显示模块 这里采用LCD1602液晶显示模块来实时显示所测温度。该款 液晶显示模块以其功耗低、显示内容丰富、超薄轻巧、体积小的优 势,被广泛应用于低功耗的应用系统和袖珍式仪表当中。这种工业 字符型的液晶显示模块能够同时显示2行,每行l6个字符,共计32 个字符,本设计每行显示一个采集点的温度值。该液晶模块自带标 准字库,有160个不同的点阵字符图形被存储于其内部字符发生存 储器(CGROM)中,这些字符包括英文字母的大小写、阿拉伯数 字、常用的符号等,每一个字符均对应有一个固定的代码。可以通 过指令编程来实现对液晶显示模块的读写、屏幕和光标的操作等。 2.4声光报警模块 系统实时测量各点温度,如果温度达到告警设置,则由单片机 的系统软件控 ̄lJP2_3引脚交替输出高低电平,使三极管驱动声光设 备发出报警。 2.5串口通信模块 AT89C52单片机的串行接口与RS.232标准串口通信连接的接 口电路详见图2所示。因为AT89C52单片机的串行接口采用TTL电 平,从而和采用RS一232电平的PC机串口在接口规范上不一致,所 以需要在单片机的串行接口和PC机的标准串行接口之间进行电平 转换,这里采用的是MAX232接口芯片来实现TTL电平 ̄tJRS.232接 口电平的转换的。 3系统软件设计 系统软件使用Keil C51开发,采取模块化的设计方法,使程序 的结构清晰,提高了开发调试的效率,利于以后软件的升级和系 统功能的扩展。程序设计模块主要包括主程序、温度转换子程序、 DS18B20时序子程序等。 3.1主程序 主程序的主要功能是负责温度数据的实时处理:调用温度转换 子程序获取实时温度数据,将实时温度值与报警设定值进行比较, 判断是否发出声光报警,同时将温度值送LCD1602进行实时显示, 并同时把温度数据由串口通讯实时发送给上位PC机。主程序流程 图如图3所示。 图3主程序流程图 主程序相关代码程序如下: void main(){ uinti; lfoat tempr; init0;//初始化函数 while(1){ for(i=01 i<21 iH){ tempr=get temp(get_serial+i 8);//调用温度 转换程序获取实时温度数据 if(i—O)f, 骞一个温度传感器 if(tempr>warn1){warn(1);)//判断温度是否超标报警 write com(Ox80);//LCD 在 的第一行显示sprintftablel+6,”%0.If”, ̄mpO;//精确 到小数点后一位 DisplayLCDString(table1)//送往LCD显示 SendCOM_String(table1)1//由串口发送给上位Pc机 } if(i==1)f,/第二个温度传感器 if(tempr>warn2){wanr(2);}//判断温度是否超标报警 write corn(0x80+Ox40);∥在LCD的第二行显示 sprintf(table2+6,”%0.1 r',tempO1//精确 到小数点后一位 DisplayLCD_String(table2)1//送往LcD显示 SendCOM_String(table2);/,由串口发送给上位Pc机 })}} 3_2温度转换子程序 DS18B20在上电后是处于空闲状态的,依据其单总线协议,每 次温度转换都需要单片机通过以下4个步骤器发送命令控制传感器 来完成: (1)对DS18B20进行初始化即复位操作; (2)初始化成 功后发送ROM指令用于识别器件: (3)发送一条RAM指令控制 DS18B20完成相应操作;(4)收发数据。由此设计温度转换子程序的 程序流程图如图4所示。 图4温度转换子程序流程图 DS18B20完成温度转换后得到的l2位数据存储于两个8位的 RAM中,如果温度小于0,需要把测得的数值取反加1再乘以0.0625 便是实际温度,如果温度大于O,把测得的数值乘以0.0625就是实 际温度。编写设计温度转换子程序如下: lfoat gettemp(uehar rom)∥Dsl8B2O温度转换函数 _{ uchar a,b: uinttemp; lfoatf_temp; dsreset0://对DS18B20进行初始化即复位操作 delay(1); tempwritebyte(0x55) ̄//匹配RoM指令,用来选定与所给ROM编码相匹 配的传感器 电子t蟹I●・101・ ELECTRONlCS WORLD・ tempwriteromcode(rom)://发送一个ROM编码 笏 j=tempreadbit0; tempwritebyte(0x44);//发送温度转换指令 dsreset0;//对DS18B20进行初始化即复位操作 delay(1); } dat=0<<7)i(dat>>1);,,刚好一个字节在dat里 return(dat); tempwritebyte(Ox55);,/匹配RoM指令,用来选定与所给ROM编码相匹 配的传感器 tempwfiteromcode(rom);//发送一个ROM编码 ) (3)写时序:对于DS18B20的写时序分为写0时序与写1时序 两个过程。写“O”时序用于主机向DS18B20写入O,写“1”时序 tempwritebyte(0xbe);//发送读出暂存器指令 a=tempreadbyte0;//读低8位 b=tempreadbyte0://读高8位 temp=b: temp‘<:8;//两个字节组合为1个字 temp temp l a: if((temp&0xfS00)一0xfS00){,,判断温度正负值 ftemp=( ̄temp+1) O.0625 一1; }else{ f temp=temp O.0625:,/温度在寄存器中为l2位分辨率 位0.0625度 ) return ftemp;//返回实际温度值 ) 3.3时序子程序 由于DS18B20是采用单总线协议方式在一根I/O线上进行数据 的读写,这要求对数据位的读写有着严格的时序来保证各位数据得 到正确完整地传输,并且所有的数据读写均由最低位开始。本系统 单片机使用的晶振频率是11.0592MHz,根据DS l 8B20的初始化时 序、写时序和读时序要求,分别设计编写了3个子程序。 (1)初始化时序:它是单总线上所有传输过程的开始。整个 初始化过程由主机发出的复位脉冲和DS18B20发出的响应脉冲组 成。初始化时序子程序如下: void dsreset(void)f∥初始化时序函数 uinti; ds=0; //拉低总线 i=103; while(i>0)//延时 i--; ds=1;//释放总线 i=4: whilefi>0)//延时 i--; } (2)读时序:DS18B20只有在检测到主机启动读时序后才向 主机传输数据。因此在主机发送了读数据命令后,必须马上产生读 时序,以便DS18B20 ̄够传输数据。读时序子程序如下: bittempreadbit(v0id){ ∥读1位数据时序函数 uinti; bit dat; ds=O; //拉低总线 i++;//i++起延时作用 ds=1;//释放总线 i++;//i++起延时作用 i++: dat=ds;//读1位数据 i=8: while(i>0)//延时 i--; return(dat); ) uchartempreadbyte(void)//读1个字节数据时序函数 { uchari,J,dat; dat=0: for(i=1;i<--8;i++){ ・102・屯子世界 用于主机向DS18B20写入1。写时序子程序如下: voidtempwritebit(bitdat){//写1位数据时序函数 uinti; if(dat)//写1 { ds=0; //拉低总线 i++;//i++起延时作用 i++: ds=1;∥释放总线,由上拉电阻将单总线拉至高电平 i=8: while“>01//延时 i--; }else{∥写0 ds=0://拉低总线 i=8: while ri>0 //延时 i--; ds=l;∥释放总线 i++;//i++起延时作用 i++; }) void tempwritebyte(uchar dat1//写一个字节数据时序函数 { uchar J; bit testb; ofrO=1 ) } 4结束语 在通过模块化的电路调试、软件测试和整体集成后,系统各方 面性能都满足设计要求,测温准确,数据显示、传输和声光报警都 工作正常。随着科学技术的发展,尤其是计算机技术的发展与普 及,数据采集技术将有更为广阔的发展前景 ],本文设计的远距 离多点数字式温度采集系统作为一种数据采集技术可以广泛应用于 粮仓、温室大棚等农业生产领域。 参考文献 【1]DALLAS公司.DS18B20使用手册『z】.2003. [21宋丹.多路温度巡检系统的设计与应用【I1_自动化与仪表,2008, 23(9):13—15. 【3】张彦兵,刘永前,李义强.1 ̄wire总线驱动电路设计….传感技术 学报,2006,19(4):1020—1028. 【4]李文娟,海霞,叶谌雯.一种基于超声波的检测防撞系统的设计 自动化博览,2007(6):80—81 【5】王安敏,张凯.基于AT89C52单片机的超声波测距系统l_I1l仪表 技术与传感器,2006(6):45—46. [6]朱晓荣,周东辉.一种实用的分布式数据采集和控制系统UIl电 子产品世界 2003(8):34-36. 作者简介: 叶小乐(1979一),男,江西大余人,硕士研究生,计算机科 学与技术实验师,研究方向:嵌入式系统、计算机网络。 

因篇幅问题不能全部显示,请点此查看更多更全内容