[转]pyb nano使用OMRON E6A2-CW3C增量式旋转编码器

MicroPython相关代码、库、软件、工具
回复
头像
shaoziyang
帖子: 3951
注册时间: 2019年 10月 21日 13:48

[转]pyb nano使用OMRON E6A2-CW3C增量式旋转编码器

#1

帖子 shaoziyang »

原帖作者:dukeduck
入手pyb nano很长时间了,也没正经做过什么东西,最近正好有个测量位移的需求,使用OMRON E6A2-CW3C增量式编码器(每圈100个脉冲),在此记录下。

我选用的旋转编码器是OMRON E6A2-CW3C增量式编码器(每圈100个脉冲),总共4根线(两相),一根供电(5-12v),一根GND,一根信号A,一根信号B。选用的测位移滚轮周长为100mm。也就是1个脉冲对应1mm位移。

编码器官方信息:https://www.fa.omron.com.cn/product/item/2344/


由于之前没有使用过这类编码器(其实我完全是个小白,纯属现学现卖),所以上网搜了一下,代码是根据自己对于编码器的工作原理写的,不对之处还请指正。

编码器的A相B相各产生1个方波信号,且相互之间会错开90度,也就是说一个脉冲里有4个参考点,可以根据A和B信号的电平高低相互比较来确认旋转方向。

接线很简单,编码器的供电线接到pyb nano上的VIN,GND接GND,信号A和B随便接2个GPIO,我选择的是Y9和Y10。采用中断的方式读取信号。

代码: 全选

import machine


def callback(t):
    '''
    Get displacement(delta) measurement by interrupt
    '''
    global out_a, out_b, delta
    a_state = out_a.value()  # Read signal A
    b_state = out_b.value()  # Read signal B
    if a_state == b_state:  # Compare A & B to get the direction
        delta += 0.25 * (100 / 100)  # 0.25 muliply circumference (100mm in my case) devided by pulse per rotation (100p/r in my case)
    else:
        delta -= 0.25 * (100 / 100)

# Signal A & B of the rotary encoder
out_a = machine.Pin('Y9', machine.Pin.IN, machine.Pin.PULL_UP)  # pull up the pin
out_b = machine.Pin('Y10', machine.Pin.IN, machine.Pin.PULL_UP)

# Initialize the displacement
delta = 0

# Get displacement reading when sensing a pulse
out_a.irq(trigger=machine.Pin.IRQ_FALLING | machine.Pin.IRQ_RISING, handler=callback)


while True:  # Print the displacement
    print(delta)

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章