触摸屏校准分析

触摸屏校准分析
触摸屏校准分析

触摸屏校准分析

----------Vector(2013-05-14) 1.基础知识

我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。而触摸屏则是一种绝对坐标系统,要选哪就直接

点哪,与相对定位系统有着本质的区别。绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:漂移。对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。

通常应用程序中使用的LCD坐标是以像素为单位的。比如说:左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(620,460)。这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、

偏移量、缩放因子都与LCD坐标不同,图是LCD坐标和触摸屏的物理坐标的比较。

(友善之臂mini2440开发板采用这种对应关系)

2.触摸屏校准原理

以上说了触摸屏需要校准的原因,问题出在,物理坐标和屏幕坐标并不匹配,不匹配有两个方面:第一,物理坐标的1个单位和屏幕坐标的1个单位并不相等,我们知道屏幕坐标1个单位一般是一个像素,而物理坐标的1个单位并不是1个像素.第二,假设我们把屏幕的左上角定义为(0,0),那么触摸屏的左上角的物理坐标并不是(0,0)(我们点击之后的物理采样数据)。LCD 坐标和触摸屏坐标对应关系如下:

Vx = xFactor*Px + xOffset //Vx:LCD 像素坐标,Px: 触摸屏物理坐标

Vy = yFactor*Py + yOffset //同上

综上,校准有两个方面:第一,物理采样坐标与屏幕像素坐标的对应关系,也就是伸缩系数,

即单位物理采样数据代表几个单位屏幕像素数据,x坐标和y坐标各有一个伸缩系数,分别记作:xScale和yScale。计算方法很简单,为了精确,可以采样屏幕上的四个点,让用户点击,比如(20,20),(20,200),(300, 200),(300,20),通过横着的线段除以物理采样的数据线段,得到了x的伸缩系数。同理可以得到y的伸缩系数。第二,物理坐标的相对于屏幕像素坐标的偏移,假如我们不计算偏移,只计算伸缩系数的话,假设用户在屏幕点(20,20)点击,我们经过转换物理采样数据,即乘上伸缩系数,发现,校准后的数据并不是(20,20)点,原因就是因为有偏移,原因是触摸屏的物理采样数据,在左上角并不是(0,0),而是某个正数对,采样到的数据不会是0的,这就是偏移产生的原因,所以,在计算过伸缩系数之后,比如点击屏幕(20,20),采样到的数据是(45,78),而第一步计算出的伸缩系数分别是0.78和0.67,那么物理坐标转换成屏幕坐标后是

(45*0.78,78*0.67),此时虽然我们得到了物理坐标对应的屏幕坐标,但是现在屏幕坐标和我们(20,20)所在的屏幕坐标并不在一个坐标系,即(0,0)点不同,所以我们要减去一个坐标系偏移,假设分别是xOffset和yOffset,那么两个坐标做差便得到了xOffset和yOffset。根据上面的四个参数,我们来举个例子,假如屏幕坐标左上角为(0,0),当我们点击屏幕,此时我们从驱动那里得到物理x和y数据,分别乘上xScale和yScale 得到相对屏幕坐标,加上(平移)xOffset和yOffset,得到了当前的屏幕坐标。

3.示例代码:

int pointBas[4][2] = //预先在屏上绘制出的四个十字标记

{

20, 20, //A

20, 300, //B

219, 300,//C

219, 20, //D

};

int pointGet[4][2] =

{

40, 274,

40, 60,

191, 60,

191, 274, //实际点按触摸屏得到的数值

};

STATUS PenCalibratePoint(void)

{

float tmpBas = 0.0;

float tmpGet = 0.0;

//xScale

tmpBas = pointBas[3][0] - pointBas[0][0];

//printf("tmpBas:%f\n",tmpBas);

tmpGet = pointGet[3][0] - pointGet[0][0];

//printf("tmpGet:%f\n",tmpGet);

_gPenConfig.xFactor = tmpBas/tmpGet;

printf("xFactor:%f\n",_gPenConfig.xFactor);

//yScale

tmpBas = pointBas[1][1] - pointBas[0][1];

tmpGet = pointGet[1][1] - pointGet[0][1];

_gPenConfig.yFactor = tmpBas/tmpGet;

printf("yFactor:%f\n",_gPenConfig.yFactor);

//xOffset

tmpBas = pointBas[3][0]-pointGet[3][0]*_gPenConfig.xFactor;

_gPenConfig.xOffset = tmpBas;

printf("xOffset:%f\n",_gPenConfig.xOffset);

//yOffset

tmpBas = pointBas[3][1]-pointGet[3][1]*_gPenConfig.yFactor;

_gPenConfig.yOffset = tmpBas;

printf("yOffset:%f\n",_gPenConfig.yOffset);

return 0;

}

U16 PenMapX(U16 x)

{

float tmp;

tmp=x*_gPenConfig.xFactor+_gPenConfig.xOffset;

return (U16)tmp;

}

U16 PenMapY(U16 y)

{

float tmp;

tmp=y*_gPenConfig.yFactor+_gPenConfig.yOffset;

return (U16)tmp;

}

电阻式触摸屏校准算法分析

