1

私がやっているUSBデバイスは、ステッピングモーターを制御することです。パラレルポートを使用する前にこれを行いました。これらのポートは現在のマザーボードには存在しないため、デバイスと PC (ホスト) の間に USB 通信を実装することにしました。私の目的を達成するために、12Mbps の USB モジュールを備えたデバイスにフリースケール マイクロコントローラーを提供しました。私の USB デバイスは、特定の時間に 4 バイト (モーター ドライバーごとに 1 つ) を受信する必要があります。これは、すべてのバイトがエンジンを動かすステップであるためです。PC (ホスト) では、ユーザーのアプリケーションが情報を含むテキスト ファイルを処理し、軌道座標を作成して、各モーターに対して特定の速度でバイトを送信します (モーターの加速と速度を達成するのに時間はかかりません)。

パラレル ポートの使用は、各バイトがユーザー アプリによって決定された時間に順次送信されるため、簡単な作業でした。

フルスピード USB プロトコルについて少し調べてみると、フレームが 1ms ごとに送信されることがわかりました。その後、1ミリ秒ごとに4バイト以上を送信できますが、パラレルポートで行ったように時間を管理できません。私のマイクロコントローラーは、フレームごとに最大 64 バイトを送信できます (転送用紙の種類に基づいて、Control、Bulk、Int、Iso ..)。

質問1:

1 ミリ秒ごとよりも速く 4 バイトのパケットを送信できる方法を知りたいですか?

質問2:

これらのタイプのデバイスについてアドバイスできる転送のタイプは何ですか?

ありがとう。

4

2 に答える 2

0

次のように同じ目標(CNCマシンの駆動/制御)を達成しています:

USBデバイスは単なる同期I/Oパラレル ポートです。連続バルク転送1 つのパイプを入力として使用し、もう 1 つを出力として使用します。このようにして、〜70KHzのサンプルレートで同期64ビットパラレル通信を実現できました。(i)4.27+(o)4.27 MBit/s私のMCUとコードの制限である周囲のトラフィックを使用します。速度が速くなると、USBイベントの割り込みにより、出力にジッターが発生します。

やり方(MCU側)

2 つのFIFOがあり、1 つは受信用で、もう 1 つは送信データ用です。サンプル レートの周波数でタイマー割り込みが発生しています。その中で、入力を読み取って最初のFIFOにフィードし、他のFIFOからデータを読み取って出力に送信します。

その上で、USBタスクが (同じ割り込み内で) 呼び出され、転送自体を処理するUSBとの間でデータを送受信するためのFIFOをチェックします。

このタスクにはATMEL AT32UC3Aチップを選択します。これらの MCU にはFIFOとプログラムの両方に十分なメモリがあり、 ICを追加する必要がないため、長くて苦痛に満ちた完全な調査を行った結果、これらのMCUを選択することにしました。使用可能なFPGAパッケージがあります(BGAオプションではありません)。HS USBがあります(ほとんどのUSB MCUには、あなたのようなFSしかありません)。で運行しています。それは多くの興味深い機能をサポートしており (過去に興味深いプロジェクトを行っていました)、過去のATMEL MCUの経験があります。66MHz

したがって、同様のことを達成したい場合は、

  1. 一括転送から開始 ( PC -> USB -> MCU -> output)
  2. 必要に応じて FIFO を追加

    必要なサンプルレートがわからない。古いLPT80-196KHzは、製造元によって処理できます。現代のものははるかに遅いです(これは愚かで悲しいことです).

  3. 重要なサンプルレートを測定する

    これには、オシロスコープまたは非常に優れた聴力が必要です。出力データは同期している必要があるため、穴やジッターなどはありません...

    これらのいずれかが存在する場合は、サンプル レートを下げる必要があります。私のセットアップは1MHzサンプルレートでも処理できましたが、USBジッターが存在していたため(USBイベントが1サンプルより長く送信をフリーズすることがありました...)70KHz、安定した出力のみを達成しました。

  4. 必要に応じて入力も追加します

    ただし、出力が正常に機能している場合のみです。この後もサンプルレートを下げることを忘れないでください...入力と出力に別々のバルクパイプFIFOを使用してください。

于 2015-03-04T08:31:46.510 に答える