音游手台中--EC11编码器的控制[2]

简单介绍EC11编码器

相比于开关,编码器是一个可以转的东西。EC11编码器并不复杂。

EC11编码器 图片来自于立创商城

 这样的编码器在旋转的过程中,其实就是3个引脚的导通状态发生变化

 这张图阐明了内部的简单结构,其中黄的地方是一个结点,我们成为C,那么在假设在顺时针转动的时候每经过一个格子,必然是A和C导通-->B和C导通-->A和C不导通-->B和C不导通这个过程.(比起上图上的,AB触点其实很窄,可以实现AB同时在C上,AB同时不在C上)

逆时针的话就是B和C导通-->A和C导通-->B和C不导通-->A和C不导通正好反过来了

如果我们给AB一个上拉电压,C接到负极,就形成了上图的波形。

我们进行一个对A下降沿的中断触发。

A下降沿触发-->检测B的电平

void pinA_falling_exit() //假设A下降沿中断发生进入这个函数
{
    if(readPin(pinB) == 1) //读取一下B的电平
    {
        //如果B是高电平,是顺时针转
    } else {
        //如果B是高电平,是逆时针转
    }
}

每次咔咔转一格触发一次函数。当然顺时针还是逆时针因编码器不同而不同了。

现在应该可以理解这种编码器的图了吧。 

哎,我们只用到了3个脚,EC11编码器另一面还有2个是干什么的呢?其实那是个一开关,EC11编码器可以垂直按下去,当一个小开关。

一般来说C引脚,也就是最特殊的那个引脚,是EC11编码器中间的那个引脚。

为什么用EC11编码器

最主要的特点是-----便宜!

为什么用电位器?

大多数电位器不支持无限转。而且我们主要需要的变化量是往哪边转?转了多少?来配合音游玩蛇。

有更好的编码器供选择吗?

有分辨率更高的光电编码器等等。

EC11的缺点

ec11本质上是开关,存在消抖。ec11转动的时候有咔咔的手感(可能不是缺点)。

怎么消抖?

最便宜的方法 AC和BC各并联一个100nf小电容。

RC微积分电路,施密特触发器,施密特触发器推D触发器等各种电路。

不推荐硬件延时消抖,在音游手台中,务必减小每1ms的延迟。

为什么要消抖?

其实如果编码器模拟鼠标这种位置量的话不太需要消抖的。因为抖动带来的偏差对于整体微乎其微。

机械键盘按键需要消抖吗?

实测1000hz回报率也不需要。

编码器模拟

加上编码器,可以很好的模拟鼠标等操作。

鼠标报文8bit x 4

只需发送一个位移量就好了。

#define MoveX 1;
#define MoveY 2;

uint8_t mouseData[] = {0, 0, 0, 0};

mouseData[MoveX] = 10;
sendRepoet(mouseData);
delay();//必须大于回间隔时间
mouseData[MoveX] = 0;
sendRepoet(mouseData);
//鼠标X轴向右移动10


mouseData[MoveX] = -10;
sendRepoet(mouseData);
delay();
mouseData[MoveX] = 0;
sendRepoet(mouseData);
//鼠标X轴向左移动10

存在一个问题在于,我们往往是以中断的方式进这个函数,而中断里面往往有可能不能使用延时函数(中断优先级),那么就需要一些别的解决方法。 

STM32F103 HAL库开发中,外部中断中使用HAL_Delay();会让程序停止执行(默认的中断优先级)

比如分开设置报文的代码段(主函数),发送报文的代码段(设置为定时器定时中断)分开等等.....

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KJdog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值