0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于DS18B20的单总线数字温度计

基于DS18B20的单总线数字温度计

来源:
2026-01-07
类别:工业控制
eye 1
文章创建人 拍明芯城

基于DS18B20的单总线数字温度计设计详解

在工业自动化、环境监测、智能家居及消费电子等领域,温度测量是核心功能之一。传统温度传感器如热敏电阻需配合外部模数转换器(ADC)实现数字化输出,存在布线复杂、抗干扰能力弱、精度受限等问题。DS18B20作为Maxim Integrated(原DALLAS公司)推出的单总线数字温度传感器,凭借其高精度、低功耗、抗干扰性强及单总线通信协议等特性,成为分布式温度监测系统的理想选择。本文将从元器件选型、核心功能、设计原理及实际应用案例出发,详细阐述基于DS18B20的单总线数字温度计设计方案。

image.png

一、核心元器件选型与功能解析

1. DS18B20数字温度传感器

型号与封装:DS18B20提供TO-92、MSOP8、SOP8等多种封装形式,其中TO-92封装(三引脚直插式)因体积小、成本低、适用于狭小空间安装,成为最常用的封装类型。
核心参数

  • 测温范围:-55℃至+125℃,覆盖绝大多数工业与民用场景需求。

  • 分辨率:支持9-12位可编程设置,默认12位分辨率下精度达±0.0625℃,在-10℃至+85℃范围内精度优化至±0.5℃,满足高精度测温需求。

  • 转换时间:12位分辨率下仅需750ms完成温度转换,9位分辨率下仅需93.75ms,响应速度快。

  • 供电方式:支持寄生电源模式(通过数据线DQ供电)与外部电源模式(VDD引脚供电),寄生电源模式下无需额外电源线,简化布线;外部电源模式下测量稳定性更高,支持更长距离传输。

  • 通信协议:采用单总线协议,仅需一根数据线(DQ)即可完成数据传输与供电,支持多点组网,通过唯一64位ROM地址区分多个传感器,适用于分布式测温系统。

  • 报警功能:内置可编程非易失性温度报警阈值(TH/TL),当温度超限时触发报警信号,便于实时监控异常温度。

选型依据
DS18B20的测温精度、分辨率及转换速度显著优于传统热敏电阻。例如,在粮仓温度监测系统中,需同时监测多个点的温度,DS18B20的单总线多点组网功能可大幅减少布线成本;在工业设备过热保护场景中,其0.0625℃的分辨率与快速响应能力可精准捕捉温度突变,避免设备损坏。此外,寄生电源模式在电池供电的便携式设备中可延长续航时间,外部电源模式则适用于长距离传输的工业现场。

2. 微控制器(MCU)

型号推荐:STM32F103C8T6(ST公司)、ATmega328P(Microchip公司)、STC89C52RC(宏晶科技)。
核心功能

  • 单总线协议实现:通过GPIO引脚模拟单总线时序,完成DS18B20的初始化、ROM指令发送、功能指令执行及数据读取。

  • 数据处理:解析DS18B20输出的16位二进制补码温度数据,转换为十进制温度值,并支持温度报警阈值比较。

  • 通信接口扩展:提供UART、I2C、SPI等接口,便于与上位机、显示屏或无线模块(如ESP8266、NRF24L01)连接,实现数据远程传输与显示。

选型依据
以STM32F103C8T6为例,其主频达72MHz,内置32KB Flash与20KB SRAM,可快速处理多路DS18B20的温度数据;其GPIO引脚支持灵活配置,可模拟单总线时序;丰富的外设接口便于系统扩展。在低成本场景中,STC89C52RC凭借其8位架构与低功耗特性,成为经济型选择。

3. 上拉电阻

型号与参数:4.7kΩ、1/4W、±1%精度、0805封装贴片电阻。
核心功能

  • 单总线稳定通信:在DQ引脚与VDD之间连接4.7kΩ上拉电阻,确保总线空闲时保持高电平,避免信号干扰。

  • 寄生电源模式支持:在寄生电源模式下,强上拉电阻(如1kΩ)可在温度转换期间为DS18B20提供充足电流,确保测量稳定性。