电阻式触摸屏校准算法分析 <一> 算法分析 电阻式触摸屏在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)按比例投射到0~1023的坐标上即可。注意,TP与LCD在相同的坐标方向上,具有相似性,即比例一致性。 看看对原始坐标的处理: If (xxmax) x=xmax-xmin; Else x=1023*(x-xmin)/(xmax-xmin); If (yymax) y=ymax-ymin; Else y=1023*(y-ymin)/(ymax-ymin); 可见,对原始坐标,先减去一个0位置的偏移量(x-xmin),然后求得它X范围上的比率((x-xmin)/(xmax-xmin)),再乘以1023,就得到了投射到(0~1023)上的坐标。 再看看校准算法。在以下的讨论中,所谓物理坐标,指触摸屏上的坐标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.x Ym = Py.y – Po.y 将此图投射到LCD上,有如下(物理值->逻辑值)的对应关系:Xl->Lwl,Xm->Lwm,Xr->Lwr,Yb->Lhb,Ym->Lhm,Yt->Lht。根据TP与LCD的比例一致性,可以这样计算得到Xl,Xr,Yb,Yt: Xl = (Xm/ Lwm) * Lwl Xr = (Xm/ Lwm) * Lwr Yb = (Ym/Lhm) * Lhb Yt = (Ym/Lhm) * Lht 于是我们的目的达到了: x范围:xmin = Po.x – Xl xmax = Px.x + Xr y范围:ymin = Po.y – Yb ymax = Py.y + Yt <二> 代码实现

三菱触摸屏(人机界面)常见问题解析(一)

三菱触摸屏(人机界面)常见问题解析(一) 三菱触摸屏F940G0T-BWD-C有没代替型号?更换需要什么变动吗? 三菱触摸屏F940G0T-BWD-C现在已经停产了,可以用GT1050-QBBD这款代替的,都是5.7寸,2色的。两者软件不同,F940使用的是DU软件,GT1050使用的JT-DESIG N(设计)软件,需要用JT软件把DU软件导出来在转换就可以啦! GT10系列触摸屏相关 GT1030三菱触摸屏如何使用USB进行数据传输? 使用USB转232电缆 + QC30R2 连接,注意要在软件中选择合适的COM口 三菱触摸屏突然断电了,之后会怎么动作? 瞬时掉电<5ms时,继续动作。长时间停电、电压低的时候,触摸屏动作停止;恢复上电之后将会自动重启。 三菱触摸屏液晶屏有亮点、黑点,而且闪烁,是不是触摸屏不好? 三菱触摸屏有亮点(一直点亮的点)和黑点(不点亮的点)发生是液晶屏的特性。液晶屏中有非常多的显示元件,因此不能保证100%不出现亮点和黑点。此外,根据显示色不同,可能有闪烁出现。出现亮点、黑点或者闪烁,并不是产品不好或者故障,而是其特性。 如何在三菱触摸屏系统菜单当中进行通讯监视? 可以通过同时触摸屏幕左右上角进入系统菜单,然后触摸‘通讯设置’,接着触摸‘通讯监视’,其中黑底白字部分表示不执行发送或者接收。 三菱触摸屏的触摸定位不准确,如何校准? 进入触摸屏系统菜单设置界面,选择‘校准’菜单,精确点击[+]号直到返回菜单设置界面即可 三菱触摸屏实用菜单功能的启动方式。 1.无工程数据时,上电之后,触摸OK键即可以显示实用菜单。 2.显示编写的画面时,默认出厂设置是触摸左上角,即可显示实用菜单。 3.在画面中设置扩展功能开关,选择实用菜单,即可显示实用菜单。 使用三菱触摸屏时如何让窗口自动弹出? 为窗口切换软元件赋值,数值为指定弹出窗口的编号即可。 GT10系列三菱触摸屏可以仿真吗 使用GT Simulator3新软件可以仿真,软件版本需要在1.22Y以上支持。 报警记录显示当中,可不可以使用不同的软元件报警? 不可以,因为在三菱触摸屏GT10系列报警记录软元件公共设置中,软元件设定只能选择连续方式,不能选择随机方式,因此只能选择连续的软元件实现报警记录显示功能。 键代码开关当中的梯形图显示为什么按下无效? GT10系列的三菱触摸屏没有梯形图监视的功能。 当位软元件为ON或者OFF时,可分别切换不同的画面吗? 当三菱触摸屏位软元件为ON或者OFF时,可以分别切换不同的画面。画面的切换是通过给画面切换软元件赋值,画面切换软元件为字软元件。通过状态监视功能中的设置条件位软元件的状态,并且在动作中给画面切换软元件赋值为固定值即可。 输入数值怎么和文本显示的文字对应? 回答:将需要显示的文本登录到注释或者注释组当中。然后使用注释显示(字),显示与字软元件的值相对应的注释的功能。

关于触摸屏校准问题及触摸屏中断过程图解

