LoginSignup
17
17

More than 5 years have passed since last update.

たぶん一番わかりやすいESP8266でMP4212を使ってモーターを制御する方法(正転、逆転、速度、停止、ブレーキ) ※MP4207も同様

Last updated at Posted at 2017-05-11

ESP8266でMP4212を使ってモーターを制御しようと思ったら、情報が断片的でハマったので、わかりやすくまとめてみました。
読みやすいサンプルソースも無かったので、なるべく読みやすく組みました。
Raspberry PiもGPIOが使えるので同様に制御できると思います。
MP4207も同様に制御できると思います。
※モータードライバTA7291Pが簡単だったのでMP4212も楽勝だろう思ったら、前提知識が多く必要で困りました。

MP4212はそもそもモータードライバではなく、汎用のHブリッジICなんですね。
Hブリッジについては、こちらのページが分かりやすいです。

※MP4212は内部抵抗が小さくて発熱も少ない自作ラジコンやロボットに向いている優秀なICなのですが、生産が終了し流通在庫のみらしいので、欲しい場合は秋月電子通商の上位互換品TPC8407×2モジュール MP4212ピン互換 パワーMOSFETモジュールを買うと良いかもです。

MP4212の等価回路

MP4212のデータシートによると等価回路は以下の通りです。
image.png

うん。初心者の私には全くわからん。
ので、一つずつ読み解いていきます。

一番分かりやすいところ(電源)から行くと

  • 10ピンは、モーター用の電源の(+)を接続します
  • 1ピンは、モーター用の電源の(-)GNDを接続します

これは簡単。

モーターをつなぐ所は、DCモーターの端子2つをそれぞれ、端子A、端子Bとして

  • 3,7ピンはモーターの端子Aに接続します
  • 5,9ピンはモーターの端子Bに接続します

残りは、制御用の信号をいれるピンです。

  • 6,8,2,4ピンはGPIO4つに接続します。

制御方法は後述。

FET(電解効果トランジスタ)のPチャネル、Nチャネル

次に電源の極性を逆転してモーターに伝える仕組みを理解する前提条件として、MP4212の内部でスイッチとして使われているFET(電解効果トランジスタ)のPチャネル、NチャネルのON/OFF条件の理解が必要です。
image.png

  • 赤いところがPチャネルのFETで、LOWでON、HIGHでOFFになります
  • 青いところがNチャネルのFETで、HIGHでON、LOWでOFFになります
  • だから
    • 6ピンまたは8ピンをONにするにはdigitalWrite(PIN, LOW)
    • 2ピンまたは4ピンをONにするにはdigitalWrite(PIN, HIGH)

ということを理解します。

それをふまえて、以下。

モーターを正転

モーター(M)を正転するには次のように信号を制御します
image.png

  • 6ピンと4ピンをONにすると正転

モーターを逆転

モーター(M)を逆転するには次のように信号を制御します
image.png

  • 8ピンと2ピンをONにすると逆転

モーターの速度

モーターの速度を制御する場合は、

  • 正転の場合6ピンをPWM制御します。
  • 逆転の場合8ピンをPWM制御します。
  • PWM制御というと難しそうですがようするにanalogWriteです。
  • LOW(=0)がONなので、analogWrite(PIN, 0)が速く、1023に近いほど遅く回転します。

モーターを停止

モーターを停止する場合は、

  • 6ピン、8ピン、2ピン、4ピンを全部OFFにします
    • つまり、
    • 6ピン、8ピンをHIGH(OFF)
    • 2ピン、4ピンをLOW(OFF)
    • ですね

モーターをブレーキ

モーターをブレーキする場合は、モーターの端子をショートさせれば良いので、

  • 2ピン、4ピンのみをONにします
    • つまり、
    • 6ピン、8ピンをHIGH(OFF)
    • 2ピン、4ピンをHIGH(ON)
    • ですね

ここまで分かったらあとは簡単。

回路図

以下のように接続します。
image.png

P5010235.jpg

ソースコード

スケッチは以下の通り。

MP4212.ino

// GPIOのPIN設定
const int FET6 =  5; // MP4212 Pch  LOW :on  HIGH:off
const int FET8 = 14; // MP4212 Pch  LOW :on  HIGH:off
const int FET2 = 12; // MP4212 Nch  HIGH:on  LOW :off
const int FET4 =  4; // MP4212 Nch  HIGH:on  LOW :off

 // 正転
void forward(int speed) {
  analogWrite (FET6, 1023-speed); // on
  digitalWrite(FET8, HIGH);       // off
  digitalWrite(FET2, LOW);        // off
  digitalWrite(FET4, HIGH);       // on
}

// 逆転
void back(int speed) {
  digitalWrite(FET6, HIGH);       // off
  analogWrite (FET8, 1023-speed); // on
  digitalWrite(FET2, HIGH);       // on
  digitalWrite(FET4, LOW);        // off
}

// 停止
void stop() {
  digitalWrite(FET6, HIGH);  // off
  digitalWrite(FET8, HIGH);  // off
  digitalWrite(FET2, LOW);   // off
  digitalWrite(FET4, LOW);   // off
}

// ブレーキ
void brake() {
  digitalWrite(FET6, HIGH);  // off
  digitalWrite(FET8, HIGH);  // off
  digitalWrite(FET2, HIGH);  // on
  digitalWrite(FET4, HIGH);  // on
}


void setup() {
  pinMode(FET6, OUTPUT);
  pinMode(FET8, OUTPUT);
  pinMode(FET2, OUTPUT);
  pinMode(FET4, OUTPUT);
}

void loop() {

  // 正転(徐々に加速)
  for (int sp=0;sp<=1023;sp++) {
    forward(sp);
    delay(2);
  }
  delay(1000);

  // 停止(慣性)
  stop();
  delay(1000);

  // 逆転(徐々に加速)
  for (int sp=0;sp<=1023;sp++) {
    back(sp);
    delay(2);
  }
  delay(1000);

  // ブレーキ
  brake();
  delay(1000);

}

動作デモ

17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17