选型依据
上拉电阻阻值需根据总线长度与负载数量调整。在短距离(<1m)且单传感器场景中,4.7kΩ电阻可满足需求;在长距离(>10m)或多传感器组网场景中,需降低阻值(如2.2kΩ)以增强驱动能力。

4. 电源模块

型号推荐:AMS1117-3.3(线性稳压器)、LM2596S-ADJ(开关稳压器)、CR2032纽扣电池(便携式设备)。
核心功能

  • 电压转换:将外部输入电压(如5V)转换为DS18B20与MCU所需的3.3V电压,确保器件稳定工作。

  • 低功耗设计:在电池供电场景中,选择低静态电流(<1μA)的稳压器(如AMS1117-3.3),延长设备续航时间。

选型依据
在外部电源模式下,LM2596S-ADJ可提供高达3A的输出电流,支持多传感器长距离传输;在便携式设备中,CR2032纽扣电池结合AMS1117-3.3可实现小型化设计。

5. 显示模块

型号推荐:OLED显示屏(0.96寸、128×64分辨率、I2C接口)、LCD1602(16×2字符、并行接口)。
核心功能

  • 实时温度显示:将MCU处理的温度数据以数字或图形形式显示,便于用户直观读取。

  • 低功耗设计:OLED显示屏在显示静态内容时功耗极低(<10mA),适合电池供电场景。

选型依据
在高端应用中,OLED显示屏凭借其高对比度、广视角及低功耗特性,成为首选;在成本敏感型场景中,LCD1602以经济型价格满足基本显示需求。

6. 无线通信模块

型号推荐:ESP8266(Wi-Fi模块)、NRF24L01(2.4GHz无线模块)、LoRa模块(远距离低功耗)。
核心功能

  • 数据远程传输:将温度数据上传至云端服务器或移动终端,实现远程监控。

  • 多节点组网:支持多个温度计节点与网关通信,构建大规模温度监测网络。

选型依据
在室内短距离场景中,ESP8266可快速接入Wi-Fi网络;在工业现场或农业大棚等长距离场景中,LoRa模块凭借其10km以上的传输距离与低功耗特性,成为理想选择。

二、DS18B20工作原理与测温机制

DS12B20的测温核心基于减法计数器与斜率累加器的协同工作,其原理可分解为以下步骤:

1. 振荡器与计数器初始化

DS18B20内部集成低温度系数振荡器(LTO)与高温度系数振荡器(HTO)。LTO的振荡频率受温度影响极小,用于产生固定频率的脉冲信号;HTO的振荡频率随温度变化显著,其输出作为计数器2的脉冲输入。
在每次测温前,减法计数器1与温度寄存器被预置为-55℃对应的基数值(如12位分辨率下为0xFA90H)。

2. 温度测量循环

  • 计数器1减法计数:LTO产生的脉冲信号输入减法计数器1,每接收到一个脉冲,计数器1值减1。

  • 温度寄存器累加:当计数器1减至0时,温度寄存器值加1,同时计数器1重新加载初始值,继续减法计数。

  • 计数器2控制测量时间:HTO产生的脉冲信号输入减法计数器2,当计数器2减至0时,停止温度寄存器累加,此时温度寄存器中的数值即为被测温度。

3. 斜率累加器非线性补偿

由于HTO的频率-温度关系并非绝对线性,测温过程中会产生非线性误差。斜率累加器通过动态修正计数器1的初始值,补偿非线性误差,提升测量精度。例如,在高温环境下,斜率累加器会增大计数器1的初始值,延长减法计数周期,从而抵消HTO频率过快导致的测量偏差。

4. 温度数据输出

测温完成后,温度值以16位二进制补码形式存储于高速暂存器的第0与第1字节(高位在前,低位在后)。其中,高5位为符号位(S),S=0表示正温度,S=1表示负温度;剩余11位为温度数据位。
正温度计算:将11位二进制数转换为十进制,乘以0.0625(12位分辨率)即可得到实际温度值。例如,07D0H(00000111 11010000)转换为十进制为2000,实际温度为2000×0.0625=125℃。
负温度计算:将11位二进制补码转换为原码(符号位不变,数值位取反后加1),再转换为十进制并乘以0.0625。例如,FC90H(11111100 10010000)转换为原码为10000011 01101111(即-870),实际温度为-870×0.0625=-54.375℃,四舍五入后为-55℃。

三、单总线通信协议与时序实现

