简介
DS18B20是一款经典**单总线(1-Wire)**数字温度传感器,仅用一根数据线即可完成单片机与传感器之间的通信,支持9~12bit分辨率配置,可设置温度上下限阈值,广泛应用于51单片机温控项目。
引脚定义
- GND:电源地,接单片机GND
- DQ:单总线通信引脚,案例中接51单片机P3^7
- VCC:电源引脚
基础参数
- 测温范围:
-55℃ ~ +125℃ - 供电电压:3.0V ~ 5.5V
- 12bit分辨率下,一次温度转换耗时约750ms
内部寄存器结构(暂存器Scratchpad)
DS18B20的暂存器一共9字节:
- Byte0:温度低字节 LSB
- Byte1:温度高字节 MSB
- Byte2:温度上限阈值TH
- Byte3:温度下限阈值TL
- Byte4:配置寄存器(设置分辨率)
- Byte5~7:保留
- Byte8:CRC校验字节
读取温度只需要读取**Byte0(LSB)、Byte1(MSB)**两个字节。
温度计算公式:
实际温度 = 原始数值 × 0.0625
单总线通信时序
单总线所有通信都由主机(51单片机)发起,总线空闲时保持高电平。
1. 复位时序 Reset
- 主机拉低DQ总线至少480μs,完成复位;
- 释放总线,等待DS18B20应答;
- DS18B20在480μs内,拉低总线60~240μs作为存在脉冲,主机检测到此低脉冲代表传感器在线。
2. 写时序(主机发送bit)
- 发送0:主机拉低总线60~120μs,代表发送bit=0;
- 发送1:主机拉低总线至少1μs,15μs内释放总线回到高电平;
相邻两个bit之间间隔必须大于1μs。
3. 读时序(主机读取bit)
- 主机先拉低总线≥1μs,随后释放总线;
- DS18B20会在总线上输出bit;
- 主机必须在15μs内完成电平采样(推荐13μs采样):读到低电平=0,读到高电平=1。
相邻bit之间间隔大于1μs。
核心命令
| 命令码 | 功能 |
|---|---|
0xCC |
Skip ROM,跳过ROM匹配,总线上只有1个DS18B20时使用 |
0x44 |
启动温度转换,12bit模式转换耗时约750ms |
0xBE |
读取暂存器,读取9字节寄存器,取前2字节温度数据 |
完整通信流程(51单片机读取温度)
- 发送DS18B20复位信号
- 发送
0xCC跳过ROM - 发送
0x44启动温度转换 - 延时等待约800ms,等待转换完成
- 再次发送复位信号
- 发送
0xCC跳过ROM - 发送
0xBE读取暂存器 - 读取2字节温度数据:LSB、MSB
- 合并高低字节,
温度 = 原始值 × 0.0625
补充说明
- 单总线通信对时序要求严格,51单片机驱动时,延时函数必须精准,时序偏差会出现读出来固定0xFF或者0x00;
- 单总线建议在DQ线上外接4.7K上拉电阻,保证总线空闲为高电平;
- 上电默认是12bit分辨率;
- 可以读写TH、TL寄存器,设置温度上下限,用于温控报警。