基于BU21023的电阻式触摸屏两点触控功能设计
摘要:随着触摸屏的普及,两点/多点触控功能成为人们新的关注点。本文介绍了电阻式触摸屏两点触摸控制芯片BU21023的功能与应用,并基于嵌入式Linux系统实现了电阻式触模屏的两点触控功能。该方案可以用于普通四线电阻式触摸屏上,而且能够有效地降低实现两点触控功能所需的硬件成本。
关键词:电阻式触摸屏;两点触控;嵌入式系统
引言
随着技术的进步,便携式电子设备已经成为人们生活中必不可少的工具,而普通用户的巨大数量使得便携式电子设备的人机接口成为开发者关注的重点。目前,绝大多数的手机和平板电脑都使用触摸屏作为主要输入设备,以提供友好的人机界面和良好的用户体验。目前,在便携式电子设备上使用最广泛的触摸屏主要是电容式和电阻式两种。电容式触摸屏最大的优势在于其多点触控技术已绎比较完善,广泛应用于众多电子产品中;但是电容式触摸屏价格昂贵,且对工作环境、机械与电路设计有较高要求。而电阻式触摸屏成本低、设计简单,此前制约其应用的主要因素在于仅能够进行单点触控。事实上,对于电阻式触摸屏两点触控的研究成果已经达到可以大规模应用的阶段。本文利用ROHM公司的两点触摸控制芯片BU21023实现了电阻式触摸屏的两点触控功能。
1 BU21023简介
BU21023内置10位的ADC,并内置一颗8位的MCU 用于坐标的计算,提供的分辨率最高为1024×1024。BU21023的结构框图如图1所示。
该芯片通过触摸屏接口的4个引脚与普通四线电阻式触摸屏相连接。存MCU的Host接口方面,BU21023提供两种通信方式——4线SPI或2线串行通信(类似于I2C总线协议),用户可以使用IFSEL引脚选择通信方式。4线SPI协议可以提供最高15 Mbps的通信速度,但是根据协议,这种方式需要独占4个引脚;而2线串行通信方式只占用2个引脚,且可以与其他设备共用总线,但是最高只能提供400kbps的通信速度。实际应用中MCU的Host接口引脚资源通常比较紧张,因此采用串行通信较多。基于此种考虑,本文也采用2线串行通信。此外,该芯片在工作前需要下载一个8 192字节的固件。这段代码可以存储在EEPROM中通过EEPROM接口下载,也可以存放在MCU的程序空间通过串行通信下载。本文采取后一种方式。
BU21023的工作电压范围为2.7~3.6 V,符合一般便携式电子设备的供电电压要求。根据实际测量,其工作时电流消耗约为7 mA,而当芯片进入休眠模式后,电流消耗下降到30~40μA。因此该芯片非常适合用于各类便携式电子设备中。
2 工作机制
典型电阻式触摸屏的工作部分一般由3部分组成:两层透明的阻性导体层、两层导体之间的隔离层和电极。触摸屏工作时,上下导体层相当于电阻网络,一些有压力施加到触摸屏上,上下层线路导通。此时,在XP、XN上分别加VREF、0 V电压,使X面上形成了从0~VREF的电压梯度,触摸点至XN端的电压为该两端电阻对VREF的分压,分压值代表了触摸点在X方向的位置。然后,将Y面的一个电极(如YN)端悬空,可从另一电极(YP)取出这一分压,将该分压进行A/D转换,并与VREF进行比较,便可得到触摸点的X坐标。同理,在YP、YN上分别加VREF、0 V电压,而将X面的一个电极(如XN)悬空,从另一电极(XP)上取出触摸点在Y方向的分压,即可得到Y坐标。
这种测量方式决定了它只能得出一个触点的坐标。而BU21023则通过采集更多数据来计算得出两个触点的坐标。其工作时序如图2所示。
在1时段,芯片在XP与YN两端加上电压,测量XN与YP端的电压;在2时段,芯片在XP与XN两端加上电压,测量YP与YN端的电压;在3时段,芯片在YP与YN两端加上电压,测量XP与XN端的电压。通过这些测量获得数据后,在4时段进行计算得出两个触点的坐标。整个测量计算周期耗时约4 ms,相对一般的电阻式触摸屏控制芯片的测量周期更长,但是仍然足够检测入手的动作。在全部测量计算完成后,如果有设定间歇工作模式的话,则会在5时段等待到足够的时间。
3 系统硬件设计
本文采用的硬件平台使用TI公司的OMAP3530作为主机。OMAP3530采用ARM Cortex-A8架构,具有丰富的外围接口,包括3组I2C总线控制器与4组SPI控制器。BU21023部分的硬件连接电路如图3所示。
BU21023芯片通过XP、XN、YP和YN四个引脚与4线电阻式触摸屏相连接,将IFSEL置高选择通信方式为2线串行模式,通过SCL和SDA连接Host端的I2C总线控制器,INT为中断信号引脚,SEL_CSB和RSTB分别为片选与硬件复位。
4 驱动软件设计
本文所采用的系统环境为Android 2.2版本,使用Linux Kerncl 2.6.32。在Linux系统中,设备驱动程序是一组相关函数的集合。它包括设备服务子程序和中断处理程序。本文的驱动程序中重要的是上电及初始化子程序和中断处理程序。
4.1 上电及初始化子程序
在BU21023芯片上电后等待200μs,由主机将RSTB引脚拉高。然后对基本寄存器进行配置,需要配置的共有20个寄存器。完成寄存器配置后,通过向SYSTEM(0x40)寄存器写入0x01来启动芯片的模拟部分。等待100μs后开始下载固件,通过向CMN_SETUP1(0x31)寄存器写入0x02,将下载路径配置为从Host端下载,此后可以向EX_WDAT(0x72)寄存器写入固件,共8192字节。在写入完成后可以通过读取EX_CHK_SUM1~EX_CHK_ SUM3(0x74~0x76)的值来校验。如果这个校验值与固件前8189个字节的和相等,则下载成功。完成固件下载后,清除所有中断信息,然后向SYSTEM(0x40)寄存器写入0x03以启动芯片的内置MCU。在得到启动成功的中断信息后清除该中断,则芯片初始化完成,进入工作状态。
4.2 中断处理程序
中断处理程序是整个触控程序的关键部分。
BU21023的中断包括6种情况,坐标更新和致命错误足主要的2种,另外4种为程序下载完成、进入休眠模式、退出休眠模式和自动校准完成。中断类型可以从INT_STS寄存器读出。对于后4种中断类型,在中断处理程序中不需要进行处理,直接清除中断即可。
若中断类型为致命错误,则应当渎取ERR_STS寄存器的信息,该信息表明了发生错误的原因。可能的错误原因共有14种,包括固件下载异常中断、自动校准失败、测量周期过短和ADC无响应。前3种情况可以通过软件手段恢复,最后一种错误,可以尝试重新上电启动。
当芯片处于正常工作状态,得到的中断应该都是坐标更新。不同版本的固件其产生该类型中断的条件或有不同,为使得程序具有通用性,采取如下方法处理:将中断设置为下降沿触发,当第一次发生坐标更新的中断时,屏蔽该类型的中断,然后读取芯片的POS_X1_H~POS_ Y2_L(0x20~0x27)这8个寄存器。这些寄存器内存储的是两个触点的X与Y坐标。若两个触点的坐标不都为0,则有接触发生,此时将接触坐标处理后上报至系统,并开启一个定时器。利用定时器定时读取坐标信息,并将坐标处理后上报至系统,直至读取到两个触点的坐标都为0。当两个触点的坐标都为0时,表明此次触控操作结束,将坐标上报后,关闭定时器,清除中断信息,最后解除对坐标更新中断的屏蔽。这样,一次完整的触控操作的检测就完成了。
这种方法的好处有以下儿点:
①首先,这种方法可以适用于不同版本的固件,当固件有升级时不需要修改驱动程序。
②其次,使用定时器来定时读取坐标可以有效减轻Host MCU的负担。事实上考虑到人手的移动速度,过高频率地读取坐标完全没有必要,只会造成Host MCU的负担增加。可以根据系统的繁忙程度和采集到的信息情况选取一个合适的时间间隔。
③采用这种方法,INT引脚在有触控的时候保持低电平,在没有触控的时候保持高电平,这也符合目前市场上绝大部分电阻式触摸屏控制芯片的中断定义,减轻了开发时候的工作量。
5 触摸屏参数测定
由于不同的触摸屏其物理参数不同,因此在实际使用前需要测定相关参数,并写入芯片相关寄存器内,供坐标计算时使用。
需要测定的参数共有8个,分别存储于CMN_SETUP2(0x31)、SETUP_X(0x34)、SETUP_Y(0x35)、OFS_X(0x36)、OFS_Y(0x37)、TH_DET_TOUCH(0x3A)、EVR_X(0x63)及EVR_Y(0x64)这8个寄存器内。0x31寄存器存储的主要是X轴与Y轴的方向设定信息。由于安装时触摸屏与显示屏的坐标方向可能不同,通过此参数设定使触摸屏的坐标系与显爪屏统一。在完成方向没定后,需要测定的参数为X方向与Y方向的ADC参考电阻阻值,数据分别存入0x63与0x64寄存器。之后设定的为0x3A寄存器,该寄存器存储的参数为有触点与无触点的判断阈值。0x34~0x37寄存器存储的信息则用来判定是否两点接触并计算两点坐标。
此外,BU21023还有手势识别功能,由于Android系统自带有手势识别,故不使用BU21023的此功能,因此手势阈值参数不做测定,对应的TH_DET_GESTURE(0x3B)寄存器直接使用初始值。
需要注意的是,这些参数测定的结果直接影响两点检测时的准确度。因此,在开发时可以测定若下组参数后选取一组效果最佳的参数。
结语
BU21023具有低功耗、易开发的特点,可以在普通四线电阻式触摸屏上实现两点触控功能。该芯片适用于各类便携式电子设备,并可以帮助开发者用较低的硬件成本实现较好的用户体验。因此,该芯片有望大规模应用在移动电话或平板电脑开发中。
电阻相关文章:电阻的作用居然有这么多,你造吗
光敏电阻相关文章:光敏电阻工作原理
电容式触摸屏相关文章:电容式触摸屏原理
评论