2mケーブルでI2Cを使用できますか?


24

現在のプロジェクトでは、I2Cを介してマイクロコントローラーといくつかのセンサー間で通信する必要があります。それらの1つは温度センサーで、マイクロコントローラーから約2メートル離れた場所に配置する必要があります。別のプロトコルを選択できません(センサーは、指定されたコネクタ/ピン/プロトコルを持つモジュール上にあります)。

この構成で通信できると思いますか?可能または不可能を保証するために、どのような情報を調べる必要がありますか?何かアドバイスはありますか?

PCB以外のICと通信するのは初めてです。


5
さらに情報を追加してください。i2c速度とは何ですか?プルアップ抵抗?使用済みケーブルとその静電容量?ホストMCUとは何ですか?センサーとは何ですか?しかし、一般的に、I2CはHDMIなどのケーブルで数メートル動作するため、適切に処理されれば動作するはずです。
Justme


6
「別のプロトコルを選択できません」センサーの近くに2番目のマイクロコントローラーを配置し、データを読み取って任意のプロトコルで送信できます。
FooBar

1
最小速度はkbit / sですか?
マスト

2
クロックを遅くすると、かなり長い距離を移動できます。
copper.hat

回答:


36

I2Cは長距離で使用するようには設計されていませんが、実際に約2メートルの距離で使用されるいくつかのアプリケーションを知っています。彼らがそれに関して問題を抱えていた1つのケースも知っています。

機能することを確認するには、P82B715のようなI2Cバスエクステンダーを使用する必要があります。

ただし、PB2B715データシートには、セクション8.2で次のように記載されています。

テレフォニーまたはイーサネット(Cat5e)配線に使用される典型的なツイストペアケーブルまたはフラットケーブルの場合、その容量は約50 pFから70 pF / mであるため、理論的にはケーブルの長さは最大50 mです。実際の経験から、30 mは、示された値を使用して、最大100 kHzまでのこの単純な方法で駆動される安全なケーブル長を証明しています。より長い距離とより速い速度も可能ですが、より慎重な設計が必要です。

そのため、専門家(NXPはI2Cの発明者である元フィリップス)は、30メートルが実行可能な距離であることが証明されていると言います。私の経験では、2メートルは実行可能な距離であり、私に報告された経験は、エクステンダーのないより重いI2Cバスも可能であることを示しています。

長距離で動作するI2Cバスの重要なポイントは次のとおりです。

  • 低容量ケーブル(ツイストペア/イーサネット)を使用。
  • バス速度の制限。
  • 正しいサイズのプルアップを持つ。

プルアップ計算

Texas Instrumentsには、プルアップ計算に関する優れたアプリケーションノート(SLVA689)があります

  • プルアップの下限(最小値)は、バス上の最も弱い周辺機器がプルできる電流と、周辺機器の0を表す最大電圧によって決まります。したがって、1Vがまだ0の場合、VCCは最大3V6であり、最も弱いデバイスは20mAしかプルできません。抵抗は、抵抗器の電圧損失とそのデバイスによってプルされる電流によって決まります:3.6 V1 V / 20 mA=130 Ω
  • Rmaバツ=tr/0.8473CbtrCbCbtrRmaバツ=2950 Ω。TIのアプリケーションノートにはグラフがあり、適切な値をすばやく見つけることができます。
  • もちろん、プルアップの値は、並列に結合されたすべてのプルアップの同等の値です。マスターエンド、スレーブエンド、およびバス上の他のスレーブ/マスターにプルアップがあります。
  • 「限界」にあるほど、ケーブルの電圧降下などの「寄生」も考慮する必要があります。

正しいサイズのプルアップがありますか?値と電力定格の決定方法は?
Quantum0xE7

以下のようニックBがコメントした別の答えに、バスエクステンダーチップまたは任意の他のカップル度によって温度センサを加熱する可能性を警戒します。
ピーターコーデス

14

通常、最大バス容量は400 pFに制限されます。

周波数を1 kHzなどに下げて、センサーの隣に電源デカップリングを提供すると、正常に機能するはずです。

より堅牢なものが必要な場合は、PCA9615などの両端で差動I2Cコンバーターを使用できます。


最小のI2C周波数を持つセンサーのいくつかをぼんやりと思い出します(理由はわかりません)。
マイケル

14

可能ですが、お勧めしません。

目的に応じた異なるバス

I2CはSPIと同様に、ボードまたはボードのグループ内での通信用に設計されています(Raspberry Piとその帽子またはarduinoとそのシールドを考えてください)。それは長距離にわたって動作する可能性がありますが(他の回答を参照)、そのような場合には使用しないでください。単に設計、最適化、および認定されたものではないからです。

リスクは、将来さらにセンサーを追加できない可能性があること、システムがどこでも機能しないこと、または特定の状況で障害が発生することです。

探しているのは、1-Wire、CAN、RS-485、イーサネットなどのフィールドバスです。

bluetoothやzigbeeのようなワイヤレスシステムもオプションです。


9

@filoで述べたように、I2Cは一般にバス容量によって制限されます。ただし、これを回避する方法があります。

  1. バスエクステンダーを使用します。P82B96またはPCA9600は、両方のあなたのケースでは良い選択肢でしょう。
  2. より高速または非常に長いケーブルが必要な場合は、PCA9600などの差動I2Cトランシーバーを使用できます。ただし、これにより回路がかなり複雑になり、ケーブルの両端にICが必要になります。

見てくださいAN10658AN11084詳細については、NXPからを。


1
他のいくつかの人が言ったように、これはバスエクステンダーで大丈夫です。すぐに気付かないのは、センサーとバスエクステンダーが近接している場合、センサー側のバスエクステンダーが温度センサーの読み取り値を数度上げるのに十分な熱を放散できることです。
ニックB

4

フィロとカレブの答えが好きです。

別のオプションは、1つまたは複数のDS28E17 1-Wire-to-I2Cマスターブリッジを個々のセンサーで使用し、バスをOnewireとして配線することです。これは100mを超えるバス​​に適しており、分散温度およびバッテリー管理などの低スループットセンサーアレイアプリケーションに適しています。


興味深い考えですが、マスタに1-Wireインタフェースがない場合、追加のソフトウェアオーバーヘッドが発生する可能性があります。
カレブレイスター

このスタント用の完全なドライバースタックがあるため、Linuxホストを使用している場合は、ほとんどのオプションです。Raspberry Piでは、GPIO4をそれらの100mのワイヤ(もちろんGNDも含む)を介してDS28E17の1W入力に接続し、config.txtを編集するだけで完了です。完全に透明で、ローカルのI²Cのように見えます。ただ遅い。
ジャンカ

ありがとう。1-Wireがそのような距離を移動できることに本当に驚きました。抵抗が小さいので、理にかなっていると思います。
ドーム

Onewireは、立ち上がりエッジのタイミングに依存しませんが、代わりに、すべてのビットタイミングは、アクティブに駆動される立ち下がりエッジに関連して行われます。それが、高い容量性負荷の影響を受けにくい理由です。いくつかのnFは大丈夫です。
ジャンカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.