【单片机毕业设计模块选型】DS18B20温度传感器

DS18B20 温度传感器:原理与读取方法详解

演示视频:

【开源】STM32+DS18B20

在工业控制、智能家居、医疗设备等众多领域,温度检测是一项基础且关键的技术需求。DS18B20 作为 Maxim(原 Dallas)公司推出的一款单总线数字温度传感器,凭借其高精度、宽量程、单总线通信等优势,成为了电子工程师和爱好者的常用选择。本文将从传感器的工作原理入手,详细解析其温度采集与数据处理机制,并全面介绍不同场景下的读取方法,为实际应用提供技术参考。

一、DS18B20 传感器的基本特性

在深入原理之前,先梳理 DS18B20 的核心特性,帮助理解其应用场景的适配性:

  • 温度量程宽:默认测量范围为 - 55℃~+125℃,在 - 10℃~+85℃区间内精度可达 ±0.5℃,满足绝大多数民用和工业场景需求;

  • 单总线通信:仅需 1 根数据线(DQ)即可实现与微控制器(如 MCU)的双向通信,大幅简化硬件接线;

  • 无需外部元件:内部集成温度采集、A/D 转换、数据存储等模块,除电源外无需额外外接电阻、电容等元件(仅需在 DQ 线上接 1 个 4.7kΩ 上拉电阻);

  • 支持多节点组网:同一根 DQ 总线上可挂载多个 DS18B20,通过每个传感器唯一的 64 位 ROM 地址实现区分,适用于多点温度监测(如冷链车厢、机房环境);

  • 灵活供电方式:支持 “寄生电源模式”(从 DQ 线取电,无需单独 VCC)和 “外部电源模式”(单独接入 3.0V~5.5V 电源),适配不同功耗需求场景。

二、DS18B20 的工作原理

DS18B20 的核心功能是 “将环境温度转换为数字信号”,整个过程可分为供电与复位、温度采集与 A/D 转换、数据存储三个关键环节,其内部结构包含温度传感器、12 位 A/D 转换器、非易失性(NV)数据寄存器、64 位 ROM 地址寄存器等模块。

1. 供电与复位:建立通信前的 “握手准备”

DS18B20 与微控制器(如 STM32、Arduino)的通信需从 “复位 - 应答” 开始,这是单总线协议的基础:

  • 主机复位(Reset):微控制器通过 DQ 线输出低电平,持续至少 480μs(最长不超过 960μs),向 DS18B20 发送 “复位信号”,告知传感器 “即将开始通信”;

  • 从机应答(Presence Pulse):DS18B20 检测到复位信号后,会在主机释放 DQ 线(变为高电平)的 15μs~60μs 内,主动将 DQ 线拉低 60μs~240μs,向主机返回 “应答信号”。主机检测到这个低电平,即确认 DS18B20 已正常上电并准备就绪。

若未检测到应答信号,通常原因是 DQ 线上拉电阻缺失、传感器接线错误或传感器损坏。

2. 温度采集与 A/D 转换:模拟信号转数字信号

温度采集是 DS18B20 的核心功能,其过程由 “主机发指令 - 传感器执行采集 - 转换数字信号” 三步完成:

  • 主机发送 “温度转换指令”:复位应答完成后,主机需先发送 “跳过 ROM 指令”(0xCC,适用于单传感器场景)或 “匹配 ROM 指令”(0x55,适用于多传感器场景,需后续发送目标传感器的 64 位 ROM 地址),再发送 “温度转换指令”(0x44);

  • 传感器执行采集与转换:DS18B20 接收 0x44 指令后,启动内部温度传感器采集环境温度,将模拟温度信号送入 12 位 A/D 转换器。转换过程耗时约 750ms(12 位精度下),若需更快速度,可通过配置寄存器将精度降至 10 位(190ms)、8 位(93.75ms);

  • A/D 转换原理:12 位 A/D 转换器将 - 55℃~+125℃的温度范围映射为数字量,其中:

    • 数字量为 “正温度” 时,最高位(符号位)为 0,其余 11 位表示温度值(1LSB=0.0625℃,即 1/16℃);

    • 数字量为 “负温度” 时,最高位为 1,其余 11 位采用 “二进制补码” 形式表示(如 - 0.5℃对应的数字量为 0xFFF8)。