触摸屏校准 在开始实现触摸屏功能之前,还需要解决一个问题,那就是触摸屏的校正。触摸屏和LCD是两种不同的物理器件。对于一个分辨率为320×240的LCD,它的宽度为320个像素,高度为240个像素。而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集得到的。要想实现触摸屏上的物理坐标与LCD上的像素点坐标一一对应上,两者之间就需要一定的转换,即校正。而且电阻式触摸屏由于自身的原因参数会发生变化,因此需要经常性的校正。比较常见的校正方法是三点校正法,它的原理是: 设LCD上每个点PD的坐标为[XD,YD],触摸屏上每个点PT的坐标为[XT,YT]。要实现触摸屏上的坐标转换为LCD上的坐标,需要下列公式进行转换:30,30,28,32 XD=A×XT+B×YT+C YD=D×XT+E×YT+F 因为其中一共有六个参数(A,B,C,D,E,F),因此只需要三个取样点就可以求得这六个参数。这六个参数一旦确定下来,只要给出任意触摸屏上的坐标点PT,代入这个公式,就可以得到它所对应的LCD上像素点的坐标PD。具体的求解过程就不细讲,只给出最终的结果。已知LCD上的三个取样点为:PD0,PD1,PD2,它们所对应的触摸屏上的三个点为:PT0,PT1,PT2。A,B,C,D,E,F这六个参数最终的结果都是一个分式,而且都有一个共同的分母,为: K=(XT0-XT2)×(YT1-YT2)-(XT1-XT2)×(YT0-YT2) 那么这六个参数分别为: A=[(XD0-XD2)×(YT1-YT2)-(XD1-XD2)×(YT0-YT2)] / K B=[(XT0-XT2)×(XD1-XD2)-(XD0-XD2)×(XT1-XT2)] / K C=[YT0×(XT2×XD1-XT1×XD2)+YT1×(XT0×XD2-XT2×XD0)+YT2×(XT1×XD0-XT0×XD1)] / K D=[(YD0-YD2)×(YT1-YT2)-(YD1-YD2)×(YT0-YT2)] / K E=[(XT0-XT2)×(YD1-YD2)-(YD0-YD2)×(XT1-XT2)] / K F=[YT0×(XT2×YD1-XT1×YD2)+YT1×(XT0×YD2-XT2×YD0)+YT2×(XT1×YD0-XT0×YD1)] / K 下面的程序是实现触摸屏功能的简单实例——以触点为中心,绘制出一个红色的边长为10个像素的正方形。触点的坐标是用下面方法得到的:当触笔落下时,进入中断,然后读取触点处的坐标,直到触笔的抬起,才退出该次中断。由于触摸屏需要校正,因此在使用之前需要进行校正处理。但并不是每次使用都要校正,只要坐标没有发生漂移,就不需要再次校正。所以在进行一次校正后,只要把那几个参数保存起来,下次需要时直接使用上次

触摸屏校准分析

触摸屏校准分析 ----------Vector(2013-05-14) 1.基础知识 我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。而触摸屏则是一种绝对坐标系统,要选哪就直接 点哪,与相对定位系统有着本质的区别。绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:漂移。对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。 通常应用程序中使用的LCD坐标是以像素为单位的。比如说:左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(620,460)。这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、 偏移量、缩放因子都与LCD坐标不同,图是LCD坐标和触摸屏的物理坐标的比较。 (友善之臂mini2440开发板采用这种对应关系) 2.触摸屏校准原理 以上说了触摸屏需要校准的原因,问题出在,物理坐标和屏幕坐标并不匹配,不匹配有两个方面:第一,物理坐标的1个单位和屏幕坐标的1个单位并不相等,我们知道屏幕坐标1个单位一般是一个像素,而物理坐标的1个单位并不是1个像素.第二,假设我们把屏幕的左上角定义为(0,0),那么触摸屏的左上角的物理坐标并不是(0,0)(我们点击之后的物理采样数据)。LCD 坐标和触摸屏坐标对应关系如下: Vx = xFactor*Px + xOffset //Vx:LCD 像素坐标,Px: 触摸屏物理坐标 Vy = yFactor*Py + yOffset //同上 综上,校准有两个方面:第一,物理采样坐标与屏幕像素坐标的对应关系,也就是伸缩系数,

三菱触摸屏(人机界面)常见问题解析(一)

三菱触摸屏(人机界面)常见问题解析(一)三菱触摸屏F940G0T-BWD-C有没代替型号?更换需要什么变动吗?三菱触摸屏F940G0T-BWD-C现在已经停产了,可以用GT1050-QBBD这款代替的,都是 5.7寸,2色的。 两者软件不同,F940使用的是DU软件,GT1050使用的JT-DESIGN(设计)软件,需要用JT软件把DU软件导出来在转换就可以啦!GT10系列触摸屏相关GT1030三菱触摸屏如何使用USB进行数据传输?使用USB转232电缆+ QC30R2连接,注意要在软件中选择合适的COM口三菱触摸屏突然断电了,之后会怎么动作?瞬时掉电<5ms时,继续动作。 长时间停电、电压低的时候,触摸屏动作停止;恢复上电之后将会自动重启。 三菱触摸屏液晶屏有亮点、黑点,而且闪烁,是不是触摸屏不好?三菱触摸屏有亮点(一直点亮的点)和黑点(不点亮的点)发生是液晶屏的特性。 液晶屏中有非常多的显示元件,因此不能保证100%不出现亮点和黑点。 此外,根据显示色不同,可能有闪烁出现。 出现亮点、黑点或者闪烁,并不是产品不好或者故障,而是其特性。 如何在三菱触摸屏系统菜单当中进行通讯监视?可以通过同时触摸屏幕左右上角进入系统菜单,然后触摸‘通讯设置’,接着触摸‘通讯监视’,其中黑底白字部分表示不执行发送或者接收。 三菱触摸屏的触摸定位不准确,如何校准?进入触摸屏系统菜单设置界面,选择‘校准’菜单,精确点击[+]号直到返回菜单设置界面即可三菱触摸屏实用菜单功能的启动方式。 1.无工程数据时,上电之后,触摸OK键即可以显示实用菜单。 2.显示编写的画面时,默认出厂设置是触摸左上角,即可显示实用菜单。 3.在画面中设置扩展功能开关,选择实用菜单,即可显示实用菜单。

