51单片机——DS18B20(一)

目录

[1. 概述](#1. 概述)

[2. 介绍](#2. 介绍)

[2.1 特点一](#2.1 特点一)

[2.2 特点二](#2.2 特点二)

[2.3 特点三](#2.3 特点三)


1. 概述

DS18B20 是单总线接口,需要使用 51 单片机的一个 IO 口(任意普通IO口,比如 P3.7)模拟单总线时序与 DS18B20 通信(主机(51)按单总线时序发起操作,从机(DS18B20)按规则响应)将检测的环境温度读取出来。

理解该句话需要明白:

① 单总线是什么?

单总线是 Maxim 推出的串行通信协议,核心特点是

仅需 1 根数据线(DQ 引脚) 完成双向通信(时钟 + 数据都在这根线上传输),再配合 GND(地线)和可选的 VCC(电源),就能实现主机(51 单片机)和从机(DS18B20)的交互

主从结构 :所有通信由主机(51)主动发起,从机(DS18B20)仅被动响应,且通信时序有严格的时间要求

开漏输出特性:DS18B20 的 DQ 引脚是开漏输出,需外接 4.7KΩ 上拉电阻才能输出高电平(否则只能拉低,无法主动输出高)

② 为什么要 "模拟单总线时序"?

51 单片机的片上外设里没有硬件级的单总线控制器 (不像 UART、SPI 有专门的硬件模块自动处理时序),因此只能通过软件编程控制普通 IO 口的高低电平持续时间,严格匹配单总线协议规定的时间参数(比如 "拉低 480us""释放后等待 15~60us"),这就是 "模拟时序"。

③ DS18B20 的核心特性

它是数字温度传感器,直接输出温度的数字信号(无需 AD 转换()),所有数据交互必须遵循单总线时序,最终通过通信读取其内部的温度寄存器值。

【AD转换:模数转换(Analog-to-Digital Conversion),是把连续变化的模拟信号 (比如电压、电流)转换成离散的数字信号(0 和 1 组成的二进制数)的过程,

举个通俗例子:

  • 模拟信号:像温度计上的水银柱,数值是 "连续的"(比如 18.2℃、18.3℃、18.4℃...);
  • 数字信号:像计算器显示的数字,只有固定的 "离散值"(比如 18、19、20...);
  • AD 转换:就是把 "水银柱的连续值" 翻译成 "计算器的离散数字",让单片机能看懂。】

【此外,还要理解传统的模拟温度传感器(比如 LM35、热敏电阻)和 DS18B20 的核心区别:

  • 模拟传感器:像一个只会说 "方言(模拟电压)" 的人,单片机(只懂 "数字语言")必须找一个 "翻译(AD 转换器)",把方言翻译成数字语言,才能听懂,即输出和温度成正比的模拟电压 (比如 1℃对应 10mV),单片机无法直接识别电压值,必须 AD 转换
  • DS18B20:像一个自己会说 "数字语言" 的人,它先把温度(物理量)自己翻译成二进制数字(比如 18℃→0x001E),直接告诉单片机,单片机不用再找 "翻译(AD 转换器)",即内部自带 "温度检测 + AD 转换电路 + 数字寄存器",直接把温度转成二进制数存到内部寄存器,无须 AD 转换。】
2. 介绍

DS18B20 是由 DALLAS 半导体公司推出的一种"一线总线(单总线)"接口的温度传感器

特点如下:

2.1 特点一

适应电压范围更宽,电压范围:3.0V - 5.5V,在寄生电源方式下可由数据线供电

【理解如下:

① 宽电压适应性

DS18B20 的供电引脚(VCC) 只要接入 3.0V~5.5V 之间的直流电压,就能稳定工作,不需要严格限定在某一个固定电压(比如必须 5V)

寄生电源供电方式

DS18B20 有两种供电模式,"寄生电源" 是区别于 "外部电源" 的特殊方式,核心是不用单独接 VCC 电源线,仅靠单总线的 DQ 数据线就能获取工作电力

外部电源模式:给设备插独立电源线 + 数据线,供电稳定;

寄生电源模式:不用插电源线,仅靠数据线(比如手机充电线)既传数据又偷电供电】

2.2 特点二

独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯

【理解如下:

DS18B20把时钟信号(同步用)和数据信号(传输指令 / 温度) 合并在一根 DQ 线上,无需额外的时钟线(如 I2C 的 SCL、SPI 的 SCK);仅占用微处理器的1 个普通 IO 口(而非专用的 UART/I2C 外设口),硬件极简,这是其他数字传感器难以做到的。

② 双向通讯

"双向通讯" 指微处理器能给 DS18B20 发指令(比如 "启动温度转换""读取温度"),DS18B20 也能给微处理器回传温度数据,这个功能依赖于

硬件基础:DS18B20 的 DQ 引脚是开漏输出 (器件只能 "拉低" 引脚电平(输出低),不能主动 "拉高";拉高靠上拉电阻完成)结构,微处理器和 DS18B20 都能控制 DQ 引脚的电平,但不会冲突 ------ 因为两者都只能 "拉低",拉高由上拉电阻统一提供,谁需要输出信号,就通过 "拉低 / 不拉低" 来传递 0/1

③ 时序主导:分时双向(不同时间做不同事)

所有通讯由微处理器(主机)主动发起,通过不同的时序规则区分 "主机写数据" 和 "主机读数据",实现分时双向:

简单说地1 根线不会同时收发,而是主机先 "说"(发指令),再让从机 "说"(回数据),靠固定的时序节奏避免混乱

通俗地比喻:把单线双向通讯比作 "对讲机通话"

传统 UART(TX/RX 双线):像你和对方各有一个话筒(TX)和听筒(RX),可以同时说、同时听(全双工);

DS18B20 的单线:像一台单频道对讲机,只有 1 个 "说话 / 听" 的通道(对应 DQ 线):

  1. 你(微处理器)先按住通话键(拉低 DQ 线),按固定语速说指令(比如 "报温度!"),说完松开;
  2. 对方(DS18B20)听到后,在你松开的规定时间内,按住通话键(拉低 DQ 线)回应温度(比如 "25℃");
  3. 全程只有 1 个通道,但靠 "你先讲、对方后讲" 的规则(时序),实现双向交流 ------ 这就是 "一条口线双向通讯" 的本质

注意:

  1. 时序是 "生命线":1 根线既传时钟又传数据,时序偏差(比如延时多 10us)会导致通讯失败,必须保证 us 级的精准延时
  2. 上拉电阻不能少:没有 4.7KΩ 上拉,DQ 线无法被拉高,DS18B20 无法输出高电平,双向通讯直接失效;
  3. 双向是 "半双工":不能同时收发,必须严格遵循 "主机先写、再读" 的顺序。】
2.3 特点三

DS18B20 支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,实现组网多点测温

【理解如下:

① 三线

多个 DS18B20 的 DQ 引脚并联到同一条 DQ 总线,VCC 引脚并联到同一条 VCC 线,GND 引脚并联到同一条 GND 线 ------ 本质是 "共用 1 根通讯线 + 共用电源 / 地线",而非多根通讯线;

若用寄生电源模式,只需 "DQ 线 + GND 线" 两线即可组网(省去 VCC 线),"三线" 是最常用、最稳定的外部电源组网方式。

② 为什么多个 DS18B20 能 "并联组网"?

(1)硬件基础:开漏输出+上拉电阻(无冲突并联)

DS18B20 的 DQ 引脚是开漏输出,且总线需接 1 个 4.7KΩ 上拉电阻到电源:

开漏输出的特点:器件只能 "拉低" DQ 电平,不能主动 "拉高";拉高由上拉电阻统一完成;

并联无冲突:多个 DS18B20 并联时,只有 "被主机指定的传感器" 会拉低 DQ 线输出数据,其他传感器保持高阻态(相当于 "不说话"),不会和主机 / 其他传感器的信号冲突。

(高阻态:通俗的理解,高阻态 = "电线被剪断了"

把 DQ 总线比作一根 "公共电线",每个 DS18B20 的 DQ 引脚就是一根 "分支电线",连接到公共电线上:

当传感器 "被主机指定"(收到自己的 64 位地址):分支电线和公共电线接通,传感器可以拉低公共电线(输出 0),相当于 "在分支电线上接了个地线";

当传感器 "未被指定":分支电线被剪断 (进入高阻态),不管公共电线是高电平(5V)还是低电平(0V),这个传感器的分支电线都不会对它产生任何影响 ------ 既不会拉低,也不会拉高,就像这根分支电线根本不存在。

延伸到 "并联无冲突":

主机点名 "传感器 A" 时,只有 A 的分支电线接通,其他传感器的分支电线都被剪断(高阻态);

A 拉低公共电线(输出数据 0)时,其他传感器因为 "电线剪断",不会和 A 冲突;

总线电平完全由 "被点名的传感器" 或 "上拉电阻" 决定,其他传感器相当于 "旁观者",不插手。

如果多个开漏输出的器件并联在同一条线上(比如 DS18B20 组网),只要有一个器件闭合开关(拉低),整个线就是低电平;只有所有器件都断开开关,线才会被上拉电阻拉到高电平 ------ 这就是 "线与" 逻辑,也是多器件并联无冲突的核心。

未被指定的传感器虽然处于高阻态,但仍能检测总线电平(比如主机发的指令),只是不主动输出信号,避免干扰总线。)

(2)协议核心:唯一的 64 位 ROM 地址(区分每个传感器)

每个 DS18B20 出厂时,芯片内部会固化一个全球唯一的 64 位 ROM 地址(无法修改),格式为:

8 位 "家族码"(DS18B20 固定为 0x28);

48 位 "唯一序列号"(相当于传感器的 "身份证号");

8 位 "CRC 校验码"(验证地址正确性)。

正是这个唯一地址,让主机(51 单片机)能在总线上精准 "点名" 某个传感器,避免多个传感器同时回应导致数据混乱。】

  1. DS18B20 支持多点组网功能,多个 DS18B20 可以并联在唯一的三线上,实现组网多点测温

  2. 在9位分辨率时最多在 93.75ms 内把温度转换为数字,12 位分辨率时最多在 750ms 内把温度值转换为数字,速度更快

  3. 测量结果直接输出数字温度信号,以"一根总线"串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力

  4. 负压特性:电源极性接反时,芯片不会因受热而烧毁,但不能正常工作

相关推荐
影阴6 小时前
通用定时器 输入捕获 +hal实现检测pwm周期和频率
stm32·单片机·hal
一个平凡而乐于分享的小比特6 小时前
DMA详解:让数据传输“甩掉”CPU的搬运工
嵌入式硬件·dma
贝塔实验室6 小时前
如何使用Altium Designer进行项目编译及验证
单片机·嵌入式硬件·mcu·射频工程·基带工程·嵌入式实时数据库·精益工程
点灯小铭8 小时前
基于单片机的智能门控制系统设计与故障报警实现
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
努力小周8 小时前
基于STM32的智能台灯系统设计与实现
stm32·单片机·嵌入式硬件·c#·毕业设计·毕设·javaee
LCG米9 小时前
从零搭建智能家居网关:基于瑞萨RA4L1 MCU与Home Assistant
单片机·嵌入式硬件·智能家居
HIZYUAN9 小时前
AI时代,如何利用FPGA在无人机视觉等方面进行快速应用
stm32·单片机·fpga开发·视觉检测·无人机·fpga·光端机
星一工作室9 小时前
STM32项目分享:基于stm32单片机控制的自动翻书装置
stm32·单片机·mongodb
小龙报9 小时前
【嵌入式51单片机】51 单片机中断入门到精通:中断类型、寄存器操作、优先级配置与实战代码
c语言·驱动开发·单片机·嵌入式硬件·物联网·mongodb·51单片机