摘要:触摸屏作为一种人机交互界面,已大量取代了以往的键盘、鼠标等人机沟通方式。电阻式触摸屏以其低廉的价格,稳定的性质更成为主打选择的触摸屏之一。在日常应用中,经常需要同时对多点进行操作。然而,触摸屏的触摸点之间会互相影响,而得出错误的触摸点坐标。本文优化了两点触摸的判断算法,实现了多点触控的正确识别和定位处理。经试验验证表明可以实现图像的放大、缩小、旋转等功能。
多点触控,是指能同时正确识别和定位两个或两个以上的触摸操作,能够独立判断每个触摸点的操作意义,并实现相应功能的技术。这是一种摆脱了传统的输入设备,简单而方便的人机交互操作模式。多点触控技术目前有两种[1]:多点触控手势识别和多点触控位置识别。
目前市面上出现较多的方式是多点触控手势识别。手指同时触摸屏幕多点时,能够识别每个手指移动的方向,能够进行旋转、缩放、平移等操作,但还不能够判断出每个手指的具体位置。但两点触摸甚至多点触摸时,X、Y 轴上会产生多个最大值,此时系统无法判断触摸点的准确位置。通常把并不是真正触摸的点叫做“鬼点”。
多点触控位置识别才是真正意义上的多点触控技术,可以识别到触摸点的具体位置,没有“鬼点”的现象。这种触控技术基于互电容检测方式,通过行列交叉处耦合电容Cm 的变化判断触摸点。手指触摸时行列之间的互电容减小,可以判断触摸点存在,并且准确判断每一个触摸点位置。
1 电阻式触摸屏多点触摸技术
实现两点触摸,每个工作单元必须彼此独立,并且触摸点只能在同一个工作单元中。图1 给出了电阻式触摸屏实现多点触摸的方法:在X1 电极上加上电压,由Y1,Y2,Y3 电极读取A、B、C 触摸单元所检测到的X 坐标;在以后的各个始终周期依次读取X2,X3 的坐标。获得所有触摸单元的X 坐标后,再依次给Y 电极加上电压,以获得各个触摸单元的Y 坐标,从而实现两点触摸。
图1 电阻式触摸屏多点触摸的方法
2 两点触摸判断算法实现
2.1剔除非触摸点
当触摸屏表面有触摸点时,上层的ITO 导电层向下凹陷,发生形变,并接触到下层的ITO,接触点的两层ITO 导电层之间存在一个电阻,当触摸的压力越大时,之间的电阻阻值就越小。通过计算相应阻值,可以得到触摸位置,但是想要正确识别出两点触摸的位置,就必须先剔除非触摸点。所谓非触摸点,就是指没有意愿的接触点。这些触摸点是随机的,而且是非有效触摸。比如,触摸力度较轻时,触摸屏ITO 导电层的电阻处在接通与未接通的临界点,类似这样的触摸点就是非触摸点。这在没有意志支配的情况下产生的接触点,对整个检测没有意义的,所以必须将它们剔除。
考虑到非触摸点的随机性,两次测量的方法可将其剔除。若第一次测量的结果是有效值,但第二次测量的结果超出了整个触摸屏的阻值所规定的范围,是一个很大的值,则视其为无效值,该点即为非接触点,必将其剔除。反之,如果第二次测量的结果在整个触摸屏的阻值所规定的范围内,则视其为有效值,是有效的触摸点。
2.2 接触电阻的改进
触摸屏幕的压力大小不同,ITO 导电层的电阻值也不同,也就是说轻触或重触触摸屏,产生的电阻是不同的。控制芯片可以测试出接触电阻的阻值大小,但是没法分辨出是轻触,还是重触,这只会影响判断触摸点的准确性,从而会影响整个触摸屏的可靠性。下图是图2是轻触的示意图。
图2 触摸屏轻触示意图
在现阶段的方案中, 接触电阻和压力成为影响触点坐标准确性的重要因素。如果接触电阻不大于方阻,不会影响坐标显示的准确性;如果大于方阻,就会出现跳跃点。比如,轻触触摸屏上的某一点,会造成电路接通不完全,对整个电路来说,它表现为测量电阻大,测得的值比实际值要大,那么它的坐标将会向后跳跃。与其相反的,如果是用力的重触触摸屏上的某一点时,坐标会前移。由此可见轻触或重触对接触电阻的测量值影响很大,接触电阻和压力成反比。
查阅过一些四线电阻式触摸屏的技术手册后发现:他们通常使用接触电阻小于2kΩ 这个测试条件,来测试最小压力这个参数。在正常力度的压力下, 一般接触电阻为2kΩ;如果压力更小, 接触电阻则会大于2kΩ。由此可见,实际测量结果与所施加的压力存在动态变化,如果加在同一点上的力量是变化的,那么测量出的坐标点就是不确定的,所以这种测量方法仍然必须改进。
在此,分解一次完整的触摸过程:(1) 手指接触到触摸屏表面,(2)手指对触摸屏逐步增加压力,(3) 压力保持,(4) 抬起手指,(5) 手指的压力逐步减小,(6) 手指离开触摸屏,整个触摸过程完成。分解过程之后可以发现,在这个过程中,手指对屏幕的压力并不是一个恒定不变的量。所以,细分整个过程,把不同时期得到的压力和接触电阻全部采样,然后求取平均值,那么这个值将更加接近实际数据,这就是用求平均值的最根本原因。用求平均值的方法可以模拟整个触摸过程,从而排除掉前期接触、后期接触或者中间接触时压力不稳等情况。
这个改进用一个循环来实现,多次执行读取采样函数,然后求平均值。由于A/D 转换的速度很快,这给求平均值提供了有利的基础。按照程序设定,一共采样32 次,在计算求平均值的时候,利用C 语言中的左移,求得平均值。可以把这个求得的和左移5 位,就得到平均值,这种计算方式十分便捷。另一个需要考虑的问题是时间,也就是A/D 转换的速度问题。如果在完成一次触摸的整个过程中,采样的数目越多,对于触摸点平均取值就越接近实际数据,对确认触摸点坐标的影响也就越小。A/D 转换数据读取过程的实现,以及改进后的算法如下:
第一步:接通触摸屏电流,循环读取32 次A/D 转换器的值,并求得这些值的总和。
第二步:将求得的总和值左移五位,求得平均值,并把该平均值作为有效的数据。
改进后的算法有效避免了不同压力对准确测量电阻值的影响,提高了数据的稳定性和可靠性。可以更加准确定位坐标,特别是屏幕中间区域的触摸点,效果尤其明显。
2.3边沿检测结果的改进
在进行测试画线的过程中,电压波形不是一条平滑的曲线,而是阶梯波,因此在采样过程中, 有可能在电压上升沿或者下降沿采样,这样采样得到两个点之间的电压,并不代表这个点是处于采样得到的两个点直线之间的任何一个点,而是如图3 所示,折线上的A 点或者B 点。这样会造成错误识别。在测试画线的时候,如果画线速度较快,第二次触摸时电压尚未稳定,会造成采样时的误读,落在电压变化的边沿,采样数据比A 点(下降沿)样数据大,比B 点(上升沿)小。理论上来说,的确存在一个跟这个采样数据对应的点,实际上选择的这个点不是A 点,就是B 点。下面来分析一下造成这种现象可能的原因。
图3 采样点示意图
首先是硬件电路,分两种情况:(1) 在供给触摸屏的电路中有电容储能,或者旁路中的电容给阶梯的电压的变化造成了延缓,(2) 在供电电路中存在比较大的电阻,电阻的电感特性影响较大,这两种情况都会导致电压变化的边沿拉长。此时采样的时机选在电压变化的边沿处的几率增大。
即便不存在硬件电路问题,也不能保证所有的点都直接跳变,不能保证采样的时机不在电压上升沿或者下降沿处。所以要想避免这个问题,不仅要考虑硬电路问题,更要在现有的硬件电路基础上,在程序中剔除这些采样时机不对的点。因此,需要通过算法找出这些点,然后把它们剔除。基于这个思路,在2.2 节中,已经对每个点采样32 次,如果把这32 个采样值中的最大值和最小值分别找出来,就能消除边沿处的采样值影响。这里的最大值是指在上一个阶梯下降时的采样值,最小值是指在本阶梯下降时的采样值,然后用32 次采样的总和值减去这两个点的值。通过这种方法增加了采样数据的可信度,增强了触摸屏工作的可靠性。
2.4临界点的改进
关于触摸的临界点也有需要改进的地方。如图4 所示,给出了触摸电阻随压力的变化而变化的曲线图。
图4 电阻变化时序
由上图可以看出,如果是有效地触摸的话,电阻的变化率不会太大,如两接触临界点之间的电阻变化率就不是太大;但如果采样点正好落在接触临界点上,而且这个值小于2kΩ,那么,这个点就应该视为无效点,用采样的总和减去这个最大值的点就可以了。但是,如果在这一点上采样两次,它的影响就会明显表现出来了。检测出来的点将会使显示结果出现跳越。所以对这一类无效的点,最安全的做法就是将其直接剔除。可以在程序中设定:完成一次触摸以后,判断阻值的变化,比较最大值和最小值之间的差值,如果两个值的差值超过100Ω,则说明采样点在临界点上或者在临界点之外,判断为无效点,程序跳转到开始,重新开始检测点,这样就可以把这一类的点剔除掉。