ここが分かると面白くなる!エレクトロニクスの豆知識

第2回:はじめてのモータドライバ

エレクトロニクスに関する基礎知識やさまざまな豆知識を紹介する本シリーズ。今さらに人に聞けない、でも自信を持って理解しているかは怪しい、そんな方にぜひ参考にして頂くべく、基本的な内容から応用につながる部分まで、幅広く紹介していきたいと思います。

さて、電子工作をはじめると「ロボットを作ってみたいな」「何か動く装置を作ってみようかな」といった電気的に動くものを作ってみたくなる方もいらっしゃると思います。これらのほとんどにはモータが使われることが多く、モータの回転をギアで減速してホイールを回転させたりリンク機構を動かしたりすることで多彩な動きを実現することができます。

エレクトロニクスの豆知識 第2回では、モータを動かすために使う「モータドライバ」について取り上げていきます。今回はArduinoでモータを制御することを目指して、モータドライバICの使い方を紹介していきます。

 

目次

  1. モータドライバとは
  2. Hブリッジによる正逆転
  3. モータドライバICとは
  4. データシートを眺めてみよう
  5. モータドライバICを使ってみよう
  6. スイッチでモータドライバICを制御してみよう
  7. ArduinoでモータドライバICを制御してみよう
  8. まとめ

 

1. モータドライバとは

「モータドライバ」はその名のとおりモータを駆動(ドライブ)するためのものです。モータに乾電池を接続するだけだと、モータはその乾電池の電圧に応じて全速力で一方向に回転するだけですが、モータドライバをうまく使うことで回転方向を正転・逆転と2方向にできたり、回転スピードを好きなように設定したりと自在にモータを制御することができるようになります。

動画 モータを正逆転させる様子

 

2. Hブリッジによる正逆転

まずはモータの正逆転がどのようなしくみで実現されているか、その原理についてご紹介します。

モータを正転させるだけの回路は図2.1のような構成になっています。

tidbits-of-electronics-02-02

図2.1 モータを正転させる回路

 

この回路では、乾電池やモータを逆向きに配線を手でつなぎ替えるなどのことをしないとモータは逆転しません。もちろんそのような面倒なことはロボットや装置に搭載することを考えると現実的ではありません。

そこで、モータを正逆転させるための回路構成として「Hブリッジ(エイチ・ブリッジ)」という方法があります。Hブリッジは図2.2のようにモータの両端子に合計4個のスイッチをVCCとGNDの方向に接続する形で構成されます。

tidbits-of-electronics-02-03

図2.2 Hブリッジの基本構成

 

モータを正転させるときは、図2.3のように左上と右下のスイッチのみをONに、また逆転させるときは右上と左下のスイッチのみをONにすることで、スイッチのON/OFFの組み合わせによってシンプルにモータの正逆転を実現することができます。なお、左側2つのスイッチを同時に(または右側2つのスイッチを同時に)ONにするとVCCとGNDがショートしてしまうためONにする組み合わせには注意が必要です。

tidbits-of-electronics-02-04

図2.3 Hブリッジによるモータの正逆転

 

3. モータドライバICとは

「モータドライバIC」はモータドライバ回路を構成するのに必要とされるMOSトランジスタによるHブリッジ・制御回路・保護回路などがひとつのパッケージにまとめられたICです。数十アンペア級の大電流のモータドライバを作るときはディスクリート部品を組み合わせて回路を作ることもありますが、数アンペア程度のモータドライバであればモータドライバICを使うことで回路の小型化や保護回路による過電流保護の恩恵を受けることができます。

今回は一般的な模型用DCモータを制御することを想定し、モータドライバIC「BD6231F」を使ってみます。

tidbits-of-electronics-02-05

図3.1 モータドライバIC「BD6231F」

 

4. データシートを眺めてみよう

まずはモータドライバにスイッチを接続して、モータを正逆転させてみます。これからモータドライバIC「BD6231F」の周辺に電子部品や配線を接続していきますが、電源電圧や接続方法はモータドライバICのデータシートを参照しながら考えていきます。部品の型番でインターネット検索したり、部品販売サイトで紹介されているデータシートを参照したりして眺めてみましょう。

tidbits-of-electronics-02-06

図4.1 データシートの一部

 

【製品ページ】Hブリッジドライバ 36V耐圧 – BD6231F

使用するモータドライバIC「BD6231F」はデータシート内の「BD6231F」と書いている部分を見ればその情報を確認することができます。他の箇所には同じシリーズの別種の部品が掲載されているので注意して型番を確認しましょう。

「BD6231F」はSOP8パッケージ(8ピンの1.27mmピッチ表面実装IC)になっている部品です。図4.2はデータシートから抜粋したブロック図・端子配置図・端子説明です。端子説明を見ると、それぞれの端子が何の役割を持っているのかが記載されています。

tidbits-of-electronics-02-07

図4.2 BD6231Fのブロック図・端子配置図・端子説明

 

電源電圧の推奨範囲は図4.3のように6~32Vとなっているため、今回は6Vを電源(VCCとGND)に接続します。

tidbits-of-electronics-02-08

図4.3 BD6231Fの推奨電圧

 

また、BD6231Fには動作モードというものがあり、モータドライバの制御入力端子(FIN, RIN, VREF)へ入力する信号の種類によって動作方法が変わります。

tidbits-of-electronics-02-09

図4.4 動作モード

 

