目录
[3.1DS18B20 模块命令](#3.1DS18B20 模块命令)
1.DS18B20介绍:
- **功能:**温度采集
- 测温范围:-55℃ ~ +125℃,在 - 10℃~+85℃范围内精度可达 ±0.5℃;
- 精度:±0.5℃
- 工作电压:3v ~ 5.5v
- 可编程的分辨率: 9~12 位 (传感器对温度变化的敏感程度 / 精度):
- 9位:0.5℃ ------最多在 93.75ms 内把温度转换为数字
- 10位:0.25℃ ------最多在 375ms 内把温度值转换为数字,
- 11位:0.125℃ ------最多在 187.5ms 内把温度值转换为数字,
- 12位(默认):0.0625℃ ------最多在 750ms 内把温度值转换为数字,
- 通信方式:单总线、半双工(优势:大大提高抗干扰能力)
- 温度数字量转换时间:典型值200ms
- 特点:①每片芯片有唯一编码(64 位唯一 ROM 序列号(出厂光刻))支持联网寻址,多只DS18B20可以同时连接在一根单总线上,实现单总线多设备组网。------因此,每一个总线上的器件都必须是漏极开路或三态输出。
- 供电方式:支持外部供电(3.0V~5.5V)和寄生供电(从数据线取电)(当多只DS18B20同时连接在一根单总线上时,数据线给电太慢,此时需从 VDD 引脚接入一个外部电源,);
- 使用注意:①DS18B20的IO引脚是开漏的,使用时需要外接上拉电阻(阻值4.7kΩ~10kΩ)(∵有个默认的高电平就行了,阻值太小耗能多)
2.引脚定义

| 引脚序号 | 引脚名称 | 核心功能 | 连接说明 |
|---|---|---|---|
| 1 | GND | 接地 | 接单片机 GND,确保共地 |
| 2 | DQ | 数据引脚 | 接单片机任意 I/O 口(如 P3.7),漏极开路,需上拉电阻 |
| 3 | VCC | 电源引脚 | 外部供电时接 3.0V~5.5V,寄生供电时接地 |
电路要求:
-
上拉电阻:DQ 引脚必须串联 4.7kΩ~10kΩ 上拉电阻至 VCC,确保总线空闲时为高电平,避免信号失真;
-
供电选择: 优先采用外部供电(VCC 接电源),稳定性优于寄生供电;寄生供电时需在温度转换期间保持总线高电平,必要时添加强上拉电路;

-
抗干扰 :长距离传输(超过 10 米)需使用屏蔽线,屏蔽层接地,避免电磁干扰。
3.单总线通信协议
DS18B20 的所有通信都依赖单总线协议,需严格遵循**"初始化→ROM 命令→功能命令"**的流程,时序精度直接决定通信成败
3.1DS18B20 模块命令
- 操作ROM命令 :成功进行一次 ROM 操作后,就可以对 DS1820 进行特定的操作,总线控制器可以发出六个存储器和控制操作命令中的任一个。
- 1.读ROM (0x33)
- 2.搜索ROM (0xF0)
- 3.匹配ROM (0x55)
- 4.跳过ROM (0xCC)
- 5.报警搜索 (0xEC)
- ds18b20采集温度完整流程 :
- 1.复位 ds18b20_reset();
- 2.发送0xCC,跳过ROM write_ds18b20(0xCC);
- 3.发送0x44,开启温度转换 write_ds18b20(0x44);
- 4.延时1s
- 5.复位 ds18b20_reset();
- 6.发送0xCC,跳过ROM write_ds18b20(0xCC);
- 7.发送0xBE,读取温度 write_ds18b20(0xBE);
- 8.读取两个字节温度
3.2DS18B20时序
3.2.1初始化(复位)
时序图: 
- 主机拉低总线大于 480μs 小于960us(复位脉冲)
- 主机拉高总线,转换输入模式
- DS18B20 在 15~60μs 去检测是否出现上升沿
- DS18B20 在 60~240μs 内拉低总线(存在脉冲)
- ds18b20最终释放总线,总线为高电平
3.2.2写时序0/1
时序图:

- 写0时序:
- 主机将总线拉低大于60us,小于120us
- ds18b20在60us内进行采样,如果采到低电平,代表主机发送了一个0
- 主机释放总线,将引脚拉高
- 写1时序:
- 主机将总线拉低大于1us
- 主机释放总线,将引脚拉高
- ds18b20在45us内进行采样,如果采到高电平,代表主机发送了一个1
3.2.3读时序
时序图:

- 主机将总线拉低大于1us,释放总线,引脚变为高电平
- 主机再15us内进行采样,若采到一个高电平,代表读到1,若采到低电平,代表读到0
- 最终ds18b20释放总线
4.温度数据格式与温度计算
- 温度数据格式:温度数据以 16 位带符号二进制补码形式存储在暂存器第 0 字节(低字节)和第 1 字节(高字节),格式如下(12 位分辨率):

- 温度计算
- 先读到温度低位字节,再读到温度高位字节
- 合并高、低字节:将高字节左移 8 位,与低字节按位或,得到 16 位完整数据;
- 数据处理------符号判断与转换:
- 正温度(S=0):直接用 16 位数据 ×0.0625(12 位分辨率);
- 负温度(S=1):先对 16 位数据取反加 1(补码转原码),再 ×0.0625,结果加负号;