【Raspberry Pi Pico入門 – 21】DCモーターを動かしてみる
概要
今回はモータードライバICのL293Dを使ってDCモーターの制御をしてみます。
DCモーターは数あるモーターの中でも最もシンプルで、+と-の端子に電圧をかけるだけで回すことが出来ます。ただ、回す方向を変えたりスピードを調整しようとすると結構難しい回路が必要になります。(組むのは簡単ですが、安定して動かすのは難しいです)
モータードライバICとはDCモーター制御回路の難しいところをICの中で組んでくれているので、マイコンとモーターの間にモータードライバを入れるだけでDCモーター制御が出来るようになります。
実行環境
IDE:Arduino IDE 2.2.1
MCU:Raspberry Pi Pico
モータードライバはスターターキットに入っているL293Dを使います。Amazon等でも入手できます。
モーターは130モーターを使います。これはマブチモーター社のFA-130RAの互換品の総称で、型式の一部を取って130モーターと呼ばれています。基本的にはマブチ製の純正品とほぼ同じ性能です。
回路
以下のように配線します。モーターの消費電流は3Vで0.3~0.5Aほどなので、Raspberry Pi Picoの3.3V端子ではなく乾電池を使います。(ちなみにVBUSも最大電流を超えるのでNGです)
モーター用の電池はワニグチクリップ等を使って接続してください。
コーディング
新しくスケッチを作成し、以下の内容をコピペしてください。
/* GPIO設定 */ const int PIN_ENABLE = 13; const int PIN_IN_1 = 14; const int PIN_IN_2 = 15; void setup() { /* シリアル通信の設定 */ Serial.begin(115200); /* GPIO設定 */ pinMode(PIN_IN_1, OUTPUT); pinMode(PIN_IN_2, OUTPUT); pinMode(PIN_ENABLE, OUTPUT); /* PWMの設定 */ analogWriteFreq(25000); analogWriteRange(4096); } void loop() { Serial.println("正転・低速"); SetMotorSpeed(true, 3500); delay(3000); Serial.println("正転・高速"); SetMotorSpeed(true, 4095); delay(3000); Serial.println("逆転・低速"); SetMotorSpeed(false, 3500); delay(3000); Serial.println("逆転・高速"); SetMotorSpeed(false, 4095); delay(3000); } void SetMotorSpeed(bool dir, int speed) { /* 回転方向の設定 */ if (dir) { digitalWrite(PIN_IN_1, HIGH); digitalWrite(PIN_IN_2, LOW); } else { digitalWrite(PIN_IN_1, LOW); digitalWrite(PIN_IN_2, HIGH); } /* 回転速度の設定 */ if (speed < 0) { analogWrite(PIN_ENABLE, 0); } else if (speed > 4095) { analogWrite(PIN_ENABLE, 4095); } else { analogWrite(PIN_ENABLE, speed); } }
動作確認
モータの回転方向や回転速度が3秒ごとに変われば成功です。「speed」の値は低くしすぎるとモーターの起動に必要なパワーが足りず、全く回らないことがあるので注意してください。
解説(作成中)
モータードライバの仕組み
今回使用したL293Dは「Hブリッジ回路」と呼ばれる回路を一つのICにまとめたものになります。Hブリッジ回路がどのようなものなのかをイメージするために半導体部分をリレーに置き換えて回路シミュレーションを作ってみました。実際の回路から色々と省略していたりHigh/Lowを逆転させたりしてますが、大雑把にはこんな感じで動かしています。
ちなみにですが、L293DはHブリッジ回路が2つ入っているので、2つのモーターを制御することが出来ます。
ディスカッション
コメント一覧
まだ、コメントがありません