現在、個人的に電子工作の技術を使ってプラモデルにギミックを組み込めないかあれこれ模索中です。とりあえず、1/35の戦車のプラモデルをラジコン化するという誰もが思いつきそうなプランを検討中ですが、今回はその流れでモータードライバの使い方について調べてみたので、記事にしてみたいと思います。
モータードライバといえば東芝製の「TA7291P」モータードライバが有名ですが、残念なことに既に生産終了らしく、現在入手できるものはストア在庫のみということになってしまっているようです。以前に購入したことのある秋月電子通商では既に入手できなくなっています。amazonの場合は、全く入手できないわけではないようですが、徐々に入手が難しくなってしまっているようです。
そこで、代替品として使える「TB67H450FNG」を実装したモータードライバモジュールなどを必然的に選択することになるわけですが、ネットを調べた感じだと比較的情報が少ないように感じます。では実際にどのように回路を組めばよいのでしょうか。また東芝製の「TA7291P」モータードライバで組んだ回路をどのように置き換えればいいのでしょうか。今回はこれら二つのモータードライバを比較するため、動作確認のみを目的としたRaspberry Piを使ったシンプルな回路を組んでみました。
目次
- TA7291Pについて
- TB67H450モータードライバモジュール(秋月電子通商製)について
- 回路の組み方と動作テストのためのサンプルコード
- まとめ
1. TA7291Pについて
まずは「TA7291P」についてです。このモータードライバは、4.5V〜20Vの電圧で最大2.0Aの出力を出せる性能があり、工作用のマブチモーターから少し大きめのモーターまで扱える性能があります。
オーディオファン モータードライバ 東芝製チップ TA7291P
モーターを制御可能 正回転 逆回転 停止 制御解放 フルブリッジドライバ
※上記のリンクはamazonへのリンクとなっています。
東芝デバイス&ストレージ株式会社
TA7291P製品概要
PIN端子について:
PIN端子 | 名称 | 機能 | |
1 | GND | GND | |
2 | OUT1 | モーター出力端子1 | |
3 | NC | 未接続 | |
4 | VREF | 制御電源端子(0〜20V)※ | |
5 | IN1 | ロジック入力端子1 | |
6 | IN2 | ロジック入力端子2 | |
7 | VM | モーター用電源 | |
8 | RS | モーター出力電流検出用端子 | |
9 | NC | 未接続 | |
10 | OUT2 | モーター出力端子2 |
※ 制御電源端子「VREF」の接続に関してですが、モーター駆動用バッテリーから配線する場合、抵抗(3k〜10kΩ)を介して配線します。
ロジック入力端子について:
IN1 | IN2 | モーター動作 | |
0 | 0 | ストップ | |
PWM | 0 | 正転(PWM値に応じて可変) | |
0 | PWM | 逆転(PWM値に応じて可変) | |
1 | 1 | ブレーキ |
2. TB67H450モータードライバモジュール(秋月電子通商製)について
こちらはモータードライバIC「TB67H450FNG」を実装した秋月電子通商製のモータードライバモジュールです。超小型ながら4.5V〜44Vの電圧で最大3.0Aの出力を出せる性能があり、TA7291Pよりも性能が優れています。
この秋月電子通商製のモジュールは8PINで実装されており、キットには細ピンヘッダ(オスL型)が付属しています。このピンヘッダは自分でハンダ付けする必要があります。
PIN端子について:
PIN端子 | 名称 | 機能 | |
1 | GND | GND | |
2 | IN2 | ロジック入力端子2 | |
3 | IN1 | ロジック入力端子1 | |
4 | VREF | 制御電源端子(0〜4V)※1 | |
5 | VM | モーター用電源 | |
6 | OUT1 | モーター出力端子1 | |
7 | RS | モータ出力電流検出用端子(使用しない場合はGND)※2 | |
8 | OUT2 | モーター出力端子2 |
※1 制御電源端子「VREF」への接続ですが「TA7291P」の場合とは異なり、Raspberry PiやArduinoの3.3Vピンから配線します。
※2 モータ出力電流検出用端子「RS」は、この端子と、GNDの間に抵抗を挿入することで、モータドライバから出力される電流を設定することができる端子とのことです。定電流制御機能を無効にしたい場合は、RS 端子はGNDに接続するとよいようです。
ロジック入力端子について:
IN1 | IN2 | モーター動作 | |
0 | 0 | ストップ | |
PWM | 0 | 正転(PWM値に応じて可変) | |
0 | PWM | 逆転(PWM値に応じて可変) | |
1 | 1 | ブレーキ |
スイッチサイエンス製のモータードライバについて
自分は未購入のため使用していませんが、スイッチサイエンスからも「TB67H450FNG」を実装したモータードライバモジュール(10PIN)が発売されているようです。製品仕様は下記を参照ください。
TB67H450FNG搭載モータドライバ ピッチ変換基板(スイッチサイエンス)
3. 回路の組み方と動作テストのためのサンプルコード
それでは、紹介した二つのモータードライバを実際にRaspberry Piに接続して動作確認してみたいと思います。下図のように回路を組んでみました。

