下图是我正在使用的编码开关的时序图(可能你用的编码开关的时序图是反过来的,这不重要,稍微改一下就能用了), 其实鉴别编码开关正反转的关键地方就是找到编码开关正反转时序图不同的地方。
可以发现,正转时,A比B快半个波形,反转时,B比A快半个波形。 A、B管脚容易抖动,建议两个引脚各加105电容到地消抖。第一种的方法:
我们设置A为下降沿中断
当A下降沿时,判断B的状态,若是为高,则为正转,若是为低,则为反转
这样已经基本上达到了可以用的地步,但是某些情况下,可能会出现误判的情况,因此,我们可以通过判断上升沿和下降沿来提高准确率。
第二种方法:我们设置A为双边沿中断(上升沿及下降沿中断,注意只开启A的双边沿中断,如果也开启了B的双边沿,可能会有反效果)
当A下降沿时,判断B的状态,若是为高,则为标记旋转状态0,若是为低,则标记旋转状态1,当A进入上升沿中断时,再次判断B的状态,若是B低电平并且旋转状态为1,则旋转方向为1,若是B高电平并且旋转状态为0,则旋转方向为0,最后在主函数中判断旋转方向即可。
在主函数中,只需检查flag_rotary是否为true,如果为true,先设置flag_rotary为false,然后判断旋转方向即可。