Table of Contents
この記事で学習できること
- ArduinoとモータドライバIC(TB6612FNG)を使ってDCモータ(RC300)を回転させ電圧と回転数の関係を調べます。測定の過程で以下を学習・調査します。
- DCモータ(RC300)の仕様
- モータドライバの選定
- TB6612FNG の仕様
- モータ駆動の回路構成
- PWM駆動するためのスッケチ
- 回転速度の測定
- よくあるトラブルと対処法
使用するDCモータ(RC300)の仕様
- 株式会社タミヤ製のエコモーターギヤボックス(3速タイプ)を購入しました。DCモーターとしてRC300-FT/14270/DVが同梱されていました。詳しいモーターの仕様は掲載されていなかったのでWebで仕様を調べます。

- RC300-FT/14270/DVの仕様書としての文書は見つかりませんでした。断片的にWebに掲載されていた仕様をまとめました。参考値として使います。
| 用語 | 参考値 |
| 無負荷電流 (回転数) | 1.9V:25 mA (3600 RPM) 3.0V:35 mA (5800 RPM) 4.5V:46 mA (8800 RPM) |
| 定格電流 (印可電圧 3V時) | 約140mA (4800 RPM 5 g.cm) |
| 最大動作電流 | 約 250~300 mA。 |
| ストール電流 (ロック電流) | 1.9V:約 0.6 ~ 1.2 A 3.0V:約 1.2 ~ 1.6 A 4.5V:約 1.8 ~ 2.2 A |
| 定格電圧 | 3V |
| 最大定格電圧 | 約 4.5V〜6.0V(4.5Vを推奨) |
使用するDCモータドライバの選定
- Arduinoでロボットを作っている記事でTB6612FNGというドライバICを見つけました。以前ドライバ(ICL293D)の学習結果を[ArduinoとL293Dを使ってDCモーターをPWM駆動する方法]の記事にまとめています。TB6612FNGとL293Dの仕様を比較してどちらを使うかを選択します。
| 項目 | TB6612FNG | L293D |
| 動作電圧(モーター側) | 2.5V ~ 13.5V | 4.5V ~ 36V |
| 連続出力電流 | 1.2A(1chあたり) | 600mA(1chあたり) |
| ピーク電流 | 3.2A(短時間) | 約 1.2A(短時間) |
| 出力構成 | フルブリッジ ×2 | ハーフブリッジ ×4(フルブリッジ×2として使用可) |
| 出力トランジスタ | MOSFET(低オン抵抗) | バイポーラ(Darlington) |
| 電圧降下(損失) | 低い(0.5V程度) | 高い(1.8V程度) |
| PWM対応 | 可能 | 可能 |
| 保護機能 | 過熱・低電圧遮断あり | なし |
- TB6612FNGをRC300のモータドライバとして選択しました。
- RC300-FT/14270 のストール電流(1.2A以上)に対して、L293D は定格を超える可能性が高く、発熱や故障のリスクがあります。
- TB6612FNG は1.2A連続、3.2Aピーク対応なので、ストール時もある程度耐えられます。
TB6612FNG の仕様
- TB6612FNG の仕様書が[TB6612FNG | 東芝デバイス&ストレージ株式会社]に掲載されています。

