通过Cat5电缆可靠地发送I2C


8

我正在考虑在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是一个不错的选择吗?如何将其连接到双向单元?如何转换电平(这是BiCMOS部件,需要TTL电平,但Pi驱动在3.3v CMOS电平)并使之与漏极开路兼容?

编辑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电源轨。

刮擦

引脚排列仍然是我的原始设计,它与802.1af兼容。


4
为什么不使用RS-485?这是工业可靠的标准。
卡米尔2014年

Pi没有RS485,我希望接口电路尽可能简单。我还需要PCF8574,根据我的实验,它可以在5V电源电压下可靠地驱动SSR。
Maxthon Chan

虽然RS-485本身是双向的,但在单端侧却不是双向的。
Ignacio Vazquez-Abrams 2014年

5
如果您对原先打算的工作一无所知,那为什么还要来这里问一下呢?
马特·杨

2
@maxthonchan Cat5以太网线可以安全地在50V电压下处理360ma(en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits)。您可以轻松获得在输入​​侧在3-32V电压下汲取<10ma的固态继电器,因此完全符合安全规格。
2014年

Answers:


18

尝试与IIC相关联是一个坏主意。IIC实际上是用于单板上芯片之间的通信。由于拉低一条线所需的最大电流是有限的,因此这些线的阻抗相对较高(几kΩ)。这意味着它们很容易拾取噪声,当在墙壁上的非屏蔽电缆(可能紧邻交流电源线)中布线时,这是一个严重的问题。

我会为此使用CAN。CAN在任何一点都使用仅60Ω的单双绞线,信号是差分的。这意味着由于电容性耦合而被拾取的大多数不可避免的共模噪声可以被接收机消除。以500 kbit / s的速度运行的CAN可以覆盖普通房屋的大小。

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

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


我没有在RPi中内置CAN,没有CAN接口,我负担不起,也无法将它们安装到现有的外壳中。所以,不能。我正在IIC与差动信号之间来回转换,以避免串扰和电阻的陷阱。转换和IIC设备共享一个板。
Maxthon Chan

@Max:具有CAN的微控制器将比RPi更便宜,更小,功耗更低。如果这些节点主要是传感器之类的东西,那么RPi肯定是多余的。
Olin Lathrop 2014年

uC没有足够的计算能力来运行系统的另一端。尽管我在系统上确实有一个用于紧急情况覆盖的触摸屏,但所有命令都通过HTTP通过家庭网络通过HTTP发送到Pi(具有相当不错的AJAX驱动的UI),并且Pi处理所有身份验证和其他操作。
Maxthon Chan

3
@MaxthonChan您可以得到便宜的控制器IC,可以将CAN转换为SPI和/或I2C以与RasPI接口。Microchip的示例
彼得

如果这是您的建议,请告诉我如何驾驶我的SSR?目前,我有一个带有差分接口芯片的接收板,7805和PCF8574,它最多可驱动8个SSR。(通常我只有两个或三个)
Maxthon Chan

7

I2C不是要走的路。CAN trancievers每个花费一美元,您可以将它们用作uart trancieves并编写自己的协议,因此您不需要与can兼容的微型计算机,也不想使用完整的can堆栈。

当我看到Cat5导体平行运行以产生更大的电流时,我总是感到有些不舒服。令我烦恼的是,如果一根导体断裂而另一根导体将承载全部系统电流。CAT5的当前额定值非常保守,因此发生火灾的几率非常低,但我只是不喜欢这种可能性。

安全的方法是在两个电源轨上都有一个保险丝,并在电源处接地,然后将每台设备连接到一个电源组(仅接地)。这样一来,如果一根导线发生故障,则使用该线的设备会掉电,而不是被迫承载两根线的电力。

许多人出于电磁干扰的原因,喜欢将电源和地线都放在双绞线中,而不是只有一个电源对和一个地线对。如果您有两个电源/地线对,则电源线将更靠近地面,并且磁场将抵消,从而减少了电源线中任何已发射或已接收到的无线电波。不必要,但如果有很多电子噪音嗡嗡作响,则很好。

我认为12V对于功率分配来说太低了,而24v仍然相当安全并且效率更高。


