新闻中心

EEPW首页>光电显示>设计应用> 光电旋转编码器的原理及应用方法

光电旋转编码器的原理及应用方法

作者: 时间:2012-03-13 来源:网络 收藏


3驱动程序的设计

本文引用地址: //m.amcfsurvey.com/article/168291.htm

  3.1与S3C2410的硬件接口

与S3C24lO的接口电路如图4所示。光电编码器的A、B相为集电极开路输出,由于S3C2410的I/O口电平为3.3 V,所以将其通过电阻上拉到3.3V后再分别接到CPU的EINT0和EINT1上;将Pl直接接到3.3V,P2通过电阻下拉到GND。当旋钮按下时,P2口输出为高电平,否则输出为低电平。

光电编码器与S3C24lO的接口电路

  工作状态下,将EINTO、EINTl配置成上升沿和下降沿均触发的外部中断,将EINT2配置成上升沿触发的中断,旋钮按下时EINT2引脚产生上升沿触发中断。

  3.2 外部中断初始化及中断服务程序的编写

  首先必须完成CPU的I/O口和中断的初始化工作,然后再编写中断处理程序。具体分为4个步骤:

  初始化I/O口。在Port_Init()函数中,将EINT0和EINTl初始化为上升沿和下降沿均触发的中断。将EINT2初始化为上升沿触发的中断。

  添加中断号。在oalint.h下添加光电编码器中断向量的宏定义。代码为#define SYSINTR_OED(SYSINTR_FIRMWARE+20)

  添加中断的初始化、禁止、复位等函数,分别在OEMInterruptEnable()、OEMInterruptDisable()、OEM-InterruptDone()等函数中加入相关代码。

  返同中断标识,由OEMInterruptHandler()函数返回中断标识(SYSINTR_OED)。

  3.3 编写流接口驱动程序

  Windows CE.net把中断处理分成两个部分:中断服务程序(ISR)和中断服务线程(IST)。TSR通常要求越短、越快越好,它的唯一任务就是返回中断标识。正由于ISR很小,只能做少量的处理,因此中断处理器就调用IST执行大多数的中断处理。中断服务线程(IST)在从waitForSingleObject()函数得到中断已经发生的信号前一直保持空闲;当接收到中断信号后,它就在本机设备驱动程序的PDD层调用子程序,这些程序反过来访问硬件以获得硬件的状态。IST使用InterruptInitialize()函数来注册自己,然后使用WaitForSingleObject()函数等待中断信号。如果这时中断信号到来,则应将光电编码器的状态记录下来,保存在变量OED_Status中。OED_Status=1表示旋钮按下,OED_Status=2表示旋钮逆时针,OED_Status=3表示旋钮顺时针

  这里还有一种比较简单的鉴相规则,具体步骤是,当创建线程时读出EINTl的电平状态并保存在变量PreEINTl中,每次中断到来时首先判断EINT2是否为高电平。如果为高电平,则说明按钮按下;如果EINT2为低电平,则判断EINTO电平是否与PreEINTl相同。如果相同,则说明旋钮逆时针;反之,旋钮顺时针旋转,判断的流程如图5所示。

判断的流程

51单片机相关文章:51单片机教程




评论


相关推荐

技术专区

关闭