我可以在2m电缆上使用I2C吗?


24

在我当前的项目中,我需要通过I2C在微控制器和一些传感器之间进行通信。其中之一是温度传感器,需要将其放置在距离微控制器约2米的位置。我无法选择其他协议(传感器在具有给定连接器/引脚/协议的模块上)。

您认为可以在这种配置下进行通讯吗?我应该查询哪些信息以确保它不可能或不可能?你有什么建议吗?

这是我第一次与PCB外部的IC通信。


5
请添加更多信息。i2c速度是多少?上拉电阻?用过的电缆及其电容?什么是主机MCU,什么是传感器?但是总的来说,I2C通过HDMI之类的电缆可以工作数米,因此在正确完成工作后它应该可以工作。
Justme


6
“我不能选择其他协议”您可以在传感器附近放置另一个微控制器,读取数据并以您喜欢的任何协议发送它们。
FooBar

1
您是否有最低速度(千位/秒)?
桅杆

2
如果您降低时钟速度,则可以走很长一段距离。
Copper.hat

Answers:


36

I2C并非设计用于长距离使用,但我知道有几种应用实际上在大约2米的距离内使用。我也知道一个案例,他们对此有疑问,最终我通过修复接地回路来解决了。

为了确保它能正常工作,您应该使用I2C总线扩展器,例如P82B715。

但是,PB2B715数据表在第8.2节中指出以下内容:

对于用于电话或以太网(Cat5e)布线的典型双绞线或扁平电缆,其电容约为50 pF至70 pF /米,因此,理论上该电缆的最长可达50 m。根据实际经验,已证明30 m的电缆长度很安全,可以用这种简单的方式进行驱动,最高可达100 kHz,并显示了数值。更长的距离和更高的速度是可能的,但需要更仔细的设计。

因此,专家们(NXP是I2C的发明者,前飞利浦)说,已证明30米是可行的距离。我的经验是2米是可行的距离,据我报告的经验表明,没有任何扩展器的I2C总线负载也可能更大。

长距离工作I2C总线的关键点是:

  • 使用低电容电缆(双绞线/以太网);
  • 限制公交车速度;
  • 引体向上尺寸正确。

上拉计算

德州仪器(TI)具有关于上拉计算的出色应用笔记(SLVA689)

  • 上拉电阻的下限(最小值)由总线上最弱的外围设备可上拉的电流以及任何外围设备代表的最大电压确定。因此,如果1V仍为0,则您的VCC最高为3V6,而最弱的设备只能拉20mA,则电阻取决于电阻器上的电压损耗和该设备拉出的电流:(3.6 V1 V) / 20 mA=130 Ω
  • Rmax=tr/(0.8473Cb)trCbCbtrRmax=2950 Ω。TI的应用笔记中包含图表,以便您可以快速找到合适的值。
  • 当然,上拉的值是并行组合的所有上拉的等效值。您可能在主机端,从机端以及总线上的任何其他从机/主机上具有上拉电阻。
  • 您越“处于极限”,您就越需要考虑“寄生”因素,例如电缆中的压降。

引体向上尺寸正确吗?如何确定值和额定功率?
Quantum0xE7

正如Nick B在另一个答案中所评论的那样,请警惕总线扩展器芯片或任何其他将温度传感器加热几度的可能性。
Peter Cordes

14

通常,您会受到最大总线电容400 pF的限制。

如果将频率降低到1 kHz左右,并在传感器旁边提供电源去耦,则应该可以正常工作。

如果您需要更坚固的产品,则可以在两端使用差分I2C转换器,例如PCA9615


我隐约记得有些传感器具有最低的I2C频率(不确定原因)。
迈克尔

14

可以,但是不建议这样做。

不同用途的巴士

I2C和SPI一样,是为在一个板或一组板中通信而设计的(请考虑Raspberry Pi及其帽子或arduino及其屏蔽)。它可以在更长的距离上工作(请参阅其他答案),但不应在那种情况下使用它,原因仅在于它不是设计,优化和合格的产品。

您面临的风险是,将来可能无法添加更多传感器,或者系统将无法在所有地方运行,或者在某些情况下会发生故障。

您应该寻找的是现场总线,例如1-wire,CAN,RS-485,以太网等。

诸如蓝牙或Zigbee之类的无线系统也可以选择。


9

如@filo所示,I2C 通常受总线电容限制。但是,有一些方法可以解决此问题:

  1. 使用总线扩展器。在您的情况下,P82B96PCA9600都是不错的选择。
  2. 如果需要更高的速度或更长的电缆,可以使用PCA9600之类的差分I2C收发器。但是,这会使您的电路复杂得多,并且电缆两端都需要一个IC。

有关更多信息,请查看恩智浦的AN10658AN11084


1
正如其他几个人所说的,这可以与总线扩展器一起工作。需要立即注意的一点是,如果传感器和总线扩展器靠在一起,则传感器端的总线扩展器可以散发足够的热量,从而将温度传感器的读数提高几度。
尼克B

4

我喜欢filo和Caleb的答案。

另一种选择是在单个传感器上使用一个或多个DS28E17 1-Wire至I2C主桥,并以Onewire的形式连接总线。这对于大于100m的总线非常有用,非常适合于分布式温度和电池管理等低通量传感器阵列应用。


有趣的想法是,如果主机不具有1-Wire接口,则可能会带来额外的软件开销。
Caleb Reister

如果您拥有Linux主机,则通常是一个选择,因为它具有用于该特技的完整驱动程序堆栈。在Raspberry Pi上,您只需通过100m的导线(当然要加上GND)将GPIO4连接到DS28E17的1W输入,然后编辑config.txt就可以了。它是完全透明的,看起来像本地的I²C。慢一点。
Janka

谢谢。1-Wire能够实现这样的距离让我感到非常惊讶。我认为这是有道理的,因为电阻较小。
domen

Onewire不依赖于上升沿时序,而是相对于下降沿来完成所有位时序,下降沿由主动驱动。这就是为什么它不易受到高电容负载的影响。几个nF可以。
Janka
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.