Cat5ケーブルでI2Cを確実に送信する


8

Raspberry Piの周りにホームオートメーションシステムを実装することを検討していますが、制御が必要な場所すべてにPiを挿入するための価格とスペースの要件が多すぎますが、この設計に必要なCat5eケーブルは改修中に既にインストールされています。PCF8574、PCF8591、SSRがいくつかあるので、Cat5eケーブルを使用してそれらを駆動することはできますか?

私のすべてのCat5eケーブルはすでにTIA / EIA 568Bピン配置で配線されています。これらは私の構造ケーブルの一部であり、シールドされていないため、より高いライン電圧が必要です。このピン配置で、ケーブルを介して電源とI2Cラインを送信することを考えています:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +12V
Pin 5 (Pair 3): +12V
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): GND

電源ピン配置は100BASE-TX PoE配線と同じであるため、電力定格も同じです。双方向差動シグナリングの使用は、Cat5eを必要とする1000BASE-Tにあります。

オリジナルのI2C SCLおよびSDAラインは、TTLレベルで2つの双方向差動ペアに派生します(オープンドレインはワイヤ上に保持されませんが、設計しているラインターミネーション/レベルシフトデバイスで復元されます)。

それについて何か提案はありますか?また、どのチップを使用してI2Cラインを差動信号に変換する必要がありますか?DIPスルーホールオプション付きのチップを提案してください。SMTの処理方法がわかりません。

編集

私はこのチップSN65LBC180を見つけました、それは良い選択ですか?それを双方向ユニットに配線する方法は?レベルをシフトして(TTLレベルを必要とするBiCMOSパーツですが、Piは3.3v CMOSレベルで駆動します)、オープンドレイン互換にする方法は?

編集2

コメント投稿者は、RS-485を推奨しましたが、それでも2つの差動ペアは双方向であり、双方向差動ペアは2つだけである必要があります。既存のイーサネットケーブルを転用しています。

編集3

誰かが育てたのでCANは使えません。何も犠牲にせずにCANをRPiに適合させる方法はありません(SPIはタッチスクリーンで占有されているため、SPIからCANへのコンバーターはありません)

私はI2C PHYの制限を認識しているので、基本的に1000BASE-T PHYをそれに適合させようとしています-SCLおよびSDA信号の双方向差動シグナリングですが、その上でI2Cプロトコルを実行しています。

編集4

新しいチップが登場しました。NXPP82B96は、I2Cを4つの単方向ラインに分割します。これは、光アイソレーション(Pi側のみ)を介してSN65LBC180にフィードし、8ピン長距離対応シグナリングを形成するために使用できます。次に、ワイヤーを介して電力を取得する方法、またはバスが送信しているかどうかを判別してペアを双方向にする方法を理解する必要があります。

編集5

回答の提案から、私は電源ピン配列を少し変更する必要があると思います:

Pin 1 (Pair 1): SCL+
Pin 2 (Pair 1): SCL-
Pin 3 (Pair 2): SDA+
Pin 4 (Pair 3): +5V
Pin 5 (Pair 3): GND
Pin 6 (Pair 2): SDA-
Pin 7 (Pair 4): GND
Pin 8 (Pair 4): +12V

I2C差動信号電圧はTTLです。ペア3の+ 5VはPiから供給され、バッファされていませんが融合されています。ペア4の+ 12Vは存在しない場合がありますが、これは一部の高出力デバイスを駆動するためにのみ使用されます。必要に応じて、デバイスは独自の電源を使用し、両方のレールを未接続のままにするか、独自の高い電圧を供給しますが、5Vレールを使用できます。

それを傷つける

ピン配置はまだ私のオリジナルのデザインで、802.1af互換です。


4
なぜRS-485ではないのですか?これは、産業用の信頼できる標準です。
カミル2014

PiにはRS485がありません。インターフェイス回路をできるだけシンプルにしたいと考えています。私の実験から、5Vの電源電圧で確実にSSRを駆動できるPCF8574も必要です。
Maxthon Chan

RS-485自体は双方向ですが、シングルエンド側では双方向ではありません。
Ignacio Vazquez-Abrams