- TB6612FNGのピン配置と機能を抜き出しました
| PIN名称 | PIN番号 | 機能 |
| AO1 | 1,2 | chA 出力1 |
| PGND1 | 3,4 | Power GND 1 |
| AO2 | 5,6 | chA 出力2 |
| BO2 | 7,8 | chB 出力2 |
| PGND2 | 9,10 | Power GND 2 |
| BO1 | 11,12 | chB 出力1 |
| VM2,VM3 | 13,14 | Motor電源 |
| PWMB | 15 | chB PWM 入力 *1 |
| BIN2 | 16 | chB 入力2 *1 |
| BIN1 | 17 | chB 入力1 *1 |
| GND | 18 | 小信号GND |
| STBY | 19 | ”L”時にStandby *1 |
| Vcc | 20 | 小信号電源 |
| AIN1 | 21 | chA入力 1 *1 |
| AIN2 | 22 | chA入力 2 *1 |
| PWMA | 23 | chA PWM 入力 *1 |
| VM1 | 24 | Motor電源 |
*1 IC内部で200KΩのプルダウン
- chA、chBともに、IN1とIN2のHi、Loを組み合わせて回転方向を制御します。
| IN1 | IN2 | モータの動作 |
| Hi | Hi | ブレーキ |
| Lo | Hi | 正転 |
| Hi | Lo | 逆転 |
| Lo | Lo | ストップ |
- STBY端子が設けてあり、この端子を”L”とすると回転はせずに低消費電流モードになります。モーターを回転させる時はHiで使います。
TB6612FNGをDIP化した製品
- TB6612FNGのパッケージはSSOP24(端子間0.65mm)です。このままでは電子工作では使いづらいので、基板に実装してDIPパッケージのように2.54mm間隔の端子を出している製品を使いました。
- ICは例えばモータ用の電源ピンは複数ありますが、DIP化時に一つの端子にまとめてあります。端子の機能はシルク印刷してありました。

学習で使う部品
Arduino, DCモータ、ドライバ、外部電源、ブレッドボード、接続用の線材を準備します。
| Arduino UNO R3 | CPUボード | 備考 |
| RC300-FT/14270/DV | DC モータ | 1 個 |
| TB6612FNGのDIP化基板 | モータードライバ | 1 個 |
| 1.5V単4電池(3本) | モータ用電源(4.5V) | 1 個 |
| ブレッドボード、ジャンパ線 | 配線用部材 | (必要数) |
ArduinoでDCモーターを駆動する回路構成
- Arduino UNO R3のI/Oピンから取り出せる電流の最大値は20mAですからDCモータの直接駆動はできません。DCモータをArduino UNO R3に直接接続して駆動させようとするとArduino UNO R3は壊れる可能性があります。
- DCモータRC300の最大定格電圧は4.5V~6V(4.5Vを推奨)とのことでしたので、モーター用の外部電源は、1.5Vの乾電池を3本使って4.5Vとしました
- TB6612FNGのDIP化基板、Arduino UNO R3、モーター用電池(4.5V)は以下の表のように接続します。
| TB6612FNG DIP化基板 | Arduino UNO R3 | 備考 |
| AIN1 | Digital 2ピン | 回転制御信号 #1 |
| AIN2 | Digital 3ピン | 回転制御信号 #2 |
| PWMA | Digital 5ピン | PWM駆動信号 |
| VCC | 5V | 制御回路用電源 |
| GND | GND | グランド |
| STBY | 5V | 5VでStandbyを解除 |
| VM | – | モーター駆動用電源 |
● モーター用電源(4.5V)のGNDはTB6612FNGのDIP化基板のGNDとArduino UNO R3のGNDとに接続します。

