DCモーターを使う[基本を知る]
DCモーターをArduinoを使って駆動(回転)させてみます。まずはDCモータ駆動の基本的な事を知ることと、それと回転させることです。
- マブチモーター製のRE-260RAを使用。
- モーター駆動用のドライバーICは東芝製TA7291を使用。
- プログラムでモーター回転方向&回転数を制御してみる。
TA7291Pの配線周りの詳細画像を追加。(2018/7/24)
目 次
DCモーターについて
今回使用するのはマブチモータ社製のホビー用ブラシモーター「RE-260RA」、同社のWebサイトには「モーターのしくみ」について詳しく説明が書かれているのでそちらを参照してください。また仕様に関しては同サイトのこちらに記載してあります。
DCモータにはその他の種類として「ブラシレスモーター」、「ステッピングモーター」などがありますがこれらについの説明等はここでは省略します。
モータードライバIC「TA7291」
DCモー=タードライバーICと言えば定番のICですArduinoとの組み合わせた応用例もネット上にたくさんありますので情報入手にも困りません。パッケージ形状の違いと許容出力電流の違いから3種類リリースされてますが、ここではTA7291Pを使用。(ちなみに価格は秋月で150円で販売)
TA7291Pはなにができるか?
Arduinoボードのデジタルピン(D1~D13)からモータを直接駆動するには能力不足。
モーター「RE-260RA」の適正電圧は3.0V、適正電流は700mAに対し、Arduinoデジタルピンは電圧5.0V、電流は最大40mAと全然足りません。
ということで、モーターとArduinoボードとの間にこのドライバーICを介在させて適正電圧、電流を供給させます。
実際にできるのは
- 回転制御:正転、逆転、ブレーキ、オープン
- 駆動電圧制御:モータ供給電圧を設定可能
でして、これらをArduinoプログラム(スケッチ)で制御します。
東芝TA7291の仕様書はこちらのリンク先に有ります。
マルツオンラインの動作説明ページはこちらのリンク先。
TA7291の使い方
1.接続ピン
TA7291Pは10ピンのICで正面(名称記載面をから見て左から1ピン、2ピン ・・・・10ピンをと数えます
①GND(ArduinoのGND線と共通接続)
②OUT1端子(モーター接続端子のどちらか一方と接続)
③未接続
④Vref端子(ArduinoのD10端子と接続)
⑤IN1端子(ArduinoのD12D11端子と接続)
⑥IN2端子(ArduinoのD11D12端子と接続)
⑦VCC(+5V端子、Arduinoの+5V端子と共通接続)
⑧VS端子(モーター駆動電圧、電池ボックスの+端子と接続)
⑨未接続
⑩OUT2端子(モーター接続端子のどちらか一方と接続)
2.端子機能
IN1、IN2の両端子のHIGH、LOWの組み合わせで以下の表の機能になります。
CW:Clockwise(時計回り)
CCW:CounterClockwise(反時計回り)
ストップ:モーター両端子が開放になり、モーターは回転しない、またブレーキもかからない。
ブレーキ:モーター両端子が短絡された状態になるのでモーターが回転数に比例した制動力がモーターに加わる。
3.回転数制御
DCモーターの回転数はモーター端子に加える電圧値で制御可能であり電圧値に比例して回転数が増減する。
そのための制御端子がVref端子で、ArduinoからはPWM信号を送り疑似的に電圧制御をおこなう。
Arduino接続回路
まずはArduino、モータとの接続方法です。
注)下記TA7291のイラストは現物とは異なります。(現物はユニバーサル基板上にTA7291Pが半田付け)本記事のうしろの方に 詳細な画像を載せてありますので参照ください。
注)実際のモーターのリード線の色は「赤」と「青」です手持ちのイラストに同じ色が無いため黄色と緑色になってますが、どちらでも構いません。(黄→赤、緑→青とみなすか、黄→青、緑→赤とみなすか、どちらでもOKという意味です)
注)上の配線図では電池BOXは単3x2本ですが、実際は単3x3本(4.5V)にしてください。(単3x3本のイラストが無いため単3x2で代用してます)
回路図は以下に示します。
完成品サンプル画像
Arduinoスケッチ
基本的な部分の回転させるだけですが以下にスケッチを掲載します。
[Sample-1] SketchName:”DCmotor_basic1″
回転方向を単一方向のみ、回転数も固定値(最大)でモーター駆動させるのみ。
DCmotor_basic1
#define IN1 12 //TA7291入力ピンIN1に接続するデジタルピン番号 #define IN2 11 //TA7291入力ピンIN2に接続するデジタルピン番号 #define VREF 10 //TA7291入力ピンVREFに接続するPWM出力ピン番号 void setup() { pinMode(IN1, OUTPUT); //デジタルピンを出力モード指定 pinMode(IN2, OUTPUT); //デジタルピンを出力モード指定 digitalWrite(IN1, LOW); //TA7291データシートに初期値ではIN1、IN2共にLOWにせよと記述。 digitalWrite(IN2, LOW); //TA7291データシートに初期値ではIN1、IN2共にLOWにせよと記述。 } void loop() { // D11ピンをHIGH, D12ピンをLOW digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(VREF, 255); //出力値:1~255の値で指定、255で最大値となる }
[Sample-2] SketchName:”DCmotor_basic2″
回転方向を単一方向のみ、回転数を三段階(高・中・低)で5秒間隔で切り替える。
DCmotor_basic2
#define IN1 12 //TA7291入力ピンIN1に接続するデジタルピン番号 #define IN2 11 //TA7291入力ピンIN2に接続するデジタルピン番号 #define VREF 10 //TA7291入力ピンVREFに接続するPWM出力ピン番号 void setup() { pinMode(IN1, OUTPUT); //デジタルピンを出力モード指定 pinMode(IN2, OUTPUT); //デジタルピンを出力モード指定 digitalWrite(IN1, LOW); //TA7291データシートに初期値ではIN1、IN2共にLOWにせよと記述。 digitalWrite(IN2, LOW); //TA7291データシートに初期値ではIN1、IN2共にLOWにせよと記述。 } void loop() { // D11ピンをHIGH, D12ピンをLOW digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(VREF, 255); delay(5000); analogWrite(VREF, 200); delay(5000); analogWrite(VREF, 155); delay(5000); }
TA7291P実装詳細画像
TA7291Pのピンのサイズがブレッドボードの穴より少し小さくなってます。
そのためTA7291Pをダイレクトにレッドボードに挿入した場合は接触があまりよくないことがあります。
ということで、小さなユニバーサル基板経由でブレッドボードに差し込むようにしてます。
以下に、実物の画像を掲載します。