DCモーターを動かす(w/ PWM)

部品も揃ったので、機能ごとの動作確認を行なっていきます。

まずはDCモーターからですが、両輪の回転差を発生させないと直進しかできないので、ただしモーターの特性は不揃いなので曲がりますが、PWMを使って実質DCモーターへの供給電圧をコントロールすることで、直進性あるいは回転を実現します。

  • PWMに使えるピン 11(D0~D8、D10、A3、A4)
  • 1周期 732Hz

との情報から、D0とD5をPWM制御、D1~D4を回転方向制御に使います。

Arduinoのコードは以下の通り。元のソースではPWMのduty(0~255指定)を可変していますが、電源電圧9.2Vぐらい(デバッグ時は外部の低電圧電源使用)だとdutyが30%以下あたりでモーターは回らなくなるので固定値を使って確認しています。

pinModeのピン番号指定は0から始まります。

————————————————–

// デジタルピンの定義
// pin number start from 0(D0)
const int IN1 = 1;
const int IN2 = 2;
const int IN3 = 3;
const int IN4 = 4;
const int ENA = 0; // PWM制御で使うENAピンをD9に(モーター1のPWM制御ピン)
const int ENB = 5; // PWM制御で使うENBピンをD10に(モーター2のPWM制御ピン)

int i = 0;
int step = 5;

void setup(){

pinMode(IN1, OUTPUT); // デジタルピンを出力に設定
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);

}

void loop(){

digitalWrite(IN1, HIGH); // HIGH LOWの組み合わせでモーター回転
digitalWrite(IN2, LOW); // 2つのモーターを正回転
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);

for(i=0; i<=255; i=i+step){ // PWM制御のデューティー比を指定してモーター回転速度を変える
analogWrite(ENA, 160);
analogWrite(ENB, 160);
delay(50);
}

delay(1000);

digitalWrite(IN1, LOW); // HIGH LOWの組み合わせでモーター回転
digitalWrite(IN2, HIGH); // 2つのモーターを逆回転(上記とは反対に回転)
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);

for(i=0; i<=255; i=i+step){ // PWM制御のデューティー比を指定してモーター回転速度を変える
analogWrite(ENA, 80);
analogWrite(ENB, 220);
delay(50);
}

delay(1000);

}

————————————————–

参考情報及びソースは以下のサイトから。

https://burariweb.info/electronic-work/arduino-learning/arduino-motor-driver-l298n.html#L298N-2`

 

動作の状況は以下の動画から、分かりづらいですが(途中でモーターの回転音が一瞬途切れた時)順方向から逆方向に回転しています。

 

admin