動機
SparkFun ROB-14450は小さく、2つのDCモーターを制御できるので重宝しているのだが、東芝のTB6612FNGのデータシートが少しわかりにくかったので駆け出しでも理解できるようにまとめた。
ピンの役割
- VM - DCモーターの電源。最大13.5Vまで対応。一番下に許容動作範囲表を貼っておく。
- VCC - ドライバ制御の電源。最大5.5Vまで対応。一番下に許容動作範囲表を貼っておく。
- GND - VMとVCCのグランド
- A01 - 1つ目のDCモーターのプラスを接続する。
- A02 - 1つ目のDCモーターのマイナスを接続する。
- B01 - 2つ目のDCモーターのプラスを接続する。
- B02 - 2つ目のDCモーターのマイナスを接続する。
- GND - VMとVCCのグランド
- PWMA - 1つ目のDCモーターの回転速度の制御
- AIN2 - 1つ目のDCモーターの制御
- AIN1 - 1つ目のDCモーターの制御
- STBY - モータードライバの制御の準備
- BIN1 - 2つ目のDCモーターの制御
- BIN2 - 2つ目のDCモーターの制御
- PWMB - 2つ目のDCモーターの回転速度の制御
- GND - VMとVCCのグランド
- 同じGNDが3つあるがどれを使ってもよい。
Arduinoでの制御
モーターの回転は付け方でそれぞれ変わると思うので前後左右の移動のプログラムから各自変更してほしい。
左右のモータは回転速度を同じにしていても実際は微妙に違う場合があるのでテストしながら確認する。
// Arduino Nano
const int STBY = 3; // モータードライバの制御の準備
const int AIN1 = 4; // 1つ目のDCモーターの制御
const int AIN2 = 5; // 1つ目のDCモーターの制御
const int BIN1 = 6; // 2つ目のDCモーターの制御
const int BIN2 = 7; // 2つ目のDCモーターの制御
const int PWMA = 9; // 1つ目のDCモーターの回転速度
const int PWMB = 10; // 2つ目のDCモーターの回転速度
void setup() {
pinMode(STBY, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
digitalWrite(STBY, HIGH); // スタンバイ
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
}
void loop() {
// 前進(後進は全て逆にする)
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
delay(1000);
// 右回り(左回りは逆)
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
delay(1000);
// 回転速度を設定(0~255)まで
analogWrite(PWMA, 50);
analogWrite(PWMB, 50);
}
H-SW 制御ファンクション
許容動作範囲 (Ta = -20~85°C)
最後に
自分はBCMをRaspberry Piのピン番号を基準として指定していたので動作せず、行き詰ってテスターを使ってようやく原因が分かった。
ArduinoはGPIOを基準に指定することを忘れないでほしい。
これから挑戦する人は同じようなトラップにかからないように願う。
リファレンス
https://toshiba.semicon-storage.com/jp/semiconductor/product/motor-driver-ics/brushed-dc-motor-driver-ics/detail.TB6612FNG.html
https://componentsearchengine.com/part-view/ROB-14450/SparkFun