通过 Cat5 电缆可靠地发送 I2C

电器工程 i2c 树莓派 电缆
2022-01-28 18:50:34

我正在考虑在我的 Raspberry Pi 周围实施一个家庭自动化系统,但我发现在每个地方插入一个 Pi 的价格和空间要求都需要一些控制,但该设计所需的 Cat5e 电缆已经在装修期间安装。我周围有一些 PCF8574、PCF8591 和 SSR,是否可以使用 Cat5e 电缆驱动它们?

我所有的 Cat5e 电缆都已与 TIA/EIA 568B 引脚连接。它们是我的结构布线的一部分,没有屏蔽,因此需要更高的线路电压。我正在考虑使用此引脚通过电缆发送电源和 I2C 线路:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND

电源引脚排列与 100BASE-TX PoE 布线相同,因此额定功率也相同,并且在需要 Cat5e 的 1000BASE-T 中使用双向差分信号。

原始 I2C SCL 和 SDA 线在 TTL 电平上导出为两个双向差分对(开漏不保留在电线上,而是在我正在设计的线路终端/电平转换设备中恢复)

对此有什么建议吗?另外,我应该使用哪个芯片将 I2C 线路转换为差分信号?请向我推荐带有 DIP 通孔选项的芯片。我不知道如何处理 SMT 的东西。

编辑

我找到了这个芯片,SN65LBC180,是不是一个不错的选择?如何将其连接到双向单元?如何转换电平(它是一个需要 TTL 电平但 Pi 驱动在 3.3v CMOS 电平的 BiCMOS 部件)并使其与开漏兼容?

编辑 2

评论者建议 RS-485 对我来说似乎可以接受,但仍然要求两个差分对是双向的,并且只有两个双向差分对。我正在重新利用现有的以太网电缆。

编辑 3

由于有人提出,我不能使用 CAN。我无法在不牺牲任何东西的情况下将 CAN 安装到 RPi 上(SPI 被触摸屏占用,因此没有 SPI 到 CAN 转换器)

我知道 I2C PHY 的局限性,所以我实际上是在尝试将 1000BASE-T PHY 安装到它上——用于 SCL 和 SDA 信号的双向差分信号,但最重要的是运行 I2C 协议。

编辑 4

我找到了一个新芯片:NXP P82B96,它将 I2C 分成 4 条单向线,这些线又可以通过光隔离(仅限 Pi 端)馈入 SN65LBC180,形成 8 针长距离就绪信号。现在我只需要弄清楚如何通过电线获得电力,或者如何确定总线是否正在发送并使线对双向。

编辑 5

从答案的建议来看,我想我需要稍微改变一下电源引脚:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V

I2C 差分信号电压为 TTL。第 3 对上的 +5V 来自 Pi,未缓冲但已融合。第 4 对上的 +12V 可能不存在,仅用于驱动一些大功率设备。如果需要,设备可以使用自己的电源并让两个导轨悬空连接或提供自己的更高电压但使用 5V 导轨。

从头开始

Pinout 仍然是我的原始设计,兼容 802.1af。

4个回答

尝试使用 IIC 是一个坏主意。IIC 真正用于单板上芯片之间的通信。由于将线路拉低所需的最大电流是有限的,因此线路的阻抗相对较高(几 kΩ)。这意味着它们可以很容易地拾取噪音,当在墙壁中的非屏蔽电缆中运行时,这可能是一个严重的问题,可能就在交流电源线的旁边。

我会为此使用CAN。CAN 使用单根双绞线,任何一点都只有 60 Ω,信号是差分的。这意味着接收器可以消除由于电容耦合而拾取的大部分不可避免的共模噪声。以 500 kbits/s 运行的 CAN 可以覆盖普通房屋大小的东西。

如今,许多微控制器都内置了 CAN。您通常需要一个单独的物理收发器芯片(如常见的 MCP2551),但协议的最低几层是在 CAN 外围设备的硅中实现的。固件在发送和接收完整数据包级别与 CAN 总线交互。冲突检测和重试、校验和生成、总线数据包信令的详细信息、接收到的校验和验证以及时钟漂移调整都为您处理。