5. モータドライバICを使ってみよう

今回使うICは1.27mmピッチの表面実装パッケージになっているため、このままではブレッドボードに挿して使用することができません。そこで、まずはICとピンヘッダをDIP変換基板にはんだ付けします。

tidbits-of-electronics-02-10

図5.1 DIP変換基板に実装する部品

 

【使用部品】

ICを基板に実装するときはICの向きやピン番号に注意しましょう。今回使用するDIP変換基板にはピン番号がシルク(白い文字)で刻印されていますが、このピン番号は図5.2のような考え方で番号を合わせます。

 

tidbits-of-electronics-02-11

図5.2 ICのピン番号の考え方

 

はんだ付けをしている様子を定点撮影してみましたので、初めて表面実装部品のはんだ付けにチャレンジする方はよかったら参考にしてみてください。

動画 はんだ付けの様子(4倍速)

 

はんだ付けができると、図5.3の写真のようになります。

tidbits-of-electronics-02-12

図5.3 DIP変換基板に実装したICとピンヘッダ

 

6. スイッチでモータドライバICを制御してみよう

まずはスイッチを使ってモータドライバICを動かし、モータを正逆転させてみます。SW1を押すとモータが正転、SW2を押すとモータが逆転するというものです。モータからの回生電流によるノイズ対策のためC1は積層セラミックコンデンサ(0.1μF)を、C2は電解コンデンサ(100μF)を使用しています。

tidbits-of-electronics-02-13

図6.1 BD6231周辺回路(スイッチによる制御)

 

なお、この回路ではVREF端子はVCCに接続しており、FINとRINはONかOFF(HかL)の入力となりますのでMode (b)の正転モードかMode (c)の逆転モードによる動作となります。

tidbits-of-electronics-02-14

図6.2 正転モード・逆転モード

 

それでは実際にモータを正逆転させてみましょう。

動画 スイッチによる正逆転

 

このようにスイッチによってモータドライバICへの制御入力を行い、モータを正逆転させることができました。

 

7. ArduinoでモータドライバICを制御してみよう

さあ、Arduinoを使ってモータドライバICを制御してみましょう。先ほどのスイッチでモータドライバの制御入力を行っていましたが、それをArduinoのポートに置き換えるだけです。なお、ArduinoはUSBケーブルによる給電で動かしています。

tidbits-of-electronics-02-15

図7.1 BD6231周辺回路(Arduinoによる制御)

 

この回路での動作モードはVREFがVCCに接続されており、FINとRINへ入力する信号はPWM信号またはL信号となるためMode (e), (f)のPWM制御モードAとなります。

tidbits-of-electronics-02-16

図7.2 PWM制御モードA

 

Arduinoのプログラムは下記の「test_BD6231.ino」のように作成しました。10番ピンと11番ピンからanalogWrite関数を使ってPWM信号を出すようにしており、10番ピンからは正転時のPWM信号を、11番ピンからは逆転時のPWM信号を出力します。

最終的にこのプログラムでは「30%出力を最大として、モータの正逆転スピードをゆるやかに変化させる」という動作をします。

const int pinFin = 10;
const int pinRin = 11;
int theta = 0;

void setup() {
}

void loop() {
  int speedMotor = 30 * sin(theta * PI / 180);  //-30 to +30の間でサインカーブを描く
  driveMotor(speedMotor);  //モータ制御
  delay(20);
  theta = (theta + 1) % 360;  //thetaをカウントアップし剰余をとる
}

//モータを制御する関数 引数:speed (-100 to 100でスピードを指定)
void driveMotor(int speed) {
  int output = constrain(abs(speed * 255 / 100), 0, 255);
  if (speed > 0) {
    analogWrite(pinFin, output);
    analogWrite(pinRin, 0);
  } else if (speed < 0) {
    analogWrite(pinFin, 0);
    analogWrite(pinRin, output);
  } else {
    analogWrite(pinFin, 0);
    analogWrite(pinRin, 0);
  }
}

 

これでモータを動かしてみると、先ほどのスイッチで正逆転させているときよりも、モータの加速がゆるやかになっていたり、最大回転速度が遅くなっていたりすることがわかるでしょうか?

動画 Arduinoによる制御

 

モータドライバICを使うことで、Arduinoのようなマイコンでモータを制御できるようになるため、手でスイッチを押すよりも繊細にモータの回転速度を制御できるようになります。
これを応用すれば、センサが反応したときに自動的に装置を作動させたり、ジョイスティックの傾きに応じた回転速度でモータを回したりといった様々な動作を実現することができます。モータによって動く装置やロボットはこれらのしくみを組み合わせて作られているものなので、アイデア次第でいろんな面白いものを作ることができそうですね!

 

8. まとめ

今回はモータドライバの基礎となるHブリッジを学び、モータドライバICを実際に使いながらモータを回してみました。モータドライバICはただ単にモータを回せるだけでなく、過電流や加熱に対する保護回路も搭載されているため安全にモータを制御することができます。電子工作でモータ制御をするとモータへの過負荷などで過電流・加熱が問題になることがよくありますので、安全対策が施されているモータドライバICを使って安全に工作を楽しみましょう!

スマホでコントロールできるロボットを作ろう
河島 晋

中学生のときからいろんなロボコンに出場しているロボコン大好きエンジニア。Maker Faire等の展示会にもよく出展している「論文まもるくん」の人。

https://twitter.com/kawashieee