DCモータを簡単に駆動出来るボード”L298N DCモータコントロールボードの説明です。

ボードの説明
このボードで2個のDCモータが駆動出来ます。ボードの詳細は以下の通り。

ボードの使用例
1 MAXスピードで回転(ハード)
ENA,ENBジャンパーをつないでIN1,2,3,4をコントロールすれば入力電圧(12V)でモータが回ります。ここで注意点は
- モータにかかる電圧は回路ドロップが有るため入力電圧より約2V低い
- ボード内のロジックは5V仕様。
- 回転方向管理端子IN1,2,3,4は 3.3Vロジックで管理出来る。
ESP32を使って下記の様に配線してみました。

1 MAXスピードで回転(ソフト)
スケッチはコントロール端子を初期化した後、モータを回したい方向に合わせて各端子をHigh,Low設定しています。一方づつ 正転、反転、停止 を繰り返します。
wheel00.ino
#include "Arduino.h"
// wheel parameter
#define wheel_N1 26
#define wheel_N2 27
#define wheel_N3 14
#define wheel_N4 12
void setup()
{
Serial.begin(115200);
// init wheel
pinMode(wheel_N1, OUTPUT);
pinMode(wheel_N2, OUTPUT);
pinMode(wheel_N3, OUTPUT);
pinMode(wheel_N4, OUTPUT);
digitalWrite(wheel_N1, LOW);
digitalWrite(wheel_N2, LOW);
digitalWrite(wheel_N3, LOW);
digitalWrite(wheel_N4, LOW);
}
void loop() {
Serial.println("Turn Right A");
digitalWrite(wheel_N1, HIGH);
digitalWrite(wheel_N2, LOW);
delay(3000);
Serial.println("Turn Left A");
digitalWrite(wheel_N1, LOW);
digitalWrite(wheel_N2, HIGH);
delay(3000);
Serial.println("Brake A");
digitalWrite(wheel_N1, HIGH);
digitalWrite(wheel_N2, HIGH);
delay(500);
Serial.println("Turn Right B");
digitalWrite(wheel_N3, HIGH);
digitalWrite(wheel_N4, LOW);
delay(3000);
Serial.println("Turn Right B");
digitalWrite(wheel_N3, LOW);
digitalWrite(wheel_N4, HIGH);
delay(3000);
Serial.println("Stop B");
digitalWrite(wheel_N3, LOW);
digitalWrite(wheel_N4, LOW);
delay(500);
}
2 スピードをコントロールして回転(ハード)
このボードはENA,ENBの電圧に比例してモータに送られる電圧が設定出来ます。ENA,ENBの電圧が0Vの時モータへ0V。5Vの時モータへ入力電圧が送られます。ENA,ENBの対のピンには5Vが出力されていて、前回の回路はここをショートしていたのでENA,ENBの電圧は5V。よってモータへ入力電圧が供給されモータはMAXスピードで回転します。

PWMを使ってENA,ENBピンの電圧を設定すればモータ回転速度を管理出来る事になります。そこで回路を下記の様に変更しました。

L298NとESP32のロジック電圧が違う点に注意が必要必要です。L298Nのロジック電圧は5V、ESP32のロジック電圧は3.3V。つまりロジック電圧は3.3VのESP32ではMAX電圧をモータに与える事が出来ません。ESP32で与えられる最大値は
最大値 = 入力電圧 X 3.3 / 5 (V)
になります。
2 スピードをコントロールして回転(ソフト)
analogWrite()関数を使ってENA,ENB端子の電圧を管理してモータの回転速度を変更しています。
wheel01.ino
#include "Arduino.h"
// wheel parameter
#define wheel_N1 26
#define wheel_N2 27
#define wheel_N3 14
#define wheel_N4 12
#define wheel_ENA 13
#define wheel_ENB 25
void setup()
{
Serial.begin(115200);
analogWrite(wheel_ENA, 0);
analogWrite(wheel_ENB, 0);
// init wheel
pinMode(wheel_N1, OUTPUT);
pinMode(wheel_N2, OUTPUT);
pinMode(wheel_N3, OUTPUT);
pinMode(wheel_N4, OUTPUT);
digitalWrite(wheel_N1, LOW);
digitalWrite(wheel_N2, LOW);
digitalWrite(wheel_N3, LOW);
digitalWrite(wheel_N4, LOW);
}
void loop() {
int a;
Serial.println("Turn A");
digitalWrite(wheel_N1, HIGH);
digitalWrite(wheel_N2, LOW);
for(a = 0; a < 256; a += 50){
Serial.println("vol: " + String(a));
analogWrite(wheel_ENA, a);
delay(3000);
}
Serial.println("Stop A");
analogWrite(wheel_ENA, 0);
delay(1000);
Serial.println("Turn B");
digitalWrite(wheel_N3, HIGH);
digitalWrite(wheel_N4, LOW);
for(a = 0; a < 256; a += 50){
Serial.println("vol: " + String(a));
analogWrite(wheel_ENB, a);
delay(3000);
}
Serial.println("Stop B");
analogWrite(wheel_ENB, 0);
delay(1000);
}
最後に
スピードのコントロールが出来て非常に使い易いボードです。ホビーでDCモータを使う製品にはうってつけのボードです。
スピードコントロールですが、電圧値=回転スピード とならない事に注意が必要です。例えば、ENA端子にanalogWrite(wheel_ENA, 1); とすると MAXスピードの 256分の1で回転するかと言うとそでは有りません。analogWrite(wheel_ENA, 1);関数は基本的にモータを駆動する電圧のコントロールで、その電圧でモータが回るとは限らないからです。スピードをコントロールする場合にはこの点に気を付けましょう。