【FPGA】ZyboにモータドライバとDCモータをつないでスイッチで動かしてみる(FPGAとDCモータで遊ぼう日記2日目)

投稿日:2021年9月10日
最終更新日:2021年9月21日

ZyboでDCモータを回してみる

前回はZyboでDCモータを動かすための部品を買うところまで書いた。今回は、ZyboにDCモータをつないで簡単な制御をするRTLを書いて、実際にモータを回すところまで書いていきたいと思う。今回はZyboのPLブロックのみ使って、モータ制御をRTLで実装する。

なお、このDCモータはPWM制御で動かすことができるのだが、今回はひとまず細かいPWM制御は組み込まずに常にHIGH(Duty比100%)で回してみる。

 

開発環境

Windows 10

Vivado 2020.1

Zybo(Zynq-7000、型番410-279)

Digilent 290-008 DC Motor/Gearbox (1:53 Gear Ratio) × 2個

Digilent 410-259 PmodDHB1

 

実際に回している様子

まず最初に接続関係をのせておいた方が良いかなと思うので、実際に動いている動画を以下にのせておく。ZyboのJBコネクタにPmodDHB1をつなぎ、PmodDHB1のJ2コネクタにDCモータを接続、6Vの電源(1.5Vの電池を4つ直列)をJ4コネクタに接続している。ちなみにオリンピックうんぬんと書いているのは、ちょうどこれをやっているときに東京オリンピックがやってたから。

実はこの動画を撮った時点ではPWMのDuty比を落としたRTLを組み込んでいるので、下記でのせているGithubのプロジェクトのDuty比100%のRTLではもう少し早く回る。

PWMのDuty比を落としたRTLも後々公開はするつもりだが、モータ素人のため意図した動きになっているか確信が持てないので、確認してからこの日記で公開したい。

 

Zyboでモータを回すプロジェクト

今回は特にIPは使わずに、自作のRTLのみでモータをZybo上のスイッチで制御できるようにした。いつものごとくRTL + xdc + Tclの形式でプロジェクト一式を以下に置いてある。

https://github.com/WakkyFree/FpgaDCmotor/tree/master/DCmotorTest

Tclファイルからプロジェクトを作成する方法は以下を参照。

【FPGA】Vivadoのプロジェクトをtclから生成する

上記の動画のように接続して、githubのファイル一式からtclでプロジェクト生成してbit streamをZyboに書き込めば動くはず。ただしZyboの型番によってピンアサインが違うかもしれないので、使う場合は自分のZyboの回路図見て確認してください。アサインが違っていて壊れても責任はもちませんのであしからず。

 

モータを制御するRTL

モータやモータドライバの仕様はデータシートに書いてあるのでいちいち説明しないが、RTLの概要だけ説明しておく。まずはトップファイルのzybo_top.v。CLKはPLブロックにつながっている125MHzクロック。SWによりモータの回転方向を切り替えて、BTNを押すことによりモータを回転させている。ピンアサインはxdcファイルを参照。

以下のサブモジュールでデッドタイムの制御などを行っている。デッドタイムについては「モータ デッドタイム」とかでググればたくさん出てくるので割愛。デッドタイムはprameterで上位モジュールから設定できるようにしている。今回はモータ回したいだけなので特にギリギリまでは攻めずに適当に長めの時間を取っている。

motor_controller #(.DEAD_TIME(26'd124999999)) motor_controller1 (
  .CLK(CLK),
  .RST(RST),
  .SW(SW0),
  .BTN(BTN0),

  .MOTOR_DIR(MOTOR_DIR1),
  .MOTOR_EN(MOTOR_EN1)
);

motor_controller.vの方はカウンターでデッドタイムをつくってるのと、入力のSW/BTNをモータとつながる信号線MOTOR_DIR、MOTOR_ENと結線するくらいしかやってないけど、この中を拡張してPWM制御とかをやっていくイメージ。

 

日記まとめ

ZyboとDCモータで色々と試してみた軌跡を以下でまとめてます。興味があればどうぞ。

【FPGA】ZyboでDCモータを回そう日記

 


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください