APTX4869 发表于 2014-5-18 21:24:56

求助个代码关于旋转编码器计算转速与转角的


#define ENCODER_A_PIN 2
#define ENCODER_B_PIN 3
#define SWITCH_PIN    4
long position;

void setup(){
//setup our pins 初始化我们的需要的引脚
pinMode(ENCODER_A_PIN, INPUT);
pinMode(ENCODER_B_PIN, INPUT);
pinMode(SWITCH_PIN, INPUT);

attachInterrupt(0, read_quadrature, CHANGE);

//setup our serial 初始化Arduino串口
Serial.begin(9600);
}

void loop(){
   if (digitalRead(SWITCH_PIN) == LOW){
   delay(10);
   if (digitalRead(SWITCH_PIN) == LOW){
       Serial.println("Switch Pressed");
   }
   }
   Serial.print("Position: ");
   Serial.println(position, DEC);
   delay(1000);
}

void read_quadrature(){
// found a low-to-high on channel A ENA脚下降沿中断触发
if (digitalRead(ENCODER_A_PIN) == LOW){   
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (digitalRead(ENCODER_B_PIN) == LOW)
      position++;
}
// found a high-to-low on channel A ENA脚上升沿中断触发
else{
    // check channel B to see which way 查询ENB的电平以确认是顺时针还是逆时针旋转
    if (digitalRead(ENCODER_B_PIN) == LOW)
      position--;
}
}


网上关于旋转编码器的材料太少了,这是找到的别人写的代码,可惜不会改啊,串口能读出旋转过的位置数,不知道在哪填进角度转化啊,求个好人给改下,谢谢了

frame66 发表于 2014-5-18 23:45:01

角度是更具编码器一整圈的脉冲数换算出来的。

APTX4869 发表于 2014-5-19 11:48:19

frame66 发表于 2014-5-18 23:45 static/image/common/back.gif
角度是更具编码器一整圈的脉冲数换算出来的。

嗯,编码器一圈是20个脉冲,不知道在哪改啊

frame66 发表于 2014-5-19 17:36:05

20个脉冲是一圈360度,那么1个脉冲就是18度,用position*18就可以转换成度数了。

908495557 发表于 2016-4-13 21:30:53

问一下。你用的是哪种旋转编码器啊。。???
页: [1]
查看完整版本: 求助个代码关于旋转编码器计算转速与转角的