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


波形を見てみたところ、割り込みのタイミングが遅いことに気づきました。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--;
      }
  }
}

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