モータードライバーを使ってモーターを制御する その1(TB6612FNG)
はじめに
今回はデュアルモータードライバーのTB6612FNGを紹介します。これまで小型のロボットに散々使ってきましたが、改めての紹介です。
TAMIYA製品との相性が良くて、私はギアボックスを制御するのに使っています。TAMIYA製品のクローラーやタンクと併せて使っても面白そうですね。書籍でもマイコンで制御している製作例をよく見かけます。
この記事では特に電子工作初心者の方にも分かりやすいように配慮して、製作例を交えながら説明しようと思います。部活の新入生教育とかで使いたいんですよね…
▼TB6612FNGを使った製作例
TB6612FNGについて
TB6612FNGはデュアルモータードライバーで、つまり二つのモーターを制御することができます。
▼例えばメカナムホイールは四つのタイヤを別々に制御する必要があるので、TB6612FNGを二つ使いました。
データシート
電子部品の使い方は、データシートを読むと分かります。説明書みたいなものです。
▼データシートはこちら。TB6612FNGは東芝製で、日本語のデータシートがあります。
まず注目してもらいたいのは以下の三点です。
- 許容動作範囲の電源電圧。TAMIYAのギアボックスと電池を使えば、ちょうどいい感じです。
- 絶対最大定格は絶対に超えないようにします。壊れます。
- H-SW 制御ファンクションに沿って制御します。プログラムを書くときに参考にします。
▼モータードライバでよくあるロジックを簡単にするとこんな感じ。HighとLowはこのあとプログラムで制御します。
IN1 | IN2 | 動作 |
---|---|---|
High | High | ブレーキ |
Low | High | 正転 |
High | Low | 逆転 |
Low | Low | ストップ |
TB6612FNGではAとBの二つのモーターを制御します。Aを制御する場合は以下のようになります。
- AIN1とAIN2で動作を制御します。二つのピンのHighとLowを制御するので、4通りですね。
- PWMAで速度を調整します。
- AO1とAO2にモーターを繋ぎます。
STBYはスタンバイを制御するためのピンです。Lowだとスタンバイ状態になって、モーターを動かすことはできませんが、消費電流を抑えることができます。
販売ページ
▼Amazonの販売ページ。廉価な代わりに不良品があったりするので、注意が必要です。
▼SWITCH SCIENCEの販売ページ。Sparkfun製のものは、ピンの名前が印字されているので使いやすいです。
▼秋月電子の販売ページ。これはチップ部品なので、動作確認をするには難しいです。
https://akizukidenshi.com/catalog/g/gI-11317/
▼チップ部品自体はあまり変わらないのですが、ブレッドボード(下記参照)で使いやすくしたDIP化基板は、見た目が異なる場合があります。
ブレッドボードとは
▼写真の穴が開いた白い板のことで、電子部品や電線を挿して配線することができます。はんだ付けしなくても回路を試すことができるので、非常に便利です。
回路を組む
今回はArduino Unoというマイコンを使っています。Arduinoの詳しい説明は省きますが、ピンの電圧をプログラムで制御できます。
Arduino Unoのデジタルピンを使って、データシートで見たHighとLowを制御します。PWM制御できるピンと、できないピンがあることには注意してください。
▼Arduino Unoの写真。PWM制御できるピンには数字に「~」がついています。
▼回路図はこちら。同じ記号のところは同じ端子に繋がっています。画像ではArduino Nanoになっていますが、Unoと同じピン名です。
V_BATTのところには、単三電池の正極を繋いでいます。
▼実際の配線。さらにモーターの端子を挿すので、結構ごちゃごちゃします。
プログラムを書く
▼Arduinoのプログラム
非常に簡単なものですが、Speed()関数とMove()関数を用意しています。
Speed()関数
Speed関数ではモーター二つの速度を、0~255の値で設定します。
analogWrite関数はPWM制御によって、見かけの電圧を制御することができます。
▼analogWrite関数のページ
https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
Move()関数
switch文を使って、()内の引数によって動作を変更しています。loop文でシリアルモニタに入力された値を取得し、その値に合わせて制御します。
実際の動作
Speed()を変更して、動作確認をしてみました。以前製作した二輪ロボットに取り付けている、TAMIYAの「ミニモーター薄型ギアボックス」を使っています。
▼Speed(255)のとき。実際に走らせると結構早いです。
▼Speed(100)のとき。コントローラで操作するなら、このくらいがちょうどいいです。
最後に
TB6612FNGは非常に使いやすくて、おすすめのICです。モータードライバーは他にもありますが、使い方が似ているので同じように制御できると思います。
▼以前の記事で、TB6612FNGを使ったステッピングモーターの制御もできました。DRV8833もよく使われているモータードライバーですね。
電子工作初心者の方向けに記事を書きましたが、Arduino IDEの説明をした記事とかも必要な気がしてきました。そのうち書くかもしれないです。