ロボットアームのプロセッサ間通信


13

私は趣味の6自由度ロボットアームを構築していますが、プロセッサ間で通信するのに最適な方法は何ですか(3〜4 AVR、最大18インチの間隔)。Atmega32u4 USB-to-???経由でマイクロプロセッサにコマンドを送信するコンピューターで制御ループを実行したいと思います。ブリッジ。

私が検討しているいくつかのアイデア:

  1. RS485
    • 長所:同じワイヤ上のすべてのプロセッサ、より堅牢な差動信号
    • 短所:追加のチップが必要、プロセッサが同時に送信するのを防ぐためにプロトコルを書く(または見つける)必要がある
  2. UARTループ(つまり、1つのプロセッサのTXが次のプロセッサのRXに接続されます)
    • 長所:シンプルなファームウェア、プロセッサーにはUARTが組み込まれています
    • 短所:最後の接続はロボットの長さを移動する必要があり、各プロセッサはメッセージを再送信するサイクルを費やす必要があります
  3. CANbus(これについてはほとんど知りません)

私の主な考慮事項は、ハードウェアとファームウェアの複雑さ、パフォーマンス、価格です(高価な標準システムを購入することはできません)。

回答:


13

コンピューターとの通信にUSBを使用します。多数のマイクロコントローラーを使用している場合、マイクロコントローラーの1つだけをコンピューターに直接接続することになるでしょう。他のマイクロコントローラーは、メインのマイクロコントローラーからコマンドを取得する必要があります。

選択する通信は、いくつかの要因に依存します。

  • 必要な帯域幅(16MHzで実行していると仮定します)
  • 複雑さ(配線とコーディング)
  • 双方向、またはマスタースレーブ

ほとんどすべてのオプションには、AVRマイクロコントローラーのサポートが組み込まれています。追加のハードウェアを必要とする組み込みオプションよりも合理的に好むオプションはありません。サポートが組み込まれているため、ソフトウェアの複雑さはすべて似ています。ポートを構成し(レジスタを使用)、送信するデータを別のレジスタに配置し、別のレジスタにビットを設定して送信をトリガーします。受信したデータはすべて別のレジスタで検出され、ユーザーが処理できるように割り込みがトリガーされます。どのオプションを選択しても、唯一の違いはレジスタの場所の変更と、構成レジスタの変更です。


USARTループには次の機能があります。

  • CLK / 16の最大ボーレート= 1MHz(16MHzクロックで)、これは約90KB / sの転送速度です。
  • 完全な双方向通信(マスターまたはスレーブの指定なし)
  • マイクロコントローラーの各ペア間に別々のワイヤが必要です-Atmega32u4はネイティブで2つのUSARTポートをサポートし、実際にネットワークに接続できるマイクロコントローラーの数を制限しますマナー)

注:これはRS232通信の取得にも使用しますが、RS232には10Vが必要なため、これらの電圧レベルを取得するにはドライバーが必要です。マイクロコントローラー間の通信では、これは役に立ちません(電圧レベルのみが変更されます)。

RS485:

  • 基本的に、異なるモードでUSARTポートを使用します。帯域幅に利点はなく、配線をわずかに単純化するだけでなく、複雑にします。これは推奨されません。

2線式インターフェース:

  • これはI2Cとも呼ばれます。これは、すべてのデバイスが同じ2本のワイヤを共有することを意味します。

  • 両方のワイヤにプルアップ抵抗が必要です

  • 低速です(プルアップ抵抗の値が制限されているため、デバイスの数が増加し、ワイヤの長さが増加するにつれて容量が増加するため)。このAVRマイクロコントローラーの場合、速度は最大400 kHzです-USARTよりも低速です(ただし、この速度は静電容量の制限に依存します)。その理由は、デバイスがデータワイヤをLowに駆動しますが、ワイヤを再びHighにフロートさせることで(プルアップ抵抗)、反対の遷移が達成されるためです。

  • すべての通信が同じ制限帯域幅を共有していると考えると、さらに遅くなります。すべての通信が同じ制限された帯域幅を共有するため、通信が遅延する可能性があり、データが送信される前にネットワークがアイドルになるまで待機する必要があります。他のデータが絶えず送信されている場合、データが送信されるのをブロックすることもあります。

  • これは、マスターがスレーブをアドレス指定し、コマンド/リクエストを送信し、その後スレーブが応答するマスタースレーブプロトコルに依存します。一度に通信できるデバイスは1つだけなので、スレーブはマスターの終了を待つ必要があります。

  • どのデバイスもマスターおよび/またはスレーブとして機能できるため、非常に柔軟です。

