光距离传感器驱动研究与数据优化算法.docVIP

光距离传感器驱动研究与数据优化算法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光距离传感器驱动研究与数据优化算法

光距离传感器驱动研究与数据优化算法   摘 要:文章对Android平台下光距离传感器驱动层作研究和设计,同时针对目前光距离传感器存在的问题,提出一种数据优化算法,旨在提高数据的可靠性,改善目前存在的问题。通过实验数据对比数据优化前后光距离传感器上报到上层的数据,同时结合用户体验得出结论。   关键词:光距离传感器;驱动层;数据优化算法;可靠性   光距离传感器是智能手机最基本的传感器之一,其中距离传感器主要应用于接打电话灭屏和智能防误触场景,光线传感器主要是为了实现自动亮度调节功能,使得lcd背光亮度能够根据周围环境光线强度自动调节[1]。正是由于这些基本功能平时用户用的最多,因此如何最大限度地保证用户体验成为目前光距离传感器驱动不断优化的目的,而这其中最关键的问题就是如何提高传感器数据的可靠性。手机出厂一致性、触摸屏表面污渍、手机贴膜、外界强光等因素都会影响距离传感器工作,现实生活中我们经常遇到由于手机膜贴歪了或距离传感器上方的触摸屏有污渍就导致距离传感器工作不正常。光线传感器对光的感知灵敏度非常高,有时手机可能只是转动一个角度就使得光感值变化,导致光感值跳动非常快,甚至会导致背光亮度不稳定。为解决这些问题,文章拟通过对光距离二合一传感器驱动的研究设计,提出在驱动层的数据优化算法,提高数据的可靠性。   1 光距离传感器工作原理   光距离传感器依照光学原理,通过接收和发送相关光线,实现对周边环境光线强度的检测和物体靠近和远离状态的检测。光距离传感器是光线传感器和距离传感器二合一传感器,一般采用两个光电二极管采集光的数据,第一个光电二极管用来接收可见光和红外光,第二个光电二极管用来接收红外光[2],然后通过模数器转换为数字信号。光距离传感器接收到数字信号后,会根据芯片寄存器设置好的上下限阈值来判定是否触发中断,同时更新中断状态寄存器的值。软件收到中断信号后,会读取中断状态寄存器的值,判断是光传感器触发的中断还是距离传感器触发的中断。光线距离传感器一般都装在手机上方位置,选择埋在触摸屏下面。   2 光距离传感器驱动层研究设计   传感器驱动模块的设计主要是完成驱动层和硬件抽象层两部分开发设计。本文以光距离传感器为例,基于I2C总线完成对驱动层的设计。一般基于I2C总线驱动的工作必须实现以下两个结构体的回调函数。通过实现结构体i2c_driver的回调函数来实现驱动的加载与卸载、睡眠与唤醒;通过实现结构体file_operations回调函数来实现对设备的打开与关闭、校准与补偿等。根据传感器的工作目的,还必须实现数据的采集与上报。   2.1 传感器驱动工作流程   手机开机启动,设备与驱动开始匹配,然后加载驱动进内核,加载过程通过probe()函数完成内存申请分配,设备树解析,GPIO引脚配置,设备注册等工作;应用打开传感器,系统调用接口最终通过虚拟文件系统调用驱动层file_operations结构体回调函数来实现对设备的打开,然后传感器开始采集数据并上报到内核缓冲区等待硬件抽象层来取。   2.2 数据采集与上报   传感器驱动采集数据主要有中断机制采集数据和定时轮询机制采集数据两者方式。文章以ltr559光线距离二合一传感器为例,研究设计距离传感器使用中断机制采集数据,光线传感器使用定时轮询机制采集数据。   (1)中断机制采集数据:距离传感器内部有上下限阀值寄存器,当红外二极管接收到的绕射值大于上限阀值或者小于下限阀值则内部触发中断,通过之前申请的GPIO中断脚传给控制芯片,驱使软件去读状态寄存器的值,以此判断是距离传感器还是光线传感器发生中断,然后调用驱动对应的中断处理函数采集数据并且上报。Linux中断分为顶半步和底半步两部分,顶半步只完成比较紧急的部分,大部分工作都是由底半步完成[3]。通过request_irq()函数在顶半步申请和设置中断,然后底半步调度工作队列,最后由绑定的工作函数采集数据和上报数据。   (2)定时轮询采集数据:在probe()函数中初始化一个高精度定时器,且设置了到期时间和到期执行函数。内核定时器并不是周期运行,它在超时后自动销毁。因此,为了实现周期轮询,设计在定时器执行函数返回前再次激活定时器,在内核定时器执行函数里调用工作队列,最后在工作队列处理函数中实现对硬件的访问。设定的定时时间到期后,执行对应工作绑定的执行函数,读取传感器寄存器的数据,然后上报到input子系统。   2.3 Input子系统数据上报   input子系统分三层,最上一层是事件处理层,中间是核心层,底层是驱动层。驱动层把事件上报到核心层,然后核心层对事件进行分发,传到事件处理层,最后把事件放到事件缓冲区中,等待用户进程来取。   3 驱动层数据优化算法   针对传感器数据

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档