一、一线协议(1-Wire/W1)

工作原理:一线协议是一种通信协议,它通过一根数据线进行通信,主机和从机在一条总线上可以挂多个器件。 一线协议没有相应的时钟线,所以是异步通信。只有一根总线,所以是串行传输数据。这根总线既可以传输时钟又可以传输数据。

  • 为什么是异步通信:因为没有时钟线
  • 一线协议为什么是串行:只有一根总线,所以是串行传输数据。
  • 为什么是半双工通信:这根总线既可以传输时钟又可以传输数据,可以双向传输,但是要分时,所以是半双工通信。
  • 为什么是电平信号:有参考电平线(GND),所以是电平信号。

二、DS18B20模块

1.DS18B20简介

  • DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 [1]DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874
  • 主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。


一线协议之DS18B20工作原理及工作步骤_物联网

一线协议之DS18B20工作原理及工作步骤_硬件工程_02


  • 每个DS18B20都有唯一确定的64位产品序列号在它芯片的ROM中。

2.DS18B20的工作原理

1.DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。

一线协议之DS18B20工作原理及工作步骤_嵌入式硬件_03

2.DS18B20测温原理如图3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号发送给计数器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

3.DS18B20的引脚及原理图

一线协议之DS18B20工作原理及工作步骤_物联网_04

一线协议之DS18B20工作原理及工作步骤_嵌入式硬件_05

三、DS18B20的工作步骤

1.初始化DS18B20

– 任何器件想要使用,首先就是需要初始化,对于DS18B20单总线设备,首先初始化单总线为高电平,然后总线开始也需要检测这条总线上是否存在DS18B20这个器件。如果这条总线上存在DS18B20,总线会根据时序要求返回一个低电平脉冲,如果不存在的话,也就不会返回脉冲,即总线保持为高电平。

– 初始化具体时序步骤如下:

1.单片机拉低总线至少480us,产生复位脉冲,然后释放总线(拉高电平)。

2.这时DS8B20检测到请求之后,会拉低信号,大约60~240us表示应答。

3.DS8B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示初始化成功。

4.DS18B20拉低电平60~240us之后,会释放总线。

一线协议之DS18B20工作原理及工作步骤_嵌入式硬件_06

2.执行ROM指令

  • 执行ROM指令:也就是访问每个DS18B20,搜索64位序列号,读取匹配的序列号值,然后匹配对应的DS18B20,如果我们仅仅使用单个DS18B20,可以直接跳过ROM指令。而跳过ROM指令的字节是0xCC。
  • (1)写时序:总线控制器通过控制单总线高低电平持续时间从而把逻辑1或0写DS18B20中。每次只传输1位数据。
    – 1.单片机想要给DS18B20写入一个0时,需要将单片机引脚拉低,保持低电平时间要在60~120us之间,然后释放总线;
    – 2.单片机想要给DS18B20写入一个1时,需要将单片机引脚拉低,拉低时间需要大于1us,然后在15us内拉高总线。
    – 3.在写时序起始后15μs到60μs期间,DS18B20处于采样单总线电平状态。如果在此期间总线为高电平,则向DS18B20写入1;如果总线为低电平,则向DSl8B20写入0。
    注意:2次写周期之间至少间隔1us
  • (2)读时序:读时序由主机拉低总线电平至少1μs然后再释放总线,读取DS18B20发送过来的1或者0,DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。
  • 读时序时是先读低字节,在读高字节,也就是先读取高速暂存器的第0个字节(温度的低8位),在读取高速暂存器的第1个字节(温度的高8位) 我们正常使用DS18B20读取温度读取两个温度字节即可。

    注意:
    1.所有读时隙必须至少需要60us,且在两次独立的时隙之间至少需要1ps的恢复时间。
    2.主机只有在发送读暂存器命令(0xBE)或读电源类型命令(0xB4)后,立即生成读时隙指令,DS18B20才能向主机传送数据。 也就是先发读取指令,再发送读时隙。
    最后一点: 写时序注意是先写命令的低字节,比如写入跳过ROM指令0xCC(11001100),写的顺序是“00110011”。

3.DS18B20的写入的功能命令:

1.ROM指令:

– 采用多个DS18B20时,需要写ROM指令来控制总线上的某个DS18B20。

– 如果是单个DS18B20,直接写跳过ROM指令0xCC即可。

一线协议之DS18B20工作原理及工作步骤_硬件工程_07

2.RAM指令

  • DS18B20的一些功能指令,常用的是:
    – 温度转换 0x44:开启温度读取转换,读取好的温度会存储在高速暂存器的第0个和第一个字节中;
    – 读取温度 0xBE:读取高速暂存器存储的数据。