ArduinoのPWM駆動機能
- Arduino UNO R3にはPWMを出力する機能が備わっています。Arduino IDEにはPWM波形を出力する関数が提供されており、スケッチでその関数を呼び出せば設定したポートからPWM波形が出力されます。
- PWM出力のできるArduino UNO R3の端子とPWM周波数です。ボードにポート番号が印刷されています。PWM波形が出力できるポート番号の前に’~’が加えられています。
| PIN 番号 | PWM 周波数 |
| 3, 9, 10, 11 | 490 Hz |
| 5, 6 | 980 Hz |
- PWMを出力する関数は、analogWrite(pin, value) です。
- pinでPWMを出力するpin番号を設定します。変数を使う場合は、int型です。
- valueでデューティ-サイクルを設定します。0~255の数値で設定し、0の場合はデューティ-サイクルが0%、255の場合はデューティ-サイクルが100%になります。
analogWrite(5, 128);- analogWrite(5, 128)はArduino UNO R3の5pinにデューティ-サイクルが50%の波形を出力した例です。
DCモーターをPWM駆動するスケッチ
● DCモータ(RC300)をTB6612FNGからのPWM波形で回転させるスケッチを作成します。
- const int pwmValue = 128; // Duty(0〜255の間で設定)の行の数値を変えてデューティ-サイクルを変化させます。
- 指定したデューティ-サイクルで時計方向と反時計方向に90秒ずつ回転します。この後止まります。(ループはしません)
// TB6612FNG モーター制御ピン定義
const int AIN1 = 2;
const int AIN2 = 3;
const int PWMA = 5;
// PWM設定
const int pwmValue = 128; // Duty(0〜255の間で設定)
const int runDuration = 90; // 回転時間(秒)
const int stopDuration = 10000; // 停止時間(ミリ秒)
void setup() {
// ピンモード設定
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMA, OUTPUT);
// 初期状態:モーター停止
stopMotor();
// シリアル通信開始
Serial.begin(9600);
Serial.println("モーター制御開始");
}
void loop() {
// 正転
Serial.println("正転開始(50% Duty)");
rotateMotor(true);
countSeconds(runDuration);
// 停止(10秒)
stopMotor();
Serial.println("停止中(10秒)");
delay(stopDuration);
// 逆転
Serial.println("逆転開始(50% Duty)");
rotateMotor(false);
countSeconds(runDuration);
// 最終停止
stopMotor();
Serial.println("完了:モーター停止");
// 以降は何もしない
while (true);
}
// モーター回転関数(方向指定)
void rotateMotor(bool forward) {
if (forward) {
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
} else {
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
}
analogWrite(PWMA, pwmValue);
}
// モーター停止関数
void stopMotor() {
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
analogWrite(PWMA, 0);
}
// 経過秒数を1秒ごとに表示
void countSeconds(int seconds) {
for (int i = 0; i < seconds; i++) {
Serial.print("経過時間: ");
Serial.print(i + 1);
Serial.println(" 秒");
delay(1000);
}
}
PWM波形のデューティ-サイクルを変えてDCモーターの回転数を測定
PWM波形のデューティ-サイクルを変えてDCモータの回転数を測定します。購入したDCモータRC300はギヤボックスの部品でした。このギヤボックスは減速の比率を3種類から選べます。実際のギヤボックスの比率を決める時の参考にできます。
- タコメーターを作成しサーボモータの回転数を測定する方法を[Arduinoの割込み関数を使ってサーボモーターの回転速度を測定しました]に記事にしています。作成した治具を使って、DCモーターの回転数を測定しました。

- 測定結果をグラフにまとめました。電源電圧が4.5Vの場合はPWMのデューティ-サイクル比率と回転数に比例関係があるようです。

● 株式会社タミヤ製のエコモーターギヤボックス(3速タイプ)は、114.7:1、38.2:1 そして12.7:1の比率で減速できます。RC300は定格電圧の3Vでは5300RPM程度で回転していました。38.2:1の減速比では140RPM程度になります。この回転数使って、今後は倒立振子・自己バランスロボットへの使用を考えています。
よくあるトラブルと対処法
| モーターが動かない | 配線の確認、駆動ICの制御ピンの操作を確認 |
| 逆回転しない | 駆動ICの制御ピンの操作を確認 |
| 電源が落ちる | 電源の配線を確認 |
まとめ
- TB6612FNGでDCモータを駆動する基本知識を学習できました。DCモータRC300を動作させるには過去学習したL293Dでは性能不足の可能性があることが解りました。もちろんL293Dで十分に駆動できる機器もあるはずです。DCモータを駆動する場合はDCモータの特性を調査・理解し適切なICを選ぶ必要があることも学習できました。
ご質問、誤植の指摘などありましたら。「問い合わせ 」のページからお願いします。
