Raspberry PiとTA7291PでDCモーターを正転/逆転する仕組みと方法

Raspberry Piを購入したら、ロボットやラジコンカーを作ってみたくなりませんか?

ロボットやラジコンを動かすにはモーターを制御する必要があります。今回のポイントはRaspberry Piでモーターを動かすです。では、解説していきましょう。

目次

準備したもの

モーター制御の仕組み

モーターを動かすのは電池を繋げばいいだけじゃないの?

ミニ四駆なんて単三電池2本と繋がってるだけじゃん。

ミニ四駆などで使われているDCモーターは、電池を繋げるだけでモーターは回ります。でも、モーターを逆転したり、停止することは出来ませんよね。今回はRaspberry Piからの指令でモーターを正転、逆転、停止する方法を学びます。

Raspberry PiのGPIOからモーターを制御するにはモータードライバICが必要

Raspberry PiのGPIO出力電圧は3.3V、1ピンあたりの出力電流は16mA、合計50mAです。これではモーターを動かす出力が全然足りません。

ここで、モーターに大電流を流すのに活躍するのがモータードライバICです。

モータードライバICは、4つのトランジスタを用いたHブリッジ回路が1チップとしてモジュール化されています。

モーターに大電流を流すためのトランジスタ

トランジスタは簡単に言うと電子的なスイッチです。

トランジスタは3極端子があり、1極に電圧を加えると残り2極間が通電する仕組みです。この2極に電池を繋ぎ、1極にRaspberry Pi GPIO端子から電圧を加えればモーターに大電流が流れ、GPIOからの低電流でモーターを駆動することが出来ます。

モーターの正転、逆転を可能にするHブリッジ回路の仕組み

トランジスタ1個だけでは、正転しか出来ないですがトランジスタを4個、H型に配線することで正転、逆転を切り替えることが可能となります。

このような回路をHブリッジ回路と呼びます。

Hブリッジ回路でモーターを正転、逆転させる仕組みを図で説明します。

図はトランジスタを一つのスイッチと見立ています。

4つのスイッチON/OFF組み合わせで、モーターを正転、逆転出来ます。スイッチ1と4をONにするとモーターが正転します。スイッチ2と3をONにすると正転時とは逆方向に電流が流れ、モーターが逆転します。この他にスイッチ1と2もしくは3と4をONにするとブレーキがかかります。

モータードライバICを使ったモーターの正転、逆転方法

モーターを正転、逆転、ブレーキさせるにはRaspberry Piからどのような指令をモータードライバICに送ればよいでしょうか。

ここではTA7291PというモータードライバICを例にします。

長らく電子工作で愛用されてきたTA7291Pが生産停止になりました。TA7291Pの代替として、DRV8835などがあります。モータードライバICが変わると端子配列や指令方法は異なりますが、Hブリッジ回路の仕組みが分かっていれば、使い方は基本的に同じです。

TA7291Pの動作方法はデータシートを見ることで分かります。ここでは要点のみ説明します。

前節で説明しました通り、モータードライバICにはブリッジ回路が組まれていて、4つのトランジスタON/OFFの組み合わせでモーターを正転、逆転出来ます。TA7291Pはこの4つのトランジスタを2つのデジタル信号の組み合わせで制御することが出来ます。IN1/IN2端子とGPIO端子を繋ぎ、以下のようにIN1/IN2端子に信号入力するとモーターを正転/逆転出来ます。

入力 出力 モード
IN1 IN2 OUT1 OUT2
0 0 ストップ
1 0 H L 正転
0 1 L H 逆転
1 1 L L ブレーキ

※∞はハイインピーダンス

回路図

Raspberry PiとTA7291Pと電池の繋ぎ方

TA7291Pのデータシートを見ても、Raspberry Piとどう接続したらいいのか分からないという人も多いかと思います。TA7291Pの端子接続を下表に纏めましたので参考にして下さい。

端子記号 端子説明 接続先
Vcc ロジック側電源端子 Raspberry Pi +5V端子
Vs 出力側電源端子 電池+極
Vref 制御電源端子 電池+極 (3kΩ以上の保護抵抗を介す)
GND GND Raspberry Pi GND & 電池ー極
IN1 入力端子1 Raspberry Pi GPIO 27
IN2 入力端子2 Raspberry Pi GPIO 22
OUT1 出力端子1 モーター +極
OUT2 出力端子2 モーター ー極

ブレッドボード回路

モーター正転、逆転をさせるサンプルプログラム

プログラムの流れについて説明します。まず、GPIO端子の出力設定をし、初期出力値を設定します。次にキー入力待ちの無限ループとし、「e」キーが押されたら正転、「d」キーが押されたら逆転、「q」キーが押されたら停止させるようにしています。

import RPi.GPIO as GPIO
import sys

GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)

GPIO.output(27, GPIO.LOW)
GPIO.output(22, GPIO.LOW)

try:
    while True:
        #「e」キーが押されたら前進
        c = sys.stdin.read(1)
        if c == 'e':
            GPIO.output(27, GPIO.HIGH)
            GPIO.output(22, GPIO.LOW)
              
        #「d」キーが押されたら後退
        if c == 'd':
            GPIO.output(27, GPIO.LOW)
            GPIO.output(22, GPIO.HIGH)

        #「q」キーが押されたら止まる
        if c == 'q':
            GPIO.output(27, GPIO.LOW)
            GPIO.output(22, GPIO.LOW)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

動作確認

単にモーターを正転、逆転するだけでは分かりにくいので、タミヤ ダブルギヤボックスの片側モーターのみ駆動させたときの動きをご覧ください。

キーを押すごとにモーターが正転→停止→逆転→停止します。

まとめ

Raspberry Piを用いてモーターを正転、逆転させる方法について解説しました。

ポイントは

  • モーター正転、逆転するにはHブリッジ回路が必要
  • Hブリッジ回路を1チップにモジュール化したのがモータードライバIC
  • Raspberry PiのGPIOからモータードライバICへ、2つの信号を送信することでモーター正転、逆転を可能にする

です。

モーター制御は電子工作の第一歩です。これから、ものづくりの幅が広がりますね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次