🔥 嵌入式传感器入门必学!DS18B20 零基础全覆盖教程

DS18B20 是嵌入式开发中最常用的数字温度传感器,广泛用于环境测温、设备测温、智能家居、工业采集等场景。最大优势是采用单总线(One-Wire)通信,仅需一根GPIO信号线即可完成数据交互,接线极简、硬件成本极低。

本文完全基于原厂课件知识点,从零梳理 DS18B20 硬件参数、单总线通信原理、完整时序、标准测温流程、温度数据解析,无冗余内容,适合新手入门、期末复习、裸机驱动开发、面试刷题,建议收藏!

一、DS18B20 核心硬件参数

先掌握基础参数,明确传感器测量能力与工作范围,是驱动开发的前提。

1.1 测温量程

测量温度范围:-55℃ ~ 125℃,覆盖绝大多数民用、工业常温测温场景。

1.2 测量精度

传感器允许最大测量误差:±0.5℃。

举例:实际环境温度为25℃时,DS18B20采集的有效温度范围为 24.5℃ ~ 25.5℃。

1.3 温度分辨率(核心重点)

分辨率代表传感器对微小温度变化的感知能力,分辨率越高,温度读数越细腻、精准,DS18B20 支持4档分辨率配置:

  • 9位分辨率:0.5℃

  • 10位分辨率:0.25℃

  • 11位分辨率:0.125℃

  • 12位分辨率:0.0625℃(默认最高精度)

1.4 工作电压

标准工作电压:3V ~ 5.5V,兼容51单片机、STM32、IMX6ULL等绝大多数嵌入式主控。

二、单总线(One-Wire)通信原理

DS18B20 区别于其他传感器的核心就是单总线通信,区别于I2C、SPI多引脚通信,仅需一根GPIO引脚即可实现主控与传感器的双向数据交互。

2.1 通信特性

  • 通信方式:半双工、异步、串行通信

  • 硬件优势:仅需一根GPIO信号线,节省主控引脚资源

  • 核心特性:总线具备线与特性,任意一方拉低总线,总线整体为低电平

2.2 总线线与逻辑表

主控(51/ARM)与DS18B20总线电平逻辑规则:

主控电平

DS18B20电平

总线最终电平

1

0

0

0

1

0

1

1

1

0

0

0

2.3 引脚工作模式要点

  • 总线空闲状态:默认高电平,需要主控释放总线(引脚设为输入模式)

  • 发送数据时:主控GPIO设为输出模式,主动拉低/拉高总线

  • 接收数据时:主控必须释放总线,GPIO设为输入模式,由DS18B20驱动总线电平

  • 引脚拉高不代表总线高电平,只有释放总线后,总线电平由传感器决定

三、DS18B20 完整测温工作流程

所有基于DS18B20的测温程序,必须严格遵循固定流程,顺序不可颠倒,否则测温失败、数据错乱。

标准五步测温流程:

  1. 总线复位:调用ds18b20_reset(),完成主控与传感器初始化握手

  2. 发送跳过ROM指令:写入 0xCC,单传感器场景无需匹配设备地址,跳过ROM校验,提升效率

  3. 启动温度转换:写入 0x44,触发传感器采集并转换温度数据

  4. 延时等待:固定延时750ms,保证温度转换完成

  5. 读取温度数据:再次复位、发送 0xBE 指令,读取2字节16位原始温度数据

四、DS18B20 核心时序详解(驱动重中之重)

DS18B20 驱动成败完全依赖时序精准度,延时误差过大会导致通信失败,以下是课件标准时序参数,可直接用于代码编写。

4.1 复位时序(初始化握手)

作用:初始化总线,让传感器就绪,等待后续指令接收

  1. 主控拉低总线,持续480us ~ 960us,发送复位脉冲

  2. 主控释放总线,延时 15us ~ 60us,等待传感器应答

  3. DS18B20 拉低总线 60us ~ 240us,返回响应脉冲(代表设备在线)

  4. 传感器释放总线,总线恢复高电平,初始化完成

4.2 写时序(主控 → 传感器)

单总线写时序分为写0时序和写1时序,传感器在固定窗口采样电平。

1、写 0 时序
  1. 主控拉低总线,保持 60us ~ 120us

  2. 传感器在 15us~60us 窗口内采样到低电平,判定为写入0

  3. 主控释放总线,完成单次写0操作

2、写 1 时序
  1. 主控拉低总线 小于15us,立即释放总线

  2. 传感器在 15us~60us 窗口内采样到高电平,判定为写入1

  3. 总线保持高电平,完成单次写1操作

4.3 读时序(传感器 → 主控)

所有温度数据、状态数据读取,均遵循以下读时序,主机必须在规定时间内采样。

1、读 1 时序
  1. 主控拉低总线大于1us,随即释放总线

  2. 传感器保持总线高电平

  3. 主控在15us内采样高电平,判定为读取到1

2、读 0 时序
  1. 主控拉低总线大于1us,随即释放总线

  2. 传感器主动拉低总线,输出低电平

  3. 主控在15us内采样低电平,判定为读取到0

五、温度数据解析规则

DS18B20 输出原始数据为 16位二进制补码,包含符号位与数值位,需要进行符号位扩展、数值换算,才能得到真实温度。

  • 数据格式:高字节+低字节组成16位原始数据

  • 正负温度判断:高位为符号位,需做符号位扩展处理

  • 数值换算:根据配置的分辨率(9~12位),对应不同的温度换算系数

六、常用指令说明(单传感器必备)

裸机单DS18B20测温,只需掌握两条核心指令:

  • 0xCC(跳过ROM指令):单设备场景专用,无需读取、匹配传感器ROM地址,简化通信流程

  • 0x44(温度转换指令):触发传感器启动温度采集与AD转换

  • 0xBE(读取数据指令):读取传感器暂存器中的16位温度数据

七、开发避坑总结

  • 时序精准度是核心:复位、读写延时必须严格匹配参数,微秒级延时误差会直接导致通信失败

  • 收发模式必须切换:发送数据设GPIO输出,接收数据必须释放总线、设为输入

  • 温度转换必须延时:发送0x44指令后,必须延时750ms,否则读取的是旧温度数据

  • 数据必须解析:原始16位数据为补码格式,正负温度需单独处理,不能直接输出

八、全文总结

本文完整梳理了 DS18B20 的硬件参数、单总线通信原理、线与逻辑、复位/读写标准时序、测温完整流程、数据解析、开发避坑点。

DS18B20 驱动的核心逻辑:精准时序 + 正确收发模式切换 + 标准指令流程 + 合法数据解析,掌握这套逻辑,即可适配51、STM32、IMX6ULL等所有主控平台的驱动开发。

后续可更新:完整裸机驱动源码、温度数据打印、正负温度兼容代码、多传感器组网教程,欢迎收藏关注!

更多推荐