关于电阻式触摸屏的线性校准问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于电阻式触摸屏的线性校准问题

1 引言

阻性触摸屏与LCD 显示器上的各点很难完全准确配合,因此除了采用精确的机械装配技术校准之外,在使用之前还必须进行软件校准。本文介绍的校准方法首先确定误差源,然后通过三个选定点导出触摸屏的校准矩阵,并用软件方法来实施点与点之间对应关系的校准。掌握这种技术,对降低嵌入式系统的成本至关重要。

图1所示是一个阻性触摸屏的横截面,其结构十分简单,由上下相对放置的两层结构构成,FILM 和玻璃的内表面涂上薄薄一层导电材料,并用一些透明绝缘隔离点(绝缘点)将导电表面隔开。当手指或铁笔按压玻璃表面时,上层FILM 产生弯曲接触下层玻璃。这种结构中层间的距离决定了触摸屏的敏感度。层间距离越近,敏感度越小,压力就要越大,以使两层结构可靠接触。

玻璃或

图1 阻性触摸屏的横截面 图2 触摸屏的等效电路

图2所示是触摸屏的等效电路。通过一个触摸屏控制器(AD 转换器)将电源的正、负极加到一块玻璃的导电层两端,另一块玻璃上的导电层则起到一个电位计游标的作用。在玻璃上不同的触摸点,导电的情况也不同,数字转换器上便会录得不同的测试电压值,然后控制器将录得的电压值转换成一个二维坐标:X 轴坐标和Y 坐标。这些控制器每秒钟可进行200次或更多的采样。采样率通常与背景噪声和控制器质量有关。智能控制器还具备其它一些功能,如检测到触摸时中断CPU 、在检测到触摸前设定采样率连续进行采样。没有触摸时,控制器处于待机状态。

由于阻性触摸屏结构简单、操作易懂、所需软硬件有多个厂商可供选择,因此可用于对成本敏感的设计中。然而,由于触摸屏与它背后的显示器(LCD 或其它)间的对应点很难完全配合,因此几乎所有带阻性触摸屏的设备在出厂前均要经过一定的校准。否则在触摸屏上点击某一按钮或选择某项功能时,内置的软件便无法对这一点击做出正确响应。

本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。最后通过这些校准因数将触摸屏的对应点与实际显示的对应点完全对应起来。

2 误差的来源

有几个误差源会影响触摸屏控制器,使之无法产生正确的对应点X 和Y 坐标。最主要的误差源是电气噪声、机械误差及放大因子。此外,操作者的误操作也会有所影响,如手指或铁笔按压时间不够长或压力不够大。以上所有误差均会产生无用数据,必须对它进行纠正补偿才能使触摸屏正常工作。

在各种电气系统中,由热效应或电磁效应以及系统设计缺陷引起的电气噪声无处不在。在触摸屏中,由于AD 转换器的前端电路具有高输入阻抗,因此特别容易受到电气噪声的影响。除了对带有触摸屏控制器的电路小心布局外,我们通常在

AD 转换器输入端增加低通滤波器来解决这一问题。此外也可选择软件方法,舍弃AD 转换中的最小的一、两位,并用算法将一些落在允许误差范围之外的数据点从采样流中去除。这种软件算法也可消除由使用者产生的误差。

本文所阐述的校准方法可用来解决由于机械误差和放大因素引起的误差。图3中的圆圈表示触摸屏下的LCD 显示的图形,椭圆则表示当用户顺着LCD 显示的图像画圈时,触摸屏对应点的集合,不过有所夸

大。这个重建的图形显然经过一系列旋转、移位和放大,而且在每个方向变换的参数不一样。校准的重点则是将触摸屏上显示的这个重建图形经过变换,换算出与LCD显示的图形相一致的对应点集合。

图3 坐标对应关系示意图

3 校准的数学基础

为了得到一个通用解决方案,我们将每个点描述为一个数学参量。如图4所示,可将LCD显示器上的每个点当作一个矢量PD,而该点在触摸屏上对应的点则当作矢量P。此外,我们假设一个参量M,通过这个参量可将P D与P进行换算,即

P D = MP (1)

这里的M是一个转换矩阵,也是我们要研究的对象。如果能得到转换矩阵M中相关的数值,那么给定触摸屏上任一点P,我们就可换算出它在LCD显示器上的对应点PD。

现在假设LCD显示器上的任一点都与触摸屏上的某点相对应,但要经过旋转、移位和放大处理。如果按矢量的长度和角度将每个点用(X,Y)两个坐标来表示,则LCD显示器和触摸屏上的点都可通过以下方程式来表达:

P D= [X D , Y D]

= [R D cosθD , R D sinθD](2a)

P = [X , Y ]

= [ R cosθ, R sinθ](2b)

如果触摸屏在校准时与显示屏之间存在一个角度差异,为了进行补偿,要进行旋转处理,即

θr =θD -θ,θr是角度差。这样我们便可得到一个中间点:

