はじめに
AliExpress でキャタピラ式のロボットベースを購入したのですが、組み立てる前にDCモーター制御について、少し研究してみます。
回路を組むにあたって、悩んだのが電圧です。ESP32は3.3Vまたは5V電源で信号線は3.3V、DCモータードライバは安く出回っている「L298N DC モータドライバ」が手元にあったので、これを使うことにしたのですが、電源/信号線ともに5V、更に購入したDCモーターは定格電圧が9Vなので、はっきり言ってバラバラです。
最初は9Vを用意して、そこから5Vに降圧とも考えたのですが、ロボットを組んだ後でPCとUSB接続してプログラムを変更するときに、間違って電源が入ると嫌なことになりそうなので、安全のため5Vを基準とすることにしました。したがって5Vから9Vへの昇圧と、信号線のレベル変換が必要になります。
5Vから9Vへの昇圧は、秋月電子の「4.7V~12.6V出力 最大10A 同期式昇圧型スイッチング電源モジュール TPS61088使用」を購入しました。
使ったもの
- D1 mini ESP32 ESP-WROOM-32
- L298N DC モータドライバ
- 4.7V~12.6V出力 最大10A 同期式昇圧型スイッチング電源モジュール
- TXS0108E 双方向ロジックレベル変換モジュール
配線図
(モーターから上に出ている3本の線はホールセンサーの電源と信号線ですが、今回は使っていません)
ESP32から5Vを引き出し、そこから電源モジュールで9Vに昇圧しています。一方、信号線はレベル変換モジュールで3.3Vから5Vに変換して、モータードライバに接続しています。
モータードライバとの接続では、緑と橙の信号線が回転方向の制御用、黄色の信号線がPWM入力のアナログ電圧です。この電圧レベルでモーターに送る電圧を制御しています。回転数の制御が不要な場合には、黄色の線は不要で、モータドライバ側でジャンパで短絡しておけばOK。というか、購入時は短絡されているので、それを外して黄色信号線を接続しています。
モータードライバへの入力は
- IN1=LOW, IN2=LOW --- 停止
- IN1=HIGH, IN2=LOW --- 正回転
- IN1=LOW, IN2=HIGH --- 逆回転
- IN1=HIGH, IN2=HIGH --- ブレーキ
になっています。正回転と逆回転は相対的なものですが。
今回のモーターはホールセンサー付きなので、全部で6線出ていますが、赤と黒がモーター本体の電源線なので、とりあえずそれだけ接続。ホールセンサーは今のところ使うつもりがないのですが、あとで実験してみようと思います。
プログラム
まずは単純な正逆回転のテストです。
#define IN1 18 #define IN2 19 #define ENA 26 void setup() { // 初期設定 pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (ENA, OUTPUT); // ENAは常時HIGH digitalWrite(ENA,HIGH); } void loop() { // 正回転 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); delay(2000); // ブレーキ digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); delay(2000); // 逆回転 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); delay(2000); // ブレーキ digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); delay(2000); }
プログラムはいたって単純で、setup関数でピン出力の初期設定、今回はピン18,19,26を使いましたが、たいした理由はなく、ESP32のボードのピン配置で並んでいたからです。そしてENA信号をHIGHにしています。ここをHIGHにすると、電源電圧がモーターにすべて印加されます。
loop関数では、2秒毎に正回転、ブレーキ、逆回転、ブレーキを繰り返すようにしています。
実行した結果が、下記の動画です。
次回は回転速度の変更をしてみようと思います。