Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

TA7291P情報系でもわかるモータードライバーの使い方

More than 1 year has passed since last update.

この記事について

この記事は、Aizu Advent Calendar 2018の25日目ハリボテ記事です。
作ろうとしてたアプリが進捗ゼロなので、はよ書け攻撃を避けるために即興で書きました。よろしく! 現在、本来の記事も製作中!

TA7291Pのデータシートを見ても、「●●電源端子」ばっかりで理解分かりにくい。
モータードライバーの使い方は、初見の僕には分かりませんでした。

そこで、「情報系の電子工作をあまりしない人でも使えるTA7291P解説記事」を目指して書いていこうと思います!

具体的には、
- データシートのピン配置表を一行ずつ解説
- 様々な接続例を提示
の2部構成でお送りします!

端子の本当の意味はこれだ

これが、TA7291Pのピン配置のに繋ぐものの一覧です。

端子記号 ピン番号
Vcc 7 ロジック側電源端子 マイコンや回路の最大出力電圧を接続
Vs 出力側電源端子 モーターで使用する電源のプラスを接続
Vref 端子電源端子 モーターに流す電圧を決定する電圧を接続
GND GND マイコンのGND端子とモータで使用する電源のマイナスを接続
IN1 入力端子 命令表にしたがって操作を選択するHighまたはLowを接続
IN2 入力端子 命令表にしたがって操作を選択するHighまたはLowを接続
OUT1 出力端子 モーターの片側を接続
OUT2 10 出力端子 モーターのもう片側を接続

HighとLowってなに

2進数で言えば、Highは1、Lowは0です。
つまり、Highは電源の電圧に近い電圧を、LowはGNDに近い(0V)電圧を接続すればいいです!

ロジック側電源端子 (Vcc)

ロジック側電源端子には、モータードライバーに命令を送る装置の出力ピンの最高電圧の電源を接続します。

マイコンなどでデジタル処理をする場合

例えば、Arduinoの場合、「High」の電圧は5Vなので、5Vの電源を接続します。
mbedの場合は、「High」の電圧は3.3Vなので、3.3Vの電源を接続します。

可変抵抗などでマイコンを使わず処理をする場合

電池のプラスを直接接続しましょう!

出力側電源端子 (Vs)

出力側電源端子とは、モーターを動かすための電源のことです。

モーターは、TA7291Pと別の電源で動作させることができます。(USBからの電源と電池からの電源など)
モーターとTA7291Pを同じ電源で動かす場合は、ロジック側と同じ電源を接続しましょう!

モーターとマイコンの電源を分ける必要性

DCモーターは消費電力が少ないので、1つくらいならUSBからとったマイコンと同じ電源でも問題なく動きます。
しかし、モーターが多くなった場合は、電流の出力がオーバーしてしまうので、外部電源が必要になります。
よく分からない場合や不安な場合は、外部電源にすることをおすすめします。

よくある例

ロジック側電源端子(Vcc)には、TA7291PをArduinoの5V出力ピンをつなぎ、
出力側電源端子(Vs)には、モーター用の電源として3Vの電池を繋ぐ

端子電源端子 (Vref)

端子側電源端子とは、モーターの速度を調節する端子です。
このピンの電圧は、Vsピンからモーターに供給する電圧を決定します!

マイコンなどでデジタル処理をする場合

マイコンの場合は、Pwm出力ができるピンに接続します。

Arduino Unoでは、3,5,6,9,10,11ピンのいずれか、
mbed LPC1768では、p21〜p26ピンのいずれかに接続しましょう!

可変抵抗などでマイコンを使わず処理をする場合

可変抵抗の中央のピンを直接繋いでね!
ちなみに両側のピンは、片側を電源のプラスに、もう片側をマイナスに繋ぎます。

GND

極論、ここまでの説明で未接続のマイナス部分を接続しちゃえばいいです!
電源が複数ある場合も、全ての電源のマイナス部分を接続します!

よく分からない場合は、最後の回路図例をご覧ください!!