不要迷恋 RS-485。那是过去时代的遗物。它也像CAN一样使用单个差分信号,因此也具有良好的抗噪性。然而,人们通常会喜欢 RS-485,因为它看起来“更简单”。这只是因为他们不看整个系统。首先,它在电气上的复杂性并没有降低。您仍然需要某种收发器来驱动和接收差分信号。无论您将 RS-485 收发器连接到微控制器的 UART,还是将 MCP2551 连接到 CAN 外设,在成本和硬件复杂性方面都几乎无关紧要。最大的不同是 RS-485 让您处于原始字节级别(通过 UART)。这意味着要实现任何有意义且健壮的系统,您必须发明自己的协议来处理碰撞检测,决定如何处理重试、打包、校验和生成和检查、流量控制等。您可以使用单一的主架构,但要正确地获取细节比人们认为没有仔细分析所有这些架构要复杂得多。使用 CAN,您只需发送和接收数据包,硬件负责处理细节。

I2C 不是要走的路。CAN trancievers 每个成本 1 美元,您可以将它们用作 uart trancieves 并编写自己的协议,因此您不需要与 can 兼容的 micro,也不想使用完整的 can 堆栈。

当我看到 cat5 导体并联运行以获得更大电流时,我总是感到有点不舒服。这让我很烦恼,因为如果一个导体断路,另一个导体将承载整个系统电流。cat5 当前评级非常保守,因此发生火灾的几率相当低,但我只是不喜欢这种可能性。

安全的方法是在两个电源轨上都有一个多熔断器,并在电源处连接接地,并将每个设备连接到一个且只有一组电源/接地。这样,如果一根线出现故障,使用该线的设备就会失去电源,而不是一根线被迫承载两根线的功率。

出于 EMI 的原因,很多人喜欢将电源和接地都放在双绞线中,而不是使用一对电源对和一对接地对。如果您有两个电源/接地对,则电源线将更靠近地面,并且场将抵消,从而减少从电源线传输或接收的任何无线电波。不必要的,但如果有很多电子噪音嗡嗡作响,那就太好了。

在我看来,12V 对于配电来说太低了,而 24V 仍然相当安全且效率更高。

如果自动化只是简单地打开和关闭房子,我会通过以下方式简化它:

  • 将所有“大脑”集中在一处。如果需要,请使用 I2C I/O 扩展器,但将它们全部与树莓派一起使用。您还需要适当的硬件来确保您不会试图从 pi 的 GPIO 引脚获得太多电流。
  • 使用以太网电缆简单地驱动继电器。您可以构建自己的电路板,或获得可安装在电气盒中的面板安装 120/240V 固态继电器。Cat5 以太网电缆中的电线可以在 320mA 下处理高达 50V 的电压,这足以驱动继电器。事实上,您可以用一根电缆(加上一根接地线)驱动 7 个继电器。或者留一根电线用于不带开关的 12V 输出,这样您也可以安装手动开关。如果它们真的很长,您可能必须考虑电压降,但您可以获得在 3-32V 切换的继电器。12V应该绰绰有余,即使有电压降。
  • 您还需要咨询当地的建筑规范,以获取有关在同一个盒子中混合高压和低压电缆的建议。
  • 简单的开关也可以通过以太网电缆完成,每根电缆最多 7 个,并且只需连接到 pi 的输入。对于非常长的电缆,电压降可能是一个问题。
  • 您可能还想使用光隔离器来保护 pi 免受损坏。
  • 对于需要继电器以外的少数设备(如控制面板),请将以太网电缆用作实际的以太网。如果这些设备不多,这不应该是一笔巨大的开支。它们可以是另一个 pi,也可以是带有以太网的微控制器。

示意图

模拟此电路- 使用CircuitLab创建的原理图

尤里卡!弄清楚了!(未测试,本周末测试)

接口芯片为NXP P82B96 I2C缓冲/分离器和2个TI SN65HVD251P CAN总线接口芯片。本质上,我在 CAN PHY 上运行 I2C。

P82B96 了解 I2C 协议并为我处理总线仲裁,并为我提供了可以连接在一起的单独的 Tx 和 Rx 引脚。我将它们输入 SN65HVD251P CAN 收发器,它为我提供了双向差分对以通过电线发送。

电源引脚直接来自我的 Pi 的 5V 电源轨,不受缓冲。(暂时不用12V信号电压和电源)