見出し画像

RaspberryPiを使ってPWMでモータの速度を制御しよう

 こんにちは、タクト工房へようこそ!今回は、L298Nモータドライバを使って、Raspberry PiからPWM(パルス幅変調)を使ってDCモータの速度を制御する方法を紹介します。前回はPWMを使わずにモータを回転させましたが、今回はモータの速度調整に挑戦します。

↓前回の記事


必要な材料と道具

 今回使用するものは前回と同じです。

  • Raspberry Pi

  • モータドライバ(L298N)

  • DCモータ

  • ジャンパーワイヤー

  • バッテリーまたは外部電源

  • ブレッドボード

PWMとは?

  PWM(パルス幅変調)は、デジタル信号のONとOFFの割合を変えることで、アナログ信号を模倣する技術です。PWMはモータや照明の明るさなど様々な場所で活用されています。モータの速度制御では、PWM信号を使ってモータに供給する電圧を調整し、モータの回転速度を制御します。例えば、デューティ比(ONの時間の割合)を50%にすると、モータに供給される電圧の平均値が半分になり、モータの速度も半減します。興味がある方は、以下の記事で詳しく説明していますので、ぜひご覧ください。

PWMによるモータの回転制御

配線方法

 L298Nモータドライバには、モータの速度を制御するためのENAピンとENBピンがあります。これらのピンにPWM信号を送ることで、モータの回転速度を調整することができます。

  1. モータの接続:

    • モータの端子をL298NモータドライバのOUT1OUT2に接続します。

    • ENAピンは、モータ1の速度を制御するために使用します。

  2. Raspberry Piとの接続:

    • IN1をRaspberry PiのGPIOピン(例: GPIO 23)に接続。

    • IN2をRaspberry PiのGPIOピン(例: GPIO 24)に接続。

    • ENAをPWM出力が可能なGPIOピン(例: GPIO 18)に接続。

  3. 電源の接続:

    • 12Vピンに外部電源を接続してモータに電力を供給します。

Raspberry PiのGPIOピン配置がわからない場合は、以下の記事を参考にしてください。

プログラム

 次に、Raspberry PiでPWMを使用してモータの速度を制御するプログラムを紹介します。今回は、モータを徐々に加速し、減速する動作を行います。

#include <wiringPi.h>
#include <stdio.h>

#define IN1 23  // GPIO 23
#define IN2 24  // GPIO 24
#define ENA 18  // GPIO 18 (PWM出力)

void setup() {
    wiringPiSetupGpio();  // GPIOモードを設定
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(ENA, PWM_OUTPUT);  // ENAピンをPWM出力に設定

    pwmSetMode(PWM_MODE_MS);  // マークスペースモードに設定
    pwmSetRange(1024);  // PWM信号の範囲を1024に設定

    // PWM信号の周波数を500Hzに設定
    int frequency = 500;
    int clockDivisor = 54000000 / (frequency * 1024);
    pwmSetClock(clockDivisor);  // クロック分周値を設定
}

void forward(int speed) {
    digitalWrite(IN1, HIGH);  // モータを正転
    digitalWrite(IN2, LOW);
    pwmWrite(ENA, speed);  // PWM信号で速度を制御
}

void stop() {
    digitalWrite(IN1, LOW);  // モータを停止
    digitalWrite(IN2, LOW);
    pwmWrite(ENA, 0);  // PWM出力を0にして停止
}

int main(void) {
    setup();

    while (1) {
        // モータを徐々に加速
        for (int speed = 0; speed <= 1024; speed += 100) {
            forward(speed);  // スピードを設定
            delay(500);  // 0.5秒待機
        }

        // モータを減速
        for (int speed = 1024; speed >= 0; speed -= 100) {
            forward(speed);  // スピードを設定
            delay(500);  // 0.5秒待機
        }

        // モータを停止
        stop();
        delay(2000);  // 2秒待機
    }

    return 0;
}

実行

 プログラムを実行すると、モータが徐々に加速し、減速する動作を行います。

まとめ

 今回は、Raspberry Piを使ってPWM制御によりモータの速度を調整する方法を学びました。PWMを活用することで、モータのスピードを柔軟に調整できます。次回は、エンコーダを使ってモータの回転速度を計測する方法に挑戦します!

いいなと思ったら応援しよう!