第一部 设计要求
1.1 数字温度计概述
本实验设计的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或温度自动控制使用,该设计控制器使用单片机AT89C2051,测温传感器使用DS18B20,用4位共阳极LED数码管以并口传送数据,实现温度显示,能准确达到以上要求。 1.2 本次设计要求:
(1) 基本范围-55℃-125℃。 (2) 精度误差小于0.5℃。 (3) 共阳LED数码直读显示。 1.3 系统主要功能
用四只LED数码管实时来显示当前温度。
第二部分 系统硬件设计
2.1 系统总体设计方案及设计框图:
采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。该设计方案电路比较简单,软件设计也比较简单。
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。
震荡电路
2.2系统的硬件构成及功能
复位电路 主控制器 显示电路 温度传感器
2.2.1 主控制器
单片机AT89C2051具有低电压供电和体积小等特点,两个口足以满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电,或者用手机充电器也能供电。
2.2.2 显示电路
显示电路采用位共阴LED数码管,从P1口输出段码,由P3口做位选。
2.2.3 温度传感器
DS18B20温度传感器是美国DALLAS公司生产的一种改进型的智能温度传感器,与传统的热敏电阻等测温元件相比,它具有结构简单,能直接读出被测温度,采用一根I/O数据线既可供电又可传输数据、并可由用户设置温度报警界限等特点,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:
错误!未找到引用源。独特的单线接口仅需要一个端口引脚进行通信;
错误!未找到引用源。多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
错误!未找到引用源。无须外部器件; 错误!未找到引用源。可通过数据线供电,电压范围为3.0~5.5V; 错误!未找到引用源。零待机功耗;
错误!未找到引用源。温度以9或12位数字; 错误!未找到引用源。用户可定义报警设置;
错误!未找到引用源。报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
错误!未找到引用源。负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图
2所示
存储器与控制逻辑 64 高温度传感器 高温触发器TH 低温触发器TL C 位 ROM 和 单 线 接 配置寄存器 8位CRC发生器 速口 图2 DS18B20的内部结构图
内部结构中的各个组成部分分别介绍如下:
(1) 64 b闪速ROM的结构:
开始8位是产品类型的编号,接着是每个器件的惟一的序号,
共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:
低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率,如表1所示:
表1 R0和R1模式表
R0 0 0 1 1
由表1可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示
R1 0 1 0 1
分辨率 9位 10位 11位 12位
温度最大转换时间
93.75 187.5 275.00 750.00
表2是一部分温度值对应的二进制温度数据。
表2 一部分温度对应值表
温度/℃ +125 +85 +25.0625 +10.125 +0.5 0 -0.5 -10.125 -25.0625 -55 二进制表示 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0000 0000 0000 1010 0001 0000 0000 0000 0010 0000 0000 0000 1000 1111 1111 1111 0000 1111 1111 0101 1110 1111 1110 0110 1111 1111 1100 1001 0000 十六进制表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH FE6FH FC90H DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索. 2.2、4 DS18B20的引脚介绍
TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
底
表1 DS18B20详细引脚功能描述
序名称 引脚功能描述 号 1 GND 地信号 2 DQ 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。 3 VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 3 DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89C251单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 DS18B20的复位时序
DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
2.3 DS18B20温度传感器与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时
DS18B20的1脚接地,2脚作为信号线,3脚接电源。如图3
图3
2.4 系统整体硬件电路
1.主板电路
系统整体硬件电路包括,传感器数据采集电路,温度显示电路,报警电路,单片机主板电路等,如图4 所示。
图4中蜂鸣器可以在被测温度不在上限范围内时,发出报警鸣叫声音。
图4 中采用的是上电复位,使用比较方便,开机时自动复位, 2.温度显示电路
温度显示电路是使用的动态显示,这种显示最大的优点就是使用口资源比较少,用P1-1---P1-7输出段码,小数点由P1.0控制,P3-0---P3-3输出位选,四只数码管采用三极管9012驱动,显示比较清晰。
设计总体
第三部分 系统程序设计
系统程序包括主程序,读温度子程序,温度转换子程序,温度计算子程序,显示刷新子程序。各部分程序流程图如下所示.
主程序流程图
初始化 调用显示子程序 1S到? 初次上电? 读出温度值 温度计算处理 发温度转换开始命
读出温度子程序流程图
发DS18B20复位命令 发跳过ROM命令 CRC校验正确? 发读温度命令 移入温度暂存器 读取操作,CRC校验 结束 9字节完?
温度转换命令主程序流程图
发DS18B20复位命令 发跳过ROM命令 发温度转换开始命令 结束
计算温度子程序流程图
开始 计算小数位BCD码 发DS18B20复位命令计算整数位BCD码 温度值取补码 结束
显示部分流程图
温度数据移入显示寄存器 十位数0? 百位数0? 百位不显示,十位显示符号 百位显示数据 结束
第四部分 结束语
本次设计完成得比较成功,基本上达到了预期的要求。但是在设计过程中也遇到了一些相关的问题,比如显示数码管开机时显示乱码,刚开始以为电路有问题,但后来发现是程序中数码管的位码和段码的数值给错了,因为我们用的共阳的数码管,而程序里共阴的,改正过来后,能正确显示温度。另外在程序调试过程中也遇到问题,在温度数据处理部分,尤其是负温度部分仿真时发现温度值总是比实际小16度,后来经过与同学之间交流发现是温度求补码出现错误。 DS18B20测得的负温度是整体求补码再存在在两个字节,而不是分别求,所以处理时高字节取反不要加1,低字节取反加1即可。
因篇幅问题不能全部显示,请点此查看更多更全内容