概述
4 proximity sensor校准
本节主要按以下议题展开
1) 为什么要校准
2) 如何校准
3) 固定门限校准
4) 动态门限校准
1)为什么要校准
和大多数sensor一样,proximity sensor安装到整机,需要考虑实际使用时的灵敏度、误触发etc 。如proximity sensor driver (一) 中提到,proximity sensor存在由Ambient light 和 Crosstalk 造成的背景噪声 a ,通俗点说就是,proximity sensor 工作时,即使没有物体遮挡,proximitysensor红外线传感器检测的ps raw data 为a ,a 大于0。所以,proximity sensor要正常工作,设置接近、远离触发门限时是需要考虑背景噪声,以消除背景噪声干扰。还有一个原因是,像大多数采用光学的sensor一样,需要校准红外发射器的发射功率,以满足实际产品的灵敏度,也能排查出物理漏光问题。
2) 如何校准
由1) 描述大概可以知道proximity sensor校准的方法,校准的结果就是获取背景噪声a,和红外发射器的发射功率pulse 值(不同的sensor可能不一样)。所以,校准的大概过程如下
打开proximity sensor à 设定一固定发射功率(pulse经验值)à 多次读取ps raw data à 如果ps raw data超过设定的门限值,则降低发射功率à 将ps raw data取平均值作为背景噪声a、pulse 值保存下来。
和校准相关的ioctl preudo code:
static int ps_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
{
caseALSPS_CALIBRATE_PS: //ps 校准
ps_calibration();
break;
caseALSPS_WRITE_CALIBRATE: //获取 ps校准数据
get_ calibration_data();
set_ps_pulse();
set_ps_thres();
break;
}
proximity sensor 校准流程如下:
开机获取proximity sensor校准数据流程:
3) 固定门限校准
所谓固定门限校准,如上述2)所述,就是一旦出厂校准完成,高低门限值ps_threshold_low & ps_threshold_high就是固定的。
优点:逻辑相对简单
缺点:正如哲学所言万事万物都是变化的,唯一不变的是变化,proximity sensor的背景噪声 a也是变化的,会随着手机使用过程变化,如用户手机跌落导致proximity sensor结构密封性下降,CTP材质老化导致光孔透光性变化等等。所以,使用固定门限校准,存在会导致proximity sensor接近、远离触发灵敏度降低,甚至失效的可能。
4) 动态门限校准
动态门限校准,是指proximity sensor工作时的高低门限值ps_threshold_low & ps_threshold_high是动态的、实时的,每次打开proximity sensor会实时读取背景噪声 a,并基于a动态设置高低门限值ps_threshold_low & ps_threshold_high。
优点:可以规避固定门限校准的缺点
缺点:逻辑相对固定门限校准复杂些,早期调试工作量大些。打开proximity sensor时,如果有物体遮挡proximity sensor光孔,这时获取的背景噪声 a 接近最大值,这样会导致proximity sensor功能失效,不会触发接近、远离事件。
其实,即使是动态门限校准,也不是就不用固定门限校准,工厂出厂前还是会进行固定门限校准。只是实际使用中,高低门限值设置不是根据固定门限校准的背景噪声 a设置的,而是动态实时获取背景噪声 a 。为了解决动态门限校准初始就有物体遮住会导致proximity sensor功能失效的问题,可以引入固定门限校准机制,当动态门限校准背景噪声 a很大时,设置高低门限值还是基于固定门限校准的背景噪声 a,这样就能规避proximity sensor功能失效的问题。
最后
以上就是潇洒电灯胆为你收集整理的proximity sensor driver (三)的全部内容,希望文章能够帮你解决proximity sensor driver (三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复