2学期開始!体験授業 受付中 →
ROBO SCIENCE

モータードライバ ―
モーターをコントロールする部品。

2026.10.01
PE(Pre-expert) ES(Expert-soccer)

LEDを光らせた次は、モーターです。ところが、LEDと同じようにマイコンのピンへつなぐことはできません。

流せる電流が、数十倍ちがう

Raspberry Pi Pico のピン1本から流せる電流は、十数ミリアンペアです。いっぽう、サッカーロボットのモーターは動き出すときに500ミリアンペアから1アンペア以上が必要です。

直接つなぐ マイコン 十数mA まで モーター 1A ほしい × マイコンが壊れる ドライバを挟む マイコン 合図を出すだけ 合図 ドライバ 大きな電流 モーター 電池
あいだにモータードライバを挟みます。マイコンは合図を出すだけで、力の元は電池から直接とります。

マイコンは「どちらへ、どれくらいの速さで回せ」という合図を出すだけになります。大きな電流は、電池からドライバを通ってモーターへ流れます。

ドライバの役目① 大きな電流を通す

家の壁にあるスイッチと同じです。指で押す力はごくわずかですが、その先では大きな電気が動いています。

ドライバは、そのスイッチを押す役をマイコンに任せるための部品です。

ドライバの役目② 向きを変える

モーターは、流す電流の向きを逆にすると逆に回ります。向きを切り替えるために、4つのスイッチを H の形に組みます。これをHブリッジといいます。

電気の 流れ + − A B C D M モーター A〜D は、ドライバの中にある電気のスイッチ。図は切れた状態
対角のスイッチを組にして入れると、モーターを流れる電流の向きが変わります。

入れるスイッチの組み合わせで、4とおりの状態をつくれます。

A B C D M + −
正転A と D を入れる
A B C D M + −
逆転B と C を入れる
A B C D M + −
フリーぜんぶ切る
A B C D M + −
ブレーキC と D を入れる

A と C を同時に入れると、電池の+と-が直接つながってショートします。これはドライバが中で防いでいます。

速さを変える

いつも全速とは限りません。ゆっくり動きたいときもあります。止まるか全速かの2通りしかないと、それができません。

そこで PWM という方法を使います。電気をものすごく速くON/OFFして、平均の力を変えます。

100% 全速 50% 半分の速さ 20% ゆっくり 1秒間に約1000回、これをくり返している
ONの時間の割合を変えると、モーターは平均の力で回ります。切り替えが速すぎるため、人には連続して回って見えます。

この回のプログラムでは、1秒間に約1000回で切り替わります。速すぎて目には見えませんが、モーターからは小さな高い音が聞こえます。耳に聞こえる速さで切り替えているからです。

あとの回で、この回数を1秒間に2万回まで上げます。そうすると音は聞こえなくなります。

使っている部品

この講座では DRV8835 というドライバを使っています。

ブレッドボードに挿したDRV8835のモータードライバ基板。両側に AOUT1・AOUT2・BOUT1・BOUT2・AIN1・AIN2・BIN1・BIN2・VM・VCC・GND・MODE の端子が並んでいる
DRV8835。小指の先ほどの基板です。上側がモーターへつなぐ端子(AOUT・BOUT)、下側がマイコンからの合図を受ける端子(AIN・BIN)です。
項目値
モーター用の電源(VM)11V まで
マイコン側の電源(VCC)2 〜 7V(Picoの3.3Vで動く)
出力できる電流1チャンネルあたり 1.5A
PWMの周波数250kHz まで
動かせるモーター2個(2回路を並列にすれば、1個を3Aで)

データシート(秋月電子)↗

モーターの数が、設計のときに効いてきます。オムニホイール4輪の機体なら、モーターは4個です。1枚で2個までなので、ドライバが2枚いります。

つなぎ方

配線図
ブレッドボードの配線図。Raspberry Pi Pico と DRV8835、モーター、単4電池4本の電池ボックスがつながっている
ブレッドボードに、どう挿すか。モーターの電源は電池から直接とります。
回路図
回路図。PicoのGP16がAIN1、GP17がAIN2へ、3V3がVCCへ、GNDがMODEへつながり、DRV8835のAOUT1とAOUT2にモーターが、VMに電池がつながっている
電気として、どうつながっているか。
Pico 側DRV8835 側役目
GP16AIN1合図を送る1本目
GP17AIN2合図を送る2本目
3V3VCCドライバを動かす電源
GNDGND・MODE基準。MODE と電池の − もここへ
(つながない)VMモーター用の電源。電池の + から直接