3. 数据存储:结果暂存与寄存器配置

温度转换完成后,数字结果会暂存到 DS18B20 内部的 “温度寄存器”(2 字节,即 16 位),同时可通过 “配置寄存器”(1 字节)调整测量精度:

  • 温度寄存器:分为高字节(T_H)和低字节(T_L),16 位数据格式为 “符号位 + 7 位整数位 + 8 位小数位”(12 位精度下,小数位仅前 4 位有效,后 4 位为 0)。例如:

    • +25.0℃对应的 16 位数据为 0x0190(二进制 0000 0001 1001 0000),其中符号位 0(正),整数位 25(0x19),小数位 0(0x00);

    • -10.125℃对应的 16 位数据为 0xFFF1(二进制 1111 1111 1111 0001),符号位 1(负),补码转换后整数位 10,小数位 0.125(0x1 对应 0.0625℃×1=0.0625?此处需修正:-10.125℃的正确数据为 0xFFF1?实际计算应为:-10℃=0xF5,小数 0.125=0.0625×2,故低字节为 0xF2,高字节为 0xFF,即 0xFFF2,需以实际数据手册为准);

  • 配置寄存器:通过修改该寄存器的 R1、R0 位(精度控制位),可设置 A/D 转换精度:R1R0=11(12 位,默认)、10(11 位)、01(10 位)、00(8 位),精度越高,转换耗时越长。

三、DS18B20 的温度读取方法

读取 DS18B20 的温度数据,本质是 “主机通过单总线协议,从传感器内部温度寄存器中读取 16 位数字量,再转换为实际温度值”。根据应用场景(单传感器 / 多传感器)和微控制器接口(GPIO 模拟单总线、硬件单总线模块),读取方法可分为以下两类:

1. 单传感器场景:简化的 “跳过 ROM” 读取法

当 DQ 总线上仅挂载 1 个 DS18B20 时,无需区分 ROM 地址,读取步骤更简洁,核心是 “复位应答→发指令→读数据→数据转换”:

  • 步骤 1:复位与应答:如前所述,主机发复位信号(低电平≥480μs),检测传感器的应答信号(低电平 60~240μs),确认传感器正常;

  • 步骤 2:发送指令序列

  1. 发送 “跳过 ROM 指令”(0xCC):告知传感器 “无需匹配 ROM 地址,直接执行后续指令”;

  2. 发送 “温度转换指令”(0x44):启动传感器采集温度,等待约 750ms(12 位精度),确保转换完成(也可通过检测 DQ 线电平判断:转换期间 DQ 为低,转换完成后变为高);

  3. 再次发送复位信号→检测应答(二次复位,为读取数据做准备);

  4. 再次发送 “跳过 ROM 指令”(0xCC);

  5. 发送 “读取暂存器指令”(0xBE):告知传感器 “准备输出温度寄存器中的数据”;

  • 步骤 3:读取 16 位温度数据:传感器接收 0xBE 指令后,会将温度寄存器的低字节(T_L)、高字节(T_H)依次输出到 DQ 线,主机需按 “先读低字节、后读高字节” 的顺序,逐位读取 16 位数据(单总线协议中,数据位的读取需严格控制时序:主机拉低 DQ 线≤15μs 后释放,再在 15μs 内读取电平,高电平为 1,低电平为 0);

  • 步骤 4:数据转换为实际温度:根据 16 位数据的格式(符号位 + 整数位 + 小数位),计算实际温度:

    • 若符号位为 0(正温度):温度值 =(高字节 ×256 + 低字节)×0.0625℃;

    • 若符号位为 1(负温度):温度值 = [(高字节 ×256 + 低字节)- 65536] ×0.0625℃(65536 为 2¹⁶,用于将补码转换为原码)。

2. 多传感器场景:精准的 “匹配 ROM” 读取法

