ZyboでDCモータを2つつなげてみる
前回はZyboでDCモータ回してみたが、このモータドライバPmodDHB1は2つDCモータを接続することができる。そして実はDCモータを2つ買っていたので、今回はRTLを少し書き換えてDCモータを2つ回せるようにしてみる。
開発環境
Windows 10
Vivado 2020.1
Zybo(Zynq-7000、型番410-279)
Digilent 290-008 DC Motor/Gearbox (1:53 Gear Ratio) × 2個
実際に回している様子
普通にモーターを2個回すだけだとちょっと面白くないので、3Dプリンターでクランク機構を作ってちょっとしたロボットのようなものを作ってみたのが以下の動画↓
フジロック開催中なのでFPGAと3Dプリンターでプチョヘンザロボットつくった。顔はうちの奥さんの力作 pic.twitter.com/oBr9mGY8Ro
— Wakky (@wakky_free) August 22, 2021
なお、本題から外れるが3Dプリンターで色々つくっている日記もやっているので、興味があれば覗いてみてください。
ZyboでDCモータを2つ回すプロジェクト
前回同様、特にIPは使わずに自作のRTLのみでモーターをZybo上のスイッチで制御できるようにした。RTL + xdcファイル + Tclの形式でプロジェクト一式を以下に置いてある。
https://github.com/WakkyFree/FpgaDCmotor/tree/master/DCmotorTestDouble
Tclファイルからプロジェクトを作成する方法は以下を参照。
モーターを制御するRTL
基本的には前回のモーターを1個回したRTLと内容は同じなので、差分のポイントだけ書いておく。といってもいじったのはtopモジュールのzybo_topくらいで、Zybo上のスイッチSW1、BTN2をinputとして追加して、2つめのDCモータ制御モジュールのmotor_controller2に接続して2つめのDCモータを制御できるようにしている。
そしてMOTOR_EN2、MOTOR_DIR2のoutputは、モータドライバPmodDHB1に接続している。
module zybo_top ( input CLK, input RST, input SW0, input SW1, input BTN0, input BTN1, output [3:0] LED, output MOTOR_EN1, output MOTOR_EN2, output MOTOR_DIR1, output MOTOR_DIR2 );
今のところはDCモータは常にMOTOR_ENをHIGHにして回しているが、モータドライバ、DCモータはPWM制御に対応しているので、次回からはmotor_controller.vの中身をいじって、PWM制御をできるようにしてみたいと思う。
日記まとめ
ZyboとDCモータで色々と試してみた軌跡を以下でまとめてます。興味があればどうぞ。