基于FPGA与DS18B20温度传感器的通信实现(二)

做一下数字温度传感器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转换器,只能逐一转换,显然通道数越多 ,这种省时效应就越明显。

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值