SPI

  • これは、マイクロコントローラー間の一般的な通信に推奨/使用するものです。

  • 高速-最大CLK / 2 = 8MHz(16MHzのCLKの場合)であり、最速の方法です。これは、クロック専用の独立したワイヤにより実現可能です。

  • MOSI、MISOデータ、およびSCKクロックワイヤはネットワーク全体で共有されます。つまり、配線が簡単になります。

  • これはマスター/スレーブ形式ですが、どのデバイスもマスターおよび/またはスレーブにできます。ただし、スレーブ選択の複雑さのため、(ネットワーク内の)共有配線では、2線式インターフェイスとは異なり、階層的にのみ使用する必要があります。IE。すべてのデバイスをツリーに編成する場合、デバイスはその子に対してのみマスターであり、親に対してはスレーブのみである必要があります。つまり、スレーブモードでは、デバイスは常に同じマスターを持ちます。また、これを正しく行うには、MISO / MOSI / SCKに抵抗をアップストリームマスターに追加して、デバイスがダウンストリームと通信している場合(スレーブとして選択されていない場合)、通信が他の部分の通信に影響を与えないようにする必要がありますネットワーク(抵抗を使用してこれを行うことができるレベルの数が制限されていることに注意してください。両方のSPIポートを使用したより良いソリューションについては、以下を参照してください)。

    AVRマイクロコントローラーは、スレーブ選択時にMOSI信号を自動的にトライステートにし、スレーブモードに切り替えます(マスターの場合)。

    階層ネットワークが必要な場合もありますが、ほとんどのネットワークはツリーのような方法で編成できるため、通常は重要な制限ではありません

  • 各AVRマイクロコントローラーが2つの個別のSPIポートをサポートするため、上記を少し緩和することができます。そのため、各デバイスは2つの異なるネットワークで異なる位置を持つことができます。

    とはいえ、ツリー/階層に多くのレベル(2つ以上)が必要な場合、上記の抵抗器を使用したソリューションは手間がかかりすぎて機能しません。この場合、ツリーの各レイヤー間でSPIネットワークを変更する必要があります。これは、各デバイスが1つのSPIネットワークの子に接続し、他のSPIネットワークの親に接続することを意味します。接続のツリーが1つしかないことを意味しますが、利点は、デバイスがその子の1つとその親の両方と同時に通信でき、手間のかかる抵抗がないことです(常に正しい値を選択するのが難しい) 。

  • MOSIワイヤとMISOワイヤが別々になっているため、マスターとスレーブの両方が同時に通信できるため、速度が2倍になる可能性があります。追加の各スレーブのスレーブ選択には追加のピンが必要ですが、これは大きな負担ではありません。10種類のスレーブでも10の追加ピンしか必要とせず、通常のAVRマイクロコントローラーに簡単に対応できます。

CANは、指定したAVRマイクロコントローラーではサポートされていません。他にも良い選択肢があるので、この場合はとにかくおそらく重要ではありません。


推奨はSPIです。これは高速で、配線が複雑すぎず、面倒なプルアップ抵抗を必要としないためです。SPIがニーズを完全に満たさないまれなケースでは(おそらくより複雑なネットワークで)、複数のオプションを使用できます(たとえば、両方のSPIポートと2線式インターフェイスを使用し、一部のマイクロコントローラーをペアリングします) USARTループを使用!)

あなたの場合、SPIを使用すると、当然、コンピューターにUSB接続されたマイクロコントローラーがマスターになり、コンピューターから各スレーブデバイスに関連コマンドを転送することができます。また、各スレーブから更新/測定を読み取り、コンピューターに送信することもできます。

8MHz、0.5mのワイヤ長では、問題になるとは思いません。ただし、その場合は、静電容量(グランドと信号線が近づきすぎないように注意し、異なる導体間の接続にも注意してください)、および信号終端にも注意してください。まれに問題が残る場合は、クロックレートを下げることができますが、必要ではないと思います。


私からのSPIに
賛成

2
私はSPIのファンでもありますが、おそらくI2Cも検討する価値があります(各デバイスに個別のCSラインを必要としない)。しかし、CANはそれほど簡単に却下されるべきではありません-結局のところ、それは選択の自動車バスですので、趣味のロボット工学のためにそれを排除しません!
アンドリュー

SPIバスには、マスターから各スレーブへの個別のCSラインが本当に必要ですか?もしそうなら、接続されたスレーブの数に関係なく、マスターへの正確に4つの接続を必要とする他のバスを、SPIバスに関するWikipediaの記事で言及されているものと呼びますか?
デビッドケアリー

