给鱼缸、电机或者3D打印腔体做温控,DS18B20是那种“一支脚串起一片”的温度传感器。它用1-Wire单总线协议,理论上几十支探头都能挂在同一条数据线上,每支还有独立的64位地址,可以单独寻址读值。听起来很美,可真上手读多探头时,坑也是一串一串的。这篇文章把关键点写给你。

一颗4.7k上拉电阻,少了整条总线都不通
DS18B20的数据脚是开漏结构,也就是说它内部只能把线拉低,没有任何东西能把线推高。所以在1-Wire总线上,那颗从数据线拉到电源的电阻,是整条总线唯一能把信号线带回高电平的东西。少了它,不是“性能差”而已,是彻底没响应——扫描bus一支探头都找不到。
这颗电阻要4.7k,整条总线只要一颗(不是每支探头配一颗,因为是并连在一条线上的)。它没极性正反随便插。如果线很长、探头很多,总线电容变大,可以适当降到2.2k来缩短上升沿,但别低于1k。很多人改完用10k也能点亮单支短线的探头,那是侥幸,别照抄。
多点测温,拓扑要“链式”不要“星型”
多支探头连着长长短短的分支线,是最容易“一支挂了全车趴窝”的布局。规范做法是线性菊花链:把VDD、GND、DQ三根总线从一支探头串到下一支,像一串珠子那样排下来。星型(从中心一路散射出去)会产生信号反射,线越长越容易把整条1-Wire总线的通信搅乱。
每支探头供电用正常模式最稳,别图省事走寄生供电。正常模式就是把每支的红线都接5V、黑线接地、黄线共数据线。寄生供电只接两根线虽然省事,但转换期间对时序要求苛刻,距离一长就掉链子,宁可多接一根线求稳。

读值踩坑:全是0、-127和85
读多探头常见的怪现象三种:一种是某支一直返回-127,说明它根本没被读到,多半是接触不良或地址写错;一种是返回85,说明转换还没完成就急着去读,转换需要最多750毫秒,读到之前先等一下;还有一种更诡异——所有探头都读成0。这种情况通常是总线被某处拉低了,常见原因是探头地线没共、或者某段线短路,一片死节点会带崩整条总线。
还有个小提醒:识别每支探头别依赖它插在哪个口,因为总线上不分物理位置,要用它的ROM地址去认。把每支的地址打印出来存好,读的时候按地址取,哪支坏了扫一眼就知道,不用一根根拔。
长线部署的经验值
总线上探头越多电容越大,每隔几米给总线段做一次加强是常见的踏实做法:在供电两端并个100nF去耦电容,数据脚串个100欧电阻抑制反射,信号线和地线用双绞线尽量紧贴走。我见过按照这些规矩拉20米串20支探头24小时不掉的配置。DS18B20做多点温控是真·性价比高,只是要把“总线纪律”当回事。


85这个是转换没完成就去读,用你方法加了个等待就正常了,感谢
每支用ROM地址认,坏哪支一眼就看出,再也不用一根根拔了,实用
4.7k上拉电阻没装,总线真的一个探头都扫不到,装上秒好,这知识点太值了
菊花链串探头比星型稳多了,我之前散线拉得长,一直丢探头,改成链式就干净了