STM32F4_触摸屏

文章深入解析了触摸屏技术,包括电阻式与电容式触摸屏的工作原理,重点介绍了XPT2046驱动芯片的使用及硬件设计,并提供了详细代码实现触摸检测逻辑。同时,讨论了电容屏初始化、传感器控制及坐标数据处理方法,展现了触摸屏技术的全面应用知识。

目录

1. 触摸屏原理

2. 电阻式触摸屏检测原理

3. 电容式触摸屏检测原理

4. 硬件配置

4.1 XPT2046驱动芯片

4.2 硬件设计

5. 代码详解

5.1 main.c

5.2 AT24C02.c

5.3 AT24C02.h

5.4 C_Touch_I2C.c

5.5 C_Touch_I2C.h

5.6 Touch.c

5.7 Touch.h

5.8 FT5206.c

5.9 FT5206.h

5.10 GT9147.c

5.11 GT9147.h

5.12 OTT2001A.c

5.13 OTT2001A.h


1. 触摸屏原理

        触摸屏又称为触控面板。它是一种把触摸位置转化成坐标数据的输入设备,根据触摸屏的检测原理,主要可以分为电阻式触摸屏电容式触摸屏

        相对而言,电阻式触摸屏造价便宜,能够适应较恶劣的环境,但只是支持单点触控(一次只能检测面板上一个触控的位置),触摸时需要一定的压力(通常指甲触摸的屏幕,需要给一定的压力),使用久了容易造成表面磨损,影响寿命。

        而电容触摸屏支持多点触控,检测精度高,电容屏通过和导电物体产生的电容效应来检测触摸动作(电容屏可以用手指触摸,因为手指是导电的),只能感应导电物体的触摸,湿度较大或屏幕表面有水珠时会影响电容屏的检测效果。

        电阻触摸屏电容触摸屏两种屏幕,从外观上并没有明显的区别,区分电阻屏和电容屏最直接的方法就是使用绝缘物体点击屏幕。因为电阻式触摸屏是根据压力来检测触摸动作的,绝缘物体点击屏幕会产生压力;而电容式触摸屏是根据触摸物体是否导电来感应物体触摸的,所以绝缘物体触摸屏幕是不会由触摸动作的。

        目前的电容式触摸屏被大部分应用在智能手机、平板电脑等电子设备中,而电阻式触摸屏在汽车导航、工控机等设备中仍占主流。

2. 电阻式触摸屏检测原理

电阻式触摸屏的结构如下图所示:

        电阻式触摸屏主要由表面硬涂层、两个ITO层、间隔点以及玻璃底层构成,这些结构层都是透明的,整个触摸屏覆盖在液晶面板上,通过触摸屏可以看到液晶面板。首先,表面硬涂层的作用是:保护最外层的触摸屏;最深层的玻璃底层起到承载的作用;两个ITO层是触摸屏的关键结构----是涂有铟锡金属氧化物的导电层。两个ITO层之间通过间隔点使得两层分开,保持一定的间隔。当触摸屏表面受到压力时,表面弯曲使得上层ITO与下层ITO接触,在触点处接通电路

:以上的结构层都是透明的,这些结构只是为了保证触摸作用,在这些结构层下是液晶板,透过这些结构层是可以看到液晶板的,液晶屏上显示的汉字,图片等是在液晶板上显示的。

ITO涂层检测原理:

        通过观察我们手中的开发板可以发现:LCD触摸屏都是通过四根线引出的触摸屏。仔细观察开发板可以发现,这四根线其实就是两个ITO涂层的两端分别引出的四个电极

        简单理解就是可以将每个ITO层看做一个矩形,两个ITO层就是两个矩形,每个矩形都有2个长,2个宽。一个矩阵的两个长连接一个电极,两个宽连接一个电极。这样一来,两个ITO层就会引出四个电极。

两个ITO层的两端分别引出X-、X+、Y-、Y+四个电极,这是电阻屏最常见的四线结构,通过这些电极,外部电路向这两个涂层可以施加匀强电场或检测电压。