5
あなたが最初にやろうとしていることをやるのに夢中になっているなら、なぜあなたはここに来てそれについて尋ねたのですか?
Matt Young 14

2
@maxthonchan Cat5イーサネットワイヤは、50Vで360maを安全に処理できます(en.wikipedia.org/wiki/Power_over_Ethernet#Power_capacity_limits)。入力側の3-32Vで10mA未満の電流が流れるソリッドステートリレーは、安全な仕様の範囲内で簡単に入手できます。
Grant

回答:


18

IICでやろうとするのは悪い考えです。IICは、実際には単一のボード上のチップ間の通信を目的としています。ラインを引き下げるために必要な最大電流が制限されているため、ラインは比較的高インピーダンス(数kΩ)です。これは、彼らがノイズを簡単に拾うことができることを意味します。これは、壁のシールドされていないケーブルで実行しているとき、深刻な問題であり、おそらく次のAC電源線です。

これにはCANを使用します。CANは、任意の1点で60Ωでプルされた単一のツイストペアを使用し、信号は差動です。つまり、容量結合により拾われる避けられないコモンモードノイズのほとんどは、レシーバーでキャンセルできます。500 kbits / sで動作するCANは、普通の家のサイズをカバーできます。

現在、多くのマイクロコントローラーがCAN組み込みで利用可能です。通常、別個の物理トランシーバーチップ(一般的なMCP2551など)が必要ですが、プロトコルの最下位層は、CANペリフェラルのシリコンに実装されています。ファームウェアは、完全なパケットを送受信するレベルでCANバスと対話します。衝突の検出と再試行、チェックサムの生成、バスパケットシグナリングの詳細、受信したチェックサムの検証、およびクロックドリフトの調整はすべて処理されます。

RS-485に陥らないでください。それは過ぎ去った時代の遺物です。また、CANのような単一の差動信号を使用するため、ノイズ耐性も優れています。ただし、RS-485は「よりシンプル」に見えるため、通常はRS-485を使用します。これは、彼らがシステム全体を見ないからです。まず、電気的にはそれほど複雑ではありません。差動信号を駆動および受信するには、依然として何らかのトランシーバーが必要です。マイクロコントローラのUARTにRS-485トランシーバを接続するか、CANペリフェラルにMCP2551を接続するかは、コストとハードウェアの複雑さの点ではほとんど関係ありません。大きな違いは、RS-485は(UARTを介して)生のバイトレベルを維持することです。つまり、意味のある堅牢なシステムを実装するには、衝突検出を処理するための独自のプロトコルを発明する必要があります。再試行、パケット化、チェックサムの生成とチェック、フロー制御などの処理方法を決定します。単一のマスターアーキテクチャを使用できますが、詳細を正しく取得することは、すべてを注意深く分析していないと考える人よりもはるかに困難です。CANでは、パケットを送受信するだけで、ハードウェアが詳細を処理します。


CANをRPiに組み込んでいない、CANインターフェースを持っていない、それらを購入する余裕がない、既存のハウジングに適合できない。だから、できません。私はIICを差動信号に変換して、クロストークと抵抗の非常にその落とし穴を回避しています。変換およびIICデバイスは、1つのシングルボードを共有します。
Maxthon Chan

@Max:CANを備えたマイクロコントローラーは、RPiよりも安価で小型で、消費電力も少なくなります。これらのノードがほとんどセンサーなどである場合、RPiはとにかくやり過ぎです。
Olin Lathrop、2014

uCには、システムの反対側を実行するための十分な計算能力がありません。私は緊急用のタッチスクリーンをシステムに備えていますが、すべてのコマンドはホームネットワーク経由でPi over HTTP(かなり凝ったAJAX駆動のUIを使用)に送信され、Piはすべての認証やその他のものを処理します。
Maxthon Chan

3
@MaxthonChan CANをSPIやI2Cに変換してRasPIとインターフェースする安価なコントローラーICを入手できます。マイクロチップの例
ピーター

それがあなたの提案である場合、どうすればSSRを運転できるか教えてください。現在、diffインターフェースチップを備えた1つの受信ボード、7805とPCF8574があり、最大8つのSSRを駆動します。(通常、私は2つまたは3つ持っています)
Maxthon Chan

7

I2Cは進むべき道ではありません。CANトランシーバーはそれぞれ1ドルの費用がかかり、それらをuartトランシーブとして使用し、独自のプロトコルを作成できるため、完全なCANスタックを使用したくない、CAN互換のマイクロが不要になります。

cat5導線が並列でより多くの電流を流すのを見ると、いつも少し不快に感じます。一方の導線が壊れると、もう一方の導線が完全なシステム電流を運ぶため、それは私を悩ませます。cat5の現在の定格は非常に保守的であるため、火災の可能性はかなり低いですが、私はその可能性が気に入らないだけです。

これを行う安全な方法は、両方の電源レールにポリヒューズを取り付け、電源でアースに接続し、各デバイスを1つだけの電源/アースセットに接続することです。このようにして、1つのワイヤに障害が発生した場合、1つのラインが2つの電力を強制的に流される代わりに、そのラインを使用するデバイスは電力を失います。

多くの人々は、1つの電源ペアと1つのグランドペアではなく、EMIの理由で両方のツイストペアに電源とグランドを配置することを好みます。2つの電源/接地ペアがある場合、電力線は接地により近くなり、電界は相殺され、電力線から送信または受信される電波が減少します。不要ですが、大量の電気ノイズが発生している場合は問題ありません。

私の考えでは、12Vは、24Vがまだかなり安全ではるかに効率的である場合、配電には低すぎます。


私の解決策はどういうわけかそれに基づいています。NXPスプリッターチップを使用してI2CバスをTx / Rxのペア(SDAとSCLの両方)に分割し、CANインターフェイスチップを使用してそれらをUARTとして多重化します。これにより、Cat5e TIA / EIA568Bピン1/2および3/6に配線された、I2C SDAおよびSCLラインを伝送する2つのツイストペアが得られます。
Maxthonチャン

それも機能するはずです。唯一の問題は、NXPチップ、2つのトランスシーバー、および実際のi2c I / Oチップが必要なことです。つまり、ボードあたり5つのチップです。最後に、NXPチップがatmega328よりも高価であることを確認しましたが、状況が変わった可能性があります。それは機能し、プログラミングはi2cであるため単純ですが、CANを介したUARTを使用する方が、少し作業量が少なくて済みます。
EternityForest

Pi側のインターフェースボードには、7つのチップ(NXP I2Cバッファー/スプリッター、2つのCAN PHY、4つのオプトアイソレーター)があります。デバイス側は4チップモジュールです-NXP I2Cバッファー/スプリッター、2つのCAN PHYおよびPCF8574 / 8591。
Maxthon Chan

Pi側の回路を4チップモジュールに削減する4チャネルオプトカプラーを見つけました。
Maxthon Chan

電源ピンを再考し、私は電源ペアとグラウンドペアを使用して、元のデザインに固執しています。信号ピンをSCLとSDAに再定義しましたが、これは802.3afと互換性があります。
Maxthon Chan 2014

3

自動化が家の周りの物事を単純にオン/オフにする場合、私はこれを次のように簡略化します。

  • すべての「頭脳」を1か所に保管します。必要に応じてI2C I / Oエキスパンダーを使用しますが、すべてラズベリーpiで維持します。また、piのGPIOピンから過大な電流を取得しないようにするために、適切なハードウェアも必要です。
  • イーサネットケーブルを使用して、リレーを駆動します。独自のボードを構築するか、電気ボックスにマウントするパネルマウント可能な120 / 240Vソリッドステートリレーを入手できます。Cat5イーサネットケーブルのワイヤは、それぞれ320mAで最大50Vを処理できます。これは、リレーを駆動するのに十分です。実際、1つのケーブルから7つのリレーを駆動することができます(アース用の1つのワイヤも)。または、12V出力の切り替えを解除するために1本のワイヤを残しておくと、手動スイッチを取り付けることもできます。それらが本当に長い実行である場合、電圧降下を考慮する必要があるかもしれませんが、3-32Vで切り替わるリレーを得ることができます。電圧降下があっても、12Vで十分です。
  • また、同じボックス内で高電圧ケーブルと低電圧ケーブルを混在させることについてのアドバイスについては、地域の建築基準法を参照してください。
  • 簡単な切り替えは、イーサネットケーブルを介して行うこともできます。これもケーブルごとに最大7つで、パイの入力に配線するだけです。電圧降下は、本当に長いケーブルでは問題になる場合があります。
  • piを損傷から保護するために、光アイソレータを使用することもできます。
  • リレー以上のものを必要とするいくつかのデバイス(コントロールパネルなど)では、実際のイーサネットとしてイーサネットケーブルを使用します。これらのデバイスが多くなければ、多額の費用がかかることはありません。それらは、別のpi、またはイーサネットを備えたマイクロコントローラーのいずれかです。

私のエンドユーザーのニーズがどうなるかは正確にはわかりません。彼女は不機嫌で、非常に速く心を変えます。私は十分に速く応答できなければなりません。これが、ある種の基本的なプロトコル(ここではI2C)がネットワーク経由で使用される理由です。
Maxthon Chan

2

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

ユーレカ!理解した!(テストされていない、今週末テストする)

インターフェイスチップは、NXP P82B96 I2Cバッファー/スプリッターと2つのTI SN65HVD251P CANバスインターフェイスチップです。基本的に、CAN PHYでI2Cを実行しています。

P82B96はI2Cプロトコルを理解し、バスアービトレーションを処理して、一緒に接続できる個別のTxピンとRxピンを提供します。それらをSN65HVD251P CANトランシーバーに入力すると、双方向差動ペアをワイヤ経由で送信できます。

電源ピンは、Piの5Vレールからバッファなしで直接送られます。(しばらくの間、12Vの信号電圧と電力を使用しません)


申し訳ありませんが、ありません。これにより、2つの I2Cユニットを互いに距離を置いて接続することができます。それはあなたが以上の2を接続できません
WhatRoughBeast

@WhatRoughBeast NXPのドキュメントでこれを調べたところ、これは実行可能な解決策である(そして何とかしてANに取り入れられた)と言われていますが、私にとっては、ポイントツーポイントで問題ありません。 Cat5eセグメントごとの変換単位のペア。
Maxthon Chan

CANは、i2cと同様に有線または双方向です。これがバス上の必要な数のデバイスで機能しない理由はありません。私は彼が言及するアプリnotrを見た。それは、ポイントツーポイントではなく、バスを表すように見えます。
EternityForest

@WhatRoughBeast-CANはマルチドロップです。OPが何をしているのか詳しく調べていませんが、理論的には可能です。
コナーウルフ

1

チップレベルでのIICのメリットに関係なく、提案された実装は非常に困難になります。問題はバスの調停です。たとえばRS485を使用して複数のユニットを並列化できますが、大きな問題は次のとおりです。

どのユニットがデータを送信するためにバスを制御できるかどうかをどのようにして知るのですか?

IICでは、オープンドレイン信号線を使用すると、双方向転送が簡単になります。ただし、トライステートバスを使用する場合、一度に1つのユニットのみがバスを駆動しようとすることを保証する方法が必要です。これはトリッキーになります。特に単一のマスターを確立し、すべてのスレーブにデータの送信に関する厳密なタイミング制約があり、マスターから要求された場合にのみデータを送信する必要がある場合に、これを行うことができますが、これには、設計にかなりの労力が必要です。マスターとスレーブのインターフェースボード。

物理的なドライバー/レシーバーに関しては、RS485で十分です。多くのインターフェイスチップが利用可能です。ただGoogle。


1

独自の回路を構築するのではなく、既成のソリューションに興味があるかどうかはわかりませんが、Pololu がSJTbits製のI²C長距離ディファレンシャルエクステンダーボードを販売していることを指摘したいと思います。あなたが探しているもの。(完全な開示:私はPololuで働いています。)

直接使用したくない場合でも、使用している回路を見るといくつかのアイデアが得られるかもしれません。回路図はデータシートで確認できます。NXP PCA9600Dバッファー、TI AM26LS31CDR差動ラインドライバー、およびTI AM26LS32ACDR差動ラインレシーバーを使用します。


これは私にはうまくいきません。ワイヤーを介してバス信号と電力の両方を送信する必要があります。
Maxthon Chan

1

私はこれが少し古いことを知っており、解決策は返信のどこかに解決されているようですが、私はこの提案を提供しました。より堅牢な長距離I2Cバス(PCA9614 2チャネルマルチポイントファストモードプラス差動I2Cバスバッファー)のソリューションとして、現在検討しているNXPのPCA9614 / 5/6などのデバイスがあります。本質的に、それが真のI2C以外の何かになっていることは真実ですが、バスの終端では、デバイスからは見えません。この特定のファミリは、信号を2つの双方向差動ペアに変換します。また、コメントですでに述べたように、4つの単方向差動ペアに変換する同様のデバイスもあります。たった2ペアに変換すると、CATケーブルを使用することができますが、電源/グラウンド用に2ペアを使用できます。


0

いいぞ!私は現在、ほとんど同じ問題を解決しようとしています。また、カスタムピン割り当てを使用して、ホームオートメーション用にcat5ではなくI2Cを使用しようとしています。理由はコストです。非常にコスト効率が高く、I2Cコンポーネントはattiny13 uCよりも少なくとも5倍安価である必要があります(CANおよびRS485にはAFAIU uCが必要です)。

1)現在、システムの最初の部分の試用段階にあり、5VのSmとSDAを直接接続した15mのケーブルで成功しました!PCF8574と2つのリレーを使用して、室内灯をトリガーします。ピン配列は