触摸屏校准方法

嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。 嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。然而在实际的嵌入式程序移植的过程中,由于触摸屏尺寸的不同,以及GUI(Graphic User Interface)方案选择和IAL(Input Abstract Layer)的差异,一般开发板制造商并不提供触摸屏的校正程序。本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计方案。 MiniGUI简介 MiniGUI(https://www.360docs.net/doc/108860300.html,)是国内最有影响的自由软件项目之一, MiniGUI 项目的目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实际产品或项目中得到了广泛应用。 MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。 MiniGUI 可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在 MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Threads 适合于具有单一功能的实时系统,而 MiniGUI-Lite则适合于具有良好扩展性的嵌入式系统,比如要下载并运行第三方应用程序的智能手持终端。 MiniGUI在体系结构上有许多独特之处。它的主要特色有: ● 提供了完备的多窗口机制; ● 对话框和预定义的控件类; ● 消息传递机制; ● 多字符集和多字体支持; ● 全拼、五笔等汉字输入法支持; ● BMP、GIF、JPEG等常见图像文件的支持; ● 小巧,包含全部功能的库文件大小为300KB左右; ● 可配置,可根据项目需求进行定制配置和编译; ● 可移植性好。

触摸屏的校准方法

本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。最后通过这些校准因数将触摸屏的对应点与实际显示的对应点完全对应起来。 误差的来源 有几个误差源会影响触摸屏控制器,使之无法产生正确的对应点X和Y坐标。最主要的误差源是电气噪声、机械误差及放大因子。此外,操作者的误操作也会有所影响,如手指或铁笔按压时间不够长或压力不够大。以上所有误差均会产生无用数据,必须对它进行纠正补偿才能使触摸屏正常工作。 在各种电气系统中,由热效应或电磁效应以及系统设计缺陷引起的电气噪声无处不在。在触摸屏中,由于AD转换器的前端电路具有高输入阻抗,因此特别容易受到电气噪声的影响。除了对带有触摸屏控制器的电路小心布局外,我们通常在AD转换器输入端增加低通滤波器来解决这一问题。此外也可选择软件方法,舍弃AD转换中的最小的一、两位,并用算法将一些落在允许误差范围之外的数据点从采样流中去除。这种软件算法也可消除由使用者产生的误差。 本文所阐述的校准方法可用来解决由于机械误差和放大因素引起的误差。图3中的圆圈表示触摸屏下的LCD显示的图形,椭圆则表示当用户顺着LCD显示的图像画圈时,触摸屏对应点的集合,不过有所夸大。这个重建的图形显然经过一系列旋转、移位和放大,而且在每个方向变换的参数不一样。校准的重点则是将触摸屏上显示的这个重建图形经过变换,换算出与LCD显示的图形相一致的对应点集合。

校准的数学基础 为了得到一个通用解决方案,我们将每个点描述为一个数学参量。如图4所示,可将LCD显示器上的每个点当作一个矢量PD,而该点在触摸屏上对应的点则当作矢量P。 此外,我们假设一个参量M,通过这个参量可将PD与P进行换算,即 PD=MP(1)这里的M是一个转换矩阵,也是我们要研究的对象。如果能得到转换矩阵M中相关的数值,那么给定触摸屏上任一点P,我们就可换算出它在LCD显示器上的对应点PD。 现在假设LCD显示器上的任一点都与触摸屏上的某点相对应,但要经过旋转、移位和放大处理。 如果按矢量的长度和角度将每个点用(X,Y)两个坐标来表示,则LCD显示器和触摸屏上的点都可通过以下方程式来表达: 如果触摸屏在校准时与显示屏之间存在一个角度差异,为了进行补偿,要进行旋转处理,即θr=θD-θ,θr 是角度差。这样我们便可得到一个中间点: 将每个点的X坐标和Y坐标以不同的因子放大,得到KX和KY。考虑放大因子可以得到以下方程式,它更准确地描述了LCD显示器与触摸屏上点与点之间的对应关系: 最后,我们加上位移因子XT和YT,得到LCD显示器与触摸屏上点与点之间的对应方程式: 为了将方程式5再次变换以求取方程式中的未知量,假设触摸屏和LCD显示器上点与点之间有一个角度差θr,但这一角度极小,因此sinθr≈θr,而cosθr≈1.0。根据这一假设我们得出另两个十分有用的近似方程式:

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

关于电阻式触摸屏的线性校准问题 1 引言 阻性触摸屏与LCD 显示器上的各点很难完全准确配合,因此除了采用精确的机械装配技术校准之外,在使用之前还必须进行软件校准。本文介绍的校准方法首先确定误差源,然后通过三个选定点导出触摸屏的校准矩阵,并用软件方法来实施点与点之间对应关系的校准。掌握这种技术,对降低嵌入式系统的成本至关重要。 图1所示是一个阻性触摸屏的横截面,其结构十分简单,由上下相对放置的两层结构构成,FILM 和玻璃的内表面涂上薄薄一层导电材料,并用一些透明绝缘隔离点(绝缘点)将导电表面隔开。当手指或铁笔按压玻璃表面时,上层FILM 产生弯曲接触下层玻璃。这种结构中层间的距离决定了触摸屏的敏感度。层间距离越近,敏感度越小,压力就要越大,以使两层结构可靠接触。 玻璃或 图1 阻性触摸屏的横截面 图2 触摸屏的等效电路 图2所示是触摸屏的等效电路。通过一个触摸屏控制器(AD 转换器)将电源的正、负极加到一块玻璃的导电层两端,另一块玻璃上的导电层则起到一个电位计游标的作用。在玻璃上不同的触摸点,导电的情况也不同,数字转换器上便会录得不同的测试电压值,然后控制器将录得的电压值转换成一个二维坐标:X 轴坐标和Y 坐标。这些控制器每秒钟可进行200次或更多的采样。采样率通常与背景噪声和控制器质量有关。智能控制器还具备其它一些功能,如检测到触摸时中断CPU 、在检测到触摸前设定采样率连续进行采样。没有触摸时,控制器处于待机状态。 由于阻性触摸屏结构简单、操作易懂、所需软硬件有多个厂商可供选择,因此可用于对成本敏感的设计中。然而,由于触摸屏与它背后的显示器(LCD 或其它)间的对应点很难完全配合,因此几乎所有带阻性触摸屏的设备在出厂前均要经过一定的校准。否则在触摸屏上点击某一按钮或选择某项功能时,内置的软件便无法对这一点击做出正确响应。 本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。最后通过这些校准因数将触摸屏的对应点与实际显示的对应点完全对应起来。 2 误差的来源 有几个误差源会影响触摸屏控制器,使之无法产生正确的对应点X 和Y 坐标。最主要的误差源是电气噪声、机械误差及放大因子。此外,操作者的误操作也会有所影响,如手指或铁笔按压时间不够长或压力不够大。以上所有误差均会产生无用数据,必须对它进行纠正补偿才能使触摸屏正常工作。 在各种电气系统中,由热效应或电磁效应以及系统设计缺陷引起的电气噪声无处不在。在触摸屏中,由于AD 转换器的前端电路具有高输入阻抗,因此特别容易受到电气噪声的影响。除了对带有触摸屏控制器的电路小心布局外,我们通常在 AD 转换器输入端增加低通滤波器来解决这一问题。此外也可选择软件方法,舍弃AD 转换中的最小的一、两位,并用算法将一些落在允许误差范围之外的数据点从采样流中去除。这种软件算法也可消除由使用者产生的误差。 本文所阐述的校准方法可用来解决由于机械误差和放大因素引起的误差。图3中的圆圈表示触摸屏下的LCD 显示的图形,椭圆则表示当用户顺着LCD 显示的图像画圈时,触摸屏对应点的集合,不过有所夸

触摸屏校正总结

移植tslib-1.4所遇到的问题分析与总结(elephant半原创) 一:移植环境 1:主机环境:Ret Hat Enterprise 5 2: 交叉工具链:arm-linux-gcc-4.3.2 3: 开发平台:友善之臂mini2440+统宝3.5寸屏 4:所需的软件资源: tslib-1.4.tar.gz qt-x11-opensource-src-4.5.3.tar.gz qt-embedded-opensource-src-4.5.3.tar.gz (QT的移植是参考网上找到一篇较好的移植手册,但是此手册的作者不知道是无心之失还是咋的,给的资料有所保留。不过思路比较清晰以及解析的比较详细,还是非常值得参考的) 参照的文章链接地址为:https://www.360docs.net/doc/108860300.html,/view/242c91f24693daef5ef73d82.html 二:交叉编译tslib-1.4 在移植好触摸屏的驱动后(在移植内核的时候完成),一般都要移植一个tslib来配合,在用户层对触摸屏的数据进行滤波和矫正,同时也可以给应用程序一个统一的接口,很多GUI都支持tslib的接口。我移植到开发板的QT版本是QT4,所以用tslib-1.4进行触摸屏校正,因为QT4只是支持tslib-1.4(目前最新版),QT2支持的是tslib-1.3版本,所以在移植过程中先要看清楚自己移植的是什么版本。 简单描述tslib校正触摸屏原理: Tslib是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。通过tslib/src/tslib.h文件可以看出,在tslib中为应用层提供了2个主要的接口ts_open(),ts_close();ts_read()和ts_read_raw(),其中ts_read()为正常情况下的接口,ts_read_raw()为校准情况下使用的接口。从tslib默认的ts.conf文件中可以看出包括如下基本插件:(强烈建议通读这个配置文件并理解这个文件所写的内容) pthres 为Tslib 提供的触摸屏灵敏度门槛插件; variance 为Tslib提供的触摸屏滤波算法插件; dejitter 为Tslib 提供的触摸屏去噪算法插件; linear为Tslib 提供的触摸屏坐标变换插件。 tslib 从触摸屏驱动采样到的设备坐标进行处理再提供给应用端的过程大体如下: raw device --> variance --> dejitter --> linear --> application m odule m odule m odule m odule 再来看看ts_calibrate主要做了哪些事情,校准情况下,tslib对驱动采样到的数据进行处理的一般过程如下: 1。读取屏上5个点的坐标(Top Left,Top Right,Bottom Left,Bottom Right,Center),在进行一系列的变换,取样的5个点,实际上是包含3个不同的X值,3个不同的Y值。和scaling 值一共7个值,一起保存到/etc/pointercal中.(触摸屏校准文件) 2.这个/etc/pointercal文件主要是供linear插件使用。而我们每次的触摸的操作都进行多次触摸坐标变换。

四大触摸屏技术工作原理及特点分析

四大触摸屏技术工作原理及特点分析 为了操作上的方便,人们用触摸屏来代替鼠标或键盘。工作时,我们必须首先用手指或其它物体触摸安装在显示器前端的触摸屏,然后系统根据手指触摸的图标或菜单位置来定位选择信息输入。触摸屏由触摸检测部件和触摸屏控制器组成;触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置,接受后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息,并将它转换成触点坐标,再送给CPU,它同时能接收CPU发来的命令并加以执行。 触摸屏的主要类型 按照触摸屏的工作原理和传输信息的介质,我们把触摸屏分为四种,它们分别为电阻式、电容感应式、红外线式以及表面声波式。每一类触摸屏都有其各自的优缺点,要了解那种触摸屏适用于那种场合,关键就在于要懂得每一类触摸屏技术的工作原理和特点。下面对上述的各种类型的触摸屏进行简要介绍一下: 1.电阻式触摸屏 电阻式触摸屏的工作原理 这种触摸屏利用压力感应进行控制。电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在X 和Y两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(X,Y)的位置,再根据模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。电阻类触摸屏的关键在于材料科技,常用的透明导电涂层材料有:(1)ITO,氧化铟,弱导电体,特性是当厚度降到1800个埃(埃=10-10米)以下时会突然变得透明,透光率为80%,再薄下去透光率反而下降,到300埃厚度时又上升到80%。ITO是所有电阻技术触摸屏及电容技术触摸屏都用到的主要材料,实际上电阻和电容技术触摸屏的工作面就是ITO涂层。

触摸屏校正总结

移植所遇到的问题分析与总结(elephant半原创) 一:移植环境 1:主机环境:Ret Hat Enterprise 5 2: 交叉工具链:开发平台:友善之臂mini2440+统宝寸屏 4:所需的软件资源: (QT的移植是参考网上找到一篇较好的移植手册,但是此手册的作者不知道是无心之失还是咋的,给的资料有所保留。不过思路比较清晰以及解析的比较详细,还是非常值得参考的) 参照的文章链接地址为:二:交叉编译 在移植好触摸屏的驱动后(在移植内核的时候完成),一般都要移植一个tslib来配合,在用户层对触摸屏的数据进行滤波和矫正,同时也可以给应用程序一个统一的接口,很多GUI都支持tslib的接口。我移植到开发板的QT版本是QT4,所以用进行触摸屏校正,因为QT4只是支持(目前最新版),QT2支持的是版本,所以在移植过程中先要看清楚自己移植的是什么版本。 简单描述tslib校正触摸屏原理: Tslib是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。通过tslib/src/文件可以看出,在tslib中为应用层提供了2个主要的接口ts_open(),ts_close();ts_read()和ts_read_raw(),其中ts_read()为正常情况下的接口,ts_read_raw()为校准情况下使用的接口。从tslib默认的文件中可以看出包括如下基本插件:(强烈建议通读这个配置文件并理解这个文件所写的内容) pthres 为Tslib 提供的触摸屏灵敏度门槛插件; variance 为Tslib提供的触摸屏滤波算法插件; dejitter 为Tslib 提供的触摸屏去噪算法插件; linear为Tslib 提供的触摸屏坐标变换插件。

触摸屏校准程序设计示例

触摸屏校准程序设计示例 嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。 嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。然而在实际的嵌入式程序移植的过程中,由于触摸屏尺寸的不同,以及GUI (Graphic User Interface)方案选择和IAL(Input Abstract Layer)的差异,一般开发板制造商并不提供触摸屏的校正程序。本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计方案。 MiniGUI简介 MiniGUI(https://www.360docs.net/doc/108860300.html,)是国内最有影响的自由软件项目之一, MiniGUI 项目的目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实际产品或项目中得到了广泛应用。 MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。 MiniGUI 可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在 MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Threads 适合于具有单一功能的实时系统,而 MiniGUI-Lite则适合于具有良好扩展性的嵌入式系统,比如要下载并运行第三方应用程序的智能手持终端。 MiniGUI在体系结构上有许多独特之处。它的主要特色有: ● 提供了完备的多窗口机制; ● 对话框和预定义的控件类;

触摸屏校正原理

触摸屏校正原理 (1)触摸屏为什么需要校正? 触摸屏与LCD显示屏是两个不同的物理器件。LCD处理的像素,例如我们通常所说的分辨率是600x800,实际就是指每行的宽度是600个像素,高度是800个像素,而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集到的。两者之间需要一定的转换。 其次,在安装触摸屏时,不可避免的存在着一定的误差,如旋转,平移的,这同样需要校正解决。 再次,电阻式触摸屏的材料本身有差异而且随着时间的推移,其参数也会有所变化,因此需要经常性的校正(电容式触摸屏只需要一次校正即可,这是由两者不同的材料原理造成的) (2)如何校正? 触摸屏的校正过程一般为:依次在屏幕的几个不同位置显示某种标记(如"+"), 用触摸笔点击这些标记,完成校正。 如果PT(x, y)表示触摸屏上的一个点, PL(x, y)表示LCD上的一个点,校正的结果就是得到一个转换矩阵M, 使PL(x, y) = M·PT(x, y)。 (3) 校正原理 我们知道二维几何变换包含三种平移、旋转和缩放。这三者的矩阵表示为: 平移MT: 缩放MS: 旋转MR:

所以 PL =MR·MT·MS· PT,将这个公式展开,其结果为: 在上面的公式中,LCD上的坐标(XL 、YL)和触摸屏上的坐标(XT 、YT)是已知的,而其他的则是我们需要求的:θ, Sy, Sx, Ty, Tx共有5个变量,至少需要五个方程,因为每组点坐标(PL, PT)可以得到两个方程,因此我们需要采集三组点坐标。但是上面的方程涉及三角函数,运算复杂,我们可以进一步简化为: 变量虽然多了一个,但是解题过程简单多了,更适合计算机计算,而且采集点的数量仍然为3组。 假设LCD三个点的坐标为(XL1, YL1),(XL2, YL2),(XL2, YL2), 对应触摸屏上的三个点是(XT1, YT1),(XT2, YT2)。(XT3, YT3), 则联立两个方程组为: 这样,触摸屏的校正实际上就是解上面的方程组,得到6个系数:A、B、C、D、E、F。而上面方程组按照克莱姆法则解即可。 在得到6个系数后,以后通过触摸屏得到的所有坐标,带入公式(1)中就可以得到LCD 上以像素表示的坐标。 附:克拉姆法则

触摸屏校正原理和方法

触摸屏校正原理和方法 张开俊2011.6.10 不同于鼠标,触控板的相对坐标定位,触摸屏是绝对坐标系定位,其物理坐标需要和LCD屏上的坐标一一对应。所以在触摸屏原厂生产出货前,以及我们产品在产线组装前,都需要通过特定的软件或整机系统软件进行校正。 1.触摸屏为什么需要校正 触摸屏与LCD显示屏是两个不同的物理器件。LCD处理的像素,例如我们通常所说的分辨率是600x800,实际就是指每行的宽度是600个像素,高度是800个像素,而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集到的。两者之间需要一定的转换。 其次,在安装触摸屏时,不可避免的存在着一定的误差,如旋转,平移的,这同样需要校正解决。 再次,电阻式触摸屏的材料本身有差异而且随着时间的推移,其参数也会有所变化,因此需要经常性的校正(电容式触摸屏只需要一次校正即可,这是由两者不同的材料原理造成的,具体可参阅有关电阻式和电容式触摸屏对比的文章) 2.如何校正 触摸屏的校正过程一般为:依次在屏幕的几个不同位置显示某种标记(如"+"), 用触摸笔点击这些标记,完成校正。 如果P T(x, y)表示触摸屏上的一个点, P L(x, y)表示LCD上的一个点,校正的结果就是得到一个转换矩阵M, 使P L(x, y) = M·P T(x, y)。 3.校正原理 我们知道二维几何变换包含三种平移、旋转和缩放。这三者的矩阵表示为: 平移M T:

缩放M S: 旋转M R: 所以P L =M R·M T·M S·P T,将这个公式展开,其结果为: 在上面的公式中,LCD上的坐标(X L 、Y L)和触摸屏上的坐标(X T 、Y T)是已知的,而其他的则是我们需要求的:θ, S Y, S X, T Y, S X共有5个变量,至少需要五个方程,因为每组点坐标(P L, P T)可以得到两个方程,因此我们需要采集三组点坐标。但是上面的方程涉及三角函数,运算复杂,我们可以进一步简化为:

触摸屏校准

(1)触摸屏为什么需要校正? 触摸屏与LCD显示屏是两个不同的物理器件。LCD处理的像素,例如我们通常所说的分辨率是600x800,实际就是指每行的宽度是600个像素,高度是800个像素,而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集到的。两者之间需要一定的转换。 其次,在安装触摸屏时,不可避免的存在着一定的误差,如旋转,平移的,这同样需要校正解决。 再次,电阻式触摸屏的材料本身有差异而且随着时间的推移,其参数也会有所变化,因此需要经常性的校正(电容式触摸屏只需要一次校正即可,这是由两者不同的材料原理造成的,具体可参阅有关电阻式和电容式触摸屏对比的文章) (2)如何校正? 触摸屏的校正过程一般为:依次在屏幕的几个不同位置显示某种标记(如"+"), 用触摸笔点击这些标记,完成校正。 如果P T(x, y)表示触摸屏上的一个点, P L(x, y)表示LCD上的一个点,校正的结果就是得到一个转换矩阵M, 使P L(x, y) = M·P T(x, y)。 (3) 校正原理 我们知道二维几何变换包含三种平移、旋转和缩放。这三者的矩阵表示为: 平移M T:

缩放M S: 旋转M R: 所以 P L =M R·M T·M S·P T,将这个公式展开,其结果为: 在上面的公式中,LCD上的坐标(X L 、Y L)和触摸屏上的坐标(X T 、Y T)是已知的,而其他的则是我们需要求的:θ, S Y, S X, T Y, S X共有5个变量,至少需要五个方程,因为每组点坐标(P L, P T)可以得到两个方程,因此我们需要采集三组点坐标。但是上面的方程涉及三角函数,运算复杂,我们可以进一步简化为:

触摸屏原理维护与维修

触摸屏原理维护与维修 触摸屏的日常维护 由于技术上的局限性和环境适应能力较差,尤其是表面声波屏,屏幕上会由于水滴、灰尘等污染而无法正常使用,所以触摸屏幕也同普通机器一样需要定期保养维护。并且由于触摸屏是多种电器设备高度集成的触控一体机,所以在使用和维护时应注意以下的一些问题。 1)每天在开机之前,用干布擦拭屏幕。 2)水滴或饮料落在屏幕上,会使软件停止反应,这是由于水滴和手指具有相似的特性,需把水滴擦去。 3)触摸屏控制器能自动判断灰尘,但积尘太多会降低触摸屏的敏感性,只需用干布把屏幕擦拭干净。 4)应用玻璃清洁剂清洗触摸屏上的脏指印和油污。 描硬盘错误,应用程序中最好能设置秘密方式退出应用程序和Windows再断电,例如:四角按规定次序点一下。 7)纯净的触摸屏程序是不需要鼠标光标的,光标只会使用户注意力不集中。 8)应选择足够应用程序使用的最简单的防鼠标模式,因为复杂的模式需要牺牲延时和系统资源。 9)在Windows中,启动较慢的应用程序时,用户有机会进入其他系统。解决的办法是修改SYSTEM.INI文件:将shell=progman.exe(Windows3.x下)或shell=Explorer.exe(Windows95上)直接改为.exe文件。但应用程序应能够直接退出Windows,否则系统无法退出。 10)视环境恶劣情况,定期打开机头清洁触摸屏的反射条纹和内表面。具体的方法是:在机内两侧打开盖板,可以找到松开扣住机头前部锁舌的机关,打开机关即可松开锁舌。抬起机头前部,可以看到触摸屏控制卡,拔下触摸屏电缆,向后退机头可卸下机头和触摸屏。仔细看清楚固定触摸屏的方法后,卸下触摸屏清洗,注意不要使用硬纸或硬布,不要划伤反射条纹。最后,按相反顺序和原结构将机头复原。 三、触摸屏常见故障解析 相信很多人在使用触摸屏时,都遇到触摸屏因出现故障而不能使用的情况。这主要是由于触摸屏是一种比较精密的设备,加之触摸屏多是面向大众开放使用的性质,其使用频率高、使用人员素质良莠不齐,从而造成其故障频繁出现,下面就为大家介绍触摸屏一些常见故障的解决与维护方法: 当触摸屏出现故障后,应首先检查控制卡供电是否正常,Windows驱动是否正常安装,然后检查是否完成了Windows下的触屏校准,“TouchscreenControl”中的参数是否正确,还需要检查串口是否正常和串口线是否连接正常。 下面通过一些实例来说明触摸屏故障的诊断处理方法。 1.触摸屏不准 [故障现象] 一台表面声波触摸屏,用手指触摸显示器屏幕的部位不能正常地完成对应的操作。 [故障分析处理] 这种现象可能是声波触摸屏在使用一段时间后,屏四周的反射条纹上面被灰尘覆盖,可用一块干的软布进行擦拭,然后断电、重新启动计算机并重新校准。还有可能是声波屏的反射条纹受到轻微破坏,如果遇到这种情况则将无法完全修复。 如果是电容触摸屏在下列情况下可运行屏幕校准程序开始--程序--MicrotouchTouchware) 1)第一次完成驱动软件的安装。 2)每次改变显示器的分辨率或显示模式后。 3)每次改变了显示的显示区域后。 4)每次调整了控制器的频率后。 5)每次光标与触摸点不能对应时。 校准后,校准后的数据被存放在控制器的寄存器内,所以每次启动系统后无需再校准屏幕。 2.触摸屏无响应 [故障现象]

触摸屏校准算法

超牛2.8寸触摸屏校准算法~非常的准.跟LCD坐标对称 发布: 2009-7-30 22:48 | 作者: AVR侠| 来源: PowerAVR电子DIY网 #include #include "ads7843drv.h" #include "stm32f10x_lib.h" //=============================================== ===================================== typedef struct POINT { unsigned short x; unsigned short y; }coordinate; typedef struct Matrix { long double An, Bn, Cn, Dn, En, Fn, Divider ; } matrix ; void Delayus( int k) { int j; for(j=k;j > 0;j--);

} //=============================================== ===================================== void TP_Init(void) { // IODIR1 = 0x00; // IODIR1 = IODIR1 | MASK_CS | MASK_DCLK | MASK_DIN; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOB, &GPIO_InitStructure); } //=============================================== ===================================== static void WR_CMD (unsigned char cmd) { unsigned char buf; unsigned char i; TP_CS(1); TP_DIN(0); TP_DCLK(0); TP_CS(0); for(i=0;i<8;i++) { buf=(cmd>>(7-i))&0x1; TP_DIN(buf);

相关主题
相关文档
最新文档