一种触摸屏数据采集系统的设计
2022-04-19艾凯旋刘云婷
艾凯旋 ,刘云婷 ,刘 洋
(1.中国工程物理研究院 计量测试中心,四川 绵阳 621999;2.电子科技大学 电子科学与工程学院,四川 成都 610054)
0 引言
随着移动设备和5G 时代的到来,大到机械设备操作界面,小到人们日常使用的移动电子设备,触摸屏都因其方便快捷的操作方式而被广泛使用。
触摸屏作为人机交互的媒介之一,具有十分重要的研究价值。随着人们对触摸屏功能需求提高,可折叠和柔性触摸屏的设计制备是触摸屏研发的主要方向之一[1-5]。同样,伴随触摸屏功能属性的丰富,基于触摸屏的应用扩展也是重要方向之一,例如电子皮肤和可穿戴设备等[6-11]。但在研究过程中,触摸屏往往需要外部触摸检测电路对触摸屏的功能进行验证。Sarwar等人提出了一种基于AD7146 的触摸检测电路[12],可实现16 个触摸点工作状态的检测,但只能检测互电容触摸屏。而针对自电容触摸屏的检测,Liu 等人和Ye 等人分别以AD7147 和MPR121 为核心设计了一种触摸检测电路[13-14],但限于芯片本身的电容通道数目约束,Liu 等人设计的触摸检测电路只能检测12 个电容通道的自电容触摸屏,而Ye 等人设计的触摸检测电路只能检测最多13 个电容通道的自电容触摸屏,均无法应对超过13 个电容通道检测数量的自电容触摸屏功能验证。
对此,本文提出了一种数据采集系统,硬件部分为由Arduino 控制的触摸检测电路,其电路核心为MPR121,采用MPR121 地址位切换的原则,实现可检测最多24 个电容通道数目的自电容触摸屏的功能。同时,为了便于实时观察触摸屏中触摸点的工作状态,设计了一种基于Python 的图形化界面。最后,通过实验对数据采集系统进行了功能验证。
1 数据采集系统设计
1.1 触摸检测电路硬件设计
一个MPR121 只能检测12 个电容通道的触摸屏,为了让触摸检测电路可以同时最多检测24 个电容通道数目的自电容触摸屏,触摸检测电路设计过程中选择了两个MPR121 以及一个CD74HC21E 为核心设计,其电路原理图如图1 所示。
图1 触摸检测电路原理图
该电路可以同时检测具有24 个电容通道的自电容触摸屏。其中,VDD 为触摸检测电路的电源输入端,需要提供3.3 V 的电压,触摸检测电路才能正常工作,而VREG 为MPR121 内部电源电压和内部稳压器的输出端,为了保证VDD 端与VREG 端电压的稳定性,均在其与接地端之间并联一个0.1 μF 的去耦电容。
MPR121 作为具有12 个电容通道的芯片,其需要通过I2C 接口与微处理控制器通信才可以将触摸屏中触摸点的工作状态传输到计算机中,数据采集系统选择由Arduino 控制,Arduino 通过I2C 接口读取从机地址从而获得MPR121 芯片采集到的触摸点的数据,MPR121 芯片对应的从机地址可以为0x5A、0x5B、0x5C 和0x5D,本文中触摸检测电路可以提供任意两个从机地址供Arduino读取,且在触摸检测电路的SCL、SDA 以及端需加10 kΩ 的上拉电阻。
触摸检测电路在检测触摸点工作状态过程中,需要提前为Q1~Q24 的电容通道依次进行充电,然后定期将电容通道中的电量通过触摸点释放到接地端,其电容通道的整个充放电过程如图2 所示。
图2 电容通道充放电过程图
触摸检测电路中MPR121 电容通道的默认充电时间为0.5 μs,峰值电压为2.34 V,随着触摸检测电路不断检测电容通道中的电压变化,就可以检测到触摸屏中触摸点的自电容大小,从而判断触摸屏中触摸点的工作状态,其检测原理表达式如下:
其中,Q 为电容通道中的总电量,V 为电容通道中的峰值电压,I 和T 分别为电容通道的充电电流和充电时间,MPR121 的默认充电电流为16 μA,其电源电压VDD为3.3 V,其最高峰值电压Vmax和最低峰值电压Vmin表达式如下:
其可测量电容范围计算如下:
式中Clow和Chigh分别是触摸检测电路可以检测的最小电容值和最大电容值,当触摸检测电路检测到在3.08 pF~4.73 pF 之间的电容值时,触摸屏中触摸点显示被触摸状态。
为了便于触摸检测电路检测电容通道的拓展,触摸检测电路中采用CD74HC21E 器件作为两个MPR121 的的连接端,CD74HC21E 器件具有4 输入与门功能,可同时供4 个MPR121 共同连接使用,最终实现48 个电容通道数目检测。考虑到触摸检测电路只用到了两个MPR121,CD74HC21E 的另外两个闲置输入端口均接入高电平。触摸检测电路的硬件电路版图如图3 所示,可通过MPR121 的ADDR 端口自由设置从机地址。
图3 触摸检测电路硬件版图
1.2 触摸检测电路驱动程序设计
触摸检测电路设计完成后,需要对其进行驱动程序的设计,包括触摸检测电路中寄存器地址的设置、电容通道的初始化设置以及从机数据的读取设置等,因其采用Arduino 开发板,驱动程序的设计在Arduino IDE 开发环境中进行,图4 所示为驱动程序模块图。
图4 驱动程序模块图
触摸检测电路驱动程序主要包含“setup”模块和“loop”模块两部分,“setup”模块的主要功能是对MPR121 芯片的工作模式和电容传感通道进行基本设置,包括I2C 通信命令的设置,同时将引脚的初始工作电平设置为高电平。电容传感通道设置模块内部包含的寄存器地址定义模块主要用于对MPR121 芯片中的寄存器地址进行命名和归类,而寄存器设置模块用于对寄存器地址定义模块定义的地址进行MPR121 芯片的原始设置。
“loop”模块的主要功能是对触摸检测电路中需要重复进行的操作进行一系列设置,其中主要是对透明触摸屏上触摸点触摸状态的读取。触摸状态读取模块的主要功能就是读取透明触摸屏中触摸点的工作状态,其通过内部的中断检测模块检测触摸检测电路是否工作在正常状态,当其工作在正常状态时,则通过其内部的双字节数据读取模块,依次遍历两个不同从机地址MPR121芯片的12 个触摸点数据,最后按顺序将其划分到24 个触摸点中,用于确定对应触摸点的触摸状态。当触摸点被触摸时,Arduino IDE 开发环境的串口检测界面中对应触摸点的数据会显示“1”,相反,显示“0”。
Arduino 控制两个MPR121 进行电容通道的检测采用遍历的方式,依次选定MPR121 的从地址为0x5A 和0x5B,通过一个循环语句依次遍历两个MPR121 的电容通道检测结果,当触摸多个按键时,Arduino 会以16 ms 采集一个电容通道电容变化的速度依次遍历两个zMPR121的电容通道,每秒可以遍历共60 个电容通道以上的电容变化情况,因此当人的手指触摸多个按键时,不会发生数据冲突的现象。
1.3 图形化界面程序设计
触摸检测电路在实时采集触摸点数据过程中,会产生大量触摸点数据,通过Arduino IDE 自带的串口监视界面无法直观获得触摸屏中各触摸点工作状态,因此设计了一种基于Python 的图形化界面,其工作流程图如图5所示。
图5 图形化界面流程图
图形化界面采用Python 的PyQt4 单元库为核心[15],并调用了sys 库、time 库以及serial 库。图形化界面主要由三个功能模块组成,分别为触摸点数据中转模块、多线程数据接收模块以及显示界面设置模块。多线程数据接收模块用于接收并更新触摸检测电路采集到的触摸点数据,触摸点数据中转模块用于将多线程数据接收模块接收到的触摸点数据传输到显示界面设置模块,显示界面设置模块用于设置图形化界面的外观、形状等,并将接收到的触摸点数据实时刷新到图形化界面中。图形化界面的触摸点数据刷新率为10 μs 一次,其完成后的图形化界面如图6 所示,为一个5×5 矩阵式分布的触摸板样式。
图6 图形化界面显示图
图形化界面会按照触摸屏上触摸点的工作状态实时变化,当触摸点被触摸时,对应位置的图形化界面会显示红色,且随着触摸点数量的增多以及布局的改变,图形化界面也可以进行相应的程序调整。
2 数据采集系统验证
为了验证触摸屏数据采集系统的有效性,触摸检测电路最终以印刷电路板的形式搭建完成,其工作电压可由Arduino 开发板提供,实验中采用Arduino Uno R3 开发板。
触摸检测电路在工作过程中需将其SCL 和SDA 端口分别与Arduino Uno R3 开发板对应的I2C 端口相连,且触摸检测电路的VDD 与Arduino Uno R3 开发板的3.3 V 电压端口相连,VSS 端与Arduino Uno R3 开发板的GND 端相连,端与Arduino Uno R3 开发板的任一数字引脚端口相连,且设置该数字引脚端口为输入端口,起始电平为高电平。图7 所示为数据采集系统的测试图。
图7 数据采集系统测试图
数据采集系统在验证过程中,选择了一个5×5 简易式触摸板作为测试对象,并将其触摸点连接端与触摸检测电路的对应电容通道端口相连,其测试过程中因为触摸检测电路只能测试24 个电容通道,故触摸板只有24个触摸点的状态可以被检测到,图8 所示为数据采集系统验证结果图。
图8 数据采集系统结果图
数据采集系统中的触摸检测电路在检测到简易触摸板上的触摸点被接触时,其对应位置的触摸点数据会同步更新到图形化界面中实时显示出来,且在触摸检测电路检测过程中没有误检测的触摸点产生,证明了触摸检测电路的有效性。
3 结论
触摸屏数据采集系统的设计完成,不仅使触摸检测电路的电容通道数量增加到24 个,可以用于更多触摸点的触摸屏检测,且通过以Python 中的PyQt4 单元库为核心的图形化界面更直观地观测触摸点变化情况,为触摸屏数据采集系统的设计提供了新的思路。