I2C信号と長距離(10mケーブル)での電力


9

いくつかの読み取り/テストの後、FTP CAT5銅ツイストペアケーブルでI2Cを使用して2つのデバイス間で安定した通信を行うことができました。

  • 緑線-SCL
  • 白/緑ワイヤー-GND
  • ブルーワイヤー-SDA
  • 白/青線-GND

GNDはケーブルの一方の端でのみ接続され、I2Cバスクロックは10Khzで、VCCに10Komプルアップ抵抗を使用しました

それはうまく機能し、安定しています。他の2ペアのケーブルを電源(+ 12V)に使用することを決定したとき、それは機能しなくなりました。一方のペアの+ 12Vをもう一方のペアのGNDでテストしました。同じペアで+ 12V / GNDもテストしました。同じ結果、動作しなくなりました。I2Cバス全体が機能しなくなり、他のデバイスも接続されました。

同じケーブルを使用できるのか、それとも最も安全な選択肢-電源用の別のケーブルを使用できるのか。


3
受信側の電源が十分か確認しましたか?グリッチなし、垂下なし... CAT5ケーブルは非常に細いので、PoEは40Vを超える電力を使用します。
Vladimir Cravero 2019年

4
これは、オシロスコープが必要な場所です。それ以外はすべて(教育された)当て推量になります。
パイプ

1
SDAまたはSCLをGNDでツイストしません。これらの間に静電容量が必要ないからです。あなたはそれらの間の静電容量が欲しいので、私はGNDで+ 12Vをねじります。+ 12Vには(戻り)電流がありますか?(グラウンドバウンスの可能性があります)
Huisman

5
GNDはケーブルの一端でのみ接続されていますか?私が誤解しない限り、それは正しく聞こえません。
mkeith

1
もしかしてUTPのケーブルを?FTP以外のプロトコルでも使用できると思います;)
Andrew Morton

回答:


15

以前は機能していたかもしれませんが、やり過ぎかもしれませんが、オプションはPCA9615LTC4331などのI2Cから差動コンバーターを使用することです。抵抗を小さくしても機能しない場合やケーブルを延長する必要がある場合は、I2Cを直接使用しないことを検討してください。

範囲が拡大されるだけでなく、ノイズ耐性も向上します。

ここに画像の説明を入力してください ここに画像の説明を入力してください


1
すばらしい答えです。これはまさに実行すべきことですが、もちろんそれはOPの根本的な変更になる可能性があります。
Jack Creasey

つまり、実装は非常に簡単です(RS-485、CANなどに移行する場合と比較した場合)。ただし、一部の抵抗を変更する場合と比較すると、根本的な変更です。
ウェズリーリー

1
@JackCreasey OPの問題はケーブルの静電容量だけではなく、追加した12Vラインのノイズに悩まされているようです。プルアップ抵抗を下げるとノイズ耐性が向上しますが、抵抗を無期限に下げることはできません。
ドミトリーグリゴリエフ

@DmitryGrigoryev OPは詳細を提供しなかったので、ノイズが注入されていることをどのように提案できるかわかりません。終端/プルアップを下げ続けるだけではいけないことに同意しますが、OPは10:1で大きすぎます。
Jack Creasey

9

コメントで述べたように、オシロスコープのトレースなしでデバッグするのは難しいですが、質問から最初に目立つのは10 kOhmのプルアップ抵抗です。I2Cの場合、これは異常に高いですが、多くの場合簡単に機能します。

最初に1 kOhmに下げて、影響があるかどうかを確認します。効果がある場合は、徐々に高くすることができますが、そうすると立ち上がり時間に影響します。


10 kΩ10 kHzのI2Cバスの場合はそれほど大きくありませんか?(または100 kHz OPにする必要がありますか?)
Huisman

@Huisman 2つの良い点。10 kOhmは、通常のPCBの10 kHzでは心配しませんが、ケーブルでは十分ではないかもしれません。そして、10 kHzは珍しいですが、クレイジーな珍しいものではないと思います。
パイプ

7
10kオームは、どんな距離でもI2Cにとって巨大です。それがOPの主要な問題です。
Jack Creasey

1
抵抗を分割して両端に使用する方が良いと思います。2つのプルアップ抵抗@4.7kΩ(両端に1つずつ)は、単一の2.2kΩプルアップ抵抗よりも適切な選択です。
12431234123412341234123

