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信号を送ることで、モータの回転速度を調整することができます。
モータの接続:
モータの端子をL298NモータドライバのOUT1とOUT2に接続します。
ENAピンは、モータ1の速度を制御するために使用します。
Raspberry Piとの接続:
IN1をRaspberry PiのGPIOピン(例: GPIO 23)に接続。
IN2をRaspberry PiのGPIOピン(例: GPIO 24)に接続。
ENAをPWM出力が可能なGPIOピン(例: GPIO 18)に接続。
電源の接続:
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を活用することで、モータのスピードを柔軟に調整できます。次回は、エンコーダを使ってモータの回転速度を計測する方法に挑戦します!