长距离进行 I2C/TWI 的最佳方式

电器工程 i2c 公共汽车
2022-01-06 10:36:26

我有一个项目需要进行长距离(30 到 40 米)的 I²C/I2C/TWI。

我见过有人建议将时钟频率降低到 500 Hz 左右,以减轻我假设的这么长线路的电容的影响?我使用的组件至少需要标准的 100 kHz 时钟速率。我做了一些进一步的研究,并在另一个问题的答案中发现了使用 P82B96 电平转换器的建议。数据表中,他们给出了在甚至 100 米的线路上使用它们的示例:

I2C_longDistance

我遇到了另一种通过adafruit 的分线板转换电平的方法,它只是一个带有两个上拉电阻的 mosfet (bss138)(一个用于每边/电压)。他们从来自 NXP (AN10441) 的应用说明,其中两个通道可以这样使用:

MOSFET电平转换

现在我想知道:哪种解决方案最好?还是我忽略了什么?此外,5V 是否足以确保良好的连接?使用更高的电压(如 12V)会有优势吗?

4个回答

您可能可以通过使用屏蔽 CAT5 或类似电缆摆脱 DS18B20 传感器。这只是热测量,所以如果一些读数被破坏,你可以让你的程序足够强大来处理它(无论如何这是一个很好的做法)。

对于连锁餐厅的使用,我设计了在多个无源传感器上工作的所谓 RTU(屋顶单元)控件(它们使用可互换的 NTC 热敏电阻,无需校准舒适加热)。从无源传感器中滤除噪声要容易得多。另一组装置(北美主要汽车综合体)使用带有信号调节器的铂 RTD - 非常准确和稳定的设备。您应该首先确定传感器,然后查看它的接口方式 - 这些传感器选项中的任何一个都适合您的应用程序(尽管 RTD 可能会过大)。

如果不清楚,我建议在处理器周围使用“星形”传感器配置。

如果您真的想使用“总线”(单线或 I2C 除外),则末端需要智能,这意味着某种形式的处理器。如果您要全力以赴,您可能需要考虑使用无线传感器,该传感器通过您所在地区合法的某些 ISM 频段进行通信。或者,您可以为每个 Pi 使用一个传感器,并让它们通过您的 WiFi 内部网相互通信。

Adafruit 现在(2021 年)销售“LTC4311 I2C 扩展器/有源终结器”。它的工作原理是监控 SCL 和 SDA 线路,然后在正转换期间注入电流,以帮助克服电容线路负载并锐化波形。我自己还没有实现,但描述说他们已经能够在 100m 的 Cat5 电缆上读取 100kHz 的传感器数据,在几米处读取 400kHz 的传感器数据。

https://www.adafruit.com/product/4756

您只需要靠近总线前端的其中一个,无需修改其他接线。与其他选项(如 RS-485 或 SparkFun 提供的基于 PCA9615 的扩展器)相比,这似乎是一种更简单、更便宜的现成解决方案。

扩展器:NXP PCA9617A既可用作电平转换器又可用作扩展器,并支持 Fast-mode Plus (1Mbps)。

隔离器:ISO1540ISO1640ADuM1250

我认为您在使用 NXP P82B96 之类的产品时走在了正确的轨道上。如果您查看图 14 和相关文本,数据表讨论了使用最长 250 m 的电缆长度和超过 100 kHz 的数据速率。

有许多可用的 I2C 温度传感器可以为您提供几摄氏度的精度,无需校准,也无需任何附加的模拟电路。由于您无论如何都要将数据带回进行处理,因此过滤掉噪声将非常容易。

如果您担心接线电容,最好使用非屏蔽双绞线而不是屏蔽电缆。