1
+1巨大な応答のために、私は古い学校であり、私は485と一般的にソフトウェアアドレスを持つバスが大好きですが、この場合、速度とリソース消費のコンポーネントとして、SPIを選択します。電圧低下やクロック損失の振幅を被る可能性メモリ、NIC、など、:あなたのバスが異なる伝送速度で、他のICをcoesisten場合は特に、距離や電気的ノイズ、に注目していますが
RTOSkit

3
CANに関するコメントは正確ではありません。CANは単なる2線式バスではありません。最高速度が400kbpsのI2Cと混同していると思います。CANの最高速度は1Mbpsです。
Rocketmagnet

5

プロセッサ間通信にはCANを強くお勧めします。同じバスに最大22個のプロセッサを搭載したロボットで使用しています。優れたプロトコル設計により、利用可能な帯域幅の約90%を使用できます(すべてのエラーチェックとフレーム間スペースを考慮すると、約640kbps)。1つのCANバスで1000Hzで10個のモーターをサーボ制御できます。これは限界に近づいています。データを非常に慎重にパックすれば、おそらく20個のモーターに絞ることができます。

通常、CANには各プロセッサに1つのトランシーバチップが必要です(小さな8ピンデバイスです)。トランシーバーは、干渉をほとんど発生しない優れた差動信号を提供します。また、電気的にノイズの多い環境(モーター、ソレノイド、および無線送信機)で作業している場合、干渉の影響を受けません。

CANバス接続

ただし、限られた状況では、トランシーバなしでCANを使用することが実際に可能です。


EtherCAT

深刻な帯域幅を備えたバスを実装したいと考えているなら、EtherCATを試してみることをお勧めします。これは100Mbバスで、PCのイーサネットポートに接続できます。バスには2つの重要な部分があります。

  • 橋。これにより、イーサネット物理層がよりシンプルで低コストのLVDS物理層に変換され、大きなコネクタ、Phyチップ、およびイーサネット自体が必要とする多くのコンポーネントが不要になります。
  • ノード。各ノードには1つのET1200チップとマイクロコントローラーが必要です。

PCは、1kHz以上の速度でノードとの間で大量のデータを送受信できます。単一のEtherCATバスで非常に多くのものを制御できます。

追加:

Shadow Robot Companyは現在、Ronexと呼ばれる便利なEtherCATバスシステムを販売しています。これにより、かなり多くのI / Oを追加できます。また、モーターコントローラーや高品質ADCなど、他の種類のボードもすぐに導入する予定です。


その画像のソースは何ですか?CAN High赤線と青線の両方に対応しています。
イアン

1

私は古いスレッドを掘り起こしていることを知っていますが、これはちょっとしたトピックですが、BeckhoffからET1200チップを手に入れることができるとは思いません。しばらく前に彼らにメールを送り、Ethercatグループに参加する必要があるとアドバイスされました。そのためには、グループに貢献すること、つまりEthercatを使用したデバイスを構築して販売することを示す必要がありました。その時点で(そしてこの時点で)私はまだデバイス(ロボットアプリケーション用のブラシレスモーターコントローラー-現在CANを使用)のプロトタイプを作成しているので、何も提供できませんでした(完了までにしっかりとした時間を与えることができません-私はまだ私の作業中です)大学生)。私は彼らに失望を表明した。彼らは失望しないと言いました!! かなり面白いもの!私は本当にEthercatに入るのが好きですが、ASICは愛好家や会社のない人には触れられないようです。また、これは私の最初の投稿ですので、古い投稿を掘り下げて神々を怒らせたならおaびします!


ようこそ。答えが適切であれば、古い投稿を復活させることは問題ありません。そして、あなたのコメントが...私には、関連すると思われる
アンドリュー

どうも。これは素晴らしいフォーラムです!興味のないことですが、Ethercatの使用経験はありますか?PCBのプロトタイピングに適したスレーブデバイスを取得する他の方法を知っていますか?私は喜んで支払いますが、現時点では、Bechoff ASICを購入するためにグループに参加するための要件を満たしていません。イライラする!
法律

EtherCatではありません。私はCAN(良いオプション)、LIN(あまり良くないIMHO)を使用し、確かにSPIまたはI2Cを推奨できます
アンドリュー

ET1100またはET1200チップをつかむことはできましたか?現在利用可能な別のオプションがなかった場合:microchip LAN9252は、ET1100と互換性があり、かなりうまく機能します。SOESライブラリを使用してください
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.