DS18B20数字温度传感器的工作原理与时序分析
DS18B20是Dallas半导体公司(现Maxim Integrated)推出的一款单总线数字温度传感器。该器件在单总线的拓扑结构下,仅需一根数据线即可完成与主控器件的双向通信,极大简化了系统布线与引脚资源占用。从硬件参数来看,DS18B20支持的温度测量范围为-55℃至125℃,在-10℃至85℃范围内可达到±0.5℃的测量精度。
一、传感器概述与硬件特性
DS18B20是Dallas半导体公司(现Maxim Integrated)推出的一款单总线数字温度传感器。该器件在单总线的拓扑结构下,仅需一根数据线即可完成与主控器件的双向通信,极大简化了系统布线与引脚资源占用。
从硬件参数来看,DS18B20支持的温度测量范围为-55℃至125℃,在-10℃至85℃范围内可达到±0.5℃的测量精度。工作电压为3V至5.5V,兼容常见的3.3V与5V系统,这一点在与51系列单片机配合时尤为重要——当使用5V供电时,数据线上需要串联4.7kΩ至10kΩ的上拉电阻,以实现线与特性下的总线电平稳定。
分辨率方面,DS18B20支持9位至12位的可配置分辨率,默认状态下为12位,对应温度分辨率为0.0625℃。分辨率的提升以转换时间为代价:9位转换时约需93.75ms,而12位转换则需750ms。在实际工程中,若对响应速度要求不高,建议保留默认的12位分辨率,以获得更精细的温度读数。
二、单总线协议与ROM操作命令
DS18B20采用的单总线协议是一种半双工异步串行通信协议。在一条总线上可以挂载多个DS18B20器件,每个器件内部固化了唯一的64位ROM码,用于主机进行器件寻址。ROM操作命令集是区分不同器件、实现多点测量的基础。
主要ROM命令包括:
-
读ROM(0x33):当总线上仅挂载单个DS18B20时,主机可通过此命令直接读取其ROM码,无需执行搜索流程。
-
搜索ROM(0xF0):用于识别总线上所有器件的ROM码,是多点测量的必要步骤。
-
匹配ROM(0x55):后跟64位ROM码,主机通过此命令选中特定器件,其他器件则保持待机状态。
-
跳过ROM(0xCC):在单器件系统中,此命令可省略ROM匹配流程,直接向总线上的器件发送功能指令,简化程序逻辑。
-
报警搜索(0xEC):仅搜索已触发温度报警条件的器件。
在单器件应用场景中,“跳过ROM”命令被广泛采用,这也是学习笔记中采集流程的核心设计思路。
三、温度采集的完整总线操作流程
根据笔记中的总结,一次完整的温度采集包含两次复位与两次ROM操作,具体流程如下:
-
总线复位:主机拉低总线至少480μs,释放后检测DS18B20发出的存在脉冲(60μs至240μs内的低电平),以确认器件已就绪。
-
跳过ROM(0xCC):由于系统中仅有一个传感器,无需进行ROM匹配。
-
启动温度转换(0x44):向器件发出温度转换命令,DS18B20开始进行模数转换,将模拟温度量转换为数字量并存入暂存器。
-
延时1秒:等待转换完成。考虑到12位分辨率下最大转换时间为750ms,延时1秒为工程中常用的保守取值。
-
第二次总线复位:重新初始化总线,准备读取转换结果。
-
再次跳过ROM(0xCC)。
-
读取暂存器(0xBE):发出读命令后,依次读取两个字节的温度数据(低字节在前,高字节在后),后续还可继续读取剩余暂存器内容(如温度报警阈值、配置寄存器等),但在基础温度读取中通常不需要。
四、时序分析与软件实现
单总线通信的底层依赖于严格的时序控制,任何偏差都可能导致通信失败。笔记中详细记录了复位、写时序和读时序的关键参数,下面结合代码片段进行原理层面的解析。
4.1 复位时序
复位操作是每一次总线事务的开始。主机将总线拉低至少480μs后释放,此时上拉电阻将总线恢复至高电平。DS18B20在检测到复位脉冲后,会在60μs至240μs内主动将总线拉低,形成存在脉冲。主机通过检测这一低电平来确认器件已响应。
在实际编程中,复位函数的返回值通常用于判断传感器是否存在:若在规定窗口内检测到低电平,则返回成功;若超时仍未检测到,则认为总线无器件或器件故障。
4.2 写时序
写时序分为“写0”与“写1”两种,二者在低电平持续时间上存在本质差异:
-
写0:主机将总线拉低并保持至少60μs,DS18B20在此期间的采样窗口内检测到低电平,即视为接收到逻辑0。
-
写1:主机将总线拉低1μs至15μs后释放,总线恢复高电平,DS18B20在采样窗口内检测到高电平,视为接收到逻辑1。
笔记中的写字节代码采用了循环移位的方式,依次写入每一位。值得注意的是,每写入一位后,需留出足够的恢复时间(通常为1μs至2μs),确保总线电平稳定后再进行下一位的写入。
4.3 读时序
读操作由主机主动发起。主机先将总线拉低至少1μs,随后释放总线,总线在上拉电阻作用下恢复高电平。DS18B20会在主机释放总线后的15μs内将数据传输至总线——若输出为1,则保持高电平;若输出为0,则主动拉低总线。
主机需在释放总线后的15μs内完成采样,采样值即为当前位的数值。笔记中给出的读字节函数在循环内先拉低总线并插入若干空操作(nop)以满足最小低电平时间,随后释放总线并延时,最后读取总线电平并存入字节变量。
4.4 数据拼接与温度换算
读取到的两个字节中,低字节的前11位为温度数据(12位分辨率下),采用补码形式表示。以笔记中默认的12位分辨率为例,温度值计算公式为:
T=读数值16T=16读数值
其中读数值为两个字节拼接后的有符号整数。例如,若读取到的温度为0x0191,十进制为401,则实际温度为401 / 16 = 25.0625℃。
五、工程实践中的注意事项
在基于51单片机的DS18B20应用中,有几个细节需要特别留意:
-
中断的影响:单总线时序对时间精度要求较高,在读写过程中应关闭总中断,避免中断服务程序打断关键时序窗口。
-
延时函数的校准:51单片机的指令周期与晶振频率相关,编写延时函数时需根据实际晶振(如11.0592MHz或12MHz)进行精确计算或使用逻辑分析仪校准。
-
上拉电阻的配置:数据线必须外接上拉电阻,否则总线无法正常恢复高电平,导致通信失败。
-
转换时间的冗余:温度转换命令发出后,若读取转换结果过早,将得到上一次的测量值。工程中建议延时1秒以上,或通过轮询方式检测转换完成状态。




更多推荐



所有评论(0)