1
2 INT
3 +5V
4 SCL
5 SDA
6 GND
7
8

2)リレーが2、3メートルも10メートルも追加できないことは理解しています。電圧降下が大きい(5.5から4.7へ)。したがって、電圧降下の問題については、代わりにラインに12Vを配置し、ボードに5V電圧レギュレータを追加して、ラインドロップ全体に関係なくどこでも細かい電圧を維持します。とにかく将来のラインで追加の電源を入れます。

3)P82B96または安価なP82B715を使用すると、信号自体を差動ラインに分割せずに改善できます。NXP自体は一部のプレゼンテーションでCat5を使用していますが、ピン配置が見つかりません。ここで重要なのは、異なるペアの信号線を明確に使用していることです。たとえば、1つのペアはGND + SDAで、もう1つのペアはVCC + SCLです。

4)もう1つの興味深い点-このバッファーは、振幅を最大12Vまで上げるだけでノイズ耐性を高めることができます。だから、私はおそらく信号線にも12Vを入れようとするでしょう、そしてそれは12Vワイヤーから直接プルアップを置くことを可能にするべきです...しかし、それは私がP82B96のようなものを各デバイスに強制的に置くでしょう。

お気づきかもしれませんが、私は別の割り込みラインも使用しています...マスターは現在PCに接続されたarduinoボード上にあります。とにかく、プライマリマスターソフトウェアは24時間365日稼働するPC上にあるので、arduinoは信号を変換して割り込みを処理するだけです。オンボード割り込み処理の特定の構成を送信できます。たとえば、割り込みを介して便利なスイッチトグルを処理できます...これにより、手動でライトを切り替えるときの遅延を忘れることができます。割り込み処理は、i2cの追加の利点です。

だから私の考えは、I2Cが100m未満の都市のアパートのケーブル配線に適用できるほど単純であるということです。差動信号に行く代わりに、余分な周波数を減らすことができるといいのですが。

レギュレーターの必要性を減らし、コストを削減するため、5Vと12Vの両方を使用するという考えが気に入っています。マルチワイヤバスを使用してエンドポイントのコストを削減するというアイデア全体です。新しいピン配置についても検討します:)


1
状況はOPと同じではないため、これは質問に対する拡張コメントであり、OPの状況とは異なります。異なるマスターハードウェア、異なるシグナリングスキームです。しかし、それは十分に密接に関連しているので、私はそれを立たせるつもりです。
Dave Tweed 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.