【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つのモーターを制御することが出来ます。









ディスカッション
コメント一覧
まだ、コメントがありません