做一下数字温度传感器DS18B20的应用介绍:
DSl8B20 数字温度计提供 9 位(二进制)温度读数,指示器件的温度 。信息经过单线接口送入DSl8B20 或从 DSl8B20 送出,因此从主机 CPU 到 DSl8B20 仅需一条线(和地线)。DSl8B20 的电源可以由数据线本身提供而不需要外部电源。因为每一个 DSl8B20 在出厂时已经给定了唯一的序号,因此任意多个 DSl8B20 可以存放在同一条单线总线上。这允许在许多不同的地方放置温度敏感器件 DSl8B20 的测量范围从-55℃到+125℃,增量值为0.5℃以内,可在1s(典型值) 内把温度变换成数字。
每一个 DSl8B20 包括一个唯一的 64 位长的序号,该序号值存放在 DSl8B20 内部的 ROM(只读存贮器)中。开始8 位是产品类型编码(DSl8B20 编码均为10H)。接着的 48位是每个器件唯一的序号。 最后 8 位是前面 56 位的CRC(循环冗余校验)码。DSl8B20 中还有用于贮存测得的温度值的两个 8 位存贮器 RAM 编号为 0 号和 1号。1 号存贮器存放温度值的符号,如果温度为负,则 1 号存贮器 8 位全为 1,否则全为 0 。0 号存贮器用于存放温度值的补码,LSB(最低位)的 1 表示 0.5摄氏度。将存贮器中的二进制数求补再转换成十进制数并除以 2 就得到被测温度值(-550~125 摄氏度)。DSl8B20 的引脚如上图所。每只DS18B20 都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式则多用一根导线,但测量速度较快。
温度计算:
(1)DS18B20 用9位存贮温值度,最高位为符号位,下图为DS18B20的温度存储方式,负温度S=1,正温度 S=0。 如:00AAH 为+85℃,0032H 为 25℃,FF92H 为-55℃。
(2)DS18B20用12位存贮温值度,最高位为符号位,下图为DS18B20的温度存储方式,负温度S=1,正温度 S=0 。 如:0550H 为+85℃,0191H 为+ 25.0625℃ ,FC90H 为-55℃。
DSl8B20 工作过程及时序
DSl8B20 工作过程中的协议如下
初始化:ROM 操作命令;存储器操作命令;处理数据。
(1)初始化
单总线上的所有处理均从初始化开始
(2)ROM 操作品令
总线主机检测到 DSl820 的存在,便可以发出 ROM 操作命令之一 ,这些命令如:
Read ROM(读 ROM) [33H]
Match ROM( 匹 配 ROM) [55H]
Skip ROM( 跳 过 ROM] [CCH]
Search ROM(搜索 ROM) [F0H]
Alarm search(告警搜索) [ECH]
(3)存储器操作命令
Write Scratchpad(写暂存存储器) [4EH]
Read Scratchpad(读暂存存储器) [BEH]
Copy Scratchpad(复制暂存存储器) [48H]
Convert Temperature(温度变换) [44H]
Recall EPROM(重新调出) [B8H]
Read Power supply(读电源) [B4H]
时 序
主机使用时间隙(time slots)来读写DSl820的数据位和写命令字的位
(1)初始化
时序见下图。主机总线 t0时刻发送一复位脉冲(最短为 480us 的低电平信号) ,接着在 t1时刻释放总线并进入接收状态,DSl820 在检测到总线的上升沿之后,等待 15-60us,接着 DS18B20 在 t2 时刻发出存在脉冲(低电平;持续 60-240 us) 如图中虚线所示
以下子程序在 MCS51 仿真机上通过,其晶振为 12M。初始化子程序:
(2)写时间隙
当主机总线t0时刻从高拉至低电平时,就产生写时间隙,见下图: 从 t0时刻开始15us之内应将所需写的位送到总线上,DSl8B20 在t后15-60us间对总线采样。若低电平,写入的位是 0,见左图; 若高电平,写入的位是1,见右图。连续写 2 位间的间隙应大于1us。
写位子程序(待写位的内容在C中):
写位子程序(待写位的内容在A中):
(3)读写间隙
见下图,主机总线 t0时刻从高拉至低电平时, 总线只须保持低电平1us。之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t 2时刻前有效。 tz距 t0为15us。也就是说,tz时刻前主机必须完成读位,并在 t0后的 60us 一 120us内释放总线。读位子程序(读得的位到 C 中):
多路测量
每一片DSl8B20在其ROM中都存有其唯一的48位序列号,在出厂前已写入片内ROM中,主机在进入操作程序前必须逐一接入1820用读 ROM(33H)命令将该1820的序列号读出并登录。
当主机需要对众多在线1820的某一个进行操作时,首先要发出匹配ROM命令(55H),紧接着主机提供 64 位序列(包括该1820的48位序列号) ,之后的操作就是针对该1820的。而所谓跳过 ROM命令即为:之后的操作是对所有1820的。框图中先有跳过ROM,即是启动所有1820进行温度变换,之后,通过匹配 ROM,再逐一地读回每个1820的温度数据。
在1820组成的测温系统中,主机在发出跳过ROM 命令之后,再发出统一的温度转换启动码44H就可以实现所有1820的统一转换,再经过1s后,就可以用很少的时间去逐一读取。这种方式使其T值往往小于传统方式,由于采取公用的放大电路和AD转换器,只能逐一转换,显然通道数越多 ,这种省时效应就越明显。