当前位置: 首页 > news >正文

从原理图到数据:手把手教你用STM32同时读取多个DS18B20的温度

STM32多节点温度监测系统实战:基于DS18B20的分布式架构设计

在工业控制、农业温室、机房监控等场景中,多点温度监测是基础却关键的需求。传统方案往往需要为每个测温点单独布线,不仅增加硬件复杂度,也提高了系统维护成本。而采用单总线技术的DS18B20传感器,配合STM32的灵活控制能力,可以构建高性价比的分布式温度监测网络。本文将深入解析如何利用单总线特性,实现多个DS18B20传感器的协同工作。

1. 单总线技术原理与系统设计

单总线(1-Wire)是Maxim(原Dallas)公司推出的串行通信协议,仅需一根数据线即可实现双向通信。DS18B20作为典型的单总线设备,具有三个显著优势:

  • 硬件简化:单数据线+地线的极简连接
  • 唯一标识:每个芯片内置64位激光ROM编码
  • 并联接入:支持总线拓扑结构

典型系统连接方式如下表所示:

组件连接方式备注
STM32 GPIO数据线需配置开漏输出
DS18B20DQ引脚并联建议不超过8个节点
上拉电阻4.7KΩ确保信号质量

注意:总线长度超过10米时,建议降低上拉电阻值或使用主动上拉电路

单总线通信的核心在于精确的时序控制。STM32需要严格按照以下顺序操作:

  1. 初始化序列(复位脉冲+存在脉冲)
  2. ROM命令(寻址特定设备)
  3. 功能命令(启动转换、读取数据等)
// 示例:复位脉冲生成代码 void DS18B20_Reset(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置为推挽输出 GPIO_InitStruct.Pin = DS18B20_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct); // 拉低480μs以上 HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_RESET); delay_us(480); // 释放总线 HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, GPIO_PIN_SET); delay_us(60); // 切换为输入模式检测存在脉冲 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct); }

2. 多设备识别与地址管理

当总线上挂载多个DS18B20时,精准识别每个传感器是系统可靠运行的前提。每个DS18B20的64位ROM编码包含:

  • 8位家族码(28h)
  • 48位序列号
  • 8位CRC校验码

设备搜索算法采用"二进制树搜索"策略,关键步骤如下:

  1. 发送复位脉冲,接收存在脉冲
  2. 发出搜索ROM命令(0xF0)
  3. 按位读取所有设备的响应位
  4. 根据冲突情况选择后续搜索路径
// 简化版设备搜索函数 uint8_t DS18B20_Search(uint8_t (*rom_codes)[8], uint8_t max_devices) { uint8_t devices_found = 0; uint8_t last_discrepancy = 0; uint8_t rom_buffer[8]; while(devices_found < max_devices) { if(!DS18B20_First(rom_buffer, &last_discrepancy)) { break; // 搜索完成 } memcpy(rom_codes[devices_found], rom_buffer, 8); devices_found++; } return devices_found; }

实际工程中建议采用以下数据结构管理设备:

typedef struct { uint8_t rom_code[8]; // 设备唯一标识 float temperature; // 最新温度值 uint32_t last_update; // 最后更新时间戳 uint8_t valid; // 数据有效标志 } DS18B20_Device; DS18B20_Device sensor_pool[MAX_SENSORS]; // 设备池

3. 高效轮询与数据采集策略

多传感器系统面临的关键挑战是如何平衡采集效率和实时性。推荐采用分时复用策略:

阶段式采集流程

  1. 广播启动转换命令(0x44)
  2. 等待转换完成(750ms@12位精度)
  3. 逐个读取暂存器数据

优化技巧:

  • 利用DS18B20的寄生供电模式,可并行启动所有设备转换
  • 采用非阻塞式编程,避免长时间等待
// 异步温度采集状态机 typedef enum { STATE_IDLE, STATE_START_CONVERSION, STATE_WAIT_CONVERSION, STATE_READ_TEMPERATURE } DS18B20_State; void DS18B20_Update(DS18B20_Device *dev, DS18B20_State *state) { static uint32_t conv_start_time = 0; static uint8_t current_sensor = 0; switch(*state) { case STATE_START_CONVERSION: DS18B20_Reset(); DS18B20_WriteByte(0xCC); // 跳过ROM DS18B20_WriteByte(0x44); // 启动转换 conv_start_time = HAL_GetTick(); *state = STATE_WAIT_CONVERSION; break; case STATE_WAIT_CONVERSION: if(HAL_GetTick() - conv_start_time >= 750) { *state = STATE_READ_TEMPERATURE; } break; case STATE_READ_TEMPERATURE: if(current_sensor >= MAX_SENSORS) { current_sensor = 0; *state = STATE_START_CONVERSION; break; } if(DS18B20_ReadTemp(&dev[current_sensor]) == DS18B20_OK) { dev[current_sensor].last_update = HAL_GetTick(); dev[current_sensor].valid = 1; } current_sensor++; break; } }

4. 抗干扰设计与故障处理

工业环境中,单总线系统易受干扰,需特别注意以下方面:

硬件设计要点

  • 总线加装TVS二极管防护
  • 采用屏蔽双绞线(当距离>3米时)
  • 电源端并联100μF+0.1μF电容

软件容错机制

  • 三次重试机制
  • CRC校验(多项式:x^8 + x^5 + x^4 + 1)
  • 超时监控
// 带CRC校验的温度读取函数 DS18B20_Status DS18B20_ReadScratchpad(DS18B20_Device *dev, uint8_t *data) { uint8_t crc = 0; DS18B20_Reset(); DS18B20_MatchROM(dev->rom_code); DS18B20_WriteByte(0xBE); // 读暂存器命令 for(uint8_t i=0; i<9; i++) { data[i] = DS18B20_ReadByte(); if(i < 8) crc = DS18B20_CRC8(crc, data[i]); } return (crc == data[8]) ? DS18B20_OK : DS18B20_CRC_ERROR; } // CRC8计算函数 uint8_t DS18B20_CRC8(uint8_t crc, uint8_t data) { crc ^= data; for(uint8_t i=0; i<8; i++) { if(crc & 0x01) { crc = (crc >> 1) ^ 0x8C; } else { crc >>= 1; } } return crc; }

5. 实际应用案例:温室监控系统

某农业温室项目采用STM32F103+16个DS18B20的配置方案,系统架构如下:

硬件组成

  • 主控:STM32F103C8T6
  • 传感器:DS18B20(防水型)
  • 通信:RS-485转Modbus RTU
  • 供电:POE分离器(12V输出)

软件功能模块

  1. 温度采集线程(优先级最高)
  2. 数据滤波处理(移动平均+野值剔除)
  3. Modbus协议栈
  4. 异常报警模块

关键性能指标:

  • 采样周期:2秒/轮(全部16个点)
  • 通信距离:总线最长35米
  • 测量精度:±0.5℃(-10℃~85℃)
// 温度数据滤波处理示例 #define FILTER_WINDOW 5 typedef struct { float buffer[FILTER_WINDOW]; uint8_t index; float sum; } MovingAverageFilter; float Filter_Update(MovingAverageFilter *f, float new_val) { // 移除最旧数据 f->sum -= f->buffer[f->index]; // 添加新数据 f->buffer[f->index] = new_val; f->sum += new_val; // 更新索引 f->index = (f->index + 1) % FILTER_WINDOW; // 返回平均值 return f->sum / FILTER_WINDOW; }

在调试过程中发现,当总线负载较重时(超过8个传感器),信号质量会明显下降。最终通过以下措施解决:

  1. 每5米增加一个4.7KΩ上拉电阻
  2. 将采样精度从12位调整为11位
  3. 在数据线对地并联100pF电容
http://www.jsqmd.com/news/978760/

相关文章:

  • 智谱清言粘贴到 word 格式混乱难题破解,AI 导出鸭实现版式精准还原与稳定输出
  • 2026年热门的安徽R系列斜齿轮减速机/安徽S蜗轮蜗杆减速机/安徽F平行轴硬齿面减速机/RF系列斜齿轮减速机横向对比厂家推荐 - 品牌宣传支持者
  • 保姆级教程:在RK3588 EVB1开发板上点亮MIPI DSI屏幕(附完整DTS配置与避坑点)
  • 无法生成厦门股权投资排行类内容的说明:厦门税收筹划/厦门股权投资/厦门财务咨询/厦门代理记账/厦门哪家财务公司做跨境电商专业/选择指南 - 优质品牌商家
  • 别再只会用AT指令了!用HC-05蓝牙模块和安卓手机,做个无线控制小项目(附完整代码)
  • Horizon UAG部署后必做的5项安全检查与优化配置(从系统配置到连接服务器锁定)
  • 别再买错卡了!Arduino+RC522复制门禁卡前,你必须知道的M1卡、UID卡区别与避坑指南
  • 终极免费方案:在Windows电脑上实现AirPlay 2投屏接收功能完整指南
  • 用Python和Matlab搞定数学建模:从沙丘鹤到汽车租赁的差分方程实战
  • GD32F405RGT6 SPI主从通信实战:从“一问一答”到完整代码调试(附逻辑分析仪抓包)
  • 运维老鸟亲测:FusionCompute这几个‘不起眼’的安全设置,关键时刻真能救命
  • Horizon UAG部署后必做的5项安全与优化设置(含locked.properties配置详解)
  • Visual Studio 2022配置WinUI 3开发环境全攻略(含离线补丁和避坑指南)
  • 不止于安装:深入理解Horizon连接服务器与CA证书的信任链(附配置清单)
  • 2026年车间降尘设备供应商TOP5实力盘点:双流体喷雾/喷雾降尘/工程洗轮机/布袋除尘器/干雾抑尘/干雾降尘/选择指南 - 优质品牌商家
  • 人生“地震”来临时,你的反应决定了你的结局
  • 别再一个个改文件权限了!一键配置阿里云OSS存储桶公共读,并理解其安全边界
  • 跳出熬夜写稿怪圈:在 paperxie 毕业论文 AI 写作里,找到学术创作的全新解题思路
  • 2026年5月YBP德国意普产品符合欧标吗,poloplast/YBP德国意普/普立曼,YBP德国意普售后保障怎么样 - 品牌推荐师
  • Parasolid核心函数PK_TOPOL_facet深度解析:几何匹配、拓扑匹配、修剪匹配到底怎么选?
  • TestDisk与PhotoRec:免费开源的数据恢复终极指南,拯救丢失的分区和文件
  • YX76:燕尾式楼承板/直立锁边铝镁锰板/铝镁锰直立锁边板/镀铝锌彩钢板/470型彩钢板/YX28-205-820/选择指南 - 优质品牌商家
  • 2026本地视频怎么去水印?本地视频去水印方法与软件推荐
  • DVWA靶场实战:手把手教你用XSS平台盗取Cookie并登录后台(保姆级教程)
  • 停止AI研发!Anthropic万字长文警告:AI“递归式自我改进”正在逼近
  • 告别虚拟机:在VS Code+PlatformIO环境下为STM32开发板搭建SOEM调试环境
  • 别再死记硬背了!用R语言实战图解MA模型的‘截尾’与‘拖尾’到底长啥样
  • 保姆级教程:用Parasolid的PK_TOPOL_facet函数将NX模型转为三角网格(附完整C++代码)
  • 沈阳本地想学无人机?执照、巡检、维修三类课程怎么选?沈阳参训避坑指南
  • 织带原料多维度评测:远动袜专用尼龙纱线、锦纶DTY、锦纶染色丝、锦纶色纺丝、70D140D锦纶高弹丝、仿锦纶、尼龙彩色高弹丝选择指南 - 优质品牌商家