
数字温度传感器DS18B20(含程序).doc
9页数字温度传感器数字温度传感器 DS18B20摘要摘要DS-18B20 数字温度传感 器具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域应用范围广泛,适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域 ,轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制和汽车空调、冰箱、冷柜、以及中低温干燥箱等一、一、引脚图引脚图 DS18B20 引脚定义:引脚定义: (1)DQ 为数字信号输入/输出端; (2)GND 为电源地; (3)VDD 为外接供电电源输入端(在寄生电源接线方式时接地)二、二、DS18B20 的主要特性的主要特性1.1、电压范围:3.05.5V,在寄生电源方式下可由数 据线供电1.2、DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20的双向通讯1.3、多个 DS18B20 可以并联在唯一的三线上,实现组网多点测温1.4、DS18B20 在使用中不需要任何外围元件1.5、温范围55125,在-10+85时精度为0.51.6、可编程 的分辨率为 912 位,对应的可分辨温度分别为 0.5、0.25、0.125和 0.0625,可实现高精度测温1.7、在 9 位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多在750ms 内把温度值转换为数字,速度更快1.8、测量结果直接输出数字温度信号,以一 线总线串行传送给 CPU,同时可传送CRC 校验码,具有极强的抗干扰纠错能力1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。
三、三、DS18B20 的外形和内部结构的外形和内部结构DS18B20 内部结构主要由四部分组成:64 位光刻 ROM 、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器 DS18B20 内部结构图四、四、DS18B20 工作原理工作原理 DS18B20 的温度转换时的延时时间由 2s 减为 750ms DS18B20 测温原理如图 3 所示图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器 1高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器 2 的脉冲输入计数器 1 和温度寄存器被预置在55所对应的一个基数值计数器 1 对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1 的预置值减到 0 时,温度寄存器的值将加 1,计数器 1 的预置将重新被装入,计数器 1 重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度图 3 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 的预置值DS18B20 有有 4 个主要的数据部件:个主要的数据部件: (1)光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20的地址序列码。
64 位光刻 ROM 的排列是:开始 8 位 (28H)是产品类型标号,接着的 48 位是该 DS18B20 自身序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1)光刻 ROM 的作用 是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的 (2)DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数形式提供,以 0.0625/LSB 形式表达,其中 S 为符号位表 1: DS18B20 温度值格式表 这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0, 这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际 温度 例如+125的数字输出为07D0H,+25.0625的数字输出为 0191H,-25.0625的数字输出为 FF6FH,-55的数字输出为 FC90H 。
表 2: DS18B20 温度数据表(3)DS18B20 温度传感器的存储器 DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存器4)配置寄存器 该字节各位的意义如下:表表 3: 配置寄存器结构TMR1R011111低五位一直都是1,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式在 DS18B20 出厂时该位被设置为 0,用 户不要去改动R1 和 R0 用来设置分辨率,如下表所示:(DS18B20 出厂时被设置为 12 位)R1R0分辨率温度最大转换时间009 位93.75ms0110 位187.5ms1011 位375ms1112 位750ms表表 4: 温度分辨率设置表五、高速暂存存储器五、高速暂存存储器 高速暂存存储器由 9 个字节组成,其分配如表 5 所示当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第 0 和第 1 个字节单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表 1 所示对应的温度计算: 当符号位 S=0 时,直接将二进制位转换为十进制;当 S=1 时,先将补码变为原码,再计算十进制值。
表 2 是对应的一部分温度值第九个字节是 冗余检验字节寄存器内容字节地址字节地址寄存器内容字节地址字节地址温度值低位 (LS Byte)0保留5温度值高位 (MS Byte)1保留6高温限值(TH)2保留7低温限值(TL)3CRC 校验值8配置寄存器4表表 5: DS18B20 暂存寄存器分布根据 DS18B20 的通讯协议,主机(单片机)控制 DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20 进行 复位操作,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作复位要求主 CPU 将数据线下拉 500 微秒,然后 释放,当 DS18B20 收到信号后等待 1660 微秒左右,后发出60240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功 表表 6: ROM 指令表 表表 7: RAM 指令表指 令约约定定代代码码功功 能能读 ROM33H读 DS1820 温度传感器 ROM 中的编码(即 64 位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。
搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址为操作各器件作好准备跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令适用于单片工作告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应 六、六、DS18B20 的应用电路的应用电路6.1 DS18B20 测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点 6.2 DS18B20 的外部电源供电方式的外部电源供电方式 在外部电源供电方式下,DS18B20 工作电源由 VDD 引脚接入,此时 I/O 线不需要强上拉,同时在总线上理论可以挂接任意多个 DS18B20 传感器,组成多点测温系统注意:在外部供电的方式下,DS18B20 的 GND 引脚不能悬空 ,否则不能转换温度,读取的温度总是85指 令约定约定代码代码功功 能能温度变换44H启动 DS1820 进行温度转换,12 位转换时最长为 750ms(9 位为 93.75ms)结果存入内部 9 字节 RAM中读暂存器0BEH读内部 RAM 中 9 字节的内容写暂存器4EH发出向内部 RAM 的 3、4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。
复制暂存器48H将 RAM 中第 3 、4 字节的内容复制到 EEPROM 中重调 EEPROM0B8H将 EEPROM 中内容恢复到 RAM中的第 3 、4 字节读供电方式0B4H读 DS1820 的供电模式寄生供电时 DS1820 发送“ 0 ”,外接电源供电 DS1820 发送“ 1 ”图图 6:外部供电方式单点测温电路外部电源供电方式是 DS18B20 最佳的工作方式,工作稳定可靠,抗干扰能力强,电路简单,可以开发出稳定可靠的多点温度 监控系统在外接电源方式下, 可以充分发挥DS18B20 宽电源电压范围的优点,即使电源电压 VCC 降到 3V 时,依然能够保证温度量精度七、七、DS18B20 汇编程序汇编程序;*FLAG1 BIT F0 ;DS18B20 存在标志位DQ BIT P1.7TEMPER_L EQU 29HTEMPER_H EQU 28HA_BIT EQU 35HB_BIT EQU 36H;*ds18b20 汇编程序起始*ORG 0000HAJMP MAINORG 0100H;*主程序开始*MAIN:LCALL INIT_18B20;LCALL RE_CONFIGLCALL GET_TEMPERAJMP CHANGE;*DS18B20 复位程序*INIT_18B20: SETB DQNOPCLR DQMOV R0,#0FBHTSR1: DJNZ R0,TSR1 ;延时SETB DQMOV R0,#25HTSR2: JNB DQ ,TSR3DJNZ R0,TSR2TSR3: SETB FLAG1 ;置标志位,表明 DS18B20 存在CLR P2.0 ;二极管指示AJMP TSR5TSR4: CLR FLAG1LJMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,TSR6TSR7:SETB DQ ;表明不存在RET;*设定 DS18B20 暂存器设定值*;RE_CONFIG:;JB FLAG1,RE_CONFIG1;RET;RE_CONFIG1: MOV A,#0CCH ;放跳过 ROM 命令;LCALL WRITE_18B20;MOV A,#4EH;LCALL WRITE_18B20 ;写暂存器命令;MOV A,#00H ;报警上限中写入 00H;LCALL WRITE_18B20;MOV A,#00H ;报警下限中写入 00H; LCALL WRITE_18B20;MOV A,#1FH ;选择九位温度分辨率; LCALL WRITE_18B20; RET;*读转换后的温度值*GET_TEMPER:SETB DQLCALL INIT_18B20JB FLAG1,TSS2RET ;若不存在则返回TSS2: MOV A,#0CCH ;跳过 ROMLCALL WRITE_18B20MOV A,#44H ;发出温度转换命令LCALL WRITE_18B20LCALL DISPLAY ;延时LCALL INIT_18B20MOV A,#0CCH ;跳过 ROMLCALL WRITE_18B20MOV A,#0BEH ;发出读温度换命令LCALL WRITE_18B20LCALL READ2_18B20 ;读两个字节的温度RET;*写 ds18b20 汇编程序*WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQMOV R3,#6DJNZ R3,$RRC AMOV DQ,CMOV R3,#23DJNZ R3,$SETB DQNOPDJNZ R2,WR1SETB DQRET;*读 18B20 程序,读出两个字节的温度*READ2_18B20:MOV R4,#2 ;低位存在 29 H,高位存在。
