【Arduino】拉线式编码器/位移传感器数据读取(AB相)

-1.编码器基础

在这里插入图片描述
正转:A相上升沿时B相低电平,A相下降沿时B相高电平
即:A0-1时B0,A1-0时B1,此时A不等于B

反转:A相上升沿时B相高电平,A相下降沿时B相低电平
即:A0-1时B1,A1-0时B0,此时A=B

0.参数

5-24V,树莓派的5V可用

400脉冲,0-500mm

测量轮周长50mm

分辨率=测量轮周长/脉冲数=50/400=0.125(mm/脉冲)
每脉冲对应0.125mm

红线接VCC
黑线接GND(0V)
绿线为A相
白线为B相

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.接线图

在这里插入图片描述

2.代码,能跑

//Arduino拉线式编码器,两相
//由于Arduino uno外部中断只有2 3口,因此选择2 3引脚进行控制
#define APin 3//Encoder的A相引脚,绿线
#define BPin 2//Encoder的B相引脚,白线
volatile long count=0;//定义计数变量

void setup()
{      Serial.begin(9600);
         //设置编码器引脚为输入
      pinMode(APin, INPUT_PULLUP);
      pinMode(BPin, INPUT_PULLUP);
      //为引脚添加中断函数
      attachInterrupt(digitalPinToInterrupt(APin),count_A,CHANGE);//当电平发生改变时触发中断函数
      //attachInterrupt(中断引脚,中断函数,CHANGE)
      //CHANGE: 当引脚电平发生变化时触发中断服务程序
}
 
void loop()//闭循环
{   
    Serial.print("the number of pulse of encoder:");
    Serial.println(count); 
    Serial.print("距离");
    Serial.println(count*0.125); 
     //初始count=0;
}

void count_A()//定义中断函数 ——编码器计数函数
    {int a=digitalRead(APin);//将高低电平转化为int型数值
    int b=digitalRead(BPin);
      if(a==b)
      //a为上升沿的时 b为1   或者a为下降沿时   b为0
      {
        count++;//顺时针转动,对应拉线传感器往外拉出
      }else{
        //a为上升沿的时 b为0   或者a为下降沿时   b为1
        count--;//逆时针转动,对应拉线传感器向内缩回  
      }
    }
 

参考链接

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值