首页
搜索
历史搜索
搜索发现

ds18b20读取温度的工作原理

2025-05-14 16:53:21| 来源:聚英电子| | 0

DS18B20 通过 单总线(1-Wire)协议 与微控制器通信,其温度读取过程可分为 初始化、发送指令、温度转换、数据读取 等步骤。以下是详细的工作原理:

一. 硬件工作原理

- 温度传感核心

DS18B20 内部包含一个 高精度温敏振荡器,通过测量与温度相关的脉冲频率来量化温度值。

- 温度变化 → 晶体振荡频率变化 → 计数器记录脉冲数 → 转换为数字信号。

- 内部结构

- 64位ROM:存储全球唯一地址(用于多设备识别)。

- 温度传感器:核心测量单元。

- 配置寄存器:设置分辨率(9~12位)。

- 暂存器(Scratchpad):临时存储温度数据和控制参数。

二. 温度读取流程

步骤1:总线初始化(复位脉冲)

- 微控制器发送 480~960μs的低电平脉冲,释放总线后等待DS18B20的 存在脉冲(60~240μs低电平),确认设备在线。

步骤2:发送ROM指令

- 若总线上有多个DS18B20,需通过ROM指令选择目标设备:

- `0x55`:匹配特定ROM地址(单设备操作可跳过)。

- `0xCC`:跳过ROM地址检测(适用于单设备场景)。

步骤3:发送功能指令

- 启动温度转换:发送指令 `0x44`,DS18B20开始测量温度。

- 转换时间取决于分辨率(9位约93ms,12位约750ms)。

- 在此期间,微控制器可轮询总线状态或延时等待。

步骤4:读取温度数据

1. 重新初始化总线,发送 `0xBE` 指令读取暂存器数据。

2. 连续读取9字节(包括温度值、配置参数等,通常只需前2字节)。

3. 温度数据以 16位二进制补码 格式存储,需转换为实际温度值。

三. 数据格式与温度计算

- 示例:若读取的16位数据为 `0x0191`(二进制 `0000 0001 1001 0001`):

- 高字节 `0000 0001` → 正温度(最高位为0)。

- 低字节 `1001 0001` → 小数部分。

- 计算:

- 整数部分:`0000 0001` → 1 × 16 = 16(高4位为整数高位)。

- 小数部分:`0001` → 1 × 0.0625 = 0.0625(低4位为小数,12位分辨率时每单位0.0625°C)。

- 实际温度:16 + 0.0625 = 16.0625°C。

- 负温度处理:

若高字节最高位为1(如 `0xFF8F`),需取补码后计算:

```c

temp = (读取值 & 0xFFF8) * (-1) + (16 - (读取值 & 0x000F) * 0.0625);

```

四. 关键时序与信号

- 单总线协议时序:

- 写“0”:保持低电平 >60μs。

- 写“1”:拉低总线1μs后释放。

- 读数据:微控制器拉低总线1μs后采样。

- 寄生供电模式注意事项:

- 温度转换期间需通过 强上拉电阻 保持总线高电平供电,否则可能导致转换失败。

五. 常见问题与解决

1. 读取值为85°C

- 原因:未等待温度转换完成或初始化失败。

- 解决:增加延时(如 `delay(750)`)或检查总线连接。

2. 数据不稳定

- 原因:总线干扰或电源不稳。

- 解决:缩短导线长度,增加滤波电容(0.1μF靠近DS18B20的VDD和GND)。

3. 多设备冲突

- 原因:未正确匹配ROM地址。

- 解决:遍历总线设备并单独操作(使用 `search()` 函数获取ROM地址)。

通过理解上述原理,可更高效地集成DS18B20到项目中,避免常见时序和硬件设计错误。


联系销售
销售王经理微信 销售王经理
微信公众号 微信公众号
服务热线
400-6688-400