今回は、エンコーダの波形と割り込みのタイミングが合っているか確認するために、両方の波形を同時に測定した結果について投稿します。
波形測定結果(修正前)
波形を見てみたところ、割り込みのタイミングが遅いことに気づきました。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--;
}
}
}
波形測定結果(修正後)
正確に割り込みができていることが波形から確認できました。
次回は、割り込みの回数からモータの回転角を求めた結果を投稿しようと思います。