赞
踩
DS18B20 是一个常见的数字温度计芯片, 因为测温准确, 廉价且接线简单, 实际应用广泛, 在各种教学实验套装中出镜率也很高.
在做FwLib_STC8 GPIO示例的时候写了一下 DS18B20, 这个型号看似简单, 但是使用机制比较有意思, 一个篇幅写不下, 所以把内容抽出来单独介绍.
关于最大通信长度和DS18B20节点数量
1-Wire Bus 总线上 DS18B20 的数量和距离和布线形式有关, 十几厘米的短距离上连接五六十个 DS18B20 没有任何问题, 如果是上百米的长距离连接, 建议10个以内, 最多不要超过20个. 以上的前提都是供电充足. DS18B20的这些特性在工业环境中特别有利, 例如一个IDC机房, 几十个测温点只需要一个8位MCU就能完成采集, 功耗低并且可靠.
一般见到的都是3pin的To-92封装, 和普通三极管一样, 使平面朝向自己, Pin脚朝下, 从左往右依次为: GND, DQ, VDD
单个DS18B20是最基础的连线方式
普通供电模式使用的是三线连接, 电压可以选择3.3V或5V
寄生供电模式使用的是双线连接. 这时候DS18B20的GND和Vdd都要接地. DQ脚既是数据通信脚, 也是供电脚, 上位机需要在这个脚上使用上拉电阻连接到VCC上, 对于STC8, 可以通过寄存器PxPU进行设置.
需要注意的是, 并非所有线上购买的DS18B20都能工作在寄生供电模式下, 有一些批次编号的DS18B20在寄生供电模式的电路下完全无法工作, 读取只会输出0
. 我怀疑是偷工减料了, 里面省掉了寄生供电需要的电容和二极管. 对于这类DS18B20, 需要通过一些额外的电路让其在双线模式下工作.
如果DS18B20不能在寄生供电模式下工作, 可以使用一个 0.1uF 的电容和一个1N4148二极管实现双线连接. 这时候 DS18B20 实际上工作在普通供电模式下.
+-----1N4148-|>|-----+
| |
| |DS18B20|-VCC--+
| | | |
MCU IO--+-DQ--|DS18B20| 0.1uF
| | |
GND ----GND-|DS18B20|-GND--+
用面包板实测模拟寄生供电模式, 背后只有两根连线
在实际的场景中, DS18B20 经常成组使用, 用于收集一个区域范围的温度信息, 区域的跨度从几十厘米(机箱, 机柜, 车床), 到上百米(住宅, 机房, 车间)都有可能. 对不同的距离和环境有不同的选择, 总结一下有以下几种情况
可以参考这篇 1-wire 总线的接线 https://www.loxone.com/enen/kb/wiring-1-wire-devices/
下面的结构中S
代表 Sensor, DS18B20. MCU是单片机.
总线方式是推荐的接线方式, 所有的 DS18B20 都接在同一根线上. 使用总线连接方式可以达到最远距离通信
MCU-------8m---S---3m----S----3m----S-----10m-----S
或者有个别分叉, 分叉离总线很近
MCU-------8m----------+--S---3m----S--+--10m-----S
| |
1m 1m
| |
S S
如果总线上产生了较多较长的分叉, 就变成了星形连接, 类似于下面的接线方式, 星形连接仅建议在小区域场景使用, 与总线连接方式相比, 长度要短得多.
S---------8m----MCU
|
4m
|
S------6m-----+----3m------S
|
8m
|
S--+------4m-----+----6m------------S
|
2m
|
S
绝大多数场景使用的都是集中供电. 在这个场景下, 由控制端(MCU端)供电.
如果使用三线则无需注意, 如果使用双线连接, 需要注意
在有条件的场景, 每个 DS18B20 可以单独供电, 此时控制端与 DS18B20 共地, 连接通信IO即可. 为稳定起见在 DS18B20 端可以加配 0.1uF 电容.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。