Raspberry Pi python的旋转编码器接口

时间:2018-03-14 09:30:56

标签: python raspberry-pi event-handling interrupt gpio

我一直在寻找使用Raspberry Pi在Python中用quadrature读取一个2位机械旋转编码器,以实现简单的人机界面(想想音量控制或菜单导航)。

我正在使用Keyes KY-040模块进行初始测试,但可能会切换到类似this的内容。

我找到了以下两个页面,并根据其中的指导推出了我自己的解决方案。

我在两个编码器通道的上升沿和下降沿都使用event detection并根据移动递增计数器,我理解这使得我在上面的链路上具有正交性能。

我对A通道触发器的回调如下所示:

def A_trig(enc_A):
    time.sleep(.001)
    A = GPIO.input(enc_A)
    B = GPIO.input(enc_B)
    global count
    if A:
        if not B:
            count += 1
        else:
            count -= 1
    else:
        if B:
            count += 1
        else:
            count -= 1

B通道有一个同样的回调,尽管它在另一个方向上递增。在去抖动方面,我在每个频道添加了100nF个上限,并使用了2 ms的柔和去抖时间。

这段代码对我来说似乎很合乎逻辑,如果事件检测顺利进行,应该能很好地处理正交编码器。

表现令人满意,但它并不像我想的那样顺畅 - 我经常会错过动作(基于缓和的感觉)。

我在Arduino上使用Paul Stoffregen's Encoder Library获得了相同数量的经验,用于几乎完全相同的应用程序。

我理解MCUsRPis是非常不同的野兽,但我不禁认为如果没有太多的硬件扩展,这里有更好的性能。

问题是,在这种情况下,这是阅读人机编码器的最佳方法吗?

我所拥有的其他一些想法是使用中介MCU来处理编码器,并根据请求将计数报告给RPi,甚至查看正交计数器芯片。

还有py-gaugette库可以尝试,还有一些调试(硬和软)我当前的方法有待尝试,但我有兴趣从一些硬件/软件专家那里得到一些关于它们如何的输入在此期间这样做。

0 个答案:

没有答案