いちばん下が大事なところです。モーターの電源は Pico を通しません。電池から VM へ直接つなぎます。

ただし、電池のマイナス側は Pico の GND につなぎます。ここが離れていると、合図の HIGH・LOW を測る基準がなくなり、モーターは回りません。電源は別々、基準は共通、と覚えてください。

そして MODE は GND につなぎます。この記事で説明してきた方式(IN/IN モード)になります。HIGH にすると、もう一方の方式(PHASE/ENABLE モード)に切りかわります。

AIN1 と AIN2 で、動きが決まる

LEDを光らせたときのことを思い出してください。使ったのは、この2つだけでした。

digitalWrite(LED, HIGH);   // 点く
digitalWrite(LED, LOW);    // 消える

HIGH は「電気を出す」、LOW は「出さない」という意味です。ピンから出る電圧が、3.3V か 0V のどちらかになります。

書き方数字で書くとピンの電圧意味
HIGH13.3V電気を出す
LOW00V出さない

データシートでは H と L、あるいは 1 と 0 と書かれていますが、どれも同じことです。

モーターは、この2つを2本の線で使い分けます。LEDは1本だったので「点く・消える」しかできませんでした。2本あると、向きまで決められます。

AIN1AIN2モーターの動き
LOWLOWフリー(力がかからず空回り)
HIGHLOW正転
LOWHIGH逆転
HIGHHIGHブレーキ

覚え方はひとつです。HIGH にしたほうへ回ります。両方が同じときは回りません。

この4つは、さきほどのHブリッジの4つの状態とそのまま対応しています。A側の2本で1個、B側の BIN1・BIN2 でもう1個を動かします。

プログラム① HIGH と LOW で動かす

さきほどの表を、そのまま書いたものです。正転・フリー・逆転・ブレーキを順にくり返します。

const int AIN1 = 16;      // GP16
const int AIN2 = 17;      // GP17

void setup() {
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
}

void loop() {
  digitalWrite(AIN1, HIGH);   // 正転
  digitalWrite(AIN2, LOW);
  delay(2000);

  digitalWrite(AIN1, LOW);    // フリー
  digitalWrite(AIN2, LOW);
  delay(1000);

  digitalWrite(AIN1, LOW);    // 逆転
  digitalWrite(AIN2, HIGH);
  delay(2000);

  digitalWrite(AIN1, HIGH);   // ブレーキ
  digitalWrite(AIN2, HIGH);
  delay(1000);
}

LEDのときと同じ digitalWrite です。ちがうのは、2本の線に別々の指示を出しているところだけです。

プログラム② analogWrite で速さを変える

digitalWrite では「出す・出さない」の2通りしかありません。速さを変えるには analogWrite を使います。

const int AIN1 = 16;
const int AIN2 = 17;

void setup() {
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
}

void loop() {
  analogWrite(AIN1, 64);      // ゆっくり
  digitalWrite(AIN2, LOW);
  delay(2000);

  analogWrite(AIN1, 128);     // 半分くらい
  digitalWrite(AIN2, LOW);
  delay(2000);

  analogWrite(AIN1, 255);     // 全速
  digitalWrite(AIN2, LOW);
  delay(2000);

  analogWrite(AIN1, 0);       // 止まる
  digitalWrite(AIN2, LOW);
  delay(2000);
}

数字は 0 から 255 までです。0 が止まる、255 が全速。その間が、PWM で作ったとちゅうの速さになります。

書き方意味
analogWrite(AIN1, 0)digitalWrite(AIN1, LOW) と同じ
analogWrite(AIN1, 128)半分くらいの速さ
analogWrite(AIN1, 255)digitalWrite(AIN1, HIGH) と同じ

もう片方の線は LOW のままにしておきます。逆に回したいときは、analogWrite を出す線を AIN2 に入れかえます。

ロボサイエンスについて

ロボカップジュニア2027 に向けて、レスキュー(災害救助)とサッカーの2種目に取り組みます。プログラミングと電子工作の経験は問いません。

前回:初回はLEDの点滅から →
ロボサイエンスの記録一覧 →
体験授業・お問い合わせ →

← ロボサイエンスの記録一覧へ戻る