基于eBox旋转编码器

在电子产品设计中,经常会用到旋转编码开关,比如数码电位器等,它的英文名翻译过来就是Rotary Encoder Switch。常见的有5pin和3pin产品。5pin实在左右旋转的基础上增加了向下按得功能。以EC11为例,常用语仪器仪表面板,音响面板等。其pin脚用途如下:

  • 1,3pin输出编码信号,一般需要外接上拉电阻。
  • 2pin公共端,接地
  • 4,5pin是下按键的接线端
    考虑到通用性,所以下面的代码只实现旋转编码部分,按键部分忽略。
    下图是1,3pin旋转时输出波形图,可以看到A,B信号相位相差90°。程序中可以通过边沿出现顺序判断编码器旋转方向
    1. 考虑到资源占用以及编码器性能,采用单pin中段模式。代码中设计以pinA为中断源,上边沿下边沿均产生中断。如上图,从左到右,蓝线处开始读取A,B的值,结合中断。状态表如下
    2. A B
    3. 0 1 CCW,下降沿
    4. 1 1 CW,上升沿
    5. 1 0 CCW,上升沿
    6. 0 0 CW,下降沿
    7. 也就是说CW时,A,B状态一致;CCW时,A,B状态相反

根据上面状态变,对应的程序代码如下:
void exProcess(void)
{

  1. uint8_t A = EN.a_pin->read()<<1 | EN.b_pin->read();
  2. switch (A)
  3. {
  4. case 0:
  5. EN.KEY_NUM = KEY_A; // 正向下降沿
  6. break;
  7. case 1:
  8. EN.KEY_NUM = KEY_B; // 反向下降沿
  9. break;
  10. case 2:
  11. EN.KEY_NUM = KEY_B; // 反向上升沿
  12. break;
  13. case 3:
  14. EN.KEY_NUM = KEY_A; // 正向上升沿
  15. break;
  16. }

}





posted @ 2015-12-12 14:20  好心情_梦想  阅读(702)  评论(2编辑  收藏  举报