我的解决方案基于此。我使用NXP分离器芯片将I2C总线分离为一对Tx / Rx(SDA和SCL),并使用CAN接口芯片将它们复用为UART。这给了我两条带有I2C SDA和SCL线的双绞线,它们连接到Cat5e TIA / EIA568B的引脚1/2和3/6。
Maxthon Chan

那也应该起作用,唯一的问题是您需要NXP芯片,两个可以传输的芯片以及实际的i2c I / O芯片。多数民众赞成在每块板上五个芯片,最后我检查了NXP芯片是否比atmega328贵,但这可能已经改变了。它可以工作,并且因为它是i2c,所以编程将很简单,但是在CAN上使用UART会便宜一些。
EternityForest14年

Pi侧接口板具有7个芯片-NXP I2C缓冲器/分离器,两个CAN PHY和四个光电隔离器。设备侧是一个4芯片模块-NXP I2C缓冲器/分离器,两个CAN PHY和PCF8574 / 8591。
Maxthon Chan

我发现了一个4通道光耦合器,它将把Pi侧电路简化为4芯片模块。
Maxthon Chan

重新考虑电源引脚后,我坚持使用电源对和接地对进行原始设计。尽管我将信号引脚重新定义为SCL和SDA,但这与802.3af兼容。
Maxthon Chan

3

如果自动化只是打开和关闭房屋周围的事物,我可以通过以下方法简化此过程:

  • 将所有“大脑”都放在一个地方。如果需要,请使用I2C I / O扩展器,但请将其全部与树莓派一起使用。您还需要适当的硬件,以确保您不会尝试从pi的GPIO引脚获取过多电流。
  • 使用以太网电缆可以简单地驱动继电器。您可以构建自己的电路板,也可以将面板安装的120 / 240V固态继电器安装在配电箱中。Cat5以太网电缆中的电线每根可承受高达50V的电压(320mA),足以驱动继电器。实际上,您可以用一根电缆(加上一根接地线)驱动7个继电器。或将一根电线留给12V的非开关输出,因此您也可以安装手动开关。如果它们确实是长期运行的,则可能必须考虑电压降,但是可以获得可以在3-32V时切换的继电器。即使有压降,12V也应该足够。
  • 您还需要参考当地的建筑法规,以获得有关在同一盒子中混合高压电缆和低压电缆的建议。
  • 还可以通过以太网电缆进行简单的切换,每根电缆最多可以切换7条,并且只需将其连接到pi的输入即可。对于非常长的电缆,电压降可能是一个问题。
  • 您可能还需要使用光隔离器来保护pi免受损坏。
  • 对于少数需要更多继电器的设备(例如控制面板),请使用以太网电缆作为实际的以太网。如果没有很多这样的设备,这不应该是一个大笔费用。它们可以是另一个pi,也可以是带有以太网的微控制器。

我不确定最终用户的需求是什么。她情绪低落,很快就改变了主意。我将必须能够足够快地做出回应。这就是为什么在网络上使用某种基本协议(此处为I2C)的原因。
Maxthon Chan

2

原理图

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

EUREKA!弄清楚了!(未经测试,将在本周末进行测试)

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

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

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


对不起,不行。您要做的是将两个 I2C单元彼此相隔一定距离。它不会让你连接超过2
WhatRoughBeast

@WhatRoughBeast我查看了恩智浦文档,它说这是一个可行的解决方案(以某种方式进入了他们的AN),但对我来说,点对点是可以的,因为我的设计本身正在寻求一个解决方案每个Cat5e细分对的一对转换单元。
Maxthon Chan

就像i2c一样,CAN是有线或双向的。我没有理由不应该在总线上使用尽可能多的设备。我看过他提到的应用程序。它似乎在描述总线,而不是点对点。
EternityForest 2014年

@WhatRoughBeast-CAN是多点传输,我对OP的操作并不太仔细,但是从理论上讲应该是可行的。
康纳·沃尔夫

1

不管IIC在芯片级别上的优点如何,您提出的实现都将非常困难。问题是总线仲裁。尽管可以使用例如RS485将多个单元并联,但最大的问题是:

任何单元如何知道它是否可以控制总线以发送数据?

