单片机操作旋转编码器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.

最近做了一个关于旋转编码器的项目,在网上查阅了很多资料,然后又是进行了诸多的实验,分享给大家。

1 旋转编码器原理

(借用一下别的文档里的图片)

5脚的旋转编码开关具有左转,右转,按下三个功能。2脚接地,1,3脚接上拉电阻。

4脚,5脚是按下功能的两个脚,可以根据需求自己接线。

检查方向时,通常采用两种做法

.

的上升沿或下跳沿,在中断程序中,检测此时另外获取(1)中断法:A或B相为高电平一相的电平。例如上图中,A相上跳沿,相为低电平则为顺时针转动;BB 二者为逆时针方向转动。不相同时,则能判,BAB)电平法:同时检测A相和相的电平,当出现2 (B相的电平,则能判断出转动的方向。定发生了转动,根据前一时刻A相和硬件电路2

本设计在PIC16单片机上进行开发,采用中断法。

旋转编码开关输出上拉,之后采用RC 滤波器对信号进行先一步滤波,此处的RC滤波器的元器件大小可以适当调整。中断源采用的是捕捉模块(CCP2)的捕捉中断(外部中断用于别处)。

3 C代码

中断响应函数:

void interrupt ISR(void)

{

if(CCP2IF)

{

CCP2IF=0;

Change();

}// 程序中CCP2设置成捕捉下跳沿

void Change()

{

..

.

unsigned int t2=2000;

if(RC3)// 高电平

{

while((!RC1)&&(t2--))//等待RC1的低电平持续完

{

Delay();

}

的电平,以确认转动发生if(!RC3)//判断此时RC3{

// 增或减操作}

else

{

while((!RC1)&&(t2--))//等待RC1的低电平持续完{

Delay();

}

RC3if(RC3)//判断此时的电平,以确认转动发生{

// 增或减操作}

}

}

注意事项:4

滤波电路,延迟时间等均需要根据具体的旋转开关进行调整。一般的单片机程序中,并不建议在中断中添加延迟函数,但应视具体情况而定。..

相关文档
最新文档