当 DQ 总线上挂载多个 DS18B20 时,需通过每个传感器唯一的 64 位 ROM 地址(出厂时固化,不可修改)区分目标设备,读取步骤与单传感器的核心差异是 “用匹配 ROM 指令替代跳过 ROM 指令”:

  • 步骤 1:读取所有传感器的 ROM 地址(首次配置时)
  1. 主机发复位信号→检测应答;

  2. 发送 “读取 ROM 指令”(0x33);

  3. 逐位读取 64 位 ROM 地址(前 8 位为家族码 0x28,代表 DS18B20;中间 48 位为唯一序列号;最后 8 位为前 56 位的 CRC 校验码),记录每个传感器的 ROM 地址;

  • 步骤 2:读取指定传感器的温度
  1. 主机发复位信号→检测应答;

  2. 发送 “匹配 ROM 指令”(0x55);

  3. 逐位发送目标传感器的 64 位 ROM 地址(需与传感器内部 ROM 地址完全一致,否则传感器不响应);

  4. 后续步骤(发送 0x44 转换指令→等待→二次复位→发送 0xBE 读数据指令→读 16 位数据→转换温度)与单传感器场景完全相同。

3. 硬件接口差异:GPIO 模拟 vs 硬件模块

无论单传感器还是多传感器场景,读取方法的底层实现需适配微控制器的接口,主要分为两类:

  • GPIO 模拟单总线:绝大多数微控制器(如 51 单片机、STM32 GPIO 口、Arduino 数字口)均可通过软件模拟单总线的时序(复位、读位、写位),优点是兼容性强,无需依赖特定硬件模块,缺点是软件需严格控制时序(尤其是读位时的 15μs 窗口),否则易出现数据错误;

  • 硬件单总线模块:部分高端微控制器(如 STM32L4 系列的 I2C/SPI 可模拟单总线,或部分专用 MCU 的 1-Wire 模块)集成了硬件单总线控制器,可自动处理复位、应答、数据收发的时序,减少软件开销,提高稳定性,适合对实时性要求较高的场景(如工业控制中的高频温度采集)。

四、读取过程中的常见问题与注意事项

  1. 数据错误或无应答
  • 检查 DQ 线上拉电阻(必须接 4.7kΩ,若缺失会导致通信失败);

  • 确认复位信号时长(≥480μs)和应答检测窗口(15~60μs 内);

  • 多传感器场景下,确认 ROM 地址是否正确(可通过读取 ROM 指令重新获取);

  1. 温度精度偏差
  • 若精度低于预期,检查配置寄存器的 R1R0 位是否为 11(12 位精度,默认),避免误设为低精度模式;

  • 传感器远离热源(如 MCU、电源模块),避免环境温度干扰;

  1. 寄生电源模式的限制
  • 寄生电源模式下,传感器从 DQ 线取电,需确保主机在温度转换期间(750ms)保持 DQ 线为高电平(否则传感器断电,转换中断);

  • 寄生电源模式仅适用于短距离(≤10 米)、少传感器(≤8 个)场景,长距离或多传感器建议用外部电源模式;

  1. CRC 校验
  • DS18B20 的暂存器包含 1 字节 CRC 校验码(读取暂存器时,第 9 字节为 CRC),主机可通过 Maxim 提供的 CRC 算法(1-Wire CRC)验证读取的温度数据是否正确,避免传输过程中的数据 corruption(尤其在工业强干扰环境中)。

总结

DS18B20 凭借单总线、高精度、无需外部元件的优势,成为温度检测场景的经典选择。其工作原理的核心是 “复位应答建立通信 - 温度采集与 A/D 转换 - 数据存储”,读取方法需根据传感器数量(单 / 多)和微控制器接口(GPIO 模拟 / 硬件模块)灵活适配,同时注意时序控制、上拉电阻、CRC 校验等细节。掌握这些原理与方法,即可在智能家居(如室内温度监测)、工业控制(如设备温度预警)、医疗设备(如低温存储监测)等场景中高效应用 DS18B20,实现稳定、精准的温度检测。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

单片机毕业设计-远望创客学堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值