DS18B20的单总线协议通过严格的时序控制实现数据传输,其通信流程包括初始化、ROM指令、功能指令与数据传输四个阶段。

1. 初始化时序

初始化是单总线通信的起始步骤,由主机发起,用于检测总线上的DS18B20是否存在。

  • 主机复位脉冲:主机将DQ引脚拉低至少480μs,然后释放总线(上拉电阻将DQ拉高)。

  • 设备应答脉冲:DS18B20检测到复位脉冲后,在15-60μs内将DQ拉低60-240μs,表示设备就绪。

  • 主机检测应答:主机在释放总线后15-60μs内检测DQ电平,若为低电平则初始化成功。

2. ROM指令

ROM指令用于选择总线上的特定DS18B20或执行全局操作,常用指令如下:

  • Skip ROM(0xCC):跳过ROM地址匹配,直接访问总线上的所有设备,适用于单设备场景。

  • Read ROM(0x33):读取设备的64位ROM序列号,适用于单设备地址确认。

  • Match ROM(0x55):匹配指定ROM地址,仅选中的设备响应后续功能指令,适用于多设备场景。

  • Search ROM(0xF0):扫描总线上的所有设备ROM序列号,用于多设备地址识别。

3. 功能指令

功能指令用于控制DS18B20执行温度转换、数据读取等操作,常用指令如下:

  • Convert T(0x44):启动温度转换,转换完成后温度数据存入高速暂存器。

  • Read Scratchpad(0xBE):读取高速暂存器数据(包含温度数据、TH/TL报警值、配置寄存器等)。

  • Write Scratchpad(0x4E):向高速暂存器的TH/TL报警值与配置寄存器写入数据。

  • Copy Scratchpad(0x48):将高速暂存器中的TH/TL报警值与配置寄存器复制到EEPROM,实现掉电保存。

  • Recall EEPROM(0xB8):将EEPROM中的TH/TL报警值与配置寄存器复制到高速暂存器,恢复上次设置。

  • Read Power Supply(0xB4):读取设备供电模式(0=寄生电源,1=外部电源)。

4. 数据读写时序

单总线的数据传输通过“写时隙”与“读时隙”实现,时隙长度与时序精度直接影响通信稳定性。

  • 写时隙:主机拉低DQ引脚60μs(写0)或2μs(写1),然后释放总线,DS18B20在15-60μs内采样DQ电平。

  • 读时隙:主机拉低DQ引脚1μs后释放,DS18B20在15μs内将数据送至DQ引脚(0=拉低总线,1=释放总线),主机在15μs内完成数据采样。

四、硬件电路设计与实现

基于DS18B20的单总线数字温度计硬件电路包括电源模块、MCU模块、DS18B20温度传感器模块、显示模块与无线通信模块,以下以STM32F103C8T6为核心的设计方案为例进行说明。

1. 电源模块设计

电源模块需为MCU与DS18B20提供稳定的3.3V电压。在外部电源模式下,可采用LM2596S-ADJ开关稳压器将5V输入转换为3.3V输出,其电路如下:

  • 输入滤波:在LM2596S-ADJ输入端并联100μF电解电容与0.1μF陶瓷电容,滤除高频噪声。

  • 输出滤波:在输出端并联1000μF电解电容与0.1μF陶瓷电容,确保输出电压稳定。

  • 反馈电阻:通过调整反馈电阻R1与R2的比值(R2=1.24kΩ,R1=3.3kΩ),实现3.3V输出。

在寄生电源模式下,需在DQ引脚与VDD之间连接4.7kΩ上拉电阻,并在温度转换期间通过强上拉(如1kΩ电阻)为DS18B20提供充足电流。

2. MCU模块设计

STM32F103C8T6的GPIO引脚需配置为推挽输出模式,以模拟单总线时序。其电路如下:

  • DQ引脚连接:将MCU的GPIO引脚(如PA0)通过4.7kΩ上拉电阻连接至3.3V电源,同时连接DS18B20的DQ引脚。

  • 晶振电路:连接8MHz外部晶振与两个20pF电容,为MCU提供时钟信号。

  • 复位电路:连接10kΩ上拉电阻与0.1μF电容,实现上电复位与手动复位功能。

3. DS18B20温度传感器模块设计

