2016-11-13 10 views
0

低速フォールトトレランスのCANネットワーク(100kbps)を高速CANネットワークに適用することは可能でしょうか。新しいインフォテインメントボード(CIC)をBMW e60車内のK-CANに接続するには、これが必要です。私はすでにArduinoとMCP2515シールドを介してCICを目覚めさせて(ワークベンチ上で)制御していました。 可能かどうか考えていますか? ありがとう!CAN低速〜CAN高速適合

+0

[ヘルプセンター](http://stackoverflow.com/help/on-topic)で定義されている範囲内でプログラミングされているようには見えないため、この質問をトピックとしてクローズすることにしました。 – Matt

答えて

1

あなたが車に乗せているインフォテインメントボードのCANトランシーバICを、すでに車に搭載されているバスのタイプと一致するものに置き換えるのが最も簡単な方法です。異なるトランシーバICは通常ドロップインで交換可能ですので、問題はありません。

しかし、一致するトランシーバでも、データビットレートが一致する必要があるため、ボードで使用されるビットレートと車両のバスで使用されるビットレートを決定する必要があります。

ビットレートが一致しない場合は、トランシーバICを交換する必要はありません。この場合、唯一の解決策はおそらく双方向のstore-and-forwardアダプタ/ゲートウェイを作成することです。

Arduinoを使用してこのようなゲートウェイを構築することもできますが、2つのCANバス "シールド"ドーターボードを用意する必要があります。各ドーターボードには、接続し、そのCANコントローラを適切なビットレートに設定します。

各CANコントローラは、SPI経由でArduinoに接続します。複数のスレーブデバイスが、チップ/スレーブ選択(CS/SS)ラインを使用して通信したいデバイスを選択するマスタデバイス(例えば、Arduinoマイクロコントローラ)を用いて、単一のSPIバスを共有することは非常に可能である。マルチスレーブを含むSPI通信の詳細については、hereおよびhereを参照してください。

SPIに依存する既製のArduino "シールド"の場合、最初のシールドを超える追加のシールドは、Arduinoマイクロコントローラからの別の制御ラインにCS/SSラインを物理的に再ルーティングする必要があり、 。ボードのピン配置および/または回路図を参考にして、必要な変更を決定してください。具体的には、シードのCANバス回路を使用する場合は、「CSピン」セクションのits Wikiを確認してください。

ゲートウェイでは、ターゲットバスがビジー状態の場合に少数のメッセージを保持するために、FIFOバッファを使用して、1つのバスで受信したメッセージを基本的にコピーする必要があります。 複数のCANコントローラをサポートし、CS/SSラインを使用して複数のCANコントローラを切り替えるには、CANバスライブラリのソースコードを一部変更する必要があります。

実際にプログラミングの質問ではないので、この質問ではおそらくスタックオーバーフローが間違った場所です。

+0

ありがとうございました!一方、私はあなたが2 CANシールドで言ったようにそれを行うことができることを学んだが、Arduinoボードは2 SPIをサポートする必要があります。 – SXN

+0

@SXNを使用すると、チップ/スレーブセレクト(CS/SS)ラインを使用して、通信するデバイスを選択して、複数のデバイスに1つのSPIバスを接続できます。 2番目のシールドのMCP2515のCSラインに異なるデータピンを再配線する方法については、「シールド」の回路図を参照してください。 seeedのCANバス回路を使用している場合は、http://wiki.seeed.cc/CAN-BUS_Shield_V1.2/ の "CSピン"セクションを確認してください。また、CANバスライブラリのソースコードを変更して、 2番目のデバイスの場合 – Sagie

+0

@SXN http:// tronixstuffも参照してください。com/2011/05/13/tutorial-arduino-and-the-spi-bus /にあります。ここでは、単一のSPIバス上の複数のスレーブに関する説明があります。 – Sagie