DS18B20数字温度计的设计1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机课程设计报告设计课题:DS18B20数字温度计的设计专业班级:09通信工程小组成员:金双凤066谭晓平153朱传毅指导教师:田茂设计时间:2011-11-20——2011-12-251DS18B20数字温度计的设计一、功能要求数字温度计测温范围在-55—+125℃,误差在0.5℃以内,采用四位一体七段数码显示管直接显示。二、方案论证在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。其缺点如下:·硬件电路复杂;·软件调试复杂;·制作成本高。本数字温度计设计采用温度传感器DS18B20作为检测元件,测温范围—55——125℃,最高分辨率可达0.0625℃。DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。数字温度计总体结构框图如图1所示。图1数字温度计总体结构框图三、系统硬件电路的设计温度计电路的设计原理图如图2所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,用4位共阳七段数码显示管以动态扫描法实现温度显示。2图2设计原理图(1)主控制器单片机AT89C2051具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携手持式产品的设计使用。系统可用两节电池供电。(2)显示电路显示电路采用4位共阳七段数码显示管,从P1口输出段码,列扫描用P3.0——P3.3口来实现,列驱动用9012三极管。(3)温度传感器工作原理a.DS18B20的性能特点DS18B20温度传感器是一种改进型智能温度传感器。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际需要通过简单的编程实现9——12位的数字值读数方式。DS18B20的性能特点如下:·独特的单线接口仅需要一个端口引脚进行通信;·多个DS18B20可以并联在唯一的三线上,实现多点组网功能;·不需要外部器件;·可通过数据线供电,电压范围为3.0——5.5V;·零待机功耗;·温度以9——12位数字量读出;·用户可定义的非易失性温度报警设置;·报警搜索命令识别并标志超过程序限定温度的器件;·负电压特性,电源电压接反时,温度计不会因发热而烧毁,只是不能正常3工作。b.DS18B20的内部结构DS18B20采用3脚PR—35封装或8脚SOIC封装,其内部结构框图如图3所示。图3DS18B20内部结构框图64位ROM的位结构如图4所示。开始8位是产品类型的编号;接着是每个器件的唯一的序号,共有48位;最后8位的前面56位的CRC检验码,这也是多个DS18B20可以采用单线进行通信的原因。非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限数据。图4DS18B20的64位ROM的位结构DS18B20温度传感器的内部存储器还包括一个高速暂缓RAM和一个非易失性的可电擦除的EEPROM。高速暂缓RAM的结构为9字节的存储器,其结构如图5所示。前2字节包含测得的温度信息。第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5字节为配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。4图5DS18B20高速暂缓RAM的结构图该字节各位的定义如图6所示,其中,低5位一直为1;TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时,该位被设置成0,用户不要去改动;R1和R0决定温度转换的精度位数,即用来设置分辨率,其定义方法见下表。图6高速暂缓RAM各位字节的定义由表可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM是第6、7、8字节保留未用,表现为全逻辑1。第9字节是前面所以8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接受到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式储存在高速暂缓RAM的第1、2字节中。单片机可以通过单线接口读出该数据,读数据时,低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。温度值格式如图7所示。5图7DS18B20温度值格式图中,S表示符号位。当S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当S=1时,表示测得的温度值为负值,要先将补码变为原码,再计算十进制值。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若TTH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码。主机根据ROM的前56位来计算CRC值,并与存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。c.DS18B20测温原理如图8所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图8DS18B20测温原理图6图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将—55℃所对应的一个基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在—55℃所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将重新被装入,并重新开始对低温度系数振荡器产生的脉冲信号进行计数。如此循环,直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读/写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20→发ROM功能命令→发存储器操作命令→处理数据。d.DS18B20与单片机的接口电路DS18B20可以采用两种方式供电:一种是采用电源供电式,此时DS18B20的第一脚接地,第2脚作为信号线,第3脚接电源;另一种是寄生电源供电式。当DS18B20处于写储存器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最长为500ms。采用寄生电源供电方式时,VDD和GND均须接地。由于单线制只有一跟线,因此发送接口必须是三态的。四、系统程序的设计系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等。a.主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的温度测量值。温度测量每1s进行一次。主程序流程图如图9所示。7图9温度测量主程序流程图b.读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。读出温度子程序流程图如图10所示。图10读出温度子程序流程图c.温度转换命令子程序8温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转化时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图11所示。图11温度转换命令子程序流程图d.计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。计算温度子程序流程图如12图所示。图12计算温度子程序流程图e.显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。显示数据刷新子程序流程图如图13所示。9图13显示数据刷新子程序流程图五、各程序模块如下:P1口输出段码,P2口扫描//#pragmasrc(d:\aa.asm)#includereg51.h#includeintrins.h//_nop_();延时函数用#defineDisdataP1//段码输出口#definediscanP2//扫描口#defineucharunsignedchar#defineuintunsignedintsbitDQ=P2^7;//温度输入口sbitDIN=P1^7;//LED小数点控制uinth;//////*******温度小数部分用查表法**********//ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xc0,0xdf};10/*共阳LED段码表0123456789不亮-*/ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字uchardatatemp_data[2]={0x00,0x00};//读出温度暂放uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用///////***********11微秒延时函数**********///voiddelay(uintt){for(;t0;t--);}///***********显示扫描函数**********/scan(){chark;for(k=0;k4;k++)//四位LED扫描控制{Disdata=dis_7[display[k]];if(k==1){Disdata=(dis_7[display[k]]&0x7f);}discan=scan_con[k];delay(90);discan=0xff;}}/////***********18B20复位函数**********/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0;//delay(50);//550usDQ=1;//delay(6);//66uspresence=DQ;//presence=0继续下一步11}delay(45);//延时500uspresence=~DQ;}DQ=1;}/////**********18B20写命令函数*********///向1-WIRE总线上写一个字节voidwrite_byte(ucharval){uchari;for(i=8;i0;i--)//{DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay(6);//66usval=val/2;//右移一位}DQ=1;delay(1);}///*********18B20读1个字节函数********///从总线上读取一个字节ucharread_byte(void){uchari;ucharvalue=0;for(i=8;i0;i--){DQ=1;_nop_();_nop_();value=1;DQ=0;//_nop_();_nop_(

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功