DS18B20的TO-92封装引脚定义如下(正对传感器切面,引脚从左到右):

  • GND:接地引脚,连接电源地。

  • DQ:数据引脚,连接MCU的GPIO引脚与上拉电阻。

  • VDD:电源引脚(外部电源模式下使用),连接3.3V电源。

在寄生电源模式下,VDD引脚悬空,仅通过DQ引脚供电;在外部电源模式下,VDD引脚连接3.3V电源,DQ引脚仍需上拉电阻。

4. 显示模块设计

以OLED显示屏为例,其I2C接口需连接MCU的SCL(PA5)与SDA(PA6)引脚,同时连接4.7kΩ上拉电阻以确保信号稳定性。OLED显示屏的VCC引脚连接3.3V电源,GND引脚接地。

5. 无线通信模块设计

以ESP8266 Wi-Fi模块为例,其电路如下:

  • 电源连接:VCC引脚连接3.3V电源,GND引脚接地。

  • UART通信:TX引脚连接MCU的RX引脚(PA10),RX引脚连接MCU的TX引脚(PA9),实现数据透传。

  • 天线连接:通过π型匹配网络(电感与电容)连接天线,优化无线信号传输。

五、软件程序设计与实现

软件程序需实现单总线初始化、DS18B20温度测量、数据处理与显示、无线通信等功能。以下以STM32F103C8T6的HAL库为例,说明关键函数实现。

1. 单总线初始化函数

