pig881 发表于 2016-5-14 14:52:37

谁用过A89 光电编码器 吗?

本帖最后由 pig881 于 2016-5-14 14:54 编辑

谁用过A89 光电编码器 吗? 4根线, 码盘是100线的

从上面看下去,是 红 黑 蓝 黄 的排列顺序的,




我把红线接3.3v, 黑线接地, 蓝线接 D3口




代码这么写:


int OutL=2;
int OutR=3;
volatile long cL=0,cR=0;
unsigned long old_time=0,new_time=0; // 总时间标记
unsigned long time1 = 0, time2 = 0; //左1,右2 轮 时间标记

void setup() {
attachInterrupt(digitalPinToInterrupt(OutR),COUNTR,FALLING);
Serial.begin(9600);

}

void COUNTR()
{
   if((millis()-time2)>5)
    cR++;
time2=millis();
}

void loop() {

   new_time=millis();
   if(abs(new_time - old_time) >= 1000) // 如果计时时间已达1秒
   {

   Serial.print("RightMotor is ");
   Serial.println(cR,DEC);
   cR=0;   
   old_time=millis();

    }


   /// Serial.print("RightMotor is ");
//   Serial.println(cR,DEC);
//   delay(1000);

}

代码写法有没有问题?

如果用手转动轮子,是可以测得到数据的,但是如果马达直接上电,速度很快的时候,就测不到了,为什么?


林定祥 发表于 2016-5-14 21:10:15

一圈100个脉冲,马达转速太快后。产生的脉冲数=转速*100.估计处理速度来不及

pig881 发表于 2016-5-14 23:18:00

林定祥 发表于 2016-5-14 21:10 static/image/common/back.gif
一圈100个脉冲,马达转速太快后。产生的脉冲数=转速*100.估计处理速度来不及

我刚换成20线的码盘,同样的光电测速居然可以测得出来

PINKWALKMAN 发表于 2016-5-15 09:02:51

你这个编码器安装在减速器的输出轴处,100线的没问题的,可以用。还有可以直接用5V的供电、

pig881 发表于 2016-5-15 09:50:38

PINKWALKMAN 发表于 2016-5-15 09:02 static/image/common/back.gif
你这个编码器安装在减速器的输出轴处,100线的没问题的,可以用。还有可以直接用5V的供电、

装在输出轴,是我图上这么装吗?我刚才又试验了一下,还是得不到数据,全是0

PINKWALKMAN 发表于 2016-5-16 07:51:23

pig881 发表于 2016-5-15 09:50 static/image/common/back.gif
装在输出轴,是我图上这么装吗?我刚才又试验了一下,还是得不到数据,全是0

是图上这么安装的。
也许是程序问题,或者接线哪不对吧。这个光电对管的接线是有正负的不能随意接,还有如果身边有示波器最好了,一目了然。如果没有先写一个简易的程序例如以编码器的输出信号电平变化来控制LED的亮灭变化也可以验证。
页: [1]
查看完整版本: 谁用过A89 光电编码器 吗?