树莓派中旋转编码器的使用

树莓派中旋转编码器的使用

@(树莓派学习笔记)

维基百科:https://en.wikipedia.org/wiki/Rotary_encoder#Incremental_encoder

RotaryEncoder

在这里插入图片描述

当经过一个0-2-3-1的循环便认为顺时针旋转了一步,
当经过一个0-1-3-2的循环便认为逆时针旋转了一步。
允许中间状态的摆动。

classgpiozero.RotaryEncoder(a, b, *, bounce_time=None, max_steps=16, threshold_steps=(0, 0), wrap=False, pin_factory=None)

Parameters:
a (int or str):连接到旋转编码器的“A”输出的 GPIO 引脚。
b (int or str):连接到旋转编码器的“B”输出的 GPIO 引脚。
bounce_time (float or None) :如果None(默认值),则不会执行任何软件退回补偿。否则,这是组件在初始更改后忽略状态更改的时间长度(以秒为单位)
max_steps (int): 编码器将value从 0 更改为 1 或逆时针从 0 更改为 -1 所需的步数。如果此值为 0,则编码器的value永远不会更改,但您仍然可以读取步骤来确定编码器顺时针或逆时针移动的整数步数。
threshold_steps (tuple of int):一个(min,max)步长元组,设备将被视为“活动”(包括该组)。换句话说,当步长大于或等于最小值,并且小于或等于最大值时,该属性将为 True,并且将触发相应的事件when_activated when_deactivated.默认值为(0,0)
wrap (bool):如果 True 且 max_steps 为非零,则当步长达到正数或负数max_steps则通过否定进行换行。默认值为 False。

wait_for_rotate(timeout=None):暂停脚本,直到编码器在任一方向上至少旋转一步,或者达到超时。

wait_for_rotate_clockwise(timeout=None):暂停脚本,直到编码器顺时针旋转至少一步,或者达到超时。

wait_for_rotate_counter_clockwise(timeout=None):暂停脚本,直到编码器逆时针旋转至少一步,或者达到超时。

max_steps:旋转编码器将value从 0 顺时针移动到 1 或逆时针从 0 移动到 -1 所需的离散步数。从另一种意义上说,这也是此输入可以表示的离散状态的总数。

steps:编码器的“步长”值从 0 开始。编码器顺时针旋转的每一步递增一,编码器逆时针旋转的每一步递减一。步长值受max_steps限制。它不会超过正数或负数max_steps,除非 wrap 为 True,在这种情况下,它将通过否定来滚动。如果max_steps为零,则步长不受任何限制,并且在任一方向上将无限增加,但值将返回常量零。
请注意,与大多数其他输入设备相比,由于旋转编码器没有绝对位置,因此步长属性(以及推论值)是可写的。

threshold_steps:其中的最小和最大步数将返回 True。默认值为 (0, 0)。

value:将旋转编码器的值表示为介于 -1 和 1 之间的值。该值的计算方法是将步长值划分为从负max_steps到正max_steps的范围。
请注意,与大多数其他输入设备相比,由于旋转编码器没有绝对位置,因此 value 属性是可写的。

when_rotated:编码器沿任一方向旋转时要运行的函数。
这可以设置为不接受(必需)参数的函数,或接受单个强制参数(具有任意数量的可选参数)的Python函数。如果函数接受单个必需参数,则激活的设备将作为该参数传递。
将此属性设置为“无”(默认值)可禁用该事件

when_rotated_clockwise:编码器顺时针旋转时要运行的函数。
这可以设置为不接受(必需)参数的函数,或接受单个强制参数(具有任意数量的可选参数)的Python函数。如果函数接受单个必需参数,则激活的设备将作为该参数传递。
将此属性设置为“无”(默认值)可禁用该事件。

when_rotated_counter_clockwise:编码器逆时针旋转时要运行的函数。
这可以设置为不接受(必需)参数的函数,或接受单个强制参数(具有任意数量的可选参数)的Python函数。如果函数接受单个必需参数,则激活的设备将作为该参数传递。
将此属性设置为“无”(默认值)可禁用该事件。

wrap:如果为 True,则当value达到其限制(-1 或 1)时,它将“环绕”到相反的限制。当为 False 时,值(和相应的步长属性)根本不会超出其限制。


encoder

github上的一个类,与RotaryEncoder类的原理类似
链接:https://github.com/nstansby/rpi-rotary-encoder-python
采用RPi库编写。


注意:在实际使用中发现,使用这两个类时,旋转方向会出现不定期的判断错误,例如一直将电机朝顺时针方向转,value大体上一直增加,但在增加的过程中会出现少量减少的过程。该现象无法避免,原因可能是树莓派边缘检测不及时或外部信号干扰,但好在对结果的影响不是很大。
如果结果及其不稳定,可考虑编码器是否出现故障。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值