《光电编码器的工作原理和应用电路.docx》由会员分享,可在线阅读,更多相关《光电编码器的工作原理和应用电路.docx(14页珍藏版)》请在第一文库网上搜索。
1、光电编码器的工作原理和应用电路1光电编码器的工作原理光电编码器(Optical Encoder)俗称单键飞梭 其外观似乎一个电位器,因其外部有一个可以左右旋转同时又可按下的旋钮,许多设施(如显示器、示波器等)用它作为人机交互接口。下面以美国Greyhill公司生产的光电编码器为例,介绍其工作原理及使用方法。光电编码器的内部电路如图1所示,其内部有1个发光二极管和2个光敏三极管。当左右旋转旋钮时,中间的遮光板会随旋钮一起转动,光敏三极管就会被遮光板有次序地遮挡,A、B相就会输出图2所示的波形;当按下旋钮时,2、3两脚接通,其用法同一般按键。3电源+5 V输出A输出B按键GND光电编码器的内部电路
2、顺时针旋转位置光电编码器的输出波形当顺时针旋转时,光电编码器的A相相位会比B相超前半个周期;反之,A相见比B相滞后半个周期。通过检测A、B两相的相位就可以推断旋钮是顺时针还是逆时针旋转,通过纪录A或B相变化的次数,就可以得出旋钮旋转的次数,通过检测2、3脚是否接通就可以推断旋钮是否按下。其具体的鉴相规章如下:1. A为提升沿,B=0时,旋钮右旋;2. B为提升沿,A=l时,旋钮右旋;3. A为下降沿,B=l时,旋钮右旋;4. B为下降沿,A=O时,旋钮右旋;5. B为提升沿,A=0时,旋钮左旋;6. A为提升沿,B=l时,旋钮左旋;7. B为下降沿,A=l时,旋钮左旋;8. A为下降沿,B=0
3、时,旋钮左旋。通过上述方法,可以很简洁地推断旋钮的旋转方向。在推断时添加适当的延时程序,以消退抖动干扰。2 WinCE供应的驱动模型WinCE操作系统支持两种类型的驱动程序。一种为本地驱动程序,是把设施驱动程序作为独立的任务实现的,直接在顶层任务中实现硬件操作,因此都有明确和专一的目的。本地设施驱动程序适合于那些集成到Windows CE平台的设施,诸如键盘、触摸屏、音频等设施。另一种是具有定制接口的流接口驱动程序。它是一般类型的设施驱动程序。流接口驱动程序的形式为用户一级的动态链接库(DLL)文件,用来实现一组固定的函数称为“流接口函数”,这些流接口函数使得应用程序可以通过文件系统访问这些驱
4、动程序。本文争论的光电编码器就属于流接口设施。2. 1流设施驱动加载过程WinCE. NET系统运行时会启动负责流驱动的加载进程DEVICE. exeo DEVICE, exe进程对驱动的加载是通过装载注册表列举器(RegEnum. dll)实现的。在WinCE. NET中,全部设施的资源信息都由OAL负责纪录在系统注册表中,RegEnum. dll 一个一个扫描注册表项 HEKY_LOCAL_MACHINE Driver Builtin下的子键,发觉新设施就依据每个表项的自容进行硬件设施初始化。2. 2中断与中断处理假如一个驱动程序要处理一个中断,那么驱动程序需要首先使用CreateEven
5、t函数建立一个大事,调用Inteuptlnitialize函数将该大事与中断标识绑定。然后驱动程序中的1ST就可以使用WaitForSingeObject函数来等待中断的发生。在一个硬件中断发生之后,操作系统进入特别处理程序,特别处理程序调用OAL的OEMInterruptHandler函数,该函数检测硬件并将中断标识返回给系统;系统得到该中断标识便会找到该中断标识对应的大事,并唤醒等待相应大事的线程(IST),然后1ST进行中断处理。处理完成之后,1ST需要调用InterruptDone函数来告知操作系统中断处理结束,操作系统再次调用OAL中的OEMInterruptDone函数,最终完成中
6、断的处理。图3为WinCE. NET中断处理的流程框图。C中断开始二)操作系统进入异常处理程序异常处理程序调用OAL层的OEMInterruptHandler| OEMInterruptHandler返回中 断 号给操作系统|系统根据中断号找到对应事件,唤醒对应事件的IS71ST进行中断处理ST调用InterruptDog通知操作系统中断处理结束|系统调用OEMterruptDone完成中断处理C 中断返回3 WinCE.NET中断处理流程框3光电编码器驱动程序的设计3. 1光电编码器与S3C2410的硬件接口光电编码器与S3C24IO的接口电路如图4所示。光电编码器的A、B相为集电极开路输出
7、,由于S3C2410的I/O 口电平为3.3 V,所以将其通过电阻上拉到3. 3V后再分别接到CPU的EINT0和EINT1上;将P1直接接到3. 3V,P2通过电阻下拉到GND。当旋钮按下时,P2 口输出为高电平,否则输出为低电平。工作状态下,将EINTO、EINT1配置成提升沿和下降沿均触发的外部中断,将EINT2配置成提升沿触发的中断,旋钮按下时EINT2引脚产生提升沿触发中断。3.2外部中断初始化及中断服务程序的编写首先必需完成CPU的I / O 口和中断的初始化工作,然后再编写中断处理程序。具体分为4个步骤:1 .初始化I/O 口。在Portnit()函数中,将EINT0和EINT1
8、初始化为提升沿和下降沿均触发的中断。将EINT2初始化为提升沿触发的中断。2 .添加中断号。在。alint.h下添加光电编码器中断向量的宏定义。代码为#define SYSINTR_OED(SYSINTR_FIRMWARE+20)3 .添加中断的初始化、禁止、复位等函数,分别在OEMInteuptEnable()OEMInteuptDisable() OEM-InteruptDone()等函数中加入相关代码。4 .返同中断标识,由OEMInteuptHandler()函数返回中断标识(SYSINTR_OED)o5 .3编写流接口驱动程序Windows CE. net把中断处理分成两个部分:中断
9、服务程序(ISR)和中断服务线程(1ST)。TSR通常要求越短、越快越好,它的唯一任务就是返回中断标识。正由于ISR很小,只能做少量的处理,因此中断处理器就调用1ST执行大多数的中断处理。中断服务线程(1ST)在从waitForSingleObject()函数得到中断已经发生的信号前始终保持空闲;当接收到中断信号后,它就在本机设施驱动程序的PDD层调用子程序,这些程序反过来访问硬件以获得硬件的状态。1ST使用Interruptlnitialize()函数来注册自己,然后使用WaitForSingleObject()函数等待中断信号。假如这时中断信号到来,则应将光电编码器的状态纪录下来,保存在变
10、量OED_Status中。OED_Status=l表示旋钮按下,OED_Status=2表示旋钮逆时针旋转,0ED_Status=3表示旋钮顺时针旋转。这里还有一种比较简洁的鉴相规章,具体步骤是,当创建线程时读出EINT1的电平状态并保存在变量PreEINTl中,每次中断到来时首先推断EINT2是否为高电平。假如为高电平,则说明按钮按下;假如EINT2为低电平,则推断EINT0电平是否与PreEINTl相同。假如相同,则说明旋钮逆时针旋转;反之,旋钮顺时针旋转,推断的流程如图5所示。初始化时读出EINT1状态,保存在PreEINTl中中断到来OED Status = 2N按钮顺时针旋转OED
11、Status = 3按钮按下OED Status = 1EINT2为高电平?Y按钮逆时针旋转PreEINTl EINT1C返回)5 光电编码器鉴相流程框Windows CE流接口驱动程序模型要求驱动程序开发者编写1()个接口函数,针对光电编码器的驱动主要应完成设施初始化和数据读取2个函数的编写。WindowsCE设施文件名前缀由3个大写字母组成,操作系统使用这3个字母来识别与流接口驱动程序相对应的设施。这里定义设施文件名前缀为“OED”(Optical Encoder),其中设施初始化函数OEDnit()在Windows CE装载驱动程序时用于创建中断大事和中断服务线程。在函数OED_Read
12、()中将光电编码器的状态(OED_Status)返回。3. 4封装驱动程序并加入到WinCE中依据上述方法编译出动态链接库(DLL)还不够,由于它的接口函数还没有导出,还需要告知链接程序输出什么样的函数,因此必需建立一个后缀名为def的文件。在本设计中为OpticalEnccder.def。下面是此文件的内容:LIBRARY OpticalEncoderEXPORTSOED_CloseOED_DeinitOED.InitOED_IOControlOED-C)pcnOED_PowerDownOED_PowerU pOED,ReadOED_SeekOED_Write一个具体的流接口驱动程序和注册表
13、是密不行分的。向WinCE内核添加注册表项的方法有两种:一种是直接修改Platform Builder下的reg文件;另一种是自己编写一个注册表文件,通过添加组件的方法将动态链接库文件添加到内核中。这里用第2种方法,将OpticalEncoder.d添加到内核中。编写的注册表文件内容如下:HKEY_LOCAL_MACH1NEDrivers、Built lnSTRINGS“Index = dword : 1“ Prefix” = OED”mD1* = ()pticalEncoder. dll”wOrderdword :0最终编写一个CEC文件,完成对定制内核注册表部分的修改并将OpticalEn
14、coder. dll添加到系统内核中去,然后在Platform Builder中就可以直接添加已经编写好的驱动程序了。光电编码器的应用1、角度测量汽车驾驶模拟器,对方向回旋转角度的测量选用光电编码器作为传感器。重力测量仪,采纳光电编码器,把他的转轴与重力测量仪中补偿旋钮轴相连,扭转角度仪,采用编码器测量扭转角度变化,如扭转试验机、渔竿扭转钓性测试等。摆锤冲击试验机,采用编码器计算冲击是摆角变化。2、长度测量计米器,采用滚轮周长来测量物体的长度和距离。拉线位移传感器,采用收卷轮周长计量物体长度距离。联轴直测,与驱动直线位移的动力装置的主轴联轴,通过输出脉冲数计量。介质检测,在直齿条、转动链条的链
15、轮、同步带轮等来传递直线位移信息。3、速度测量线速度,通过跟仪表连接,测量生产线的线速度角速度,通过编码器测量电机、转轴等的速度测量4、位置测量机床方面,记忆机床各个坐标点的坐标位置,如钻床等自动化掌握方面,掌握在牧歌位置进行指定动作。如电梯、提升机等5、同步掌握通过角速度或线速度,对传动环节进行同步掌握,以达到张力掌握结语本文主要介绍了光电旋转编码器的原理及应用方法,并具体介绍了 WinCE驱动程序的结构,胜利地开发出了光电编码器在嵌入式操作系统WinCE下的驱动程序。试验证明,该方法正确可行,程序运行稳定牢靠.光电编码器的应用电路一、光电编码器的工作原理光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是目前应用最多的传感器,光电编码器是由光栅盘和光电检测装置组成。光栅盘是在肯定直径的圆板上等分地开通