您可以连接多少个设备到I2C总线?

2021-04-13 20:50:55

如果您在Arduino用户,电子爱好者和同伴工程师的任何讨论论坛上发布了这个问题,您将获得这样的答案:

·"你有一个7位的地址。这意味着您可以解决高达127个奴隶。"

·"连接到总线的设备数量仅限于400 pf的总允许总线电容。"

好吧,谢谢互联网!我感到更聪明的'但是,严重,我可以使用I2C总线连接到我的Arduino的有多少传感器?

最后的答案是,尽管是最令人恼火的,但可以说是最正确的答案,但只有因为这个问题如此模糊!所以,让'试图改写这个问题。当你说"传感器",你是否意味着传感器安装在突破板上?是的?现在有一个巨大的差异!那么,现在的问题变得了:你可以在I2C总线上连接多少突发板?

这是问题更容易解决,我抱歉说,答案是低于127的答案。

是的,我们正在快速看看I2C总线的基础知识。但我们不需要挖掘太深而无法回答我们的问题。

假装让&#39假装这令人恐惧的线条是一个有四个引脚的设备。除VCC引脚提供电源和GND引脚的VCC引脚外,您还拥有SDA或串行数据引脚和SCL或串行时钟引脚。

也许你注意到,SDA和SCL引脚都通过设备内的开关连接到地面。当然,这是一个非常简单的表示。当您使用I2C总线互相连接两个设备时,只需将VCC引脚从一个设备连接到来自其他设备的VCC引脚,并对SDA,SCL和GND引脚执行相同。好吧,看看漂亮的照片!

其中一个设备将呈现主机的角色。这意味着它将负责在SCL行上生成时钟信号,并使用SDA线将命令发送到从站。另一方面,从站使用SDA线将数据发送回主。在大多数情况下,Arduino将成为主人,而任何由Arduino控制的设备,如传感器,就像一个奴隶一样。

但我们'还没有完成!对于I2C总线工作,我们需要在VCC线和SDA线之间连接一个电阻,以及VCC线和SCL线之间的另一个电阻。这些称为上拉电阻。

如果我们有多个从属,那么它是如何看起来的,即多于一个传感器连接到Arduino?嗯,在这种情况下,您仍然可以将一个电阻与SDA线路和另一个用于SCL线的电阻。它并不是,如果您只有一个传感器或50个传感器连接到您的Arduino,则在SCL线上只需要一个电阻和SDA线上的一个电阻。

但为什么这么做?为什么我们根本需要任何电阻?我为什么要关心?好吧,正如您现在可能怀疑的那样,通过上拉电阻导致多次分子板引起的多个断路板引起的主要问题之一是由上拉电阻引起的。

要了解这一点,请注意,例如,如何在SCL线上生成数字信号。 SDA线路以同样的方式工作,但为了清楚起见,我只是在这里显示SCL线。

在该电路中,VCC线上的电压为5V(或3.3V,根据电源),GND线路上的电压为0V,SCL线上的电压,产生的实际信号取决于位置开关。

如果开关打开,则VCC线路的5V电位也将在SCL线上。在这种情况下,SCL线上的电压将是5V,并且信号将被解释为逻辑高。由于开关打开,因此不会流过设备。

如果开关关闭,则来自GND线的0V也将在SCL线上,并且信号将被解释为逻辑低。现在我们在电阻器上的电位差异,电流将流过开关。

打开和关闭开关产生良好的数字信号,在0V和5V之间变化。

当然,这就是理想的数字信号看起来的样子,但是让' s看真正的信号如何看起来像。如果连接安装在备用板上的单个传感器并使用I2C总线将其连接到您的Arduino,则会有类似的东西:

伟大的,现在拍摄示波器并测量SCL线上的信号。你看到了什么?

如您所见,蓝线,SCL线上的测量信号与理想的数字信号完全不同。最大值是低于5V的位,最小值高于0V,电压需要长时间才能从0V到5V。尽管如此,这就是良好的信号看起来的看起来!

现在假装我们假装我们将不是一个突破板连接到Arduino,而是同时连接多个板。

如前所述,将多个传感器连接在I2C总线上意味着将SCL引脚从所有板连接到彼此。因此,由Arduino生成的SCL信号由所有传感器共享。这同样适用于SDA信号,以及电源(VCC)和地面(GND)。那么,SCL信号现在如何看?

