PWMのIPからDCモータを制御してみた(KR260+PYNQ)

本サイトはアフィリエイト広告を利用しています。
AI

FPGAボードのKR260でPWMを制御してみました。

Python(PYNQ)経由でPWM出力して、モータドライバの基板を制御しています。

オリジナルの基板を作り、DCモータ制御した内容を紹介します。

 

スポンサーリンク

PWMのIPからDCモータを制御してみた(KR260+PYNQ)

AMD(Xilinx)のFPGAボードであるKR260には、PMODコネクタがあります。

PWMのピンとしても使用することができます。

専用のモータドライバ基板を作成して、PWMでDCモータ制御をしてみました。

 

実際のテスト動画は下記です。DCモータをPWM制御できていることが分かります。

※一緒にLEDでPWM制御も試しています。

 

 

基板の回路図・AWや、FPGAのプロジェクトの作成まで一から紹介してきます。

 

回路図とAW(アートワーク)

モータドライバ基板の回路図とAWのデータはGitHubに置いています。

KiCadで作成しています。

 https://github.com/iotengineer22/PCB-DRV8833-TEST

GitHub - iotengineer22/PCB-DRV8833-TEST: DRV8833-PCB-KiCad-DATA
DRV8833-PCB-KiCad-DATA. Contribute to iotengineer22/PCB-DRV8833-TEST development by creating an account on GitHub.

 

直接PMODコネクタに接続するために、2.54mmピッチのピンヘッダーを使っています。

 

回路図は下記です。

AWは下記です。

 

宣伝にもなりますが、PCBGOGOで基板作成したものです。

pcbgogo

 

VivadoでKR260のプロジェクトを作る

Vivadoを開いて、プロジェクトを作成していきます。

最終的に2つのモータを制御するために、4本のPWM出力と1本のGPIOを出力します。

 

Create Project

「Create Project」→適当な名前つけて進めていきます。

 

Project Typeでは、デフォルトのRTLにしておきます。

 

Default Partでは、Boardを選択してKR260を選びます。

 

Create Block Design

Projectファイルが出来上がります。

Create Block Designを選択して、ブロックのデザインを進めます。

 

Diagramの「+」箇所から、Zynq UltraScale+ MPSoCを選びます。

 

Diagramの「+」箇所から、PWMのIPを選びます。

IP選択後はMake Externalで出力ピンまで作り、4出力分コピーして対応します。

またGPIOのIPも1個作成しときます。

 

PWMのIPは編集しませんが、GPIOのIPは編集します。

今回は各IPでOUTPUT1本で使いますので、GPIO Widthを設定しました。

またAll outputsにもチェックを入れています。

 

Create HDL Wrapper

Sourceのデザインを右クリックして、Create HDL Wrapperします。

何かoptionsのウインドウが出るかもしれませんが、デフォルトで進めます。

IPブロックのデザインから、入出力につながるHDLが作られます。

 

作られたファイルを確認するとPWMとGPIOのOutputを確認できます。

 

 

XDCファイルを作成する

ピンアサインをしていきます。

Constrainsの箇所で右クリックしてAdd Sorucesから設定します。

Create FileでXDCファイルを追加します。

 

PMOD1の1ピン(H12)、3ピン(E10)、5ピン(D10)、7ピン(C11)、2ピン(B10)を設定しています。

  • PWM…1ピン(H12)、3ピン(E10)、5ピン(D10)、7ピン(C11)
  • GPIO…2ピン(B10)

 

 

Bitstreamを作成

Generate Bitstreamのファイルを作成します。エラーなければ作成できます。

 

プロジェクトの~.runs/impl_1/あたりにbitファイルができます。

またハードウェアの情報が入っている.hwhファイルも必要になります。おそらく下記にあります。

~.gen/sources_1/bd/design_1/hw_handoff

 

.hwfファイルは必ず、名前をBitstream.bitを合わせて名前変更しておきます。

下記のように合わせておきました。KR260に.bitと.hwhファイルを転送します。

  • design_1_wrapper.bit
  • design_1.hwhdesign_1_wrapper.hwh

 

Jupyter Notebook

Kria-PYNQをJupyter Notebookから使って、GPIOを制御します。

KR260にはLANケーブルがあるので、LANで繋げてブラウザ経由で編集していきます。

 

インストール後にifconfigなどでIPアドレスを確認します。

今回筆者の場合IPアドレスは「192.168.11.7」でした。

Webブラウザ(筆者の場合はChrome)で「http://192.168.11.7:9090/」と入力します。

 

Jupyter Notebookが表示されます。ディレクトリ位置は下記です。

/home/root/jupyter_notebooks/

フォルダを作成して、実行する.ipynbとVivadoで作成した.bitと.hwlを置きました。

 

ipynbファイル

今回筆者が作成・実行したipynbファイルは下記です。

 https://github.com/iotengineer22/AMD-Pervasive-AI-Developer-Contest/blob/main/jupyter_notebooks/pynq-pwm/PWM-test-PCB.ipynb

主に下記サイトを参照させていただきました。

 https://www.makarenalabs.com/pwm-on-pynq-how-to-control-a-stepper-motor/

 https://docs.amd.com/v/u/en-US/pg079-axi-timer

 

LEDでPWMのテスト

モータ制御をする前に、LEDでPWMが制御できているかを確認します。

LEDチェック用の基板は下記GitHubで紹介しています。

 https://github.com/iotengineer22/PCB-KV260-PMOD-TEST

GitHub - iotengineer22/PCB-KV260-PMOD-TEST: PCB-KV260(KR260)-PMOD-INOUT
PCB-KV260(KR260)-PMOD-INOUT. Contribute to iotengineer22/PCB-KV260-PMOD-TEST development by creating an account on GitHu...

 

実際にテストした動画が下記です。

 

PWMが10%→50%→99%でLEDの輝度が変わっているのが分かります。

(静止画ではわかりづらいため、動画での確認も是非お願いします)

 

PWMでDCモータドライバを制御する

モータドライバ基板とDCモータを接続して、PWMで制御します。

テスト動画は下記です。

 

FPGAをロード後に、前回転でPWMを10%→50%→99%にしてモータの出力制御しています。

 

その後、後回転でもPWMを10%→50%→99%にして、モータ制御できています。

 

 

まとめ

FPGAボードのKR260でPWMを制御してみました。

Python(PYNQ)経由でPWM出力して、モータドライバの基板を制御できました。

 

今回のKR260で実施した内容は、下記記事で紹介したテストの一部です。

AMD(Xilinx)のFPGAコンテストに参加した感想

AMD(Xilinx)のFPGAコンテストに参加した感想
AMD(Xilinx)とHackster(Avnet)が合同主催する、海外のコンテストに参加していました。AMD Pervasive AI Developer Contest の「Robotics AI」部門です。KR260というFPGAボ...

コメント