在上图的基础之上,如果我让X-接GND,X+接3.3V,那么在X方向上就会产生匀强电场;同理,如果我给Y-接GND,Y+接3.3V,那么在Y方向上就会产生匀强电场。明白了这一原理,我们接着往下看:

根据以上的原理,可以计算出触点处的X、Y坐标值

触点处X、Y的坐标值:

        计算X坐标时,在X+电极施加驱动电压V_{ref},X-极接地,所以在X+与X-处形成了匀强电场,此时触点处的电压可以通过Y+电极采集得到,由于ITO层均匀导电,那么触点电压V_{Y}V_{ref}之比就等于x坐标比上屏宽度

V_{Y}/V_{ref}=X / Width     X=\frac{V_{Y}}{V_{ref}} * Width     

        同理,计算Y坐标时,在Y+电极施加驱动电压V_{ref},Y-接地,所以会在Y+与Y-之间形成匀强电场,此时触点处的电压值可以通过X+电极采集得到,由于ITO层均匀导电,那么触电电压V_{X}V_{ref}之比就等于y坐标与屏长度之比

 Y= \frac{V_{Y}}{V_{ref}}* Height

由此就可以得到触点处的坐标值(X,Y)。

电阻式触摸屏的原理就是如此通过ADC不断的在X+、Y+上采集电压值,通过坐标与屏尺寸的比例,计算出X、Y坐标值。进而实现触摸屏触摸。

但是这样不断地进行采集、计算,未免费时费力。

        为了方便检测触摸的坐标,为此, 一些芯片厂商制作了电阻屏专用的控制芯片,控制上述采集过程、采集电压、外部微控制器直接与触摸控制芯片通讯直接获得触点的电压或坐标。

        其中XPT2046芯片就是一种典型的触摸控制芯片,控制4线电阻触摸屏,该芯片通过与STM32进行通讯,获得采集的电压值,然后转换成坐标。

STM32F4的2.8寸3.5寸的LCD屏是电阻式触摸屏,电阻式触摸屏的驱动芯片是ADS7843、ADS7846、TSC2046、XPT2046 和 AK4182 等

u8 CMD_RDX=0XD0;   //读取X轴坐标命令

u8 CMD_RDY=0X90;      //读取Y轴坐标命令

3. 电容式触摸屏检测原理

        与电阻式触摸屏不同,电容式触摸屏不需要根据压力使接触点变形,再通过触点处电压值来检验坐标。

        电容式触摸屏的基本原理和电容按键类似,都是利用电容的充放电原理,利用充电时间检测电容大小,从而通过检测出电容值的变化来获知触摸信号。

        电容屏的最上层是玻璃,所以不会向电阻屏那样通过按压就产生明显的形变。核心层部分也是由ITO材料构成的,这些导电材料在屏幕里构成了人眼看不见的静态网,静态网由多行X轴电极和多列Y轴电极构成。两个电极之间会形成电容。

        当触摸屏工作时,X轴电极会发出AC交流信号,而交流信号是能够穿过电容的,也可以说通过Y轴是可以感应出该信号的。当交流电穿越时电容会有充放电过程,检测该充电时间是可以获知电容量的当手指触摸屏幕时,会影响接触点两端的电极发生耦合,明显改变两个电极之间的电容量,倘若检测到某电容的电容量发生了改变,即可获知该电容处有触摸动作。(所以可以称为电容式触摸屏,并且使用绝缘体触碰时不会产生电容变化)

电容屏的检测原理

        在电容屏的表面之下有X轴电极和Y轴电极,X轴电极发出AC交流信号后,交流信号通过电容会有充放电过程,通过Y轴电极检测这个充放电时间即可获得相应的电容值。当手指触摸屏幕时,触摸点的电容值会发生变化,通过下图具体了解可知,哪里的电容发生变化,即表示哪里发生了触摸现象。

实际上检测Y轴电极检测的是充电时间t=RC;其中R是整个电容屏的电阻,C是电容,手指触摸时,C电容会发生变化,进而使得充电时间 t 发生变化。

如上图,电极实际上是由多个菱形导体组成的,生产时使用蚀刻工艺在ITO层生成这样的结构。电极实际上是一连串菱形连在一起的。XY轴电极合并时,如右上图所示:

其扫描规则是这样的

        X轴电极依次扫描,Y轴电极同时扫描;比方说,X轴第一行发出AC交流信号后,由于耦合,会在第一行附近产生相应的电容,Y轴同时扫描,当扫描到哪一列的电容充电时间发生变化时,就意味着这一点产生了触摸信号。在X轴不断循环的过程中,依次扫描,在Y轴检测其触摸信号。右下图是单个XY电极产生的电容单元。

这也解释了为什么电容触摸屏可以同时检测多个信号?

        意思就说:5个手指同时触摸电容屏是可以检测到的,而电阻屏不行。

        因为X轴是依次循环的,第一根手指触摸读到第一个X;然后就会跳过这个X,读下一个X,用Y检测充电时间;上一个触摸点不会影响下一个触摸点。

STM32F4的4.3寸7寸的LCD屏是电容式触摸屏,常见的两种电容触摸屏驱动IC

①:GT9147(采用17*10的驱动结构)

GT9147的IIC地址,可以是0X14或者0X5D,当复位结束后的5ms内,如果INT是高电平,则使用0X14作为地址,否则使用0X5D作为地址。

控制命令寄存器:(0X8040)

        该寄存器可以写入不同的值,实现不同的控制,我们一般使用0和2这两个值,写入2,即可软复位GT9147,在硬复位之后,一般要往该寄存器写2,实现软复位。然后,写入0,即可正确的读取坐标数据。

配置寄存器组:(0X8047~0X8100)

        共186个寄存器,用于配置GT9147的各个参数。

产品ID寄存器:(0X8140~0X8143)

        这总共有四个寄存器组成,用于保存产品ID,对于GT9147,这四个寄存器读出来的就是:9,1,4,7四个字符(ASCLL码值)。因此,可以通过该寄存器判断驱动IC的型号,究竟是GT9147还是OTT2001A。

状态寄存器:(0X814E)

         这里关心最高位和低4位:最高位用于表示Buffer的状态,只要有数据存储(坐标/按键),那么Buffer就是1;最低4位用于表示有效触点的个数,范围是:0~5,0,表示没有触点,5表示有5点触摸。(这也是电容触摸屏多点触摸的显示)

坐标数据寄存器(共30个):

        坐标数据寄存器共分成5组(5个点),每组6个寄存器储存数据,以下是第一组的寄存器:

对于第一组触点X Y的坐标,只需要读取0X8150~0X8153的值组合即可得到触点的X Y坐标。

GT9147支持寄存器地址自增,我们只需要发送寄存器组的首地址,然后读取即可,GT9147会自动地址自增,从而提高读取速度。

②:OTT2001A(采用13*8的驱动结构)

它们与MCU连接通过4根线,SDA、SCL、RST、INT,所以显然它们是通过IIC通讯方式与MCU进行通讯的

4. 硬件配置

我手中拿着的是STM32F4,LCD是3.5寸的电阻式触摸屏。

4.1 XPT2046驱动芯片

        XPT2046是一款4导线制触摸屏控制器,内含12位分辨率125KHz转换速率逐步逼近型A/D转换器。XPT2046支持从1.5V到5.25V的低电压I/O接口。XPT2046能通过执行两次A/D转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带2.5V参考电压可以用作辅助输入、温度测量和电池监测模式之用。XPT2046片内部集成了温度传感器

X+:X+位置输入端

Y+:Y+位置输入端

X-:X-位置输入端

Y-:Y-位置输入端

V_{ref}:参考电压输入/输出

DOUT:串行数据输出端

BUSY:忙时信号线。CS为高电平时为高阻状态

DIN:串行数据输入端

CS:片选信号

CLK:时钟

PEN:PEN引脚会在触摸屏被按下的时候产生一个低电平,平时没有触摸的时候是高电平,手指一直按着,会一直是低电平,直到手指松开。

因此可以通过中断来检测PEN引脚是否是低电平,那么则让XPT2046芯片进行模拟和数字的转换。通过中断来检测下降沿。

XPT2046的命令字:

        XPT2046内部集成了A/D转换模块,且内部是有2.5V电压的。

之所以电阻屏需要XPT2046芯片驱动是因为

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值