图三
4.DS18B20中的高速暂存器是一个9字节的存储器,其含意如图5所示。 开始两个字节为被测温度的数字量,其含义如图2所示。第3、4、5字节分别为TH、TL、配置寄存器的复制,每一次上电复位时被重写。配置寄存器有R0、R1组成,其值决定温度转换的精度位数、转换时间等,含义如图6所示。第7字节为测温计数的剩余值。第8字节为测温时每度的计数值。第9 字节读出的是前8个字节的CRC校验码,通过此码,可判断通讯是否正确。 暂存器内容 字节地址 温度值 二进制 十六进制 温度最低数字位 0 +85 0000 0011 0111 0000 0370H 温度最高数字位 1 +10.125 0000 0000 1010 0010 00A2H 高温上限TH 2 +0.5 0000 0000 0000 1000 0008H 低温下限值TL 3 -0.5 1111 1111 1111 1000 FFF8H 配置寄存器 4 -10.125 1111 1111 0101 1110 FF5FH 保留 5 -55 1111 1100 1001 0000 FC90H 计数剩余值 6 图4 每度计数值 7 CRC效验 8 R1 R0 转换精度 温度分辨率 转换时间MS 0 0 9 0.5 93.75 0 1 10 0.25 187.5 1 0 11 0.125 375 1 1 12 0.0625 750 图6
4.2.4 DS18B20测温原理
DS18B20测温原理如图1示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1 ,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
12
5
图
斜率叠加器 预置 比较 高温系数振荡器 计数器1 加1 预置 Tx =0 温度寄存器 低温系数振荡器 计数器2 停止 -0 图1 DS18B20原理图
在正常测温情况下,DS1820的测温分辩率为0.5℃以9位数据格式表示,其中最低有效位(LSB)由比较器进行0.25℃比较,当计数器1中的余值转化成温度后低于0.25℃时,清除温度寄存器的最低位(LSB),当计数器1中的余值转化成温度后高于0.25℃,置位温度寄存器的最低位(LSB)。
4.2.5 提高DS18B20测温精度的途径
(1)、DS18B20高精度测温的理论依据
DS18B20正常使用时的测温分辨率为0.5℃,这对于水轮发电机组轴瓦温度监测来讲略显不足,在对DS18B20测温原理详细分析的基础上,我们采取直接读取DS18B20内部暂存寄存器的方法,将DS18B20的测温分辨率提高到0.1℃~0.01℃.
DS18B20内部暂存寄存器的分布,其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。首先用DS18B20提供的读暂存寄存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度整数部分T整数,然后再用BEH指令读取计数器1的计数剩余值M剩余和每度计数值M每度,考虑到DS18B20测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度T实际可用下式计算得到:T实际=(T整数-0.25℃)+(M每度-M剩余)/M每度。
13
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B0进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS1B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS1B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
(2)测量数据比较
为采用直接读取测温结果方法和采用计算方法得到的测温数据比较,通过比较可以看出,计算方法在DS18B20测温中不仅是可行的,也可以大大的提高DS18B20的测温分辨率。
4.3 显示及报警模块器件选择
在本设计中温度测量范围为0℃~+125℃,精度为±0.5℃,因此只需要数码管就可以完成相关的显示功能,报警器可以用蜂鸣器配合三极管来代替。
14
第5章 硬件设计电路
温度计电路设计总框图如图5-1所示,控制器使用单片机AT89S51,温度计传感器使用DS18B20,用LED数码管实现温度显示。
图5-1 温度计电路设计总框图
传感器 A/D转换器 控制器 显示器 本温度计大体分三个工作过程。首先,由DS18B20温度传感器芯片测量当前的温度,并将结果送入单片机。然后,通过AT89S51单片机芯片对送来的测量温度读数进行计算和转换,经显示电路显示于LED数码管上本电路主要由DSl820温度传感器芯片、LED显示电路和AT89S51单片机芯片组成。其中,DSI820温度传感器芯片采用“一线制”与单片机相连,它独立地完成温度测量以及将温度测量结果送到单片机的工作。
5.1 主控制器
单片机AT89S51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很合适携手特式产品的使用。主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。
5.2 显示电路
常用的LED显示驱动电路有并行译码方式、串行—并行转换方式、显示驱动接口芯片方式等.
5.2.1 并行译码显示方式
右图为单片机AT89S51输出显示的一个例子,4位BCD码数据从其P1.0~P1.3并行输出,经7段LED显示驱动电路CD4511译码后驱动LED显示,这样只需向P1.0~P1.3 写入欲显示数字的BCD码,即可显
15
示出相应的数字。这种方式虽然简单,但占用单片机口线较多,资源利用率低,因此不常采用。
5.2.2 串行译码显示方式
右图所示为AT89S51的串口驱动数码管的电路,其中串口工作在方式0,74LS164是8位串入并出移位寄存器,负责将RXD输出的串行数据转换成并行信号。显然,这种方式显示同样的位数使用单片机的口
线大大减少,并且可以让LED显示BCD码以外的字符(如A、B、C、D 等),但是,当要显示的位数较多时,仍需占用较多的口线,并且在许多情况下需要串口工作在UART方式,以便进行串行通信,从而限制了这种方式的使用范围。
本设计显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。
5.3 温度检测电路
DS18B20 最大的特点是单总线数据传输方式,DS18B20 的数据I/O 均由同一条线来完成。DS18B20 的电源供电方式有2 种: 外部供电方式和寄生电源方式。工作于寄生电源方式时, VDD 和GND 均接地, 他在需要远程温度探测和空间受限的场合特别有用, 原理是当1 W ire 总线的信号线DQ 为高电平时, 窃取信号能量给DS18B20 供电, 同时一部分能量给内部电容充电, 当DQ为低电平时释放能量为DS18B20 供电。但寄生电源方式需要强上拉电路, 软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM 时) , 同时芯片的性能也有所降低。因此, 在条件允许的场合, 尽量采用外供电方式。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电。在这里采用前者方式供电.
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC 降到3V 时,
16