二つのモータードライバーは上図のような回路で動作させることができました。ちなみに、TA7291Pに接続されているカーボン抵抗は10kΩです。
サンプルコード
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
p1 = GPIO.PWM(17, 50)
p2 = GPIO.PWM(18, 50)
p3 = GPIO.PWM(24, 50)
p4 = GPIO.PWM(25, 50)
p1.start(0)
p2.start(0)
p3.start(0)
p4.start(0)
dr1=[0,25,50,75,100,75,50,25,0,0,0,0,0,0,0,0]
dr2=[0,0,0,0,0,0,0,0,25,50,75,100,75,50,25,0]
dr3=[0,25,50,75,100,75,50,25,0,0,0,0,0,0,0,0]
dr4=[0,0,0,0,0,0,0,0,25,50,75,100,75,50,25,0]
try:
for i in range(16):
p1.ChangeDutyCycle(dr1[i])
p2.ChangeDutyCycle(dr2[i])
p3.ChangeDutyCycle(dr3[i])
p4.ChangeDutyCycle(dr4[i])
sleep(2)
except KeyboardInterrupt:
pass
p1.stop()
p2.stop()
p3.stop()
p4.stop()
GPIO.cleanup()
コード解説:
このサンプルコードでは、TB67H450FNGは、GPIOピン17、18番に接続し、TA7291Pの方は24、25番に接続しています。
動作についてですが、PWM値を2秒毎に変化させ10秒で最大出力にしたあと、減速ののち停止させ、今度は回転を逆転させるような記述となっています。実行後32秒でプログラムは停止します。もう少し効率の良い書き方もあるかと思いますが、ひとまずこれで動作を確認できるかと思います。

モーター駆動用バッテリーは単4サイズ×3本の電池ボックスに、エネループを入れて使用しています。エネループは仕様では電圧1.2Vですが、満充電の際にテスターで計測すると1.35V程度の電圧になることが多いようです。

電池ボックス 単4×3本 リード線・フタ・スイッチ付(秋月電子通商)
写真のモーターは英国PIMORONIから取り寄せた金属製ギアドモーターです。超小型ながら牽牛な作りで気に入っています。写真では1/35のタミヤ製の戦車プラモデルの起動輪を多少加工してイモネジでモータの軸と固定してあります。

Right Angle Micro Metal Gearmotor (PIMORONI)
4. まとめ
今回は電子工作におけるモーター制御に欠かせない2種類のモータードライバを比較しながら使用してみました。残念ながら、TA7291Pは今後入手しづらくなっていくのだと思いますが、TB67H450FNGも小型で使いやすいモータドライバモジュールなので、今後はこちらを中心に使っていこうかと思っています。
参考資料:
2種類のモータドライバの違いについて(スイッチサイエンス)
金丸隆志 著「カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる」(amazon)