入力端子 (IN1, IN2)

入力端子は、モーターの動かし方を決める端子です。
表のように高電圧の「High」または低電圧の「Low」を与えることで、
回転の方向を制御することができます。

IN1 IN2
LOW LOW ストップ(出力なし)
HIGH LOW 正回転
LOW HIGH 逆回転
HIGH HIGH ブレーキ

マイコンなどでデジタル処理をする場合

この2つの端子は、それぞれマイコンのDigitalOutピンに接続してください。

可変抵抗などでマイコンを使わず処理をする場合

マイコンを使わない場合は、トグルスイッチなどを用いて、これを切り替えられるような回路を作りましょう!
IN1、IN2それぞれを、「High」のときはVccに、「Low」のときはGNDに繋ぎます。

出力端子 (OUT1, OUT2)

出力端子は、モーターそのものを接続する端子です。
2つあるので、1つをモーターのプラス、1つをマイナスに繋いでください。

Arduinoと繋ぐ時の例

Arduinoとモーターが同じ電源を共有する場合

image.png

Arduinoとモーターが別の電源を使用する場合

Arduinoの電源はUSBからとります!
image.png

Arduinoのサンプルプログラム

#define VREF 3
#define IN1 4
#define IN2 5

void setup() {

}

void moveAhead(byte speed){
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
    analogWrite(VREF,speed);
}

void moveBack(byte speed){
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
    analogWrite(VREF,speed);
}

void stop(){
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,LOW);
    analogWrite(VREF,255);
    delay(1000);
}

void loop() {
    stop(); //起動時にはIN1、IN2ともにLOWにしておく
    delay(3000);
    while(1){
        for(byte i = 128; i<256; i+=16){
            moveAhead(i); //速度(Pwmの割合)は0から255の整数で指定する
            delay(3000);
            stop(); //ブレーキをかけて確実にモーターを止める
        }
    }
}

mbedと繋ぐ時の例

mbedとモーターが同じ電源を共有する場合

image.png

mbedとモーターが別の電源を使用する場合

mbedの電源はUSBからとります!
image.png

mbedのサンプルプログラム

main.cpp
#include "mbed.h"

PwmOut vref(p21);
DigitalOut in1(p22);
DigitalOut in2(p23);

void moveAhead(float speed){
    in1 = 1;
    in2 = 0;
    vref = speed;
}

void moveBack(float speed){
    in1 = 0;
    in2 = 1;
    vref = speed;
}

void stop(){
    in1 = 0;
    in2 = 0;
    vref = 1.0f;
    wait(1);
}

int main() {
    stop(); //起動時にはIN1、IN2ともにLOWにしておく
    wait(3);
    while(1){
        for(int i = 5; i<10; i++){
            moveAhead((float)i/10); //速度(Pwmの割合)は0.0から1.0の間で指定する
            wait(3);
            stop(); //ブレーキをかけて確実にモーターを止める
        }
    }
}

可変抵抗でマイコンを使わずに制御する例

モータードライバを使ってモーターの速度を変えられるようにしました。
トグルスイッチが手元になかっため写真ではスイッチになっていませんが、IN1とIN2に繋がっている青と黄色のピンを逆にすると逆回転します。
image.png

おわりに

今回はモータードライバーの使い方を説明しました。
「先輩に聞かなくても理解できる電子工作の方法」をこれからも投稿していくつもりです!
ライントレーサー作りに関わってくれた皆さん、どんどん記事化してくからよろしく!!

えーと、本来書く予定だった在庫管理アプリの記事は絶賛製作中なので、今日はこの記事で攻撃をかわします。(明日)クリスマス中には更新できるように頑張ります!

gpioblink
色々手をつけすぎた沈没系プログラマーです。やること多くなりすぎると、とりあえず寝て進捗出ないのが日常。ツールの使い方だけでなく、理論もできるだけ取得したいと思ってます。
zli
会津大学公認の技術系サークル LT会や勉強会などを定期的に行なっています
https://www.facebook.com/ZliOfficial/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away