在IIC中,漏极开路信号线很容易进行双向传输-但是对于三态总线,您需要某种方式来确保一次只有一个单元尝试驱动总线。这将是棘手的。您可以执行此操作,特别是如果您建立一个主机,并且要求所有从机对发送数据都具有严格的时序约束,并且仅在主机要求时才发送数据,但这在设计主机时需要您付出大量的精力。主机和从机的接口板。

至于物理驱动器/接收器,RS485可以满足您的需求,并且有很多可用的接口芯片。只是谷歌。


1

我不知道您是否对预制解决方案感兴趣,而不是构建自己的电路,但我想指出一点,Pololu出售由SJTbits制造的这些I²C长距离差分扩展器板,这似乎做得很准确您正在寻找什么。(完全公开:我为Pololu工作。)

即使您不想直接使用它,也许看看它使用的电路也会为您提供一些想法。您可以在数据表中看到原理图;它使用NXP PCA9600D缓冲器,TI AM26LS31CDR差分线路驱动器和TI AM26LS32ACDR差分线路接收器。


这对我不起作用。我需要通过电线发送总线信号和电源。
Maxthon Chan

1

我知道这有点陈旧,解决方案似乎已在答复中的某处解决,但我有此建议。我现在正在寻找像NXP的PCA9614 / 5/6这样的设备,作为更健壮的长距离I2C总线(PCA9614 2通道多点快速模式加差分I2C总线缓冲器)的解决方案。从本质上讲,它确实已经变成了真正的I2C以外的东西,但是在总线的末端,设备看不到它。这个特定的系列将信号转换为2个双向差分对,并且还有与注释中已经提到的类似的设备,它们转换为4个单向差分对。只需转换为2对,您就可以使用CAT电缆,但仍然有2对用于电源/接地。


0

竖起大拇指!我目前正在尝试解决几乎相同的问题。我还尝试通过自定义引出线在Cat5上使用I2C进行家庭自动化。原因是成本,我希望它具有很高的成本效益,而且I2C组件的价格至少还要比attiny13 uC便宜5倍以上(CAN和RS485需要AFAIU uC)。

1)目前,我只是在系统第一部分的试用过程中,现在我成功使用了15m长,5V电缆和直接SCL&SDA连接的电缆!我使用PCF8574和2个继电器触发我的房间照明灯。引脚排列为

1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8

2)我确实知道,它将不会再提供几个继电器或额外的10米...压降很大(从5.5到4.7)。因此,对于电压降问题,我将改为在一条线上放置12V电压,并在板上添加5V稳压器,以在任何地方都保持良好的电压,而与整个线降无关。无论如何,我将在以后的生产线中放置其他电源。

3)使用P82B96或便宜的P82B715可以改善信号本身,而无需拆分为差分线。恩智浦本身在某些演示中使用Cat5,但我找不到它们的引脚。这里重要的一点是,它们显然使用不同对的信号线...例如,一对是GND + SDA,另一对是VCC + SCL。

4)另一个有趣的地方-该缓冲器可以简单地将幅度提高到12V,以提高抗噪声能力。因此,我可能还会尝试在信号线上施加12V电压,这应该允许直接从12V导线上拉一个上拉...但这将迫使我在每个设备上都放置P82B96之类的东西。

您可能会注意到,我也使用单独的中断线... Master目前在连接到PC的arduino板上。无论如何,主要的主软件都将安装在24x7的PC上,因此arduino只是转换信号并处理中断。我可以发送用于板载中断处理的特定配置,例如通过中断来处理便捷的开关切换...这使我无需手动切换灯光就可以避免任何延迟。中断处理是i2c的另一个优势。

因此,我的想法是I2C非常简单,可以应用于<= 100m的城市公寓布线。我希望我不去差分信号,而是可以减少额外的频率。

我喜欢您的想法同时采用5V和12V,因为这样可以减少对稳压器的需求并降低成本...多线总线的整个想法可以降低端点的成本,我还将在新的引脚分配方面考虑这一点:)


1
这更多的是对问题的扩展评论,而不是答案,因为您的情况与OP的情况不同:不同的主控硬件,不同的信令方案。但是它是如此紧密相关,以至于我要坚持下去。
Dave Tweed 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.