pig881 发表于 2016-7-11 21:53:04

求助:霍尔编码器的用法

我用的是

这种编码器测速,




按照图片是上升沿触发中断,我用

int OUT1=2;

attachInterrupt(digitalPinToInterrupt(OUT1),COUNT1,RISING);


void COUNT1()
{
   if(digitalRead(PinDir)==LOW)
    {
      flag=0x7F;//电机当前转向为正转,则转向标志为0x7F
    }
   //如果编码器码盘的正交编码板OUTA脉冲信号下跳沿中断时,
//正交编码板OUTA为高电平,则当前电机转向为反转。
   else
    {
   flag=0xFF; //电机当前转向为反转,则转向标志为0xFF
    }

    if((millis()-time_delay) > 5)
    {
       if(flag==0x7F)
         c1++;
       else
         c1--;
   }
time_delay=millis();
      
}


这样 应该FLAG 会 随着 电机 正反转 表现为 高电平1 或是 低电平0 的,但是一直都是1 ,也就是flag 为255, 无论怎么转马达方向,都没用!!

请问是什么原因?!

PINKWALKMAN 发表于 2016-7-16 16:28:44

164335413 发表于 2016-7-15 10:54 static/image/common/back.gif
速度和位置都可以,只是用作位置的话,会需要限位开关或者手动校准零点。

那建议你不要用霍尔,霍尔的精度不够,增量式光电编码器效果要要些。

好奇吖斌 发表于 2016-7-12 20:15:09

void ENCODER_L()
{
if (micros() - ECL_timer > 1000)
{
    if (direct_LR & 0x01)
      count_L++;
    else
      count_L--;
    ECL_timer = micros();
    FLAG |= ENCL;
}
}

void ENCODER_R()
{
if (micros() - ECR_timer > 1000)
{
    if (direct_LR & 0x02)
      count_R++;
    else
      count_R--;
    ECR_timer = micros();
    FLAG |= ENCR;
}
}怎么把这里改成AB相的

PINKWALKMAN 发表于 2016-7-14 17:32:19

只是用来测速度吗?与编码器的使用方式是类似的。

164335413 发表于 2016-7-15 10:53:18

好奇吖斌 发表于 2016-7-12 20:15 static/image/common/back.gif
怎么把这里改成AB相的

void Code1()
{
//为了不计入噪音干扰脉冲,
   //当2次中断之间的时间大于5ms时,计一次有效计数
if((millis()-time1)>1)
    if(digitalRead(PinB_left) == LOW)
//当编码器码盘的OUTA脉冲信号下跳沿每中断一次,
      count1 ++; // 编码器码盘计数加一
    else if(digitalRead(PinB_left) == HIGH)
      count1 --;
if(count1>1000)
    count1 =1000;
else if(count1 < -1000)
    count1 = -1000;
time1 = millis();
}
//**/ 右侧车轮电机的编码器码盘计数中断子程序
void Code2()
{
if((millis()-time2)>1)
{
    if(digitalRead(PinB_right) == LOW)
//当编码器码盘的OUTA脉冲信号下跳沿每中断一次,
      count2 ++; // 编码器码盘计数加一
    else if(digitalRead(PinB_right) == HIGH)
      count2 --;
}
if(count2>1000)
    count2 =1000;
else if(count2 < -1000)
    count2 = -1000;
time2 = millis();
}
这种可以。

164335413 发表于 2016-7-15 10:54:15

PINKWALKMAN 发表于 2016-7-14 17:32 static/image/common/back.gif
只是用来测速度吗?与编码器的使用方式是类似的。

速度和位置都可以,只是用作位置的话,会需要限位开关或者手动校准零点。

好奇吖斌 发表于 2016-7-15 11:33:38

本帖最后由 好奇吖斌 于 2016-7-15 11:34 编辑

164335413 发表于 2016-7-15 10:53 static/image/common/back.gif
void Code1()
{
//为了不计入噪音干扰脉冲,


我在做平衡小车,遇到好多问题,新手入门,都不怎么会这些东西。帮我看看这个Nano平衡小车http://pengzhihui.xyz/2015/12/09/nano/,我是按照这个做的,我用的是AB相编码器,教程是单相,不会改程序

164335413 发表于 2016-7-15 13:16:29

明白了,里面的 digitalRead(PinB_left) ==LOW 需要根据实际现象来确定是HIGH还是LOWvoid ENCODER_L()
{
if (micros() - ECL_timer > 1000)
{
    if (digitalRead(PinB_left) == LOW)
      count_L++;
    else
      count_L--;
    ECL_timer = micros();
    FLAG |= ENCL;
}
}

void ENCODER_R()
{
if (micros() - ECR_timer > 1000)
{
    if (digitalRead(PinB_right) == LOW)
      count_R++;
    else
      count_R--;
    ECR_timer = micros();
    FLAG |= ENCR;
}
}

164335413 发表于 2016-7-18 09:40:16

PINKWALKMAN 发表于 2016-7-16 16:28 static/image/common/back.gif
那建议你不要用霍尔,霍尔的精度不够,增量式光电编码器效果要要些。

看用于什么地方,一圈11和一圈340,精度当然差很多。

pig881 发表于 2016-8-10 17:49:09

好奇吖斌 发表于 2016-7-15 11:33 static/image/common/back.gif
我在做平衡小车,遇到好多问题,新手入门,都不怎么会这些东西。帮我看看这个Nano平衡小车http://pengz ...

哈哈,我也是在看这个代码,我也无法实现 彻底的平衡,也就是 角度环,速度环,方向环这三个互相作用下的平衡,你可以加我Q 175279857 一起探讨一下

pig881 发表于 2016-8-10 17:50:31

164335413 发表于 2016-7-18 09:40 static/image/common/back.gif
看用于什么地方,一圈11和一圈340,精度当然差很多。

我现在改用 334线的 光电 AB相 编码器, 比霍尔的明显精准的多了,但是我毕竟还是没有实现 楼上那位兄台的 NANO 平衡车的功能

星空为我而闪耀 发表于 2016-10-9 19:05:23

楼主问题解决了吗?怎么用霍尔传感器来测速?新人求助

pig881 发表于 2017-2-5 15:56:00

星空为我而闪耀 发表于 2016-10-9 19:05
楼主问题解决了吗?怎么用霍尔传感器来测速?新人求助

然并卵,我是想做平衡车

ignore 发表于 2017-2-14 09:56:13

164335413 发表于 2016-7-15 10:53
void Code1()
{
//为了不计入噪音干扰脉冲,


你好,我询问下,if(digitalRead(PinB_right) == LOW)count2 ++ 能理解,FALLING触发中断, 其中“else   if(digitalRead(PinB_right) == HIGH)   count2 --” 也是FALLING中断触发,低电平,哪里来的高电平 ?

164335413 发表于 2017-2-14 13:10:53

ignore 发表于 2017-2-14 09:56
你好,我询问下,if(digitalRead(PinB_right) == LOW)count2 ++ 能理解,FALLING触发中断, 其中“else ...

这是AB相的码盘,A作为中断触发,B作为方向判断如果pinB是HIGH就认为是正转,如果是LOW就认为是反转。AB相相差1/4个周期或者 1+1/4个周期。一楼额时序图你看一下,应该能理解。
页: [1] 2
查看完整版本: 求助:霍尔编码器的用法