I2C信号和远程电源(10米电缆)


9

经过一番阅读/测试后,我设法使用I2C和FTP CAT5铜双绞线电缆在2个设备之间进行稳定的通信。

  • 绿线-SCL
  • 白/绿线-GND
  • 蓝线-SDA
  • 白/蓝线-GND

GND仅在一根电缆端连接,I2C总线时钟为10Khz,并且我已将10Kom上拉电阻器连接到VCC

它运作良好且稳定。当我决定使用另外两对电缆供电(+ 12V)时,它停止工作。我在另一对上的一对GND上测试了+ 12V,也在同一对上测试了+ 12V / GND:相同的结果,它停止工作。整个I2C总线停止工作,其他设备也停止工作。

不知道我可以使用同一根电缆还是选择最安全的电缆-另一根电缆供电。


3
您检查接收侧的电源是否足够好?无毛刺,无下垂... CAT5电缆非常细,这就是PoE使用> 40 V供电的原因。
弗拉基米尔·克拉韦罗(Fladimir Cravero)

4
这是您需要示波器的地方。其他所有内容(受过教育)都是猜测。

1
我不会用SGND扭曲SDA或SCL,因为您不希望它们之间有任何电容。我会在GND上加+ 12V,因为您确实希望它们之间具有电容。+ 12V有什么(返回)电流?(您可能会反弹)
豪斯曼

5
GND仅连接到一根电缆端?除非我有误会,否则听起来不对。
mkeith

1
您是指UTP电缆吗?我确信它不仅可以用于FTP,还可以用于更多协议;)
Andrew Morton

Answers:


15

如果以前使用过的也许就算过高了,但是一种选择是使用I2C到差分转换器,例如PCA9615LTC4331等。如果使电阻变小不起作用,或者需要延长电缆,请考虑不直接使用I2C。

不仅可以扩大范围,而且还具有更好的抗噪能力。

在此处输入图片说明 在此处输入图片说明


1
很好的答案,这正是应该做的,但是对于OP来说,这当然是一个根本性的改变。
Jack Creasey

我的意思是,它们非常容易实现(如果与移动到RS-485,CAN等相比),但是可以,与更换某些电阻器相比,这是一个根本性的改变。
Wesley Lee,

1
@JackCreasey OP的问题不仅在于电缆电容,它们似乎还受到12V线路上噪声的影响。降低上拉电阻可提供一些额外的抗扰性,但它们无法无限期地不断降低该电阻。
德米特里·格里戈列耶夫

@DmitryGrigoryev由于OP没有提供任何详细信息,所以我不确定您如何建议正在注入噪声。我同意您不能只继续降低端接/上拉....但是OP太大了10:1。
Jack Creasey

9

正如我在评论中指出的那样,没有示波器走线就很难调试,但是从您的问题中脱颖而出的第一件事是10 kOhm上拉电阻。尽管I2C在许多情况下可以轻松实现,但对I2C而言,这是异常高的。

我会尝试先将它们降低到1 kOhm,看看是否会影响任何东西。如果有帮助,您可以逐步提高它们,尽管这样做会影响您的上升时间。


10千Ω但是,对于10 kHz的I2C总线来说,那不是很大吗?(或者应该是100 kHz OP?)
豪斯曼(Huisman

@Huisman两个要点。在普通PCB上以10 kHz的频率运行时,10 kOhm不会让我担心,但在电缆上可能还不够。我想10 kHz是不寻常的,但并非疯狂。

7
对于任何距离的I2C而言,10k欧姆都是巨大的。这是OP的主要问题。
Jack Creasey

1
我认为最好分流电阻,并在每一端使用一个。2个上拉电阻@4.7kΩ,每端一个,比单个2.2kΩ上拉电阻更好。
12431234123412341234123

我将尝试降低电阻器,这是在所有评论之后对我有意义的。
user3503519 '19

5

您绝对需要远距离放置上拉电阻,10m距离很长,而10k Ohm很高。

上拉电阻的值与三件事有关:

  1. 电缆电容
  2. 瞄准电压和Rx电平感应。
  3. 速度

尝试使用任何可用的计算器,并开始你的阅读在这里与上拉值或TI应用手册这里与NXP I2C标准(7.1)。

就您所遇到的问题而言,很明显,将电缆中的附加线对(12V,Gnd)接地会改变I2C信号线的电容。


2
我同意,可以假定CAT5电缆每米大约50pF,因此10米超出了I2C规范的400pF电容限值。通过使用电阻器指定的3mA上拉电流,使用400pF电容无法达到400kHz I2C时钟。幸运的是,降低速度会有所帮助-除非设备具有最低时钟速度限制。我们不知道这些设备是什么,I2C总线电压是多少,但实际上应该调整上拉电阻以提供至少3mA的电流,如果设备允许并同意总线低电平电压,则更多。
Justme

是的,我要对此进行测试,但是我的问题是,如果没有电缆供电,为什么它可以工作?
user3503519 '19

当电缆接地时,浮动电缆对与信号对的电容不相同。对于您的配置,+ 12和Gnd本质上是相同的…。它们在信号电缆上的电容会影响您的上升时间。。
Jack Creasey

2

一些注意事项:

获得正确的上拉值至关重要,特别是对于SDA。不同的设备可以吸收不同量的电流。我已经看到在切换到较小的传感器芯片后,由于上拉电阻太小,这些设置会在数据中产生额外的1。较小的几何形状意味着它无法将总线拉低至零。

速度杀人。长距离电缆实际上是低通LRC滤波器。对于许多I2C应用程序,您可以降低时钟速度,而不会丢失任何内容。较慢的时钟可以补偿弱上拉和大电容(但不能补偿过强的上拉)。

较长的电缆走线是EMI的诱因。我见过一个I2C实现,需要铁氧体钳位来通过抗扰度测试。端接,屏蔽电缆或滤波器可以提供帮助。

当心并联电阻。如果您在主机上有一个1k的上拉电阻,然后在总线上的四个客户端设备中的每一个上都有一个1k的电阻,那么您的净上拉电阻为200 Ohm。不上班


0

Sparkfun I2C接口板是一个很好的解决方案,它的特点:

PCA9615 buffer
I2C Supply voltage range 2.3-5.5V
Differential Supply voltage range 3-5.5V
draws 16µA of current
Extends I2C bus up to 100 feet
Data rate up to 400kHz
2x Qwiic Connectors

在此处输入图片说明


-1

第一:我要感谢社区发布答案。
第二:我已经找到了基于这些答案的解决方案,这是我所做的:

经测试将上拉电阻降低至4.7K和2K。在2K上,我开始不时收到响应,因此我降低到1K,然后开始接收响应,但是每个响应中都缺少部分数据。之后,将SDA引脚上的上拉电阻开关为10K,一切开始稳定运行。
因此,在我的情况下,解决方案是SCL上的1K上拉和SDA上的10K。

感谢您的时间。


1
不过那太疯狂了。您在这里使用哪种硬件?也许配置错误。

1
一方面是带有micropython的ESP32,另一方面是由arduino IDE编程的atmega8。我最终不认为这是安全的通信,所以我将切换到串行(RS232),因为我测试了它在这些范围内的正常工作
user3503519

1
如果我是您,我还将介绍一下RS-485,它会更强大,更简单。缺点是它需要更多的信号线,但是您的CAT5中已经有很多信号线。

1
好吧,我不知道如何在没有附加转换器和硬件的情况下直接在atmega处理器或ESP 32上直接实现RS-485,因此RS-232是这里的最佳选择。只能使用一个TTL电平转换器。
user3503519
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.