三、DS18B20工作原理
DS18B20的温度值的位数因分辨率不同而不同,温度转换时的延时时间为750ms。 DS18B20测温原理如图3.7所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
四、DS18B20 的温度测量
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对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之内就得释放单总线。
系统对 DS18B20 的各种操作必须按协议进行。根据 DS18B20 的协议规定,微控制器控制 DS18B20 完成温度的转换必须经过以下 4 个步骤 :
①每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线下拉 500ms ,然后释放, DS18B20 收到信号后等待 16ms~60ms 左右,然后发出 60ms~240ms 的存在低脉冲,主 CPU 收到此信号后表示复位成功。
②发送一条 ROM 指令,如下表3.6所示:
表3.6 DS18B20的ROM指令集
指令名称 指令代码 指令功能
读 ROM 33H 读 DS18B20ROM 中的编码(即读 64 位地址)
ROM 匹配(符合 ROM ) 55H 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与编码相对应 DS18B20 使之作出响应,为下一步对该 DS18B20 的读写作准备
搜索 ROM 0F0H 用于确定挂接在同一总线上 DS18B20 的个数和识别 64 位 ROM 地址,为操作各器件作好准备
跳过 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令,适用于单片机工作
警报搜索 0ECH 该指令执行后,只有温度超过设定值上限或下限的片子才做出响应
③发送存储器指令,如下表3.7所示:
表3.7 DS18B20 的存储器指令集
指令名称 指令代码 指令功能
温度变换 44H 启动 DS18B20 进行温度转换,转换时间最长为 500ms (典型为 200ms ),结果存入内部 9 字节 RAM 中
读暂存器 0BEH 读内部 RAM 中 9 字节的内容
写暂存器 4EH 发出向内部 RAM 的第 3 , 4 字节写上,下限温度数据命令,紧跟该命令之后,是传送两字节的数据
复制暂存器 48H 将 RAM 中第 3 , 4 字节的内容复制到 EEPROM 中
重调 EEPROM 0B8H EEPROM 中的内容恢复到 RAM 中的第 3 , 4 字节
读供电方式 0B4H 读 DS18B20 的供电模式,寄生供电时 DS18B20 发送“ 0 ”,外接电源供电 DS18B20 发送“ 1 ”
④进行数据通信。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页