【Raspberry Pi Pico入門 – 21】モータードライバを使ってみる

2024年3月30日Raspberry Pi Pico入門,基本編Arduino,Raspberry Pi Pico

概要

今回はモータードライバICのL293Dを使ってDCモーターの制御をしてみます。
DCモーターは数あるモーターの中でも最もシンプルで、+と-の端子に電圧をかけるだけで回すことが出来ます。ただ、回す方向を変えたりスピードを調整しようとすると結構難しい回路が必要になります。(組むのは簡単ですが、安定して動かすのは難しいです)

モータードライバICとはDCモーター制御回路の難しいところをICの中で組んでくれているので、マイコンとモーターの間にモータードライバを入れるだけでDCモーター制御が出来るようになります。

実行環境

IDE:Arduino IDE 2.2.1
MCU:Raspberry Pi Pico

モータードライバはスターターキットに入っているL293Dを使います。Amazon等でも入手できます。

L293D

モーターは130モーターを使います。これはマブチモーター社のFA-130RAの互換品の総称で、型式の一部を取って130モーターと呼ばれています。基本的にはマブチ製の純正品とほぼ同じ性能です。

130モーター(写真はエルパ製)

回路

以下のように配線します。モーターの消費電流は3Vで0.3~0.5Aほどなので、Raspberry Pi Picoの3.3V端子ではなく乾電池を使います。(ちなみにVBUSも最大電流を超えるのでNGです)
モーター用の電池はワニグチクリップ等を使って接続してください。

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。

/* GPIO設定 */
const int PIN_ENABLE = 13;
const int PIN_IN_1 = 14;
const int PIN_IN_2 = 15;

void setup() {
  /* シリアル通信の設定 */
  Serial.begin(115200);

  /* GPIO設定 */
  pinMode(PIN_IN_1, OUTPUT);
  pinMode(PIN_IN_2, OUTPUT);
  pinMode(PIN_ENABLE, OUTPUT);

  /* PWMの設定 */
  analogWriteFreq(25000);
  analogWriteRange(4096);
}

void loop() {
  Serial.println("正転・低速");
  SetMotorSpeed(true, 3500);
  delay(3000);

  Serial.println("正転・高速");
  SetMotorSpeed(true, 4095);
  delay(3000);

  Serial.println("逆転・低速");
  SetMotorSpeed(false, 3500);
  delay(3000);

  Serial.println("逆転・高速");
  SetMotorSpeed(false, 4095);
  delay(3000);
}

void SetMotorSpeed(bool dir, int speed) {
  /* 回転方向の設定 */
  if (dir) {
    digitalWrite(PIN_IN_1, HIGH);
    digitalWrite(PIN_IN_2, LOW);
  } else {
    digitalWrite(PIN_IN_1, LOW);
    digitalWrite(PIN_IN_2, HIGH);
  }

  /* 回転速度の設定 */
  if (speed < 0) {
    analogWrite(PIN_ENABLE, 0);
  } else if (speed > 4095) {
    analogWrite(PIN_ENABLE, 4095);
  } else {
    analogWrite(PIN_ENABLE, speed);
  }
}

動作確認

モータの回転方向や回転速度が3秒ごとに変われば成功です。「speed」の値は低くしすぎるとモーターの起動に必要なパワーが足りず、全く回らないことがあるので注意してください。

解説(作成中)

モータードライバの仕組み

今回使用したL293Dは「Hブリッジ回路」と呼ばれる回路を一つのICにまとめたものになります。Hブリッジ回路がどのようなものなのかをイメージするために半導体部分をリレーに置き換えて回路シミュレーションを作ってみました。実際の回路から色々と省略していたりHigh/Lowを逆転させたりしてますが、大雑把にはこんな感じで動かしています。

回路シミュレーションのリンク

ちなみにですが、L293DはHブリッジ回路が2つ入っているので、2つのモーターを制御することが出来ます。