[電子工作No.2] DCモータ制御その4(正転・逆転判定&割り込み回数カウント)

January 15, 2023
Author(著者):
beaver
DCモータ、エンコーダ

今回は、エンコーダの正転・逆転判定と割り込み回数のカウントについて投稿したいと思います。

Arduinoのシリアルモニタで割り込み回数カウント

ArduinoIDEでコードを作成。
※このコードを作成した後、割り込みがうまくいってるかエンコーダの波形を測定した時にわかったことですが、このコードで正転・逆転の判定はできます。しかし、正確な割り込み回数をカウントすることはできません。解決方法は次回の記事に記載します。(delay(100)をdelayMicroseconds(500)に変更してください。)

 int EncoderA = 0;
int EncoderB = 0;
long  int EncoderCount = 0;

void setup() {
  Serial.begin(9600);
  attachInterrupt(0, encoderASense, CHANGE);  //0⇒pin2
  attachInterrupt(1, encoderBSense, CHANGE);  //1⇒pin3 
}

void loop() {
  delay(100);
  Serial.print("EncoderCount:");
  Serial.print(EncoderCount);
  Serial.println();
}

void encoderASense() {
  if (digitalRead(2)==HIGH)
  {
      if (digitalRead(3)==HIGH)
      {
          EncoderCount++;
      }
      else
      {
          EncoderCount--;
      }
  }
  else
  {
      if (digitalRead(3)==HIGH)
      {
          EncoderCount--;
      }
      else
      {
          EncoderCount++;
      }
  }
}

void encoderBSense() {
  if (digitalRead(3)==HIGH)
  {
      if (digitalRead(2)==HIGH)
      {
          EncoderCount--;
      }
      else
      {
          EncoderCount++;
      }
  }
  else
  {
      if (digitalRead(2)==HIGH)
      {
          EncoderCount++;
      }
      else
      {
          EncoderCount--;
      }
  }
}

正転回数カウント結果

シリアルモニタ上で「EncoderCount」の値が上昇しているのが確認できました。

逆転回転カウント結果

シリアルモニタ上で[EncoderCount」の値が「-」の符号付きで減少しているのが確認できました。

正転と逆転の判定ができるようになったので、次回はロジックアナライザを用いて、エンコーダの波形と割り込み時のタイミングが合っているか測定した結果について投稿したいと思います。


copyright © 2024 beavers-hive.com