电阻式触摸屏校准算法分析_第1页
电阻式触摸屏校准算法分析_第2页
电阻式触摸屏校准算法分析_第3页
电阻式触摸屏校准算法分析_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电阻式触摸屏校准算法分析<一>算法分析电阻式触摸屏在X,Y坐标方向上是线性的,比如S32采用的触摸屏,理论上Xmin=0,Xmax=1023,Ymin=0,Ymax=1023。但是实际的触摸屏,往往是xmin>0,xmax<1023,ymin>0,ymax<1023。所以就需要校准。此文讨论的校准算法,其原理就是利用触摸屏的线性特性,针对被校准的触摸屏,获取其真正的x,y的范围,即xmin,ymin,xmax,ymax将其记录下来。以后当触摸事件发生,将触摸屏报告的原始坐标(x,y)按比例投射到01023的坐标上即可。注意,TP与LCD在相同的坐标方向上,具

2、有相似性,即比例一致性。看看对原始坐标的处理:If(x<xmin)x=0;Elseif(x>xmax)x=xmax-xmin;Elsex=1023*(x-xmin)/(xmax-xmin);If(y<ymin)y=0;Elseif(y>ymax)y=ymax-ymin;Elsey=1023*(y-ymin)/(ymax-ymin);可见,对原始坐标,先减去一个0位置的偏移量(x-xmin),然后求得它X范围上的比率(x-xmin)/(xmax-xmin),再乘以1023,就得到了投射到(01023)上的坐标。再看看校准算法。在以下的讨论中,所谓物理坐标,指触摸屏上的坐标

3、PT;所谓逻辑坐标,指LCD上的坐标PL。LCD的宽度(W)对应TP的X方向,LCD的高度(H)对应TP的Y方向。通过点击三个校准点Po(x,y),Px(x,y),Py(x,y),我们能得到图中内层方框的X,Y的物理坐标范围,即Xm=Px.x-Po.xYm=Py.y-Po.y将此图投射到LCD上,有如下(物理值->逻辑值)的对应关系:Xl->Lwl,Xm->Lwm,Xr->Lwr,Yb->Lhb,Ym->Lhm,Yt->Lht。根据TP与LCD的比例一致性,可以这样计算得到Xl,Xr,Yb,Yt:Xr=(Xm/Lwm)*LwrYt=(Ym/Lhm)*L

4、htxmax=Px.x+Xrymax=Py.y+YtXl=(Xm/Lwm)*LwlYb=(Ym/Lhm)*Lhb于是我们的目的达到了:x范围:xmin=Po.x-Xly范围:ymin=Po.yYbY<二>代码实现1、对触屏上报的物理坐标值PT的处理。PTx=(x>input_dev->absmaxABS_X)?(input_dev->absmaxABS_X-input_dev->absminABS_X)(x<=input_dev->absminABS_X)?0:(x-input_dev->absminABS_X)*1023)/(input_

5、dev->absmaxABS_X-input_dev->absminABS_X);PTy=(y>input_dev->absmaxABS_Y)?(input_dev->absmaxABS_Y-input_dev->absminABS_Y):(y<=input_dev->absminABS_Y)?0:(y-input_dev->absminABS_Y)*1023)/(input_dev->absmaxABS_Y-input_dev->absminABS_Y);2、应用层根据上报的物理坐标,换算得到对应LCD宽高的逻辑坐标值PL。P

6、Lx=(PTx/1023)*240Ply=(Pty/1023)*4003、校准数据的计算过程。factorx=(tscalcmd.curtsmaxx-tscalcmd.curtsminx)/tscalcmd.guiw;factory=(tscalcmd.curtsmaxy-tscalcmd.curtsminy)/tscalcmd.guih;/*calculatetherealboundaryfromthedatacollectedbyAndroidcalibrationapplication*/*+*/high_adc_x=(ts_cal_cmd.p_ts.px.x*factor_x);low

7、_adc_x=(ts_cal_cmd.p_ts.po.x*factor_x);high_adc_y=(ts_cal_cmd.p_ts.py.y*factor_y);low_adc_y=(ts_cal_cmd.p_ts.po.y*factor_y);unit_adc_x=(high_adc_x-low_adc_x)/(ts_cal_cmd.p_gui.px.x-ts_cal_cmd.p_gui.po.x)/ts_cal_cmd.grid_x_size);unit_adc_y=(high_adc_y-low_adc_y)/(ts_cal_cmd.p_gui.py.y-ts_cal_cmd.p_gu

8、i.po.y)/ts_cal_cmd.grid_y_size);g_ts_range.max_x=high_adc_x+(ts_cal_cmd.gui_w-ts_cal_cmd.p_gui.px.x)/ts_cal_cmd.grid_x_size)*unit_adc_x;g_ts_range.min_x=low_adc_x-(ts_cal_cmd.p_gui.po.x)/ts_cal_cmd.grid_x_size*unit_adc_x;g_ts_range.max_y=high_adc_y+(ts_cal_cmd.gui_h-ts_cal_cmd.p_gui.py.y)/ts_cal_cmd

9、.grid_y_size*unit_adc_y;g_ts_range.min_y=low_adc_y-(ts_cal_cmd.p_gui.po.y)/ts_cal_cmd.grid_y_size*unit_adc_y;g_ts_range.y_th=unit_adc_y;/*/*reportthecalibratedboundarydata*/*+*/g_ts_range.min_x+=ts_cal_cmd.cur_ts_minx;g_ts_range.max_x+=ts_cal_cmd.cur_ts_minx;g_ts_range.min_y+=ts_cal_cmd.cur_ts_miny;

10、g_ts_range.max_y+=ts_cal_cmd.cur_ts_miny;tscalcmd.curtscalminx=gtsrange.minx;tscalcmd.curtscalmaxx=gtsrange.maxx;ts_cal_cmd.cur_ts_cal_miny=g_ts_range.min_y;ts_cal_cmd.cur_ts_cal_maxy=g_ts_range.max_y;4、填入代码中的默认校准数据T_ts_calibrate_gui_cmdg_default_cal_data=1,0,1023,0,1023,240,400,(/cur_ts_minx,maxx,m

11、iny,maxy/LCM:width/heightdefinedinim9815_lcm.h),(20,20),(220,20),(20,380)/Touchpoints:po,px,py(20,20),(220,20),(20,380)/Calibrationpoints:po,px,py),20,20,0,1023,0,1023,/x,ygridsize/cur_ts_cal_minx,maxx,miny,maxy);三实例分析1、第1次使用触屏,进入图形校准界面。2、载入默认校准数据g_default_cal_data,3、得到3个校准点的物理坐标,用默认校准数据参与处理,上报,最后转换

12、为逻辑坐标。点(20,20):触屏得到的坐标Po(260,210)-上报坐标(260,210)-逻辑坐标(61,82)点(220,20)触屏得到的坐标Px(865,200)-上报坐标(865,200)-逻辑坐标(203,78)点(20,380)触屏得到的坐标Py(250,950)-上报坐标(250,950)-逻辑坐标(59,371)4、将得到的3个校准点的逻辑坐标,代入新校准数据的计算过程。 Firststep:物理坐标/逻辑坐标的比值factor_x=(1023-0)/240=4.2625factor_y=(1023-0)/400=2.5575X范围,Y范围。©secondstep

13、:将测到的校准点之逻辑坐标转化为物理坐标。得到以校准点为限的high_adc_x=(203*4.2625)=865.3low_adc_x=(61*4.2625)=260high_adc_y=(371*2.5575)=948.8low_adc_y=(82*2.5575)=209.7 thirdstep:得到每个逻辑格子对应的X、丫的物理宽度。unit_adc_x=(865.3-260)/(220-20)/20)=60.53unit_adc_y=(948.8-209.7)/(380-20)/20)=41.06 forthstep:以校准点为限的X范围,Y范围,加上校准点到屏边缘的距离所对应的物理宽

14、度。得到以LCD边缘为限的X范围,Y范围.g_ts_range.max_x=865.3+(240-220)/20)*60.53=925.83g_ts_range.min_x=260-(20-0)/20*60.53=199.47g_ts_range.max_y=948.8+(400-380)/20*41.06=989.86g_ts_range.min_y=209.7-(20-0)/20*41.06=168.84 fifthstep:以LCD边缘为限的X范围,Y范围,加上X、Y方向上物理坐标的最小值,得到真正的X范围,Y范围。g_ts_range.min_x=199.47+0=199.47g_ts

15、_range.max_x=925.83+0=925.83g_ts_range.min_y=168.84+0=168.84g_ts_range.max_y=989.86+0=989.86 这组值写入校准数据.ts_cal_cmd.cur_ts_cal_minx=199.47ts_cal_cmd.cur_ts_cal_maxx=925.83ts_cal_cmd.cur_ts_cal_miny=168.84ts_cal_cmd.cur_ts_cal_maxy=989.865、上报得到的校准数据input_set_abs_params(free_ts->evb1226_input_dev,ABS

16、_X,199.47,925.83,0,0);input_set_abs_params(free_ts->evb1226_input_dev,ABS_Y,168.84,989.86,0,0);即:input_dev->absmaxABS_X=925.83input_dev->absminABS_X=199.47input_dev->absmaxABS_Y=989.86input_dev->absminABS_Y=168.846、以后点击触屏,对数据的处理如下比如再次点击po(20,20),得到的初始物理坐标为x=260,y=210input_dev->absm

17、inABS_X<260<input_dev->absmaxABS_Xx=1023*(260-199.47)/(925.83-199.47)=85.25换算为逻辑坐标x=240*85.25/1023=20input_dev->absminABS_Y<210<input_dev->absmaxABS_Y=989.86y=1023*(210-168.84)/(989.86-168.84)=51.3换算为逻辑坐标y=400*51.3/1023=20.06可见,准确地得到了校准。四讨论1、默认校准数据的curtsminx,curtsmaxx,curtsminy,

18、curtsmaxy怎么填?理论上,这里填入TPdatasheet中标称的Xmin,Xmax,Ymin,Ymax即可。但实际上,某些TP的偏移非常大,比如上述实例中,点击校准点时,物理坐标上报后得到的逻辑坐标:点(20,20):上报坐标(260,210)-逻辑坐标(61,82)点(220,20)上报坐标(865,200)-逻辑坐标(203,78)点(20,380)上报坐标(250,950)-逻辑坐标(59,371)可见,(61,82)偏离点(20,20)较远。校准程序中往往会认为触摸点与理论点的偏移应在一定范围内才是点中了校准点,这个例子就有可能认为没有点中校准点。为了避免这种情况,开发者在初次填写这组默认校准数据时,建议实际测一个TP的Xmin,Xmax,Ymin,Ymax填入。等校准程序运行一遍后,将计算得出的g_ts_range.min_x,g_ts_range.max_x,g_ts_range.min_y,g_ts_range.max_y填入这里,就更为准确了。2、其它校准算法网上介绍的其它校准算法,一类也是利用TP的线形特性,求取一个比值用来校准。另一类是用求取线性方程组的方法。设某点在LCD上的逻辑坐标为(XL,YL),在TP上的物理坐标为(XP,YP),它们之间有此对应关系:XL=A*XP+B*YP+C,YL=D*XP+E*YP+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论