[電子工作No.2] DCモータ制御その5(割り込み波形測定)

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

今回は、エンコーダの波形と割り込みのタイミングが合っているか確認するために、両方の波形を同時に測定した結果について投稿します。

波形測定結果(修正前)

波形を見てみたところ、割り込みのタイミングが遅いことに気づきました。100msecに見覚えがあったので改めてコードを見てみると

100msec待つコードを入力していました…

100msec→500usecに変更して、ついでに、割り込み時にパルス波を出力するコードに修正。

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 
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
}

void loop() {
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  delayMicroseconds(500);
  Serial.print("EncoderCount:");
  Serial.print(EncoderCount);
  Serial.println();
}

void encoderASense() {

  digitalWrite(13,HIGH);
  digitalWrite(13,LOW);

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

void encoderBSense() {

  digitalWrite(12,HIGH);
  digitalWrite(12,LOW);

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

波形測定結果(修正後)

正確に割り込みができていることが波形から確認できました。
次回は、割り込みの回数からモータの回転角を求めた結果を投稿しようと思います。


copyright © 2024 beavers-hive.com