您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于AT89C51与DS18B20的温度测量系统
基于AT89C51与DS18B20的温度测量系统引言温度是一种最基本的环境参数,日常生活和工农业生产中经常要检测温度。传统的方式是采用热电偶或热电阻,但是由于模拟温度传感器输出为模拟信号,必须经过A/D转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构复杂,制作成木较高。近年来,美国DALLAS公司生产的DS18B20为代表的新型单总线数字式温度传感器以其突出优点广泛使用于工农业生产制造以及日常生活中。DS18B20集温度测量和A/D转换于一体,直接输出数字量,传输距离远,可以很方便地实现多点测量,硬件电路结构简单,与单片机接口几乎不需要外围元件。文章将介绍DS18B20的结构特征及控制方法,给出以此传感器和AT89C51单片机构成的最小温度测量报警系统。1数字温度计DS18B20介绍1.1DS18B20性能介绍温度传感器DS18B20独特的一线接口,只需要一条口线通信,简化了分布式温度传感应用,无需外部元件,可用数据总线供电,电压范围为3.0V至5.5V无需备用电源,测量温度范围为-55°C至+125,精度为±0.5°C。温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒,用户可定义的非易失性温度报警设置,应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。DS18B20芯片出厂时默认为12位的转换精度。读取或写入DS18B20仅需要一根总线,要求外接一个约4.7kΩ的上拉电阻,当总线闲置时,其状态为高电平。此外DS18B20是温度-电流传感器,对于提高系统抗干扰能力有很大的帮助。1.2DSl8B20引脚结构DS18B20采用3脚TO-92封装或8脚的SOIC封装,如图1所示。各引脚的功能:GND为电压地;DQ为单数据总线;V为电源电压;NC为空引脚。图1DS18B20引脚图1.3DS18B20工作原理及应用DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解DS18B20的内部存储器资源。DS18B20共有二种形态的存储器资源,它们分别是:(1)ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后而48位是芯片唯一的序列号,最后8位是以上56位的CRC码(冗余校验)。数据在出厂时设置不由用户修改。DS18B20共64位ROM(2)RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失DS18B20共9个字节RAM每个字节为8位。如图2所示。第1,2个字节是温度转换后的数据值信急,第3和第4字节是高温触发器TH和低温触发器TL的易失性拷贝,第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。以上字节内容每次上电复位时被刷新。配置寄存器字节各位的定义如图2所示。低5位是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户不要去改动;R1和R0用来设置分辨率,决定温度转换的精度位数。如表1所示。图2DS18B20字节定义表1DS18B20温度转换时间2AT89C51与DS18B20组成的温度测量系统2.1电路工作原理分析与原理图2.1.1DS18B20与单片机的连接DS18B20的DQ单数据总线与单片机P1.7连接,GND电压地、V电源电压分别和电压地和5伏直流电源连接。本文设计的系统主机只对一个DS18B20进行操作,因此不需要读取ROM编码以及匹配ROM编码,只要跳过ROM命令,就可以进行如下温度转换和读取操作。(1)CCH—跳过ROM,直接向DS18B20发送温度变换命令。(2)44H—读暂存器。读内部RAM中9字节的温度数据。(3)BEH—写暂存器。发出向内部RAM的第2、3字节写上、下限温度数据命令,紧跟该命令之后,再传送两字节数据。DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读两字节共16位,读完后将低11位的二进制数转换为十进制后再乘以0.0625变为所测的温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反再加一再乘以0.0625才可以得到实际的温度值。前5位为0时,读取的温度为正值,只要将测得的数值乘以0.0625即可得到实际温度值。由于提前给DS18B20赋了上限、下限值,所以当温度超过上限或者不足下限时,会伴有LED灯闪烁和蜂鸣器响作为警报。2.1.2数码管动态扫描LED采用动态扫描显示,通过对74ls373直接操作,当锁存器74LS373的LE脚为高电平时锁存从8051的P0口输出的数据,即需要显示的数据段码。然后通过对74ls138的控制来实现让哪一位数码管亮,其电路连接如图3所示。对于需要显示小数点的那一个数码管要将数码管上小数点的那一位送低电平,使小数点亮,同时向74ls138写数据使138译码器的一个引脚输出为低电平,该引脚与三极管8550的基极连通,三极管的发射极为高电平,则三极管集电极导通,三极管的集电极与数码管的位选端相连,即选中了需要显示的那一位数码管,延迟一段时间,使该位数码管亮。通过循环扫描的方法将测得温度值依次送到对应的数码管中,在三位数码管显示测得的数据。数码管显示时需要通过位选线来确定是哪个数码管点亮,其位选电路如图4所示。图3数码管显示电路图4数码管位选电路2.1.3行列式键盘扫描本设计采用的键盘为2*2行列式键盘。通过对键盘行送0和1。然后读回行列值,进行判断,得到按键值,进行响应处理。例如给P1.5赋值为0,P1.6赋值为1时,当P1.3=0,P1.4=1时表示S2按键按下。同理可以判断出其它三个按键。其连接电路如图5所示。此系统的按键功能,可以通过按键来修改DS18B20中的保存的次上限和次下限的温度值:当按下S2键时,实现次下限加1功能;按下S4键,实现次上限加1功能;按下S3键,实现次下限减1功能;按下S5键,实现次上限减1功能,在按键的时候要等到数码管上的温度有变化的时候在松开键,这样的话就能实现对温度值报警范围的控制。图5行列式键盘电路2.2单片机对DS18B20的控制流程2.2.1复位首先我们必须对DS18B20芯片进行复位,复位就是山控制器(中一片机)给DS18B20中一总线至少480us的低电平信号。当DS18B20接到此复位信号后则会在15、s}60、s后回发一个芯片的存在脉冲。在复位电平结束之后,控制器应该将数据中总线拉高,以便于在15as}60us后接收存在脉冲,存在脉冲为一个60as}240us的低电平信号。至此,通信双方己经达成了基木的协议,接卜来将会是控制器与DS18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。如图6所示。图6复位时序图2.2.2控制器发送ROM指令双方打完招呼之后就要进行交流,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据(33H}、指定匹配芯片(SSH},跳跃ROMCCCH},芯片搜索(EOH}、报警芯片搜索CECHOROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件Jl作处理。诚然,单一总线上可以同时挂接多个器件,即通过每个器件上所独有的ID号来区别,一般只挂接单个DS18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令即非不发送ROM指令,而是用特有的一条“跳过指令”)。2.2.3控制器发送存储器操作指令在ROM指令发送给DS18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据(4EH),读RAM数据(BEH)、将RAM数据复制到EEPROM(48H),温度转换(44H)、将EEPROM中的报警值复制到RAM(BBH)、工作方式切换(B4H)。存储器操作指令的功能是命令DS18B20做干什么样的工作,是芯片控制的关键。2.2.4执行或数据读写一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。如执行温度转换指令则单片机必须等待DS18B20执行其指令,一般转换时间为500us。如执行数据读写指令则需要严格遵循DS18B20的读写时序来操作。读时间隙控制时的采样时间应该更加精确才行,读时间隙也是必须先由主机产生至少lus的低电平,表示读时间的起始。随后在总线被释放后的15us中DS18B20会发送内部数据位,这时控制器如果发现总线为高电平表示读出“1,如果总线为低电平则表示读出数据“0。每一位的读取之前都山控制器加一个起始信号。注意:如图7所示,必须在读间隙开始的15us内读取数据位才可以保证通信的正确。图7读时序写时间隙分为写“0”写“1”,时序如图8所示。在写数据时间隙的前15us总线需要是被控制器拉置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15us~60us,采样时间内如果控制器将总线拉高则表示写1,如果控制器将总线拉低则表示写“0”。每一位的发送都应该有一个至少l5us的低电平起始位,随后的数据“0”或“1”应该在45us内完成。整个位的发送时间应该保持在60us~120us,否则不能保证通信的正常。图8写时序2.3温度计算的简化处理当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的一进制补码形式(高5位是符号位)存储在高速暂存器的第1,2字节。单片机可以通过单一线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.06250C/LSB形式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将一进制位转换为十进制;当符号位s=1时,表示测得的温度值为负值,要先将补码变成原码(取反加n,再计算十进制数值。例如,输出数字量7DOH}可知温度为正,07DOH转换成十进制是2000所测温度为2000*0.0625=1250C;输出数字量OFC90H,可知温度为负,OFC90H原码为370H,转换成十进制是880所测温度为880X0.0625=-550C若温度显示范围为00C~990C,显示精度为1℃显示时,可以只用2个数码管。由于12位转化时每位的精度为0.06250C,可以把转换得到的温度最高四位与最低四位舍去,这样可获得一个新的字节,这个字节就是实际测量的温度值,且无需乘以0.0625,简化了计算过程。2.4编写程序实现单片机对DS18B20的控制本系统采用C语言对单片机编程,从而实现对DS18B20的温度测量控制,并且实现对报警LED灯的控制,以下为程序实现的流程图,如图9所示。图9总程序流程图2.5使用DS18B20的注意事项(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格保证读写时序,否则将无法读取测温结果。(2)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待其返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20否L2闪烁开始是否有键按下得到键值次上限加1次上限减1次下限加1次下限减1获取温度并显示进行温度处理L2tL1tL2H1tH2tH2L1tH1L2L3闪烁L8闪烁L8L9闪烁显示温度是时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给子一定的重视。3结论本系统以AT89C51单片机为开发平台,通过对单总线可编程温度传感器DS18B20的特性、内部结构、工作流程进行深入研究,结合相应的软、硬件设计,在此基础上设计了温度控制系统,与传统装置相比,具有主机接口简单
本文标题:基于AT89C51与DS18B20的温度测量系统
链接地址:https://www.777doc.com/doc-4112241 .html