新的SCL信号以红色显示,看起来比以前更像理想的信号。逻辑低电平的电压现在远高于以前,但逻辑高的电压看起来相同,现在电压从低到高电平增加得多。好吧,它和#39不是那么糟糕,对吗?

非常错误!单一原因是逻辑低电平的新电压。要了解这是多么糟糕,让' s回到我们的第一个图表。

在SCL引脚和GND引脚之间,之前的I' ve示出了连接在SCL引脚和GND引脚之间的机械开关。但设备内没有机械开关。相反,通过作为开关操作的晶体管进行连接。

通过打开和关闭晶体管,可以将SCL信号更改为逻辑低且逻辑高。当晶体管关闭时,SCL和GND引脚之间的晶体管上的电阻非常高,因此实际上没有电流流过晶体管,并且因此,通过电阻器流过晶体管。 SCL线上的电压将非常接近5V,因此它将被解释为逻辑高。

当晶体管接通时,晶体管上的电阻变得非常小,但是,它不是零。小电流现在流过电阻,最重要的是,在晶体管上。 SCL线上的电压等于晶体管上的电压降。由于该电压降非常接近0V,因此SCL信号将被解释为逻辑低。

现在是大问题:如果我们减少上拉电阻的电阻会发生什么?当然,电阻器上的电流增加。但相同的电流也流过晶体管!

晶体管穿过较大电流导致在装置内消散的热量,并且过热是半导体器件故障的主要原因。知道这一点,I2C总线规范和用户手册在晶体管上设置了最多3MA。该电流被称为宿电流。

这意味着使用I2C总线指定的设备必须使用穿过晶体管的3mA的宿电流。它还意味着,当尺寸调整上拉电阻时,电路设计人员应考虑到这一限制。

我们如何知道我们的电路中的吸收电流是否高于3MA限制?嗯,增加吸收电流意味着晶体管上的电压降也会增加。晶体管上的电压降,也称为低电平输出电压,是信号处于低电平的电压电平。

I2C总线规格和用户手册还为低电平输出电压设置为0.4V,因为它表示3MA的最大宿电流在晶体管上流动。因此,每当我们测量SDA或SCL信号时,逻辑低的电压高于0.4V,我们都知道宿电流过高!

具有3mA的最大沉降电流和0.4V的最大低电平输出电压,我们可以计算上拉电阻的最小值。我们所要做的就是考虑在规范内运作时最糟糕的情况。每个上拉电阻的最小值等于电阻器上的电压降除了3mA的最大宿电流。

对于5V的电源,每个上拉电阻必须具有至少1.53kΩ,而对于3.3V的电源,每个电阻必须至少为967Ω。

当然,它并不意味着只要吸收电流超过3mA,设备将停止立即工作。但是,在超出其规格之外的设备时,您应该始终要小心,因为它可以导致通信故障,降低其终身时间,甚至永久损坏设备。

现在返回我们的问题:您可以在I2C总线上连接多少突发板?没有很多......你可能已经注意到,每个突破板都有自己的一对上拉电阻。这些电阻器的值因电路板而异,但大多数有10kΩ,4.7kΩ或2.2kΩ。

当我们将多个断路板连接在一起时,我们实际上是将这些电阻彼此平行连接,降低总电阻。即使将两个板连接到2.2kΩ的上拉电阻也会将整体电阻降低到1.1kΩ。对于3.3V的电源仍然可以很好,但VCC为5V的最小值为1.53kΩ。

在最佳情况下,使用具有10kΩ的上拉电阻的电路板,可以将10个板连接在一起,导致总上拉电阻为1kΩ,这对于3.3V的VCC可以很好。然而,对于VCC为5V但是,您可以将6个板连接有6个电阻,每个电阻为10kΩ,导致总电阻为1.67kΩ。

您还可以使用万用表测量SCL或SDA线路上的总电阻。您所要做的就是断开电源的电源,并测量SCL引脚(或SDA引脚)和VCC引脚之间的电阻。

我希望这篇文章可以帮助您了解I2C总线。如果您希望将本教程视为YouTube视频,只需单击下面的链接即可。