本帖最后由 zhangyang86 于 2015-1-13 15:19 编辑
第三十三章 触摸屏实验
实验28 触摸屏实验.zip
(552.78 KB)
第三十三章 触摸屏实验-STM32F4开发指南-正点原子探索者STM32开发板.pdf.pdf
(952.3 KB)
1.硬件平台:正点原子探索者STM32F407开发板2.软件平台:MDK5.13.固件库版本:V1.4.0
本章,我们将介绍如何使用STM32F4来驱动触摸屏,ALIENTEK探索者STM32F4开发板本身并没有触摸屏控制器,但是它支持触摸屏,可以通过外接带触摸屏的LCD模块(比如ALIENTEK TFTLCD模块),来实现触摸屏控制。在本章中,我们将向大家介绍STM32控制ALIENTKE TFTLCD模块(包括电阻触摸与电容触摸),实现触摸屏驱动,最终实现一个手写板的功能。本章分为如下几个部分: 33.1电阻与电容触摸屏简介 33.2 硬件设计 33.3 软件设计 33.4 下载验证
33.1 触摸屏简介 目前最常用的触摸屏有两种:电阻式触摸屏与电容式触摸屏。下面,我们来分别介绍。 33.1.1电阻式触摸屏在Iphone面世之前,几乎清一色的都是使用电阻式触摸屏,电阻式触摸屏利用压力感应进行触点检测控制,需要直接应力接触,通过检测电阻来定位触摸位置。 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] |
软件设计部分请直接下载pdf和实验学习。 33.4 下载验证在代码编译成功之后,我们通过下载代码到ALIENTEK探索者STM32F4开发板上,电阻触摸屏得到如图33.4.1所示界面(左侧画图界面,右侧是校准界面): 图33.4.1电阻触摸屏测试程序运行效果 左侧的图片,表示已经校准过了,并且可以在屏幕触摸画图了。右侧的图片则是校准界面程序界面,用于校准触摸屏用(可以按KEY0进入校准)。 如果是电容触摸屏,测试界面如图33.4.2所示: 图33.4.2 电容触摸屏测试界面 左侧是单点触摸效果图,右侧是多点触摸(图为3点,最大支持5点)效果图。
|