この記事ではL298Nモータードライバモジュールの使い方について解説しています。
皆さんは電子工作などでモーターを動かす場合どうしているでしょうか?
今回は比較的大きな電流が必要なモーターでも簡単に動作させることができる「L298Nモータードライバーモジュール」について解説していきます。
今回取り扱う中華モジュールはかなり激安の部類ですが、案外格安モジュールに対する保証を求める人もいるようなので、そちらについては実体験を以下の記事でまとめています。
良ければどうぞ。
-
中華製モジュールを買う際に知っておいてほしい4つのこと
秋月などでもモジュールは販売されていますが、やっぱり正規品ぽい枠なだけあって値段が高いです。 その点、互換品のような感じで激安で販売されるAmazonの中華製モジュールは、かなりお財布にうれしいと思い ...
続きを見る
今回説明を行うモジュール
今回解説するモジュールは以下のものになります。
このモジュールはArduinoを始めとしたマイコンボードと接続することでモーターを簡単に制御することができるものです。
主な特徴としては、
- 1つのモジュールでDCモーター2つを制御することができる
- PWM制御を行うことができる
- 駆動電流は最大2Aをカバーしている
- Arduino等を用いて簡単に制御することができる
といった感じです。
Arduinoにはモータドライバーシールドという、Arduinoの上に差し込むだけで使えるモジュールも存在します。
よく参考書などで使用されているのは以下のような商品ですね。
こちらの方が配線などが少なくて済むのでシンプルですが、扱える電流量がかなり小さく、FA-130以上のモータを使いたい場合や比較的負荷の大きい用途に使いたい場合はあまり適していません。
どちらも同じことができるので選ぶ際は扱う電流の量を基準に選べばよいと思います。
外観など
こういったモジュールは意外にサイズ感が分からなかったりするので何枚か画像を張っておきます。
サイズはミンティアのケースと比較すると3分の2くらいの大きさですかね。
小型とは言えないかもしれませんが、十分コンパクトに収まっている方だと思います。
裏面の写真を見ればわかるかと思いますが、端子やランドがむき出しです。
使用時は絶縁を忘れないように注意しましょう。
定格について
中華モジュールを購入すると分かりますが、似たようで若干異なる製品がいろいろなところから出品されています。
各社でばらつきはあるかと思いますが、おおよそ共通する定格は以下のようになっています。
- チップ:L298N
- 論理電圧(モータ駆動とは別に必要な電源電圧):5V ➡Arduinoと共通の5Vでいけます。
- 論理電流(制御に必要な電流のことです):0~36mA (Arduinoは100mA供給可➡OK)
- 駆動電圧(モータに印加する電圧のこと):5V~35V (商品によって多少ばらつきがあるみたいです。)
- 駆動電流’(モータに流せる電流):2A
- 最大出力電力:25W (ほんとかよ)
- 内部回路:Hブリッジドライバ(デュアルHブリッジ)
- 保存温度(正常に動作する温度のこと?):-20~135℃
- サイズ:約 43mm*43mm*27mm
模型工作等に使用するなら十分な性能だと思います。
ただ出力電力に関しては若干怪しいところがあるのであまり定格ギリギリで使用するのは良くないかもしれません。
各ピンの説明
各ピンの説明を簡単にしておきます。
各ピンの内容は以下のようになっています。
出力ピン | 意味 |
OutputA | 上記画像では"A"としてひとくくりにされていますが、実際にはOUT1とOUT2の二つがあります。 これはモータの端子につなぐ線で、どちらかがマイナス、どちらかがプラスになります。 |
OutputB | 上記画像では”B”としてひとくくりにされていますが、実際にはOUT3とOUT4の二つがあります。 これはモータの端子につなぐ線で、どちらかがマイナス、どちらかがプラスになります。 |
12V Power | モータへの入力電圧を決める電圧になります。この電圧がモータに出力できる電圧の最大値となります。 デジタル制御ではこの電圧がバンバン制御で出力されます。 このモジュールではPWM制御を行うこともできるので、出力を最大値の255にした場合はこの電圧が出力されることになります。 (厳密には正弦波PWMでは最大値を出力できませんが、、、それはおいておきましょう。) |
power GND | GNDの端子になります。ArduinoのGND端子と共通にして使用してください。 (基準電位です。) |
+5V Power | "5V enable"のジャンパが接続されている場合、この端子から5Vが出力されます。 実はこのモジュールはレギュレータを搭載しているんですよね。 なのでArudino用の電源をここから引いて使う、といったこともできます。 ※(このピンは出力ピンなので、Arduinoの5V出力端子を接続するわけではないので注意してください。) |
5V enable | 上記で説明した5V出力を使う際に接続するジャンパになります。 |
A enable(ENA) | outputA側につなぐモータへの出力方法を決めるピンです。 デジタルで制御する際はジャンパはつないだままでOKです。 PWM制御を使用する際はこのジャンパを外して使用します。(後で説明します) |
B enable(ENB) | outputB側につなぐモータへの出力方法を決めるピンです。 デジタルで制御する際はジャンパはつないだままでOKです。 PWM制御を使用する際はこのジャンパを外して使用します。(後で説明します) |
Input(全部で4つ) | 4つあるので以下で説明します。信号なのでそれぞれのモータに対して2本必要というわけです。 |
IN1 | outputA側につなぐモータへの出力を決めるためのピンです。 |
IN2 | outputA側につなぐモータへの出力を決めるためのピンです。 |
IN3 | outputB側につなぐモータへの出力を決めるためのピンです。 |
IN4 | outputB側につなぐモータへの出力を決めるためのピンです。 |
長々と記載しましたが、実際に配線すればとても簡単なので早速やってみます。
使い方① - デジタル制御(ON or OFFでの制御)
それでは使い方の解説に入っていきたいと思います。
まずはONかOFFのみで制御するデジタル制御の場合から解説していきます。
PWM機能いらないよ、という事もあるかと思いますので念のため分けて記載します。
(まぁ、この場合はリレー等を使った方が安上がりかもしれませんが、一応ブレーキ機能はあるので一応あり?)
配線
まず配線です。
デジタル制御を行う場合は以下のように配線します。
本数は非常に少ないですね。
少しわかりにくいので拡大します。
モータへの配線はどっちの端子につないでも問題ないと思います。
(正転逆転逆にはなるかもしれませんが。)
接続を以下にまとめておきます。
- 左右の2ピンの端子➡DCモータにつなぐ2本の線
- 下の3ピンの端子➡モータへの供給電圧をする2本の線
- 右下のピンヘッダ➡Arduino用の制御用の線:IN1とIN2へ接続
- 左右のジャンパ➡つけたまま
です。
これでデジタル制御を行うための配線が終わりました。次はプログラムを見ていきましょう。
モーターを回転させる場合はArduinoだけでは電流が足らないので外部電源が必要になります。
Arduinoの5V出力等を使用しないようにしましょう。
プログラム
今回は分かりやすいようにoutputA側のモータのみ制御することにします。
今回は次のような動作をさせるプログラムを書きました。
プログラムの内容
「正転→停止(ブレーキ)→逆転→停止(惰性回転)」を繰り返すプログラム
入力ピンさえあっていれば基本コピペで行けると思います。(動作確認済みです。)
コードは以下の通りです。
#define IN1 9 //9番ピンを出力ピンIN1と定義してます。
#define IN2 8 //8番ピンを出力ピンIN1と定義してます。
void setup() {
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
}
void digital(){
digitalWrite(IN1,HIGH); //どちらかがHIGHでモータが周ります。
digitalWrite(IN2,LOW); //正転
delay(2000); //delayは適当に入れてください。
digitalWrite(IN1,HIGH); //両方ともHIGHにするとブレーキ
digitalWrite(IN2,HIGH); //停止(ブレーキ)
delay(2000);
digitalWrite(IN1,LOW); //上記のものと逆回転になります。
digitalWrite(IN2,HIGH); //逆転
delay(2000);
digitalWrite(IN1,LOW); //停止(惰性回転)
digitalWrite(IN2,LOW);
delay(2000);
}
void loop() {
digital();
}
プログラムは以上です。
使い方② - PWM制御
次にPWM制御の場合について説明していきます。
デジタル制御ではモータを動かすことはできますが、0か100しかないのであまり実用的とは言えません。
PWMを用いると出力を段階的に出すことができるようになります。
おそらく正弦波駆動で動いていると思うのでモーター用の供給電圧を最大値として出すことはできなくなりますが、このぐらいのものならばそこは考えなくてもいいかもしれないですね。
厳密な制御を組むわけではないので、PWM制御は出力電圧を可変にできる、くらいの理解で問題ないと思います。
配線
まずは配線の説明からです。
配線図は以下のようになります。
全体としての本数はそこまで増えません。
すこし見にくいので拡大したものを以下に示します。
このような感じです。
変わったのは信号線(赤色の長い線)が1本増えたことと、ジャンパが外されたことだけです。
ジャンパは上下につながっています。
このジャンパを外して下側のピンに信号線(赤色)をつなぎます。
今回はENAの端子を使用してPWM制御を行います。
また一点注意ですが、ピンは好きなものを使用していいのですが、
Arduino上でPWM制御を行えるピンは限られています。
(UNOは7~13のようです。今回は10番ピンを使用しました。)
案外ここを見落としていて動かなかった、なんてことが以外にあります。
PWMピンはボードにより数が限られますので、たくさんモータを制御したい場合はArduinoMEGAを使用することをお勧めします。
プログラム
次にプログラムについて説明していきます。
内容としては以下の動作をさせました。
プログラムの内容
「加速(正転方向)→減速(正転方向)」を繰り返すプログラム
コードは以下の通りです。
#define IN1 9
#define IN2 8
#define ENA 10
void setup() {
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENA,OUTPUT);
}
void analog1(){
int i;
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
for(i=0;i<256;i++){
analogWrite(ENA,i);
delay(20);
}
for(i=255;i>=0;i--){
analogWrite(ENA,i);
delay(20);
}
digitalWrite(IN1,LOW); //無くても動くが、
digitalWrite(IN2,LOW); //リフレッシュの意味で
} //あった方がいいみたい
void loop() {
analog1();
}
説明は上記コード中に注釈で示しています。
正転と逆転ですが、モータの端子に接続した配線を入れ替える、もしくは上記コード中のdigitalWriteの中をLOW➡HIGHにすれば逆になります。
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
内容としてはLOWとHIGHの組み合わせで正転・逆転を決め、それに対する信号をPWMして送っている、という事ですね。
説明は以上ですが、ちょっと変えるだけでいろいろできるのでやって試したほうが理解しやすいかと思います。
まとめ
いかがだったでしょうか。
今回はL298Nモータードライバモジュールについて解説しました。
一応必要な情報は全て載せられたんじゃないかと思います。
自作もありですが大量に使用するときはモジュールの方が安いかもしれないですね。
以下にAmazonで販売されているL298Nモータードライバーモジュールのおすすめリンクを掲載しておきます。
現時点(2022/06/11)でなるべく安いものを選定したので参考にしてみてださい。
中華モジュールは頻繁に価格変動するので購入するときはよく確かめてみてください。
それでは。