单片机操作旋转编码器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
滤波电路,延迟时间等均需要根据具体的旋转开关进行调整。一般的单片机程序中,并不建议在中断中添加延迟函数,但应视具体情况而定。..