EC11旋转编码器电路和程序

    本文地址:http://tongxinmao.com/Article/Detail/id/404

    EC11旋转编码器电路和程序

     

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/aifei7320/article/details/47399227

    现在手里的项目使用到了旋转编码器,目前只使用了旋转功能,按钮功能没用到,电路图如下:

    说一下为什么这么画,原因很简单,旋钮并不需要供电,它做的工作是把原来的高电平拉低,或者不改变高电平状态,这就是为什么旋钮有接地接线柱。所以旋钮的输出引脚需要一直输出高电平就好了,我是用的是Mega8单片机,所以PORTD = 0xC3 DDRD = 0xFF,这样就完成了电平的设置。我按键功能暂时并没有用到。如果直接就把旋钮接到单片机,当使用的时候,用示波器会看到很大的噪声。在网上看到,有使用软件滤波的,我是求助了一个前辈,得到了RC滤波电路,前辈告诉我说,这是很经典的电路。(我是才疏学浅了!!)于是配上0.1uF电容,和10K电阻后,波形非常完美。就算旋转的很快,也没有问题。

     

    ISR(INT1_vect)//INT0中断服务程序

    {

    cli();

    CodingsWitchPolling2();//(这个名字也是剽窃的,抱歉抱歉)

    sei();

    }


    int CodingsWitchPolling1(void)

    {

    if (PIND & 0x04)//检测中断引脚电平

    {

    if (PIND & 0x10)//检测另一引脚电平

    USART_Transmit('C');

    else

    USART_Transmit('D');

    }

    else

    {

    if( !(PIND & 0x10))

    USART_Transmit('C');

    else

    USART_Transmit('D');

    }

    return 0;

    }


    看到这个程序,你又没有感觉很惊讶,其实没那么复杂。现在说一下为什么是这个样子的:


    看原理时,都知道,旋转编码器是输出两种波形的,顺时针和逆时针的,如图:

    我的硬件电路里面,连接的是PD3(INT0)引脚,另一脚在PD4上面,中断出发方式是任意电平变化都触发,所以就是,触发中断->检测中断引脚电平->检测另外一脚电平->判断是顺时针还是逆时针。OK就这么简单。


    上一篇:android ADB模拟键盘
    下一篇:CH57X 蓝牙ble 总结