私は抵抗を下げてみるつもりです、それはすべてのそれらのコメントの後で私にとって意味があるすべてです
user3503519

5

プルアップ抵抗は遠距離で絶対に落とす必要があり、10mは長い道のりであり、10kオームは非常に高いです。

プルアップ抵抗の値は、次の3つに関連しています。

  1. ケーブル容量
  2. 照準電圧とRxレベルセンス。
  3. 速度

利用可能な計算機のいずれかを使用してみて、プルアップ値に関するTIのアプリケーションノートをここから、またはNXP I2C標準(7.1)をここから読んください。

発生している問題に関しては、ケーブル内の追加のペア(12V、Gnd)を接地すると、I2C信号線の静電容量が変化することは明らかです。


2
同意します。CAT5ケーブルは1メートルあたり約50pFと想定できるため、10メートルはI2C仕様の400pFの容量制限を超えます。また、抵抗からの指定された3mAプルアップ電流を使用して400pFの静電容量で400kHz I2Cクロックに到達することはできません。幸い、デバイスに最小クロック速度の制限がない限り、速度を下げると効果があります。これらがどのデバイスで、I2Cバス電圧は何であるかはわかりませんが、実際にはプルアップを調整して少なくとも3mAを提供し、デバイスがバスの低レベル電圧を許可して同意する場合はさらに高くする必要があります。
Justme

はい私はそれでテストしますが、私の質問は、そのケーブルに電力がない場合になぜ機能するのですか?
user3503519

フローティングケーブルペアは、ケーブルが接地されているときの信号ペアと同じ静電容量ではありません。構成では、+ 12とGndの両方が基本的に同じです。信号ケーブルへの静電容量があり、立ち上がり時間に影響を与えます。。
Jack Creasey

2

いくつかのメモ:

特にSDAの場合、正しいプルアップ値を取得することが重要です。デバイスによって、シンクする電流の量が異なります。小さいセンサーチップに切り替えた後、プルアップ抵抗が小さすぎるためにデータに余分な1を生成する設定を見ました。ジオメトリが小さいため、バスを完全にゼロにすることができませんでした。

スピードキル。長いケーブルは実質的にローパスLRCフィルターです。多くのI2Cアプリケーションでは、何も失うことなくクロックを遅くすることができます。遅いクロックは、弱いプルアップと大きな容量を補償できます(強すぎるプルアップは補償できません)。

長いケーブルはEMIへの誘いです。イミュニティテストに合格するためにフェライトクランプが必要なI2C実装を確認しました。終端処理、シールドケーブル、またはフィルターが役立ちます。

並列抵抗に注意してください。マスターに1kのプルアップがあり、バス上の4つのクライアントデバイスのそれぞれに1kのプルがある場合、正味の200オームのプルアップがあります。仕事に行きません。



-1

まず、回答を投稿してくれたコミュニティに感謝します。
第二:私はそれらの答えに基づいた解決策を見つけました、これが私がしたことです:

プルアップ抵抗を4.7Kおよび2Kに下げることをテスト。2Kで私は時々応答を受け取り始めるので、1Kに下げてから応答を受け取り始めますが、それらのすべてからデータの一部が欠落していました。その後、SDAピンのプルアップ抵抗が10Kに切り替わり、すべてが安定して動作し始めます。
したがって、私の場合の解決策は、SCLで1Kプルアップ、SDAで10Kプルアップです。

お時間をいただきありがとうございます。


1
それはクレイジーです。ここではどのようなハードウェアを使用していますか?多分何かが正しく設定されていません。
パイプ

1
一方はmicropythonを備えたESP32、もう一方はarduino IDEでプログラムされたatmega8です。私は最終的にそれを安全な通信とは見なさないので、シリアル(RS232)に切り替えるつもりです。テストした結果、これらの範囲で
正常に動作しました

1
私があなただったら、RS-485も見てみましょう。RS-485はさらに堅牢で、さらに簡単です。欠点は、より多くの信号線が必要になることですが、CAT5にはすでに多くの信号線があります。
パイプ

1
さて、追加のコンバーターとハードウェアなしでRS-485をatmegaプロセッサまたはESP 32に直接実装する方法がわからないので、ここではRS-232が最適です。TTLレベルシフターは1つだけ使用します。
user3503519
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.