当前位置:   article > 正文

一线协议之DS18B20工作原理及工作步骤_ds18b20 crc校验

ds18b20 crc校验


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

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

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

二、DS18B20模块

1.DS18B20简介

  • DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 [1]DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874

  • 主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
    在这里插入图片描述

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

  • DS18B20温度传感器主要具有以下功能特性:

    • 它的工作电压范围为3.0v~5.0v,另外也可以直接由数据线供电而不需要外部电源供电;

    • 采用一线协议(1-Wire),即仅使用一根数据线(以及地线)与微控制器(MCU)进行通信;

    • 它可以提供9-Bit到12-Bit的测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能;

    • 该传感器的温度检测范围为-55℃至+125℃,并且在温度范围超过-10℃至85℃之外时还具有±0.5℃的精度;

    • DS18B20温度转换时间在转换精度为12-Bits时达到最大值750ms;

每个DS18B20芯片在出厂时,都固化烧录了一个唯一的64位产品序列号在其ROM中,它可以看作是该 DS18B20 的地址序列码。 64 位 ROM 的排列是:前 8 位是产品家族码,接着 48 位是DS18B20 的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1)。 ROM 作用是使每一个 DS18B20 都各不相同,这样就可实现一根总线上挂接多个 DS18B20。

2.DS18B20的工作原理

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

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

3.DS18B20的引脚及原理图

引脚图

在这里插入图片描述

三、DS18B20的工作步骤

1.初始化DS18B20

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

– 初始化具体时序步骤如下:
1.单片机拉低总线至少480us,产生复位脉冲,然后释放总线(拉高电平)。
2.这时DS8B20检测到请求之后,会拉低信号,大约60~240us表示应答。
3.DS8B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示初始化成功。
4.DS18B20拉低电平60~240us之后,会释放总线。
在这里插入图片描述

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即可。
在这里插入图片描述

2.RAM指令

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

3.数据处理

  • DS18B20的高速暂存存储器由9个字节组成。当温度转换命令(0x44)发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器前两个字节。接着单片机可以发送读暂存存储器命令(0xBH)读出存储器里的值, 存储器里的9个字节的存储结构如下图所示:
    在这里插入图片描述

  • 字节0~1 是温度存储器,用来存储转换好的温度。第0个字节存储温度低8位,第一个字节存储温度高8位;

  • 字节2~3 是用户用来设置最高报警和最低报警值(TH和TL)。

  • 字节4 是配置寄存器,用来配置转换精度,可以设置为9~12 位。

  • 字节5~7 保留位。芯片内部使用

  • 字节8 CRC校验位。是64位ROM中的前56位编码的校验码,由CRC发生器产生。

    如果我们只关心采样温度值的话,则只需要读前两个字节即可。其中Byte[0]为温度值的低字节,而Byte[1]为温度值的高字节。这16位数据的格式如下图所示:
    在这里插入图片描述

  • BIT[3:0]为温度值的小数部分;

  • BIT[10:4]为温度值的整数部分;

  • BIT[15:11]则为符号位,如果为0则温度为正值,如果为1则温度为负值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/627311
推荐阅读
相关标签
  

闽ICP备14008679号