蔡昌勇 朱静
摘要:交互式液晶面板尺寸越来越大,传统的触摸屏如电阻式触摸屏存在寿命较短、电容式触摸屏价格高的缺点。针对以上问题,本文设计了一种基于STM32的红外触摸屏,通过逐一扫描安装在液晶屏下面及右面的红外发光二极管、安装在液晶屏上面及左面的红外接收二极管,将红外接收二极管输出电压通过STM32内部的ADC转换为数字量,通过数据滤波处理,计算出触摸操作点的坐标,并将坐标值通过USB接口上传至Windows操作系统,实现触摸操作响应。
关键词:STM32;红外;触摸屏
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2022)14-0083-03
随着液晶显示面板制造工艺提升,液晶面板尺寸越来越大,对屏幕具备触摸功能的应用场景越来越多。电阻式触摸屏虽然具有成本低、高分辨率等优点,但存在容易被划伤、使用寿命不长的缺点;电容式触摸屏寿命长、分辨率高,但是其价格较贵,特别是当屏幕尺寸越来越大时,采用电容式触摸屏往往无法获得较高性价比[1]。
采用多组红外发光二极管、红外接收二极管布设于屏幕的对边,依次点亮单只红外发光二极管,将对应位置红外接收二极管检测到的光线变化信号滤波、放大后输入STM32内部ADC转化为数字信号,通过数字滤波,计算出触摸点的坐标,通过USB接口将该坐标值上传实现触摸响应。红外式触摸屏具有成本低廉、安装简单、透光性好等优点,且不会造成显示图像质量下降,在中大尺寸屏幕應用中有较高的应用价值[2]。
1 系统总体设计
为了简化系统设计提高系统实用性,系统采用USB接口实现触摸坐标上传及系统供电。通过STM32控制扫描驱动电路实现红外二极管逐一点亮,待二极管发光稳定后,将其对应位置的接收二极管输出电压进行放大并完成ADC转换,如果某个二极管被遮挡,ADC值会远小于正常阈值,通过软件处理可以计算出遮挡物体的坐标。将坐标值通过USB上传至Windows操作系统,实现触摸操作响应。
为了满足红外式触摸屏对识别精度的要求,红外触摸屏尺寸越大所需的二极管数量越多[3],一般为几十只至几百只,因此红外二极管采用矩阵方式驱动,以简化电路设计。为了兼容不同尺寸触摸屏设计,方便电路级联扩展,系统中行驱动控制信号通过串并转换实现,列驱动控制信号通过译码器驱动,以提高电路扫描速度。红外接收二极管输出信号经多路选择开关放大滤波后,输出至STM32内部ADC采样,行列驱动电路配合实现每只二极管扫描,实现触摸监测。
2 硬件电路设计
2.1 系统主控电路
STM32F103是一款基于ARM Cortex®-M3内核设计的高性能、低功耗单片机[4]。内核最高时钟可达72M,配置有USB接口、12位逐次逼近ADC,只需要少数外围电路即可实现红外收/发二极管的驱动及扫描电压转换与运算。系统主控电路如图3所示。
本系统采用STM32F103C8T6单片机作为微控制器,主要用于控制扫描红外发射管、红外发光二极管的接收、A/D转换、触点定位识别的运算以及控制USB通信等操作。USB2.0最多可以提供500 mA的电流,完全能够满足系统的供电要求,为简化设计,系统采用USB接口实现通信及供电。AMS1117-3.3将5V稳压至3.3V为主控器供电。
2.2 红外发射二极管驱动电路
红外发光二极管采用行列形式连接,一个完整单元为8行8列,最多64只二极管,也可级联及任意剪裁,方便适应不同尺寸触摸屏需求。74HC164及三极管8550实现行驱动控制,74HC238与三极管8050实现列驱动控制。
在单片机I/O的驱动下,当I_CP上升沿时74HC164将输入数据引脚电平移位输出至Q0~Q7,实现行选控制,配合74HC238可实现任意二极管控制。
2.3 红外接收二极管驱动及信号处理电路
红外接收部分的行驱动与发射相同,采用74HC164配合三极管8550实现列选控制。接收部分列选采用8通道模拟选择开关74HC4051实现,在输入信号A、B、C的控制下实现列选控制,完成任意二极管的扫描。LM833实现接收信号放大及滤波,放大后的信号输出至单片机内部ADC转换。
3 软件设计
软件部分主要包括单片机初始化、红外管扫描、坐标计算、USB枚举设计等模块。MCU初始化部分包括USB模块初始化、按键接口初始化、中断初始化、Systick初始化、扫描初始化与红外发射功率控制灯。
红外触摸屏的工作可以采用一边扫描一边处理数据的方式,也可以采用扫描完后再进行数据处理的方式。本系统先进行扫描,然后再进行坐标计算,根据红外对管传递的数据,可以判断是否被遮挡以及遮挡的序号,如果有触摸,则根据序号进行坐标计算,然后再通过USB将坐标数据上传给PC电脑端,否则就进行新一轮的扫描。
3.1 红外管扫描程序设计
由硬件原理图可知,红外发射管与红外接收管采用不同的控制方式。发射管由PB15产生串行信号CPUT_AB信号进入74HC164芯片生成8位并行信号后控制红外发射管高端;定时器Timer4定时产生红外调制信号,该信号作用于HC238的OE引脚(低电平有效),PB10、PB11、PB12引脚输出逻辑信号经38译码器输出8位并行信号控制红外发射管低端。而接收管高端控制逻辑类似发射部分,但低端则为STM32输出3位逻辑信号控制八选一模拟多路复用器输出接收管AD采样电压,经信号处理电路后送入STM32 ADC引脚进行采样。
在红外发射功能期间开启ADC采样与DMA,自动保存ADC(红外接收)数据。ADC工作在独立模式,单词转换,定时器T4_CC4上升沿触发ADC采样,采样数据右对齐,顺序进行规则转换,开启ADC连续采样DMA功能,然后开启ADC校准。一次最多扫描8只二极管(由于多板拼接等可能最后不足8只),扫描完成后处理数据,再扫描下一行。
3.2 坐标计算
触摸位置定位是通过检测红外接收信号的强度变化情况进行定位的。首先判断触摸点的物理位置,即红外管序号;其次将在红外管区域内进行位置细化,提高分辨率;最后将细化后的位置坐标通过映射成计算机屏幕上的坐标。
程序在上电初始化后,首先进行阈值计算,具体方法为:分别打开和关闭所有的发射管,采集接收管的ADC值,根据每组对管的最大值[ADCmax]和最小值[ADCmin]计算出是否进行触摸的阈值[ADCthreshold],通常计算方法为:
[ADCthreshold=12ADCmax+ADCmin]
为了提高分辨率,红外管的区域分为边缘1.5mm和中间2mm三部分,两边缘部分1.5mm各对应5个像素,中间2mm部分对应7个像素。通过红外接收管的不同采样值即可判断具体触摸位置。但在实际编程的过程中还需要对算法进行滤波,触摸屏在按下与抬手过程中会有抖动,另外还有各种原因导致触摸点的跳跃。通常采用限幅滤波与滑动平均滤波相结合的方式实现。
对于红外触摸屏,在两点触摸的情况下存在真实点和伪点,如图7所示。伪点在硬件上无法区分出来,只能通过软件实现。图中的状况会输出两组横坐标与两组纵坐标,根据组合共有四个触摸点,其中两点为伪点,如何剔除伪点也是坐标计算的难点之一,并且当超过两点触摸时,伪点会呈指数增长[5]。本系统采用了斜扫描的方式剔除伪点,无须对硬件进行改造,只要在程序上进行额外的设置即可。
3.3 USB程序设计
USB程序设计关键在于USB设备的枚举,本系统使用USB HID类进行STM32和PC机的通信。对本系统来说,USB设备的枚举就是从红外触摸屏读取描述符信息,PC机根据这些信息加载对应的驱动,确定是触摸屏,方可进行通信。总体USB部分程序包括USB连接控制、USB终端配置、USB时钟配置、USB模块初始化等。
对本系统来说,需要进行自定义USB,USB的标准描述符有设备描述符、配置描述符、接口描述符、端点描述符以及字符串描述符[6]。设备描述符是设备成功枚举的关键,包括设备所使用的USB协议版本号、设备类型、厂商ID和产品ID等。其中USB设备描述符部分定义如图8所示。
4 总结
本系统基于STM32与红外对管设计了红外触摸屏硬件,同时基于硬件设备进行了软件设计,完成了红外管扫描、坐标计算、USB枚举设计等功能,经过软硬件联合测试,成功实现了USB触摸屏设备识别以及坐标识别,具有较高的工程价值。
参考文献:
[1] 李博.电容式触摸信息传感技术研究与实现[D].西安:西北工业大学,2017.
[2] 王允.基于HID类的红外触摸屏的研究与实现[D].合肥:安徽大学,2014.
[3] 胡哲.基于交互式红外电子白板的定位算法及实现技术[D].重庆:重庆大学,2018.
[4] 史籍.基于ARM的数据采集系统的设计[D].上海:上海交通大学,2016.
[5] 曾一雄.基于STM32的抗强光多点红外触摸屏的设计与实现[D].成都:电子科技大学,2013.
[6] 唐贻发.基于STM32和FPGA的光学多点触摸屏的设计与實现[D].广州:华南理工大学,2013.
收稿日期:2021-12-30
基金项目:本文得到了四川省教育厅科研项目(编号:17ZB0038)资助
作者简介:蔡昌勇(1980—),通信作者,男,研究方向为嵌入式技术;朱静(1987—),男,主要研究方向为电子技术、机器学习。