自作のドライバ基板でステッピングモータを回してみました。
Pythonで簡単にプログラムを作って、パルス波形を作成しています。
基板の回路図、プログラム含めて紹介します。
ステッピングモータを自作のドライバ回路とプログラムで動かしてみた
自作のドライバ基板でステッピングモータを回してみました。
ドライバICはDRV8833を使用しています。ステッピングモータは汎用の28BYJ48です。
ステッピングモータの1-2相制御(ハーフステップ)を行いました。
KV260というFPGAボードから簡単にPythonで制御しています。
オシロスコープで波形含めて確認しました。詳細を紹介していきます。
自作のモータドライバ基板
自作のモータドライバ基板に関しては、下記コンテストで使用したものです。
PCBGOGOで基板作成したものです。その際のブログ記事は下記です。
回路図の基板データ・実装部品に関しては、下記リポジストリに詳細を残しています。
今まで自作基板でDCモータはテストしていましたが、ステッピングモータは未実施でした。
ICのDRV8833としては、2つのDCモータ・1つのステッピングモータを制御できます。
そのため、今回ステッピングモータで試してみました。
ステッピングモータ
ステッピングモータ28BYJ48に関しては、下記のものです。
下記記事でも、ラズパイと一緒にセットで付いてきたドライバ基板でテストしています。
ステッピングモータをラズパイで制御して、波形まで確認してみた
今回はコネクタ先を切って、自作ドライバ基板に接続しています
モータ電源は5Vのため、今回は評価ボードのUSBコネクタから引き出しています。
下記のようなUSBから電源引き出せる端子台形状のものは便利です。
テストプログラム
本来Verilog・VHDLからしっかりしたクロックでパルス波形を作るべきですが…
今回はPython(jupyter notebook)で簡単にテスト的に作っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from pynq import Overlay from pynq.lib import AxiGPIO import time ol = Overlay("/root/jupyter_notebooks/pynq-stepper/dpu.bit") gpio_0_ip = ol.ip_dict['axi_gpio_0'] gpio_1_ip = ol.ip_dict['axi_gpio_1'] gpio_0_out = AxiGPIO(gpio_0_ip).channel1 gpio_1_out = AxiGPIO(gpio_1_ip).channel1 mask = 0xffffffff # Stepper motor sequence step_sequence = [ 0x8, #[1, 0, 0, 0], 0xC, #[1, 1, 0, 0], 0x4, #[0, 1, 0, 0], 0x6, #[0, 1, 1, 0], 0x2, #[0, 0, 1, 0], 0x3, #[0, 0, 1, 1], 0x1, #[0, 0, 0, 1], 0x9 #[1, 0, 0, 1] ] def move_motor(steps, delay): gpio_1_out.write(0x1,mask) for _ in range(steps): for num in step_sequence: gpio_0_out.write(num,mask) time.sleep(delay) try: while True: move_motor(64, 0.01) # Set the number of steps and delay time.sleep(1) # Wait for 1 second except KeyboardInterrupt: print("Exiting program") gpio_0_out.write(0x0,mask) gpio_1_out.write(0x0,mask) |
今回使っているKV260でのセットアップ方法に関しては、下記記事を参考ください。
また下記GitHubのリポジストリに今回のプログラム・モデル含めて記載しています。
オシロスコープ
オシロスコープは下記で紹介しているRIGOLの趣味向けの4ch品を使用しています。
オシロスコープの使い方!初めての人向けに多くの測定事例を紹介
ステッピングモータの動作テスト
KV260でのステッピングモータをの動作方法例を紹介します。
実際のテスト動画は下記です。
評価ボードはKV260を使用しています。プログラムはPythonを使っています。
下記例のようにjupyter notebookのフォルダにプログラムとモデルを用意します。
1 2 3 4 |
sudo su cd $PYNQ_JUPYTER_NOTEBOOKS cd jupyter_notebooks cp -rf /home/ubuntu/kv260-ubuntu-test/jupyter_notebooks/pynq-stepper/ ./ |
最初にプレ・準備テストです。
ステッピングモータの1-2相制御が出来ているか、LED基板とオシロで確認しています。
LEDと波形が狙い通りの点灯・波形をしています。ステップ周波数は12.5Hzです
GPIOを使用して、1-2相制御できていることが確認出来ました。
LED基板に関しては、下記記事で発注した旨を紹介しています。
続いて自作ドライバ回路を使って、ステッピングモータを制御しています。
ドライバICはDRV8833を使用しています。自作基板です。
モータ電源は評価ボードのUSB5Vを使っています。
正常に回転して、波形も問題ないことを確認しています。
ステップ周波数を10倍の125Hzにしての動作確認もしています。
問題なく動作できています。
ステッピングモータと画像認識のテスト
KV260にWebカメラとステッピングモータを接続した応用編のテストです。
Webカメラでオレンジボールを物体検出したら、ステッピングモータを回すように制御しています。
Pythonのプログラムを開始します。
1 2 3 |
cd kv260-ubuntu-test/stepper-motor/ source /etc/profile.d/pynq_venv.sh python3 app_gst-yolox-real-normal-camera-stepper.py |
実際のテストプログラムは下記に保存しています。
テスト動画が下記です。
オレンジボールがWebカメラで検出できないときは、ステッピングモータは回りません。
検出できているときだけ、ステッピングモータが回転することが分かります。
まとめ
自作のドライバ基板でステッピングモータを回してみました。
Pythonで簡単にプログラムを作って、パルス波形を作成しています。
基板の回路図、プログラム含めて紹介しました。
簡単にテストできますので、ぜひ皆様もドライバ基板を作ってみてください。
PCBGOGOで基板作成したものです。その際のブログ記事は下記です。
回路図の基板データ・実装部品に関しては、下記リポジストリに詳細を残しています。
コメント