cvoid DS18B20_Init(void) {    GPIO_InitTypeDef GPIO_InitStruct = {0};    __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟    GPIO_InitStruct.Pin = GPIO_PIN_0; // DQ引脚为PA0    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式    GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上下拉    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 高速模式    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 初始化为高电平}

2. DS18B20复位与应答检测函数

cuint8_t DS18B20_Reset(void) {    uint8_t presence = 0;    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 拉低DQ引脚480μs    HAL_Delay(1); // 延时1ms(>480μs)    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 释放DQ引脚    HAL_Delay(15); // 延时15-60μs    if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) { // 检测应答信号        presence = 1; // 检测到应答    }    HAL_Delay(240); // 延时240μs(>60μs)    return presence;}

3. DS18B20写时隙函数

cvoid DS18B20_WriteByte(uint8_t data) {    for (uint8_t i = 0; i < 8; i++) {        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 拉低DQ引脚2μs        if (data & 0x01) { // 写1            HAL_Delay(2); // 延时2μs后释放DQ引脚            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);        } else { // 写0            HAL_Delay(60); // 延时60μs后释放DQ引脚            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);        }        data >>= 1; // 右移一位        HAL_Delay(1); // 延时1μs(确保时隙长度>60μs)    }}

4. DS18B20读时隙函数

cuint8_t DS18B20_ReadByte(void) {    uint8_t data = 0;    for (uint8_t i = 0; i < 8; i++) {        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 拉低DQ引脚1μs        HAL_Delay(1); // 延时1μs        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 释放DQ引脚        HAL_Delay(10); // 延时10μs(DS18B20在15μs内送出数据)        if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) { // 读取DQ引脚电平            data |= (1 << i); // 写1        }        HAL_Delay(50); // 延时50μs(确保时隙长度>60μs)    }    return data;}

5. DS18B20温度测量函数

cfloat DS18B20_GetTemperature(void) {    uint8_t temp_l = 0, temp_h = 0;    int16_t temp_value = 0;    float temperature = 0.0;    if (DS18B20_Reset()) { // 复位DS18B20        DS18B20_WriteByte(0xCC); // 跳过ROM指令        DS18B20_WriteByte(0x44); // 启动温度转换        HAL_Delay(750); // 等待750ms(12位分辨率)        DS18B20_Reset(); // 再次复位DS18B20        DS18B20_WriteByte(0xCC); // 跳过ROM指令        DS18B20_WriteByte(0xBE); // 读取暂存器指令        temp_l = DS18B20_ReadByte(); // 读取温度低字节        temp_h = DS18B20_ReadByte(); // 读取温度高字节        temp_value = (temp_h << 8) | temp_l; // 合并高低字节        if (temp_value & 0x8000) { // 判断符号位(负温度)            temp_value = ~temp_value + 1; // 转换为原码            temperature = temp_value * (-0.0625); // 计算实际温度        } else { // 正温度            temperature = temp_value * 0.0625; // 计算实际温度        }    }    return temperature;}

6. OLED显示函数

cvoid OLED_ShowTemperature(float temperature) {    char temp_str[10];    sprintf(temp_str, "Temp: %.2fC", temperature); // 格式化温度字符串    OLED_ShowString(0, 0, (uint8_t *)temp_str, 16); // 在OLED上显示温度(需实现OLED驱动函数)}

7. 主函数

cint main(void) {    HAL_Init(); // 初始化HAL库    SystemClock_Config(); // 配置系统时钟    DS18B20_Init(); // 初始化DS18B20    OLED_Init(); // 初始化OLED显示屏    while (1) {        float temperature = DS18B20_GetTemperature(); // 获取温度值        OLED_ShowTemperature(temperature); // 显示温度        HAL_Delay(1000); // 延时1s    }}

六、实际应用案例与性能分析

1. 粮仓温度监测系统

在粮仓温度监测系统中,需同时监测多个点的温度以防止粮食霉变。采用DS18B20的单总线组网功能,可将数十个传感器挂载于同一总线上,通过MCU轮询读取温度数据。
系统优势

  • 布线简单:仅需一根总线与一根地线,降低布线成本。

  • 高精度测温:12位分辨率下精度达±0.0625℃,可精准捕捉温度异常。

  • 抗干扰能力强:单总线协议与CRC校验机制确保数据传输稳定性。

2. 工业设备过热保护系统

在工业设备过热保护系统中,DS18B20可实时监测设备关键部位的温度,当温度超限时触发报警信号并切断电源。
系统优势

  • 快速响应:750ms内完成12位温度转换,及时捕捉温度突变。

  • 高可靠性:内置温度报警阈值(TH/TL),无需MCU额外比较。

  • 低功耗设计:寄生电源模式下无需额外电源线,适合布线空间受限场景。

3. 智能家居温度控制系统

在智能家居温度控制系统中,DS18B20可与Wi-Fi模块(如ESP8266)连接,将温度数据上传至云端服务器,用户可通过手机APP远程监控与调节室内温度。
系统优势

  • 远程监控:通过无线通信实现温度数据远程传输。

  • 多节点组网:支持多个DS18B20挂载于同一总线上,实现全屋温度监测。

  • 低功耗设计:寄生电源模式下延长电池续航时间。

4. 性能分析

参数DS18B20传统热敏电阻
测温范围-55℃至+125℃-40℃至+125℃
分辨率9-12位可调(最高0.0625℃)需外部ADC,分辨率受限
转换时间93.75ms(9位)至750ms(12位)依赖ADC速度,通常>1s
供电方式寄生电源/外部电源仅外部电源
通信协议单总线,支持多点组网需额外模数转换与通信接口
抗干扰能力强(CRC校验)弱(易受噪声干扰)
成本低(单芯片解决方案)高(需热敏电阻+ADC+通信模块)

七、元器件采购与替代方案

1. 元器件采购渠道

DS18B20及配套元器件可通过拍明芯城(www.iczoom.com)采购,该平台提供型号查询、品牌、价格参考、国产替代、供应商厂家、封装、规格参数、数据手册等一站式服务。例如,搜索“DS18B20”可获取TO-92、MSOP8等封装型号的详细信息与采购链接。

2. 国产替代方案

在成本敏感型场景中,可采用国产替代芯片(如MAX31820,Maxim Integrated兼容型号)或模拟方案(如热敏电阻+ADC)。

  • MAX31820:与DS18B20引脚兼容,测温范围与精度相同,价格更低。

  • 热敏电阻+ADC:适用于低精度场景(如±1℃),成本更低,但需额外设计模数转换与校准电路。

八、总结与展望

基于DS18B20的单总线数字温度计凭借其高精度、低功耗、抗干扰性强及单总线通信协议等特性,在工业自动化、环境监测、智能家居等领域具有广泛应用前景。通过合理选型与优化设计,可构建高可靠性、低成本的温度监测系统。未来,随着物联网技术的发展,DS18B20将与无线通信模块(如LoRa、NB-IoT)深度融合,实现更大规模的温度监测网络,为智慧城市、智慧农业等领域提供技术支撑。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
pcb
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告