- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
光电编码器的驱动程序设计
本文以三星公司S3C2410(ARM9芯片)为CPU的嵌入式系统开发板为平台,详细阐述了嵌入式操作系统WinCE下光电编码器驱动程序的设计方法,以供同行参考。
1 光电编码器的工作原理
光电编码器(Optical Encoder)俗称“单键飞梭”,其外观好像一个电位器,因其外部有一个可以左右旋转同时又可按下的旋钮,很多设备(如显示器、示波器等)用它作为人机交互接口。下面以美国Greyhill公司生产的光电编码器为例,介绍其工作原理及使用方法。光电编码器的内部电路如图1所示,其内部有1个发光二极管和 2个光敏三极管。当左右旋转旋钮时,中间的遮光板会随旋钮一起转动,光敏三极管就会被遮光板有次序地遮挡,A、B相就会输出图2所示的波形;当按下旋钮时,2、3两脚接通,其用法同一般按键。
?
?
?
?
?
图1 光电编码器的内部电路
图2 光电编码器的输出波形
当顺时针旋转时,光电编码器的A相相位会比B相超前半个周期;反之,A相会比B相滞后半个周期。通过检测A、B两相的相位就可以判断旋钮是顺时针还是逆时针旋转,通过记录A或B相变化的次数,就可以得出旋钮旋转的次数,通过检测2、3脚是否接通就可以判断旋钮是否按下。其具体的鉴相规则如下:
① A为上升沿,B=0时,旋钮右旋;
② B为上升沿,A=1时,旋钮右旋;
③ A为下降沿,B=1时,旋钮右旋;
④ B为下降沿,A=0时,旋钮右旋;
⑤ B为上升沿,A=0时,旋钮左旋;
⑥ A为上升沿,B=1时,旋钮左旋;
⑦ B为下降沿,A=1时,旋钮左旋;
⑧ A为下降沿,B=0时,旋钮左旋。
通过上述方法,可以很简单地判断旋钮的旋转方向。在判断时添加适当的延时程序,以消除抖动干扰。
2 WinCE提供的驱动模型
WinCE操作系统支持两种类型的驱动程序。一种为本地驱动程序,是把设备驱动程序作为独立的任务实现的,直接在顶层任务中实现硬件操作,因此都有明确和专一的目的。本地设备驱动程序适合于那些集成到Windows CE平台的设备,诸如键盘、触摸屏、音频等设备。另一种是具有定制接口的流接口驱动程序。它是一般类型的设备驱动程序。流接口驱动程序的形式为用户一级的动态链接库(DLL)文件,用来实现一组固定的函数称为“流接口函数”,这些流接口函数使得应用程序可以通过文件系统访问这些驱动程序。本文讨论的光电编码器就属于流接口设备。
2.1 流设备驱动加载过程
WinCE.NET系统运行时会启动负责流驱动的加载进程DEVICE.exe。DEVICE.exe进程对驱动的加载是通过装载注册表列举器(RegEnum.dll)实现的。在WinCE.NET中,所有设备的资源信息都由OAL负责记录在系统注册表中,RegEnum.dll一个一个扫描注册表项HEKY_LOCAL_MACHINE\Driver\BuiltIn下的子键,发现新设备就根据每个表项的内容进行硬件设备初始化。
2.2 中断与中断处理
如果一个驱动程序要处理一个中断,那么驱动程序需要首先使用CreateEvent函数建立一个事件,调用 InterruptInitialize函数将该事件与中断标识绑定。然后驱动程序中的IST就可以使用WaitForSingleObject函数来等待中断的发生。在一个硬件中断发生之后,操作系统进入异常处理程序,异常处理程序调用OAL的OEMInterruptHandler函数,该函数检测硬件并将中断标识返回给系统;系统得到该中断标识便会找到该中断标识对应的事件,并唤醒等待相应事件的线程(IST),然后IST进行中断处理。处理完成之后,IST需要调用InterruptDone函数来告诉操作系统中断处理结束,操作系统再次调用OAL中的OEMInterruptDone函数,最后完成中断的处理。
图3为WinCE.NET中断处理的流程框图。
图3 WinCE.NET中断处理流程框图
3 光电编码器驱动程序的设计
3.1 光电编码器与S3C2410的硬件接口
光电编码器与S3C2410的接口电路如图4所示。光电编码器的A、B相为集电极开路输出,由于S3C2410的I/O口电平为3.3 V,所以将其通过电阻上拉到3.3 V后再分别接到CPU的EINT0和EINT1上;将P1直接接到3.3 V,P2通过电阻下拉到GND。当旋钮按下时,P2口输出为高电平,否则输出为低电平。
图4 光电编码器与S3C2410的接口电路
工作状态下,将EINT0、EINT1配置成上升沿和下降沿均触发的外部中断,将EINT2配置成上升沿触发的中断,旋钮按下时EINT2引脚产生上升沿触发中断。
3.2 外部中断初
您可能关注的文档
最近下载
- 2022-2023学年山东省烟台市蓬莱区七年级(下)期中数学试卷(五四学制)(含解析).doc VIP
- 2024版53全优卷3年级数学下册(北师大BSD)附参考答案(A3打印版).doc
- NADCA北美压-铸协会技术标准.pdf
- 深圳市福田区总工会招聘社会化工会工作者笔试真题2022.docx VIP
- T_CECS 10400-2024 固废基胶凝材料.pdf
- 幼儿园课件:数学绘本《向0敬个礼》.pptx
- 深圳市南山区总工会招聘社会化工会工作者笔试试题及答案2022.docx VIP
- 300MW机组DCS控制及保护运行规程.pdf VIP
- 山东省临沂市莒南县第七中学2023-2024学年人教版七年级下册数学期中巩固练习题.docx VIP
- 坐浴第二十章妇产科常用局部护理技术坐浴.PPT
文档评论(0)