第三十三章 触摸屏实验
本章,我们将介绍如何使用
STM32F4来驱动触摸屏,
ALIENTEK探索者
STM32F4开发板本身并没有触摸屏控制器,但是它支持触摸屏,可以通过外接带触摸屏的
LCD模块(比如
ALIENTEK TFTLCD模块),来实现触摸屏控制。在本章中,我们将向大家介绍
STM32控制
ALIENTKE TFTLCD模块(包括电阻触摸与电容触摸),实现触摸屏驱动,最终实现一个手写板的功能。本章分为如下几个部分:
33.1电阻与电容触摸屏简介
33.2 硬件设计
33.3 软件设计
33.4 下载验证
33.1 触摸屏简介
目前最常用的触摸屏有两种:电阻式触摸屏与电容式触摸屏。下面,我们来分别介绍。
33.1.1电阻式触摸屏
在
Iphone面世之前,几乎清一 {MOD}的都是使用电阻式触摸屏,电阻式触摸屏利用压力感应进行触点检测控制,需要直接应力接触,通过检测电阻来定位触摸位置。
ALIENTEK 2.4/2.8/3.5寸
TFTLCD模块自带的触摸屏都属于电阻式触摸屏,下面简单介绍下电阻式触摸屏的原理。
电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于
1/1000英寸)的透明隔离点把两层导电层隔开绝缘。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在
X和
Y两个方向上产生信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(
X,
Y)的位置,再根据获得的位置模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。
电阻触摸屏的优点:精度高、价格便宜、抗干扰能力强、稳定性好。
电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。
从以上介绍可知,触摸屏都需要一个
AD转换器, 一般来说是需要一个控制器的。
ALIENTEK TFTLCD模块选择的是四线电阻式触摸屏,这种触摸屏的控制芯片有很多,包括:
ADS7843、
ADS7846、
TSC2046、
XPT2046和
AK4182等。这几款芯片的驱动基本上是一样的,也就是你只要写出了
ADS7843的驱动,这个驱动对其他几个芯片也是有效的。而且封装也有一样的,完全
PIN
TO PIN兼容。所以在替换起来,很方便。
ALIENTEK TFTLCD模块自带的触摸屏控制芯片为
XPT2046。
XPT2046是一款
4导线制触摸屏控制器,内含
12位分辨率
125KHz转换速率逐步逼近型
A/D转换器。
XPT2046支持从
1.5V到
5.25V的低电压
I/O接口。
XPT2046能通过执行两次
A/D转换查出被按的屏幕位置,
除此之外,还可以测量加在触摸屏上的压力。内部自带
2.5V参考电压可以作为辅助输入、温度测量和电池监测模式之用,电池监测的电压范围可以从
0V到
6V。
XPT2046片内集成有一个温度传感器。 在
2.7V的典型工作状态下,关闭参考电压,功耗可小于
0.75mW。
XPT2046采用微小的封装形式:
TSSOP-16,QFN-16(0.75mm厚度
)和
VFBGA-
48。工作温度范围为
-40℃~
+85℃。
该芯片完全是兼容
ADS7843和
ADS7846的,关于这个芯片的详细使用,可以参考这两个芯片的
datasheet。
电阻式触摸屏就介绍到这里。
33.1.2电容式触摸屏
现在几乎所有智能手机,包括平板电脑都是采用电容屏作为触摸屏,电容屏是利用人体感应进行触点检测控制,不需要直接接触或只需要轻微接触,通过检测感应电流来定位触摸坐标。
ALIENTEK 4.3/7寸
TFTLCD模块自带的触摸屏采用的是电容式触摸屏,下面简单介绍下电容式触摸屏的原理。
电容式触摸屏主要分为两种:
1、 表面电容式电容触摸屏。
表面电容式触摸屏技术是利用
ITO(铟锡氧化物,是一种透明的导电材料
)导电膜,通过电场感应方式感测屏幕表面的触摸行为进行。但是表面电容式触摸屏有一些局限性,它只能识别一个手指或者一次触摸。
2、 投射式电容触摸屏。
投射电容式触摸屏是传感器利用触摸屏电极发射出静电场线。一般用于投射电容传感技术的电容类型有两种:自我电容和交互电容。
自我电容又称绝对电容,是最广为采用的一种方法,自我电容通常是指扫描电极与地构成的电容。在玻璃表面有用
ITO制成的横向与纵向的扫描电极,这些电极和地之间就构成一个电容的两极。当用手或触摸笔触摸的时候就会并联一个电容到电路中去,从而使在该条扫描线上的总体的电容量有所改变。在扫描的时候,控制
IC依次扫描纵向和横向电极,并根据扫描前后的电容变化来确定触摸点坐标位置。笔记本电脑触摸输入板就是采用的这种方式,笔记本电脑的输入板采用
X*Y的传感电极阵列形成一个传感格子,当手指靠近触摸输入板时,在手指和传感电极之间产生一个小量电荷。采用特定的运算法则处理来自行、列传感器的信号来确定手指的位置。
交互电容又叫做跨越电容,它是在玻璃表面的横向和纵向的
ITO电极的交叉处形成电容。交互电容的扫描方式就是扫描每个交叉处的电容变化,来判定触摸点的位置。当触摸的时候就会影响到相邻电极的耦合,从而改变交叉处的电容量,交互电容的扫面方法可以侦测到每个交叉点的电容值和触摸后电容变化,因而它需要的扫描时间与自我电容的扫描方式相比要长一些,需要扫描检测
X*Y根电极。目前智能手机
/平板电脑等的触摸屏,都是采用交互电容技术。
ALIENTEK所选择的电容触摸屏,也是采用的是投射式电容屏(交互电容类型),所以后面仅以投射式电容屏作为介绍。
透射式电容触摸屏采用纵横两列电极组成感应矩阵,来感应触摸。以两个交叉的电极矩阵,即:
X轴电极和
Y轴电极,来检测每一格感应单元的电容变化,如图
33.1.2.1所示:
图
33.1.2.1 投射式电容屏电极矩阵示意图
示意图中的电极,实际是透明的,这里是为了方便大家理解。图中,
X、
Y轴的透明电极电容屏的精度、分辨率与
X、
Y轴的通道数有关,通道数越多,精度越高。以上就是电容触摸屏的基本原理,接下来看看电容触摸屏的优缺点:
电容触摸屏的优点:手感好、无需校准、支持多点触摸、透光性好。
电容触摸屏的缺点:成本高、精度不高、抗干扰能力差。
这里特别提醒大家电容触摸屏对工作环境的要求是比较高的,在潮湿、多尘、高低温环境下面,都是不适合使用电容屏的。
电容触摸屏一般都需要一个驱动
IC来检测电容触摸,且一般是通过
IIC接口输出触摸数据的。
ALIENTEK 7’
TFTLCD模块的电容触摸屏,采用的是
15*10的驱动结构(
10个感应通道,
15个驱动通道),采用的是
GT811做为驱动
IC。
ALIENTEK 4.3’
TFTLCD模块有两种成触摸屏:
1,使用
OTT2001A作为驱动
IC,采用
13*8的驱动结构(
8个感应通道,
13个驱动通道);
2,使用
GT9147作为驱动
IC,采用
17*10的驱动结构(
10个感应通道,
17个驱动通道)。
这两个模块都只支持最多
5点触摸,在本例程,仅支持
ALIENTEK 4.3寸
TFTLCD电容触摸屏模块,所以这里介绍仅
OTT2001A和
GT9147,
GT811的驱动方法同这两款
IC是类似的,大家可以参考着学习即可。
OTT2001A是台湾旭曜科技生产的一颗电容触摸屏驱动
IC,最多支持
208个通道。支持
SPI/IIC接口,在
ALIENTEK 4.3’
TFTLCD电容触摸屏上,
OTT2001A只用了
104个通道,采用
IIC接口。
IIC接口模式下,该驱动
IC与
STM32F4的连接仅需要
4根线:
SDA、
SCL、
RST和
INT,
SDA和
SCL是
IIC通信用的,
RST是复位脚(低电平有效),
INT是中断输出信号,关于
IIC我们就不详细介绍了,请参考第二十九章。
OTT2001A的器件地址为
0X59(不含最低位,换算成读写命令则是读:
0XB3,写:
0XB2),
接下来,介绍一下
OTT2001A的几个重要的寄存器。
1, 手势
ID寄存器
手势
ID寄存器(
00H)用于告诉
MCU,哪些点有效,哪些点无效,从而读取对应的数据,该寄存器各位描述如表
33.1.2.1所示:
手势ID寄存器(00H)
位
BIT8
BIT6
BIT5
BIT4
说
明
保留
保留
保留
0,(X1,Y1)无效
1,(X1,Y1)有效
位
BIT3
BIT2
BIT1
BIT0
说
明
0,(X4,Y4)无效
1,(X4,Y4)有效
0,(X3,Y3)无效
1,(X3,Y3)有效
0,(X2,Y2)无效
1,(X2,Y2)有效
0,(X1,Y1)无效
1,(X1,Y1)有效
表
33.1.2.1 手势
ID寄存器
OTT2001A支持最多
5点触摸,所以表中只有
5个位用来表示对应点坐标是否有效,其余位为保留位(读为
0),通过读取该寄存器,我们可以知道哪些点有数据,哪些点无数据,如果读到的全是
0,则说明没有任何触摸。
2, 传感器控制寄存器(
ODH)
传感器控制寄存器(
ODH),该寄存器也是
8位,仅最高位有效,其他位都是保留,当最高位为
1的时候,打开传感器(开始检测),当最高位设置为
0的时候,关闭传感器(停止检测)。
3, 坐标数据寄存器(共
20个)
坐标数据寄存器总共有
20个,每个坐标占用
4个寄存器,坐标寄存器与坐标的对应关系如表
33.1.2.2所示:
寄存器编号
01H
02H
03H
04H
坐标1
X1[15:8]
X1[7:0]
Y1[15:8]
Y1[7:0]
寄存器编号
05H
06H
07H
08H
坐标2
X2[15:8]
X2[7:0]
Y2[15:8]
Y2[7:0]
寄存器编号
10H
11H
12H
13H
坐标3
X3[15:8]
X3[7:0]
Y3[15:8]
Y3[7:0]
寄存器编号
14H
15H
16H
17H
坐标4
X4[15:8]
X4[7:0]
Y4[15:8]
Y4[7:0]
寄存器编号
18H
19H
1AH
1BH
坐标5
X5[15:8]
X5[7:0]
Y5[15:8]
Y5[7:0]
表
33.1.2.2 坐标寄存器与坐标对应表
从表中可以看出,每个坐标的值,可以通过
4个寄存器读出,比如读取坐标
1(
X1,
Y1),我们则可以读取
01H~04H,就可以知道当前坐标
1的具体数值了,这里我们也可以只发送寄存器
01,然后连续读取
4个字节,也可以正常读取坐标
1,寄存器地址会自动增加,从而提高读取速度。
OTT2001A相关寄存器的介绍就介绍到这里,更详细的资料,请参考:
OTT2001A
IIC协议指导
.pdf这个文档。
OTT2001A只需要经过简单的初始化就可以正常使用了,初始化流程:复位à延时
100msà释放复位à设置传感器控制寄存器的最高位位
1,开启传感器检查。就可以正常使用了。
另外,
OTT2001A有两个地方需要特别注意一下:
1, OTT2001A的寄存器是
8位的,但是发送的时候要发送
16位(高八位有效),才可以正常使用。
2, OTT2001A的输出坐标,默认是以:
X坐标最大值是
2700,
Y坐标最大值是
1500的分辨率输出的,也就是输出范围为:
X:
0~2700,
Y:
0~1500;
MCU在读取到坐标后,必须根据
LCD分辨率做一个换算,才能得到真实的
LCD坐标。
下面我们简单介绍下
GT9147,该芯片是深圳汇顶科技研发的一颗电容触摸屏驱动
IC,支持
100Hz触点扫描频率,支持
5点触摸,支持
18*10个检测通道,适合小于
4.5寸的电容触摸屏使用。
和
OTT2001A一样,
GT9147与
MCU连接也是通过
4根线:
SDA、
SCL、
RST和
INT。不过,
GT9147的
IIC地址,可以是
0X14或者
0X5D,当复位结束后的
5ms内,如果
INT是高电平,则使用
0X14作为地址,否则使用
0X5D作为地址,具体的设置过程,请看:
GT9147数据手册
.pdf这个文档。本章我们使用
0X14作为器件地址(不含最低位,换算成读写命令则是读:
0X29,写:
0X28),接下来,介绍一下
GT9147的几个重要的寄存器。
1,控制命令寄存器(
0X8040)
该寄存器可以写入不同值,实现不同的控制,我们一般使用
0和
2这两个值,写入
2,即可软复位
GT9147,在硬复位之后,一般要往该寄存器写
2,实行软复位。然后,写入
0,即可正常读取坐标数据(并且会结束软复位)。
2,配置寄存器组(
0X8047~0X8100)
这里共
186个寄存器,用于配置
GT9147的各个参数,这些配置一般由厂家提供给我们(一个数组),所以我们只需要将厂家给我们的配置,写入到这些寄存器里面,即可完成
GT9147的配置。由于
GT9147可以保存配置信息(可写入内部
FLASH,从而不需要每次上电都更新配置),我们有几点注意的地方提醒大家:
1,
0X8047寄存器用于指示配置文件版本号,程序写入的版本号,必须大于等于
GT9147本地保存的版本号,才可以更新配置。
2,
0X80FF寄存器用于存储校验和,使得
0X8047~0X80FF之间所有数据之和为
0。
3,
0X8100用于控制是否将配置保存在本地,写
0,则不保存配置,写
1则保存配置。
3,产品
ID寄存器(
0X8140~0X8143)
这里总共由
4个寄存器组成,用于保存产品
ID,对于
GT9147,这
4个寄存器读出来就是:
9,
1,
4,
7四个字符(
ASCII码格式)。因此,我们可以通过这
4个寄存器的值,来判断驱动
IC的型号,从而判断是
OTT2001A还是
GT9147,以便执行不同的初始化。
4,状态寄存器(
0X814E)
该寄存器各位描述如表
33.1.2.3所示:
寄存器
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
0X814E
buffer
状态
大点
接近
有效
按键
有效触点个数
表
33.1.2.3 状态寄存器各位描述
这里,我们仅关心最高位和最低
4位,最高位用于表示
buffer状态,如果有数据(坐标
/按键),
buffer就会是
1,最低
4位用于表示有效触点的个数,范围是:
0~5,
0,表示没有触摸,
5表示有
5点触摸。这和前面
OTT2001A的表示方法稍微有点区别,
OTT2001A是每个位表示一个触点,这里是有多少有效触点值就是多少。最后,该寄存器在每次读取后,如果
bit7有效,则必须写
0,清除这个位,否则不会输出下一次数据!!这个要特别注意!!!
5,坐标数据寄存器(共
30个)
这里共分成
5组(
5个点),每组
6个寄存器存储数据,以触点
1的坐标数据寄存器组为例,如表
33.1.2.4所示:
寄存器
bit7~0
寄存器
bit7~0
0X8150
触点1 x坐标低8位
0X8151
触点1 x坐标低高位
0X8152
触点1 y坐标低8位
0X8153
触点1 y坐标低高位
0X8154
触点1 触摸尺寸低8位
0X8155
触点1 触摸尺寸高8位
表
33.1.2.4 触点
1坐标寄存器组描述
我们一般只用到触点的
x,
y坐标,所以只需要读取
0X8150~0X8153的数据,组合即可得到触点坐标。其他
4组分别是:
0X8158、
0X8160、
0X8168和
0X8170等开头的
16个寄存器组成,分别针对触点
2~4的坐标。同样
GT9147也支持寄存器地址自增,我们只需要发送寄存器组的首地址,然后连续读取即可,
GT9147会自动地址自增,从而提高读取速度。
GT9147相关寄存器的介绍就介绍到这里,更详细的资料,请参考:
GT9147编程指南
.pdf这个文档。
GT9147只需要经过简单的初始化就可以正常使用了,初始化流程:硬复位à延时
10msà结束硬复位à设置
IIC地址à延时
100msà软复位à更新配置(需要时)à结束软复位。此时
GT9147即可正常使用了。
然后,我们不停的查询
0X814E寄存器,判断是否有有效触点,如果有,则读取坐标数据寄存器,得到触点坐标,特别注意,如果
0X814E读到的值最高位为
1,就必须对该位写
0,否则无法读到下一次坐标数据。
电容式触摸屏部分,就介绍到这里。
33.2 硬件设计
本章实验功能简介:开机的时候先初始化
LCD,读取
LCD ID,随后,根据
LCD ID判断是电阻触摸屏还是电容触摸屏,如果是电阻触摸屏,则先读取
24C02的数据判断触摸屏是否已经校准过,如果没有校准,则执行校准程序,校准过后再进入电阻触摸屏测试程序,如果已经校准了,就直接进入电阻触摸屏测试程序。
如果是电容触摸屏,则先读取芯片
ID,判断是不是
GT9147,如果是则执行
GT9147初始化代码,如果不是,则执行
OTT2001A的初始化代码,初始化电容触摸屏,随后进入电容触摸屏测试程序(电容触摸屏无需校准!!)。
电阻触摸屏测试程序和电容触摸屏测试程序基本一样,只是电容触摸屏支持最多
5点同时触摸,电阻触摸屏只支持一点触摸,其他一模一样。测试界面的右上角会有一个清空的操作区域(
RST),点击这个地方就会将输入全部清除,恢复白板状态。使用电阻触摸屏的时候,可以通过按
KEY0来实现强制触摸屏校准,只要按下
KEY0就会进入强制校准程序。
所要用到的硬件资源如下:
1) 指示灯
DS0
2) KEY0按键
3)
TFTLCD模块(带电阻
/电容式触摸屏)
4) 24C02
所有这些资源与
STM32F4的连接图,在前面都已经介绍了,这里我们只针对
TFTLCD模块与
STM32F4的连接端口再说明一下,
TFTLCD模块的触摸屏(电阻触摸屏)总共有
5跟线与
STM32F4连接,连接电路图如图
33.2.1所示:
图
33.2.1触摸屏与
STM32F4的连接图
从图中可以看出
, T_MOSI、
T_MISO、
T_SCK、
T_CS和
T_PEN分别连接在
STM32F4的:
PF11、
PB2、
PB0、
PC13和
PB1上。
如果是电容式触摸屏,我们的接口和电阻式触摸屏一样(上图右侧接口),只是没有用到五根线了,而是四根线,分别是:
T_PEN(CT_INT)、
T_CS(CT_RST)、
T_CLK(CT_SCL)和
T_MOSI(CT_SDA)。其中:
CT_INT、
CT_RST、
CT_SCL和
CT_SDA分别是
OTT2001A/GT9147的:中断输出信号、复位信号,
IIC的
SCL和
SDA信号。这里,我们用查询的方式读取
OTT2001A/GT9147的数据,对于
OTT2001A没有用到中断信号(
CT_INT),所以同
STM32F4的连接,只需要
3根线即可,不过
GT9147还需要用到
CT_INT做
IIC地址设定,所以需要
4根线连接。
33.3 软件设计
软件设计部分请直接下载pdf和实验学习。
33.4 下载验证
在代码编译成功之后,我们通过下载代码到
ALIENTEK探索者
STM32F4开发板上,电阻触摸屏得到如图
33.4.1所示界面(左侧画图界面,右侧是校准界面):
图
33.4.1电阻触摸屏测试程序运行效果
左侧的图片,表示已经校准过了,并且可以在屏幕触摸画图了。右侧的图片则是校准界面程序界面,用于校准触摸屏用(可以按
KEY0进入校准)。
如果是电容触摸屏,测试界面如图
33.4.2所示:
图
33.4.2 电容触摸屏测试界面
左侧是单点触摸效果图,右侧是多点触摸(图为
3点,最大支持
5点)效果图。
实验详细手册和源码下载地址:http://www.openedv.com/posts/list/41586.htm
正点原子探索者STM32F407开发板购买地址:http://item.taobao.com/item.htm?id=41855882779
一周热门 更多>