51单片机外设篇:DS18B20

      最后更新:2022-08-02 05:19:43 手机定位技术交流文章

      温度传感器

      温度测量方法:物理学(汞、气压)电子学(金属电性能温度变化)
      早期:耐热性(模拟接口)
      现代:专用传感器(如I2C、DS18B20等单线总线接口等数字接口)

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

      温度范围:-5°C至+125°C

      通讯接口:1-Wire

      其他功能: 可形成总线结构 、 内部温度报警功能 、 寄生电源.

      引脚及应用电路:

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

      通讯线:DQ,非同步,半双plex

      单个总线只需要一个通信线才能实现数据的双向传输,并且在采用寄生电源时,它也可以消除设备的VDD线,此时的电源和通信只需要两个线DQ和GND。

      DS18B20的基本特性

      1. 内部集成ADC外部数字接口
      2. 单线总线数字接口,低线成本
      3. 广泛的温度范围和高精度(相对)
      4. 数字值温度分辨率比特软件设置
      5. 温度阈值警报功能,该阈值可以内部储存,无需失去电源
      6. 快速温度采集速度(750ms)
      7. 内置64位序列代码,CPU可以序列无限数量的DS18B20
      8. 支持VDD电源,或通过数据总线和内部容量实现寄生电源

      综合评价:
      DS18B20是几年前的事
      温度+湿度趋势综合传感器
      热敏电阻、热耦合和高精度传感器的现实应用于低端应用
      学习重点和难点是单线总线协议的时序编程实现

      注意,18B20直接无参考点读取绝对温度值。

      单总线协议

      • 首先,确保你的系统是单个或多个
      • DS18B20规定在总线上的数据是LSB(一个字节从最低位开始)
      • 单总线硬件连接要求:漏极开路式+5K欧姆的上拉电阻(见上方的图)
      • 480us以上的低压总线将与设备分开

      1-Wire总线系统是控制一个或多个设备的总线总线设备。DS18B20一直是一个从设备.当设备上只有一台,这个系统被称为“单节点”系统;当车上设备有多个连接时,这个系统被称为“多点”系统。

      所有在1-Wire总线上发送和接收的命令或数据遵循低级预发送原则。

      单线总线协议标准实现步骤

      主机必须按照单总线协议设定好的完整序列和DS18B20通信,每个回合包含3个步骤:初始化+ROM操作指令+功能操作指令。顺序不能错也不能省略任何一个。


      DS18B20自己本身不会主动去进行温度测量,而是需要主控CPU主动发起一个温度转换的过程,这么设计是因为温度转换本身是要耗电的,所以设计为平时待机等待温度转换命令后才去进行温度AD转换。
      主控CPU和DS18B20之间的通信是分周期的,譬如我们要让DS18B20进行温度转换就是一个周期。这个周期包含一个初始化+N个命令。(每个周期的开始都要有一个初始化,然后跟着N个命令)

      初始化过程主要包括检测目标DS18B20是否存在,如果存在,则初始化芯片。


      命令是重要的,因此DS18B20是一个典型的“命令-响应”类型的外部设备,学习这种外部性的关键是命令集。


      ROM操作指令
      DS18B20支持在一个单线总线上串联的多个芯片,称为单线总线协议,因此需要一个主处理器才能区分在总线上的多个18B20,因此需要一个ROM操作命令来完成这项任务。
      ROM操作指令与温度采集之间没有关系,所以当我们只有一个18B20在公共汽车上时,我们不需要通过ROM操作指令。
      一旦系统内有一个单个总线上超过18B20,我们必须使用ROM操作指令来区分超过18B20,这种分离过程可能需要超过一个ROM指令完成。
      如果系统中只有一个18B20,则可以使用“跳过 rom”命令(0xCC)跳过这个阶段。

      功能指令
      ROM操作指令的目的是从多个18B20在单个总线上选择当前的18B20,并且功能指令是与选定的18B20进行通信以获得温度。

      初始化:

      初始化是:主设备首先拖动一个低数据总线超过480us来产生移位脉冲,从DS18B20设备接收解耦脉冲后,硬件内部被解耦,在重新定位完成后恢复主设备是现有脉冲,当主设备接收一个现有的脉冲时,它假设它已经从设备中准备好,初始化完成。(确认设备存在)

      ROM命令

      当公共汽车上的主设备检测出脉冲时,你可以执行ROM命令.这些指令使用每个设备的独特64位ROM编码,当多个设备连接到总线时,每个设备都可以通过这些命令识别。这些命令也可以让主设备确定任何类型的设备在总线上有多少,或者哪些设备有温度报警信号。总共有5个ROM命令,每个命令长8位。在执行DS18B20函数命令之前,主设备必须首先执行一个适当的ROM命令。(找到具体的设备)

      DS18B20功能命令

      当主设备在总线上确定哪些DS18B20可以通过ROM命令进行通信时,主要设备可以发送功能命令到一个DS18B20。这些命令允许主设备将数据写入或读入DS18B20的临时注册表,启动温度转换和定义供电模式.(具体的操作)

      DS18B20

      参见:DS18B20数据手册-中文版-简介

      DS18B20采用严谨的1-Wire总线通信协议来保证数据的完整性。该协议定义多个信号形式:复位脉冲,存在脉冲,写0,写1,读0,读1。主设备执行除了存在脉冲外的所有其他信号。

      初始化程序-分解和存在脉冲

      与DS18B20的所有通信都以初始化序列开始,序列由主设备的分离脉冲和DS18B20响应的现有脉冲组成。当DS18B20响应分离信号的存在脉冲时,然后向主设备显示它在该总线上,并用操作命令完成。

      在初始化序列期间,主设备在总线上通过拉动1-Wire总线超过480us发送一个(TX)脱耦合脉冲。然后主设备释放了总线并进入接收模式(RX)。当总线释放后,大约5kΩ的上 drag 电阻将 1-Wire 总线拖到高电压水平。当DS18B20检测信号沿线上升时,它等待15us到60us发送一个现有脉冲,拖拉1-Wire总线到60us到240us。

      读/写时段

      主设备通过写时将数据写入DS18B20,并通过读时读取DS18B20的数据。 在1-Wire总线上,每个读写周期只能传输一个数据位。

      写时段

      有两个类型的写期:"写1"和"写0".主设备将逻辑1写入DS18B20,写入时间段为1,逻辑0写入DS18B20,写入时间段为0。每个写时间隔必须有至少60秒的连续时间和至少1秒的恢复时间在独立写时间隔之间。两个写字时间由主设备通过拖下1-Wire总线启动。

      为了形成写1时段,把1-Wire巴士降落后,主设备必须在15us内释放总线.当总线释放后,5kΩ的上 drag 阻尼器将总线拖往上.为了形成写0时段,把1-Wire巴士降落后,在整个时间段内,主要设备必须一直拖下公共汽车(至少60us)。

      在主设备启动写字时间后,DS18B20将在15至60us时间窗口中提取总线。 如果总线在提取窗口中是高压,则逻辑1被写入DS18B20;如果总线是低压,则逻辑0被写入DS18B20。

      读时段

      DS18B20只能在读取期间发送到主设备。因此,在主机完成只读的注册表[BEh]或读取电源模式[B4h]后,必须及时生成阅读时间段,因此DS18B20可以提供所需的数据。此外,主设备可以在完成转换温度[44h]或复制EEPROM[B8h]命令后生成读时,获取DS18B20函数命令的操作信息.

      每个阅读周期必须有至少60秒的连续时间和至少1秒的恢复时间在独立的写作周期之间。初始化是通过拖到1us以下的总线通过主设备,再释放总线。当主设备启动并读取时间完成时,DS18B20将发送0或1到公共汽车上。DS18B20通过拉上总线发送逻辑1,拖下公共汽车发送逻辑0.当发送完0后,DS18B20将释放公共汽车,然后 bus 将通过重载电阻恢复到高级别的闲置状态。DS18B20的数据输出在读取时间序列初始化后只有15us的有效性。因此,主要设备必须在读取周期开始后15分钟内释放总线,并且抽样了公共汽车。

      代码实现

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31232.html

          热门文章

          文章分类