FPGA开发——DS18B20的使用(理论)

介绍

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点

测温范围:-55°C 到 +125°C

通信接口:1-Wire(单总线)

其它特征:可形成总线结构(可以在一条通信线上挂很多设备,这样就可以节省IO口,这样单片机一个IO口就可以读很多个温度传感器)、内置温度报警功能、可寄生供电(因为数字温度传感器的三个引脚当中,有两个是供电的,一个是数据输入输出的,如果使用寄生供电的话,那么VCC电源正极就不用接了,直接一个数据线和一个GND就可以实现数据通信,这样十分省线路)。

模块图片

系统框图

PS:64-BIT ROM:作为器件地址,用于总线通信的寻址;

SCRATCHPAD(暂存器):用于总线的数据交互;

EEPROM:用于保存温度触发阈值和配置参数。

 

这中间SCRATCHPAD(暂存器)是非常重要的。我们接下来看一下这个暂存器(红色标识)内部是怎么存的和左边的三个EEPROM(蓝色标识)是怎么交互的,绿色标识的两个设备是实实在在的设备,是不会变的。

它内部总共是9个字节,其中前两位存的分别是最低有效位和最高有效位,这两个字节共同组成温度的一个数据。括号里面的是一个默认值,如果上电直接读的话,默认就是85摄氏度。

 

 

在暂存器的操作流程就是:开始发送一条温度转换指令,我们的硬件(实实在在的传感器)就会把我们的这个温度值放在我们的暂存器RAM里面,然后再发送一条读暂存器的指令,紧接着跟着我们的读时序就会把我们的暂存器给读出来。这样我们就可以根据这两个字节得到我们的温度。

单总线

1、介绍

单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线

一根通信线:DQ

异步(没有单独磁通线)、半双工(只有一根线,要在这根线上负责数据的来回,及发送又接收)

单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线。

2、电路规范

设备的DQ均要配置成开漏输出模式

DQ添加一个上拉电阻,阻值一般为4.7KΩ左右

若此总线的从机采取寄生供电,则主机还应配一个强上拉输出电路

不使用寄生供电时的电路(本节代码主要用这种独立供电模式):

使用寄生供电时的电路:

将VDD接到GND上,只需要GND和DQ两根线,然后主机还接上一个强上拉输出电路

3、单总线时序电路 

 初始化:主机将总线拉低至少480us,然后释放总线,等待15~60us(可以取中间值)后,存在的从机会拉低总线60~240us(可以取中间值)以响应主机,之后从机将释放总线。这里就是复位脉冲和存在脉冲。

写时序

下面这个是写0和写1时序图,主机将总线拉低60~120us(最大不能超过120us),然后释放总线,表示发送0;主机将总线拉低1~15us,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us。

读时序 

主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1 ,整个时间片应大于60us。

4、ROM相关命令

SEARCH ROM [F0h]:搜寻ROM,这是我们在使用多个温度模块是才需要使用的命令

READ ROM [33h]:读ROM

MATCH ROM [55h]:匹配ROM,相当于I2C想要读写操作时首先要发从机地址,那匹配ROM紧跟着就会发送设备ROM的地址,我们就可以选择得到对应的开门的钥匙,和某一个设备单独通信了。

SKIP ROM [CCh]:跳过ROM,本节就是使用这个,因为我们只有一个设备连在上面,所以根本不需要绳子,先跟谁交流还不知道吗?当然如果线上有多个设备,就不能使用跳过ROM。

ALARM SEARCH [ECh]:报警ROM,这个也是在多个设备时使用,我们的温度有上限阈值和下限阈值,如果某个设备处于报警状态,那我可以报警搜索获取哪个设备会有报警。这个操作和搜寻ROM一样。

 5、功能指令

CONVERT T [44h]:温度变换,我们想要读取温度之前,首先要执行温度变换,但我们执行完ROM指令之后,如果发送这条指令,它就会启动温度变化,然后把这个温度传感器的数值读取出来放到暂存器里面,相当于暂存器温度值更新。

WRITE SCRATCHPAD [4Eh]:写暂存器,如果调用这条指令,再跟写的一个时序,它就会把我们的字节写入到中间三个字节 

READ SCRATCHPAD [BEh]:读暂存器,在温度读取的时候会用到这条指令,如果调用这条指令,再调用接收字节这个时序,那DS18B20就会依次将暂存器的内容读出来,最后会读出来CRC,然后这个指令也解出来。

COPY SCRATCHPAD [48h]:复制暂存器,当从机接收到这条指令的时候,它就会暂存器里面的这三个字节给写入到这个EEPROM里面。如果接收这条指令就相当于左边三个值就会覆盖原来的值(右边)。如果我们想要掉电不丢失,我们先写暂存器,把放在里面,然后再调用这条指令,复制暂存器,它就会把左边三个值写入EEPROM里面。

RECALL E2 [B8h]:recall EEPROM,和上一条复制暂存器指令是相反的过程,如果发这条指令,它就会把EEPROM的三个字节给覆盖到暂存器里的那三个字节里面去。

READ POWER SUPPLY [B4h]:读取设备的供电模式,发完这条指令后,后面会跟着读取一位的时序,它就会响应我们的供电到底是寄生供电还是独立供电。

在本次实验中我们只需要使用跳过ROM指令、温度转换指令、读温度指令。

5、温度存储格式

这16位数据的前5位表示符号位,如果是负的,那么这5位全是1,如果是正的,这5位全是0,

低四位是存小数的,

2^-1是1的话,代表存的是0.5,

2^-2是1的话,代表存的是0.25,

2^-3是1的话,代表存的是0.125,

2^-4是1的话,代表存的是0.0625

 

注意:存储是以二进制的补码形式来存储的。对负数的补码的整个位进行取反加1就能得到相应的正数值,比如-0.5度的二进制取反的话就是0000 0000 0000 0111,加1就变成0000 0000 0000 1000,结果正好是正0.5的二进制数值。

6、操作流程

初始化。

ROM指令写入。

温度转换。

二次初始化。

ROM指令写入。

读取温度指令。

读取温度。

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子小芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值