DE10-nanoでフォロを動かす

モノづくり

前回までの記事でFPGAのプログラミングができました。今回はDE10-nanoからモータードライバを経由してフォロの制御を実施していきたいと思います。

DE10-nano側の端子

今回はブレッドボードを使用してDE10-nanoとモータードライバ、そしてフォロを接続していきます。DE10-nano側は基板上部にあるJP1「GPIO」を使用します。

メーカーのホームページからダウンロードしてきた回路図を見ると、JP1「GPIO」は+5V電源が11pin、+3.3Vが29pin、GND端子が12pin,30pinに割り当てられており、その他の36本の端子はFPGAから「GPIO_0_D0~D35」という信号名で接続がされています。FPGAのソースコードでは「GPIO_0」という名前の入出力ポートになり、これらの端子は3.3V出力の端子になっています。

モータードライバ側の端子

こちらの写真がAmazonで購入したモータードライバの基板です。東芝製のTB6612FNGが実装されています。

背面を見ると端子名が印字されています。

TB6612FNGのデータシートで各端子の仕様を確認していきます。

まず、電源VCCの範囲は、標準3V、最大5.5Vとなっていますが、VCCの入力電圧によって制御信号の電圧しきい値が変わります。H入力の最小検出電圧がVCC×0.7とされているためVCCを5Vとしてしまうと、制御信号のH入力のためには3.5Vの電圧が必要となるためDE10-nanoのGPIOでは対応することができません。そのため今回電源VCCとしては3.3Vを接続することになります。

次にモーター用電源VMは5V電源を接続します。こちらは、1chあたり1.2Aの電流を必要とするためDE10-nanoの5V電源を使用することができません(DE10-nanoのユーザーマニュアルにはACアダプタに依存すると記載があるものの表記は1Aのため)。モーター用電源はフォロの乾電池4本を使用します。

STBY端子,PWMA端子,PWMB端子はDE10-nanoのGPIO端子を使用します。どちらもモーター動作時はHレベルにする必要がありますが、FPGA起動直後に異常な動作をしないように、FPGA起動後1s経過したタイミングでLレベルからHレベルに変化させるようにしたいと思います。

AIN1端子,AIN2端子,BIN1端子,BIN2端子もDE10-nanoのGPIO端子と接続します。DE10-nanoのスライドスイッチでAIN1端子とAIN2端子を制御し、プッシュボタンでBIN1端子とBIN2端子を制御したいと思います。

最後にAO1端子,AO2端子,BO1端子,BO2端子はモータに接続します。

配線

DE10-nano、モータードライバ、フォロをブレッドボードを使用して接続していきます。

モータードライバのSTBY端子をGPIOコネクタの1pin,PWMA端子をGPIOコネクタの3pin,PWMB端子をGPIOコネクタの4pinと接続します。AIN1端子とAIN2端子はGPIOコネクタの5pin,6pin、BIN1端子とBIN2端子はGPIOコネクタの7pin,8pinに接続します。

VCC端子はGPIOコネクタ3.3V電源の29pinと接続。GND端子はGPIOコネクタの12pin,30pinと接続します。

フォロ側は頭部を分解させてもらい、電池ボックスとモーター端子をブレッドボードに接続します。これで配線作業は完了になります。

FPGAのソースコード記述

FPGAは以前の記事で作成したプロジェクトファイルをベースにし、今回の配線にあわせてソースコードを編集していきます。まず、STBY端子、PWMA端子、PWMB端子の動作を記述します。この3つの端子は起動後に1sのカウントをしてからそれぞれH出力とします。

次にスライドスイッチとキースイッチのチャタリング防止回路を記述します。10msごとに入力値を取り込み、10回同じHigh/Lowの状態が継続していたら、その値を確定とする回路を記述します。DE10-nanoのボードでは、プッシュボタンが押されるとKEY信号がL状態となるため、チャタリング防止回路で入力値を反転し、プッシュボタンが押された時はHとして扱うようにします。値を確定するソースコードはsw0だけ参考までに記載していますが、同様の回路をsw1,key0,key1に対しても記述します。

最後に、確定した入力信号をGPIO端子へ出力します。念のためデバッグ用にLEDにも信号を出力しておきます。

DE10-nanoのROMへプログラム書き込み

以前の記事では、DE10-nanoの電源を落とすと書き込んだファイルが消える方法でプログラミングをしていました。今回は電源を再投入しても書き込んだファイルでFPGAが動作するようにします。これで書き込んでおけばDE10-nanoとPCを接続していなくても、DE10-nanoの電源投入時から独自のプログラムで起動させることができるようになります。

Quartusにてコンパイルを実行後、Quartusのファイルタブにある「Convert Programming Files」を選択します。「Convert Programming Files」の設定方法は、ユーザーマニュアルにも記載があるので省略しますが、DE10-nanoに実装されているROMに書き込むためのjicファイルを生成することができます。注意点としては、Configurationデバイスをユーザーマニュアル記載の「EPCS128」に設定してjicを生成した場合、DE10-nanoに書き込むことができませんでした。実際に基板に実装されているICを確認したところ、「EPCS64」を設定することでDE10-nanoにjicファイルを書き込むことができました。

生成したjicファイルをProgrammerでDE10-nanoのROMに書き込みます。こちらもユーザーマニュアルに記載があるので詳細は省略しますが、jicファイルの書き込みは少し時間を要します。

DE10-nanoにプログラムの書き込みが終わったら一度DE10-nanoの電源を落とします。

改造フォロの起動

電池ボックスに電池を挿入し、DE10-nanoの電源を再投入します。動画が無いので申し訳ありませんが、電源再投入後STBY、PWMA、PWMBの状態を示すLEDが点灯します。

STBY、PWMA、PWMBのLEDが点灯した後は、プッシュボタンを押すとフォロが前進・後退、スライドスイッチを入力すると右旋回、左旋回をさせることができました。当初、頭の中の予定ではプッシュボタンで旋回し、スライドスイッチで前進・後退をさせるつもりでしたが2つのモータの配線と逆だったのはここだけの話です。

あまり難しいことはしていませんが、ひとまずは計画通りにDE10-nanoを使用してフォロを制御することができました。Amazonで購入したモータードライバもうまく動いてくれたので良かったと思います。

まとめと今後

今回までの記事でフォロの製作から、DE10-nanoを使用してフォロの制御まで実施することができました。フォロ自体もモーターを2つで動作しているシンプルな構成にも関わらず、ユニークな動きをしてくれるので非常に楽しいロボットだと思いました。

またフォロの制御に使用したDE10-nanoは潤沢なGPIO端子、Arduinoのインターフェース、A/Dコンバータ入力などを持っているため、色々なセンサを使用してフォロを制御できる可能性も感じました。今後は何か面白そうなセンサを見つけた時に、フォロを使って実験ができればと思っています。

今回までの記事で、電子工作のロボット「フォロ」を作ってみたい方や、FPGAが搭載されたDE10-nanoを使ってみたい方にお役に立てばと幸いと考えています。長い記事になってしまいましたが、今回はここまでになります。それではまた。

コメント

タイトルとURLをコピーしました