P'= [ R cos〔θ+θr〕, R sin〔θ+θr〕] (3)

将每个点的X坐标和Y坐标以不同的因子放大,得到K X和K Y。考虑放大因子可以得到以下方程式,它更准确地描述了LCD显示器与触摸屏上点与点之间的对应关系:

P" = [K X R cos〔θ+θr〕, K Y R sin〔θ+θr〕] (4)

最后,我们加上位移因子X T和Y T,得到LCD显示器与触摸屏上点与点之间的对应方程式:

P D= [K X R cos〔θ+θr〕+ X T, K Y R sin〔θ+θr〕+ Y T](5)

为了将方程式5再次变换以求取方程式中的未知量,假设触摸屏和LCD显示器上点与点之间有一个角度差θr,但这一角度极小,因此sinθr≈θr,而cosθr≈1.0。根据这一假设我们得出另两个十分有用的近似方程式:

cos〔θ+θr〕≈〔cosθ-θr sinθ〕(6a)

sin〔θ+θr〕≈〔sinθ+θr cosθ〕(6b)

通过以下组合,方程式5可重新表示为:

P D= [K X R cosθ-K X Rθr sinθ〕+ X T , K Y R sinθ+θr K Y R cosθ〕+ Y T](7)

方程式7的优点在于,它采用触摸屏坐标描述了LCD显示器上的点坐标。上述方程式也可转换为:P D= [K X X-θr K X Y + X T , θr K Y X + K Y Y + Y T](8)

利用我们原先的假设(即实际情况中的放大、旋转和位移因数均为常量),除X和Y之外,上述方程式右边的各项均为常量。通过采用更方便的方式表达X D和Y D坐标,我们可以得到触摸屏与LCD显示器各点之间的对应关系方程式:

X D = AX + BY + C (9b)

Y D = DX + EY + F (9b)

可见,只有当触摸屏和LCD显示器间的角度差非常小时,才可运用上述公式。

4 校准矩阵

一般的校准算法常选取2-5个采样点来收集校准信息。假设LCD显示器上的对应点可以通过触摸屏上的点转换得到,只需正好3个采样点我们就可得到校准数据。需要3个采样点的原因在于方程式9a和9b 有三个未知量。从这3个采样点我们可获得足够的信息来建立并求解这一联立方程组。

采样点的选取也应当考虑到实际情况。它们必须能得出非冗余的联立方程组,它们不能太靠近触摸屏的边缘(此处呈现非线性),此外它们的间隔必须足够宽,以便尽可能减少放大误差。图4所示的P0、P1和P2这三个点符合这些条件。这些点距触摸屏边缘约10%,分布足够散,得

出以下非冗余方程式:

X D0 = AX0 + BY0 + C (10a)

X D1 = AX1 + BY1 + C (10b)

X D2 = AX2 + BY2 + C (10c)

Y D0 = DX0 + EY0 + F (11a)

Y D1 = DX1 + EY1 + F (11b)

Y D2 = DX2 + EY2 + F (11c)

图4 从而求出A、B、C、D、E和F的值。一旦这些参数值定下来,便可利用方程式9,通过触摸屏上的原始数据计算出它在LCD显示器上的对应点。

上述联立方程组的未知量已求解出,此处不再推导。直接跳过中间步骤得出最后结论,将K作为各方程式的公分母,便可得出未知量:

K = 〔X0-X2〕〔Y1-Y2〕-〔X1-X2〕〔Y0-Y2〕(12)

A = 〔〔X D0-X D2〕〔Y1-Y2〕-〔X D1-X D2〕〔Y0-Y2〕〕/K (13)

B = 〔〔X0-X2〕〔X D1-X D2〕-〔X D0-X D2〕〔X1-X2〕〕/K (14)

C = 〔Y0〔X2X D1-X1X D2〕+ Y1〔X0X D2-X2X D0〕+ Y2〔X1X D0-X0X D1〕〕/K (15)

D = 〔〔Y D0-Y D2〕〔Y1-Y2〕-〔Y D1-Y D2〕〔Y0-Y2〕〕/K (16)

E = 〔〔X0-X2〕〔Y D1-Y D2〕-〔Y D0-Y D2〕〔X1-X2〕〕/K (17)

F = 〔Y0〔X2Y D1-X1Y D2〕+ Y1〔X0Y D2-X2Y D0〕+ Y2〔X1Y D0-X0Y D1〕〕/K (18)

5 软件实现

实际的软件实现过程相对简单。可从/code.htm 上得到程序样本,它包括三个文件:alibrate.c、calibrate.h和sample.c。第一个文件包含两个函数setCalibrationMatrix()和getDisplayPoint()。前者实现了方程式13~18,后者则实现了方程式9。启动文件包含了各种声明,另一个源文件则实现了一个控制台应用程序,这一程序执行校准功能,并示范如何在器件中使用这些函数。sample.c中的代码假设在调用这些函数前,器件中实现了一个执行程序来采集校准数据。

相关文档
最新文档