手机距离感应器
01
引言
今天我们来聊一聊智能手机里的P-sensor,即距离传感器。简单的说它可以感应手机和物体的距离,从而实现对手机屏幕的亮灭控制。
在用户打电话时,距离传感器采集手机与用户耳部的距离,如果手机与其耳部的距离超过临界值,那么就关掉屏幕,不再接收用户触摸屏幕事件,防止意外挂掉电话等误操作。有很多人通话过程中脸部会触碰到挂断键,从而导致通话中断有没有? ^_^
人的肉眼是看不到红外光的,大家可以拿出手机打一个电话如10086,使距离传感器处于工作状态,然后用另外一部手机的摄像头对准这个距离传感器观看,就可以发现这个p-sensor器件在不断的闪烁亮光(如果亮屏不明显可以按电源键使屏幕关闭再用另外一部手机的camera观看),那就是距离传感器的红外二极管IRLED正在向外以脉冲的形式发射红外光工作。
手机亮灭屏原理
打电话时,当手机与人体耳部距离小于某个灭屏门限值时,将触发一个中断,软件根据逻辑从而实现关掉屏幕,防止误触。
打电话时,当手机与人体耳部距离大于某个亮屏门限值时,将触发一个中断,软件根据逻辑从而实现点亮屏幕。
02
工作原理
我们以TAOS公司的一款芯片TMD2772来说明p-sensor的工作原理。
如下为TMD2772功能结构图:
由图知道,tmd2772传感器主要由红外发射、光线接收、模数转化、I2C接口等几部分组成。
传感器模块工作原理
芯片工作基本原理如上图所示:红外二极管IRLED向外以脉冲的形式发射红外光,当遇有障碍物挡住了红外光,红外光就会被反射回来,被反射回来的红外光会被CH0和CH1两个光电二极管接收,接收到信号后经过AD转换,得到光的强度值,这个结果被保存在数据寄存器,它从侧面放映了物体距离p-sensor的远近,根据障碍物和手机的距离不同,反射回来的红外光的能量也不同,所以物体近,得到的数据就大,物体远,得到的数据就小。当然,在这个过程中会接收到环境背景光的影响,tmd2772针对这种情况,采用了滤波等方式减小了背景光的影响。
二个光电二极管采集光照的强度,然后通过转换,得到结果保存到寄存器中,传感器对红外线很敏感,但是人眼看不见红外光,当周围的光照中红外的比例比较大的话,那么就可能造成错误的判断。所以就使用二个光电二极管ch0和ch1,其中ch0对可见光和红外线都很敏感,ch1对红外线敏感。然后通过对二者进行一个差值计算,最后得出一个最接近人眼的对光照有感觉的一个值。
光线采集原理图
IR LED发射的红外光如下图所示
如图所示,每次测距时,IRLED会发射多个红外波,周期为16us,发射的红外波的个数由0x0E寄存器控制,可发射的个数为1~255。而发射的红外波的强度由驱动电流控制,驱动电流的强度也可以通过针对相应寄存器的编程来设置。
Tmd2772的0x18和0x19寄存器是sensor的上下阀值寄存器,当AD采样的数据超过上限阀值或者低于下限阀值时,芯片会产生中断。通知我们有物体靠近或者远离。下图是tmd2772的一个工作周期的状态变化:
芯片一开始是处于睡眠状态的,当收到一个I2C的起始信号后,其立即到idle模式,然后根据使能信号的不同,则可能进入prox、wait、als中的一种状态,然后在具体的状态中,又经过初始化、adc等步骤,每个步骤需要多少时间可以通过寄存器设置。
03
校准
Psensor是一个容易受到结构影响的器件,它的功能和结构密切相关,表面开孔,有无rubber(橡胶套),rubber的设计,tp距离sensor的远近,表面油墨的厚度,透光率,贴膜等都会影响到sensor的性能,所以我们需要进行校准,校准一般分为出厂或开机常规校准和拨号校准。
校准的目的是初始化psensor,设置合适的寄存器值,尤其是上下限阀值以及设计到发射功率的发射脉冲个数值以及驱动电流值,使得p-sensor能够正常工作并能够通过标准的测试,并且在大量生产手机时psensor的表现能够较为统一。
结构对p-sensor的影响
p-sensor表面开孔以环形跑道开孔方式为最佳。Rubber的引入是为了隔离发射和接收,降低绕射值,增加p-sensor数据的稳定性,增强探测距离。
TP(触摸屏)距离sensor的距离也有要求,在没有rubber的情况下,如果tp距离sensor的距离远,将会增加sensor的绕射值,从而降低sensor的性能。如果tp距离sensor的距离过远,应该在sensor上增加rubber进行隔离,从而降低绕射值。Rubber的设计需要关注开孔的大小和中间隔断开槽。中间开槽的目的是为了解决黑发的问题。而针对透光率,则要求红外光至少要有70%的通过率。
绕射值的影响
在p-sensor调试的过程中,最容易出现问题的是绕射值过大和黑发不工作的问题。那么什么是绕射值呢?我们知道p-sensor是通过反射回来的红外光的强度来判断物体距离sensor的远近的,但是由于我们的sensor表面上存在tp以及发射和接收之间的隔离等问题造成即使没有物体存在psensor的发射红外光的路径上,p-sensor也可以读取到一定的光强度值,这就是绕射值。而我们的psensor的数据采集又存在饱和的可能性,如果绕射值过大或者已经饱和将使p-sensor的性能受到影响,或者失去作用。影响绕射值大小的因素有以下几点:
1) TP的厚度。
2) TP距离sensor的距离。
3) 表层油墨的透光率。
在结构做好工作之后,接下来就需要针对p-sensor进行软件的调试,调试的关键是设置合理的发射功率,解决黑发问题以及远近探测的一致性问题。
软件校准
P-sensor的校准方式有两种:一种是开机常规校准,一种是打电话时校准。
常规校准
常规校准即开机校准,开机校准是手机开启之后校准一次,之后不再校准。
常规校准
2. 拨号校准
拨号校准是在每次打电话时都针对p-sensor进行一次校准,很明显,打电话校准比开机校准更加合理,因为用户可能长时间不关机,而在开机之后手机表面受到油污、汗液等物质会一定程度影响到p-sensor数据的读取,校准动作如果放在出厂或开机的时候,当实际通话的时候手机的状态和校准时候的状态不同,就有可能发生接近动作失效的问题。而拨号校准能充分分析当前手机的状态,避免亮灭屏功能失效。当然如果你发现你的手机总是一打电话就黑屏,那很可能是由于接近传感器结构上或者器件损坏了。
具体软件流程:
1:在没有遮挡的情况下读取n次ps值并求得平均值,注意要剔除其中的0值,0值的存在有可能是芯片还没有初始化完毕造成的。
2:根据ps值的大小,划分了若干个区间,根据ps值落在的区间范围,分别乘以不同的系数,作为上限阀值和下限阀值。
3:当计算出的ps值大于一个多台采样预测值(如700)时,认为结构有问题,上下限值采用默认值,默认值的数值都比较大,从而解决结构存在瑕疵的情况下手机还能够使用,不过要注意,前提是手机的ps值还没有饱和,如果饱和,默认值也无法解决该问题。
在打电话校准的过程中,采样的次数要有一定的控制,要求是在人把手机放到耳边之前校准要结束,否则会造成校准数据不准,从而影响p-sensor的性能。这个时间需要根据spec然后测试,一般为几百毫秒,以便设计合理的测试次数。
校准完成后,当有物体接近或者远离的时候,通过读取当时的ps值和校准时候设置的亮灭屏门限值(即上下限阈值)比较,从而控制手机的亮灭屏。
04
老司机经验
在调试psensor的整个过程中,主要会遇到如下几个问题:
1) 黑发失效问题。
2) 打电话屏幕黑屏问题。
3) 屏幕闪烁问题。
4)无法满足亮灭屏距离标准(如3cm必须灭,9cm必须亮,亮灭距离保持最少1cm)的问题。
关于黑发问题,除了结构上的处理之外,软件能解决的办法就是增加发射功率,也就是增加驱动电流,增加发射脉冲次数等方式来解决黑发问题。增加脉冲个数的方式有可能造成绕射值过大,因此,要多次测试,寻找合适的脉冲个数值。
打电话黑屏的问题是因为下限阀值过低,不遮挡时ps值无法落在下限阀值之下,造成屏幕无法亮,解决办法就是提高下限值,但是要注意上下限值的间距,否则可能无法满足标准,甚至造成屏幕不断亮灭闪烁的问题。
屏幕闪烁问题是由于上下限值距离过紧而且过低,ps的跳变范围覆盖了上下限值,造成了屏幕的闪烁。
至于无法满足标准的问题唯一的解决办法就是不断地调试。不过要注意在调试的过程中不要引入上述的各种问题,比如为了满足3cm必须灭,把下限设高,但为了满足灭亮距离保持至少1cm,上限值随之升高,就有可能造成黑发问题。
好了,今天的课就到这里了。两个眼皮都在不停的打架了,话说还是要睡个早觉有益身心健康啊,咋们下次码农讲堂再见。
新手入门请看:嵌入式学习需要掌握的吸星大法。
狗蛋带你分分钟了解ARM前世今生。
Android攻城狮的音频接口那点事。
狗蛋的福利,耳机检测知多少。
I2C/SPI外设驱动基于regmap框架的那点用法。
软硬件的一次亲密接触,他们说密谈了什么?
狗蛋的寻亲之路:结识嵌入式世界的那只狗。
Android Camera sensor浅析。
欢迎关注老王,希望能够在一些技术点上为大家抛砖引玉,关注公众号可查看更多干货技能!技术交流QQ群:262047367。单独沟通技术或进微信群讨论也可加个人微信号:wang_ping_66。
嵌入式职场加油站
ID:coder51up
经验|技能|趣味|观点
长按二维码关注