起動遅延が長いか、バスアナライザーが接続されていない場合、CANトランシーバーがメッセージを受信しないのはなぜですか?


8

CANベースのアプリケーションを作成するために、16ビットMCU PIC24HJ64GP504を使用しています。基本的に、ボードと1つのノード間の通信であり、CANを使用して1 Mbit / sでボードにデータを送信し続けます。1 Mbpsで動作するようにPIC24のECANモジュールを構成しています。最初の10ミリ秒の間、ECANモジュールが反対側から着信するすべてのメッセージを受け入れるようにコードを記述しました。その後、メッセージID 0x13のメッセージのみを受け入れるようにECANモジュールを再構成しました。

ここで問題が発生します。他のノードとボードの電源が同時に投入されます。もう1つのノードは、電源投入後40ミリ秒後にメッセージの送信を開始します。しかし、ボードからメッセージを受け取ることができません。ここで、最初にボードの電源を入れたら、新しいフィルターでECANモジュールを再構成し、落ち着いてから他のノードの電源を入れて、すべてが完全に機能するようにします。

ここで最も奇妙な部分です。ボードと他のノードの間にCANバスアナライザーが接続されていて、両方のノードに同時に電源を投入しても、すべてが正常に機能します。最初にボードの電源を投入する必要はありません。異なるメーカーの3つの異なるバスアナライザーでこれを試してみましたが、同じ結果が得られました。

ECANモジュールの再構成中は、落ち着くまでに少し時間がかかるようです。そして、バスにバスアナライザーが導入されたことで、今回は何とかしてすべてが完全に機能するように短縮されました。しかし、問題が正確に何であるかはわかりません。

私は過去7日間この問題に取り組んできました。

PS:今日、私はスコープで確認しましたが、電源投入後170 ms後に他のノードが送信を開始すると、すべてが正常に機能することがわかりました。それ以前は、バスアナライザーが接続されていないと、デバイスからメッセージが受信されません。最悪なのは、他のノードの送信を遅らせることができないことです。そのノードのファームウェアは独自のものです。

また、今日のフォーラムで、CANが機能するためにはノードに120Ωの抵抗が必要であることを読みました(ノードに抵抗がなく、ノードが正常に機能する場合でも、再構成後に落ち着くまでの時間を考えると)。バスアナライザーの導入により、ネットワークの電気的パラメーターが何らかの形で変化し、再構成後にノードが安定するまでの時間が短縮されると思われます。しかし、私はわかりません.. :(


1
使用しているすべての製品へのリンクを教えてください。これにより、具体的な答えを簡単に作成できます。
Kortuk

ボードに変更を加えることができますか、それとも純粋にソフトウェアソリューションを期待していますか?
vicatcu

自分のノードが稼働していない場合でも、他のノードが送信を続けますか?一部のCAN実装はエラーカウンターを使用し、これがオーバーフローした場合(たとえば、受信ノードがないため)、送信ノードは停止します。
シェドラー2012年

回答:


9

あなたは、CANバスが抵抗器を必要とするどこかで「フォーラムで読む」? マジ!!?

これはデザインの不可欠な部分です。CANを使用する場合は、CANを理解する必要があります。つまり、関連ドキュメントを読む必要があります。

スピアソンは正しいが間違った理由で。ありそうな差動CANバス(使用しているインターフェイスチップは言っていませんが、各ノードにMCP2551などによって駆動される標準の差動CANバスがあるはずです)には、ある、ライン間の抵抗が。これは、2つのラインが受動的に引き寄せられることで劣性状態が示され、2つのラインが能動的に引き離されることによって支配的な状態が示されるためです。その意味でのライン間の抵抗は、オープンコレクタラインのプルアップ抵抗と同等です。何もバスを運転していないときに何かが線を引き寄せなければ、バスは機能しません。

抵抗はスピアソンが指摘したようにターミネーターとしても機能します。通常、2つのバスラインにはツイストペアを使用します。これは約120Ωのインピーダンスを持っています。このタイプの差動CANバスは、バス間を終端して反射を回避するためにそれぞれ120Ωで実装できるように、ライン間でプルオーサとして60Ωを持つように定義されています。

 


「スピアソン」とは何ですか?コメントを残した「spearson」という名前のユーザー(その後、削除されたか、ユーザーがスクリーン名を変更したため?)?本(作者名)?
Peter Mortensen

@peter:どうやらそうです。
Olin Lathrop、2015年

4

通常のCAN動作では、ACKが送信されるか、エラーカウントを超えるまで、ノードは送信を繰り返します。CANアナライザーがネットワークに接続されている場合、最初のノードからのフレームを検出するとACKビットが発行され、送信が成功します。Microchip CAN BUSアナライザーを使用している場合を「リッスンオンリー」モードに構成できます。つまり、ACKビットを発行しないため、ネットワークに影響を与えません。したがって、2番目のノードがACKを発行するか、最初のノードがエラーカウントのために送信を終了するまで、アナライザーの表示で繰り返されるCANフレームを確認できるはずです。

ACKビットは、アドレスフィルタリングに関係なく、受信ノードによって設定されます(フレームが完全で正しい場合)。

フレームがACKされていないため、最初のノードがエラー状態になっている可能性があります。これは、CiINTFレジスタを使用してソフトウェアで検出する必要があります。CiINTEレジスタを使用して、エラー条件に対して割り込みを発行するようにPICを構成することもできます。

スコープがCANフレームをデコードしない場合は、Saleaeロジックアナライザーを試してください。CANフレームをデコードし、ACK /エラービットを表示します。Microchip CANアナライザーよりもはるかに信頼性が高くなっています。


3

CANフレームにはACKスロット(2ビット)があります。ノードAがデータを送信していて、バス上に他の5つのノードがある場合、送信後、フレームを受信したノードがACKスロットにドミ​​ナントビットを配置します。これは、メッセージが正常に送信されたことを示します。それ以外の場合、CANコントローラはバスのエラーと見なします。

CANアナライザーを追加すると、トランスミッターにACKが送信されます。送信機は、バスが良好であると考え、送信を続けます。CANアナライザーがないと、CANコントローラーを再構成すると、トランスミッターはACKを取得せず、バスにエラーがあると判断して送信を停止します。

要点を理解していただければ幸いです。

ACKが正しく取得されていることを確認してください。また、再構成を行う間、CANレシーバーを完全にオフにしないようにしてください。

別のトリック(常に機能するかどうかはわかりません)は、再構成後にゼロDLCおよびゼロIDフレームを送信することです。これは、バスがアクティブであることを送信ノードに通知し、送信を開始します。

注:120Ω抵抗は必須です!!! 。終端抵抗はどのバスでも重要なことです。


初期化後にゼロDLCおよびゼロIDフレームを送信するというあなたのトリックは、実際にはすでにブートアップメッセージとして知られている標準にあります。そのIDはハートビート(0x700 +ノードID)と同じで、DLCは1です。アナライザーツールはこれを認識します。
BullBoyShoes 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.