一.触摸屏原理
四线电阻式触摸屏工作原理:
四线电阻式触摸屏的结构如图1,在玻璃或丙烯酸基板上覆盖有两层透平,均匀导电的ITO层,分别做为X电极和Y电极,它们之间由均匀排列的透明格点分开绝缘。其中下层的ITO与玻璃基板附着,上层的ITO附着在PET薄膜上。X电极和Y电极的正负端由“导电条”(图中黑色条形部分)分别从两端引出,且X电极和Y电极导电条的位置相互垂直。引出端X-,X+,Y-,Y+一共四条线,这就是四线电阻式触摸屏名称的由来。当有物体接触触摸屏表面并施以一定的压力时,上层的ITO导电层发生形变与下层ITO发生接触,如下图2:
(图1)
(图2)
将之等效成电路图可以得到:
(图3)
R1和R6是外接电阻,用于限制电压,将触摸屏电极电压最大值限制在ADC测量范围内。R2和R4为X极等效电阻,R3和R5是Y极等效电阻,R7是触摸点的压力等效电阻。
因此,可以通过读取X和Y极电压变化曲线得到触碰点的变化路径,通过数模转换器ADC将电压转换成数值就可以得到坐标系和触摸点的坐标值。
在读取X轴坐标时,将X+置为高电平,X-置位低电平,Y极两端都做悬空处理,即在触碰触摸屏时,产生压力,X极与Y极连接,通过读取ADCy就可以得到触摸点的电压值。同理:在读取Y轴坐标时,将Y+置为高电平,Y-置位低电平,X极两端都做悬空处理,即在触碰触摸屏时,产生压力,X极与Y极连接,通过读取ADCx就可以得到触摸点的电压值。就可以得到触摸点的坐标信息。
而且,Rt是虚拟的压力电阻,触摸点的压力越大,Rt电阻值越小,当读取X极电压时,将Y极置空,X极与Y极之间不会形成回路通路,Rt不会分压,即压力不会对读值产生影响。反之,亦然。
二、校准和画线原理
1、四点,五点校准法
触摸屏校准即将触摸屏坐标系映射到显示屏坐标系。常见的校准方法一般有四点校准和五点校准法。四点校准法即通过显示屏打印四点已知坐标的四个点,通过触碰四个点获取到四个点对应的触摸屏坐标,再通过四个点之间的差值关系计算得到触摸屏坐标映射到显示屏的比例系数和偏移值。
五点校准法相比四点校准法多一道验证计算,即显示屏再多打印一个点,通过四点校准得到的比例系数和偏移值反推得到理论触摸屏坐标,与实际采集到的触摸屏坐标进行对比校验。
2、画线原理
进入画线流程后,读取底层文件中校准参数。触碰屏幕时,将触摸屏坐标转换得到显示坐标,读取到两个点后再计算两点之间的差值,转换为步长,并循环打印出这两个点之间的所有点,即实现两点画线。
三、异常问题原因及解决思路
1、ADC读值不准确或者不稳定
原因一:操作逻辑错误
正常使用逻辑,即读取X轴数值,则X极一端置高电平,一端置低电平,Y极两端都浮空,读取Y极连接的ADC数值;Y轴数值读取操作反之。如果GPIO设置出错,会导致ADC读值不准确。
对于GPIO操作,常规为了防抖,会先向寄存器中写入数值,再配置GPIO功能,但有些系统需要先配置GPIO功能,再向寄存器中写入数值才能下发成功。
原因二:GPIO驱动存在错误
底层GPIO驱动存在错误,例如GPIO引脚地址定义错误等,导致GPIO设置未按操作步骤实现;GPIO设置顺序存在问题,导致GPIO值未成功下发。
原因三:硬件电路损坏
外接电阻损坏,导致测量电压超过ADC量程,读取到的数值不准确。
原因四:硬件器件使用不当
外接电阻过大或者过小,会导致测量到的数值不准确或者误差过大。
解决思路:
当读取到的电压值变化无规律时,可以根据原理检验GPIO设置是否符合使用逻辑;
当测量到的电压值会受压力影响时,说明浮空配置的GPIO引脚配置未成功,可以验证GPIO引脚地址或者GPIO驱动是否出错;
当测量到的电压一直为高位或者低位时,说明GPIO值未设置成功,可以验证GPIO配置是先写值进寄存器再配置还是先配置再写值;
当测量到的电压值不准确时,可能回路电压超过了ADC量程,可以验证外接电阻是否完好,或者验证外接电阻阻值是否过小。
2、CPU占用率过大
因为画线流程中需要不断地循环获取触碰点,并刷新显示屏内容,因此会导致线程占用率过大。
解决思路:
适当降低线程优先级,引入中断体系,通过加锁阻塞线程,发生触摸中断后解锁,释放阻塞线程。
3、画线不连续或者不平滑
取点间隔时间太长,导致两点之间距离差值太大,则会出现短线或者不平滑的现象。
解决思路:
创建线程分别执行取点和刷新操作,创建链表储存坐标点,减少系统单次画线流程耗时,并确保触点不会丢失;引入滑动滤波功能,减少噪声。
四、优化
1、触碰判断
引入触碰判断,初始时,将X-和Y-都置悬空,X+置低电平,Y+置高电平,获取X+引脚电平值,如果没有触碰,则X+引脚电平值为低位;如果发生触碰,则X+引脚值拉高。通过触碰判断可以避免相近的点被连接成线,避免校准时响应过快,读取数值不准确。
2、双重加锁阻断循环和中断
引入双重加锁,阻塞未触碰时线程循环采点,将X+设为初始低电平,Y+设为初始高电平,响应上升沿产生中断信号,当触碰触摸屏时,X+拉高,产生中断,在中断的回调函数中,唤醒被阻塞线程,当再次检测到未触碰时,再次设置中断阻塞线程,以此减少线程的CPU占用率。
3、链表
引入链表存储采集的样本点,便于进行查找、访问、删除等操作,通过对链表进行上锁,确保不会发生数据越界,数据混淆等情况。
4、滑动滤波
引入滑动滤波器,对采集到的样本点求平均值,进行滤波,去除噪声,使画线更平滑。