instructables VHDL モーター速度制御 方向と速度を決定する 左右の速度コントローラー
注記: このページは、より大きなビルドの一部です。 必ずここから開始してください。これにより、以下がより大きなプロジェクトのどこに適合するかを理解できます
以上view
モーターの速度と方向の制御は、光検出器ロボットの XNUMX つの主要部門の XNUMX つです。もう XNUMX つは、光検出器または光検出器部門です。 光検出器部門はロボットの視覚に焦点を当てていますが、モーターの速度と方向制御部門はロボットの動きに焦点を当てています。 モーターの速度と方向の制御は、光検出器部門から与えられたデータを処理し、モーターの動きの形で物理的な出力を与えます。
この分割の目的は、光探索ロボットの左右両方のモーターの速度と方向を制御することです。 これらの値を決定するには、カメラによってキャプチャされ、しきい値処理によって処理された光のサイズと位置が必要になります。 また、各モーターの測定速度も必要になります。 これらの入力から、各モーターの PWM (パルス幅変調) 値を出力できます。
これを実現するには、これらの VHDL モジュールを作成する必要があります (以下にもリンクされています)。
- コントロール
- 誤差計算
- バイナリ変換
- 光源の不在
この部門の VHDL コードはこちらで確認できます。
用品
VHDL でのコードのテストにも使用できるため、ISE Design Suite 14.7 でコーディングすることをお勧めします。 ただし、コードを BASYS 3 にアップロードするには、Vivado (ver. 2015.4 または 2016.4) をインストールし、制約を .xdc 拡張子で記述する必要があります。
VHDL モーター速度制御: 方向と速度の決定、左右の速度制御装置: ページ 1
指示ステップ
ステップ 1: コントロール
光探索ロボットの動作を制御する方法を理解するために、光源を見たときのロボットの望ましい動作について説明します。 この動作は、光源の位置とサイズに応じて制御されます。
使用されるアルゴリズムは、RC ロボット コントローラーに似ており、左または右に回転できる XNUMX つのレバーと、前後に回転できる別のレバーがあります。
光を求めるには、光源の位置がロボットの真正面にある場合、このロボットを直線的に移動させます。 そのためには、左右のモーターの速度を同じにする必要があります。 ライトがロボットの左側にある場合は、右のモーターを左のモーターよりも速く動かして、ロボットがライトに向かって左に曲がるようにします。 逆に、ライトがロボットの右側にある場合は、左のモーターを右のモーターよりも速く動かして、ロボットがライトに向かって右に曲がるようにします。 これは、RC コントローラーの左レバーに似ており、ロボットを左、右、またはまっすぐに動かすかどうかを制御できます。
次に、光源が遠くにある場合 (小さな光源) にロボットを前進させ、検出された光源が近すぎる場合 (大きな光源) にロボットを後退させます。 また、ロボットが光源から離れているほど、ロボットの動きが速くなるようにします。 これは、RC コントローラーの右レバーに似ており、前方または後方に移動するかどうか、および移動する速度を制御できます。
次に、各モーターの速度の数式を導出し、-255 から 255 までの速度範囲を選択します。負の値はモーターが後方に回転することを意味し、正の値はモーターが前方に回転することを意味します。
それがこのロボットの動きの基本的なアルゴリズムです。 このモジュールの詳細については、ここをクリックしてください。
ステップ 2: 誤差計算
モーターの目標速度と方向が既にわかっているので、測定されたモーターの速度と方向も考慮する必要があります。 速度目標に到達した場合、モーターをその運動量だけで動かします。 そうでない場合は、モーターの速度を上げたいと考えています。 制御理論では、これは閉ループ フィードバック制御システムとして知られています。
このモジュールの詳細については、ここをクリックしてください。
ステップ 3: バイナリ変換
前の計算から、各モーターに必要なアクションは既にわかっています。 ただし、計算は符号付きバイナリを使用して行われます。 このモジュールの目的は、これらの符号付きの値を、PWM ジェネレーターが読み取ることができる値 (方向 (時計回りまたは反時計回り) と速度 (0 ~ 255 の範囲)) に変換することです。 また、モーターからのフィードバックは符号なしバイナリで測定されるため、符号なし値 (方向と速度) を誤差計算モジュールで計算できる符号付き値に変換する別のモジュールが必要です。 このモジュールの詳細については、ここをクリックしてください。
ステップ 4: 光源の不在
ロボットが光を検出すると、光を求めて移動するロボットを作成しました。 しかし、ロボットが光を検出しない場合はどうなるでしょうか? このモジュールの目的は、そのような状態が存在する場合に何をすべきかを指示することです。
光源を探す最も簡単な方法は、ロボットをその場で回転させることです。 設定された秒数回転した後、ロボットがまだ光源を見つけていない場合は、電力を節約するためにロボットの動きを停止します。 さらに設定された秒数が経過すると、ロボットはその場で再び回転して光を探します。 このモジュールの詳細については、ここをクリックしてください。
ステップ 5: 仕組み
この説明については、上の図を参照してください。 このインストラクターの冒頭で述べたように、しきい値分割からの入力「サイズ」と「位置」が必要になります。 これらの入力が有効であることを確認するには (例:ampたとえば、サイズ = 0 を受け取った場合、カメラがまだ初期化中であるためではなく、カメラが光を検出していないため、サイズは本当にゼロです) また、「READY」と呼ばれる何らかのインジケーターが必要になります。 これらのデータはコントロール (Ctrl. vhd) によって処理され、各モーターの目標速度 (9 ビット、符号付き) が決定されます。
モーターの出力をより安定させるには、閉ループ システムでフィードバックを使用します。 これには、モーター速度測定部から各モーターの「方向」と「速度」を入力する必要があります。 これらの入力を計算に含めたいので、これらの符号なしの値を 9 ビットの符号付きバイナリに変換する必要があります。 これは、符号なしから符号付きバイナリ コンバーター (US2S.vhd) によって行われます。
エラー計算 (error.vhd) が行うことは、目標速度から測定速度を差し引いて、各モーターのアクションを決定することです。 これは、両方が同じ値の場合、減算がゼロになり、モーターがその運動量だけで動くことを意味します。 倍数を追加して、ロボットがより速く目標速度に到達するようにすることもできます。
モーター コントローラーは各モーターの速度と方向を必要とするため、アクションの符号付き値を速度 (1 ビット) と方向 (8 ビット) の 2 つの個別の符号なし値に変換する必要があります。 これは、符号付きから符号なしへのバイナリ コンバーター (SXNUMXUS.vhd) によって行われ、モーター制御部門への入力になります。
また、光が検出されない場合の対処方法を決定するモジュールも追加しました (no light counter. Bhd)。 このモジュールは基本的にカウンターであるため、ロボットが回転またはその場にとどまるのに必要な時間をカウントします。 これにより、ロボットは目の前にあるものだけでなく環境を「見る」ことができ、実際に利用できる光源がない場合にバッテリーの電力を節約できます。
ステップ6:組み合わせる Files
組み合わせるには files、各モジュールからの信号を接続する必要があります。 そのためには、新しい最上位モジュールを作成する必要があります file. 前のモジュールの入力と出力をコンポーネントとして挿入し、接続用の信号を追加して、各ポートを対応するペアに割り当てます。 上の図の接続を参照し、ここでコードを見てください。
ステップ7: テストする
コード全体の作成が完了したら、コードをボードにアップロードする前に、コードが機能するかどうかを確認する必要があります。特に、コードの一部は別の人によって作成されている可能性があるためです。 これには、ダミーの値を入力して、コードが意図したとおりに動作するかどうかを確認するテストベンチが必要です。 各モジュールをテストすることから始めて、すべてが正しく機能する場合は、最上位モジュールをテストできます。
ステップ 8: ハードウェアで試す
コードをコンピューターでテストしたら、実際のハードウェアでコードをテストできます。 制約を作成する必要があります file Vivado (.xdc file BASYS 3) の場合、どの入力と出力がどのポートに接続されるかを制御します。
重要なヒント: 電気部品が電流または体積の最大値を持つ可能性があることを難しい方法で学びましたtagエス。 値については、必ずデータシートを参照してください。 PMOD HB5 の場合、vol を必ず設定してください。tage 電源から 12 ボルト (これは必要なボリュームであるため)tage)、およびモーターが動くのに必要なだけの電流。
ステップ9:他のパーツと組み合わせる
前の手順が成功した場合は、コードを他のグループと組み合わせて、最終的なコードをロボットにアップロードします。 それでは、ほら! 光を探すロボットの作成に成功しました。
ステップ 10: 貢献者
左から右へ:
- アントニウス・グレゴリウス・ディーヴン・リヴァルディ
- フェリックス・ウィグナ
- ニコラス・サンジャヤ
- リチャード・メディアント
非常に素晴らしい: VHDL モーター速度制御: 方向と速度の決定、左右の速度制御装置: ページ 6
ありがとうございますviewイング! このプロジェクトは、実際にはクラス プロジェクト (BASYS 3 ボードと OV7670 カメラを備えた光探索ロボット) の一部にすぎないため、すぐにクラスの指示にリンクを追加します!
素晴らしい: 全部揃うのが楽しみです。
ドキュメント / リソース
![]() |
instructables VHDL モーター速度制御 方向と速度を決定する 左右の速度コントローラー [pdf] 説明書 VHDL Motor Speed Control 方向と速度を決定する Left and Right Speed Controller, VHDL Motor Speed, Control 方向と速度を決定する Left and Right Speed Controller |