用户工具

站点工具


icore4t_62

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
icore4t_62 [2020/11/09 14:46]
fmj
icore4t_62 [2022/04/01 10:58] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-11-09 ​ |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-11-09 ​ |  gingko ​ |  初次建立 ​ | 
行 93: 行 92:
 === 电阻式触摸屏检测原理 === === 电阻式触摸屏检测原理 ===
   * 电阻式的触摸屏结构见下图。它主要由表面硬涂层、两个ITO层、间隔点以及玻璃底层构成,这些结构层都是透明的,整个触摸屏覆盖在液晶面板上,透过触摸屏可看到液晶面板。表面涂层起到保护作用,玻璃底层起承载的作用,而两个ITO层是触摸屏的关键结构,它们是涂有铟锡金属氧化物的导电层。两个ITO层之间使用间隔点使两层分开,当触摸屏表面受到压力时,表面弯曲使得上层ITO与下层ITO接触,在触点处连通电路。   * 电阻式的触摸屏结构见下图。它主要由表面硬涂层、两个ITO层、间隔点以及玻璃底层构成,这些结构层都是透明的,整个触摸屏覆盖在液晶面板上,透过触摸屏可看到液晶面板。表面涂层起到保护作用,玻璃底层起承载的作用,而两个ITO层是触摸屏的关键结构,它们是涂有铟锡金属氧化物的导电层。两个ITO层之间使用间隔点使两层分开,当触摸屏表面受到压力时,表面弯曲使得上层ITO与下层ITO接触,在触点处连通电路。
-{{ :icore4t:iCore4T_ARM_HAL_62_1.png?direct |}}+{{ :icore4t:icore4t_arm_hal_62_1.png?direct&​200 ​|}} 
   * 两个ITO涂层的两端分别引出X-、X+、Y-、Y+四个电极,见下图,这是电阻屏最常见的四线结构,通过这些电极,外部电路向这两个涂层可以施加匀强电场或检测电压。   * 两个ITO涂层的两端分别引出X-、X+、Y-、Y+四个电极,见下图,这是电阻屏最常见的四线结构,通过这些电极,外部电路向这两个涂层可以施加匀强电场或检测电压。
-{{ :​icore4t:​iCore4T_ARM_HAL_62_2.png?​direct |}}+{{ :​icore4t:​iCore4T_ARM_HAL_62_2.png?​direct&​600 ​|}}
   * 当触摸屏被按下时,两个ITO层相互接触,从触点处把ITO层分为两个电阻,且由于ITO层均匀导电,两个电阻的大小与触点离两电极的距离成比例关系,利用这个特性,可通过以下过程来检测坐标,这也正是电阻触摸屏名称的由来,如下图。   * 当触摸屏被按下时,两个ITO层相互接触,从触点处把ITO层分为两个电阻,且由于ITO层均匀导电,两个电阻的大小与触点离两电极的距离成比例关系,利用这个特性,可通过以下过程来检测坐标,这也正是电阻触摸屏名称的由来,如下图。
-{{ :​icore4t:​iCore4T_ARM_HAL_62_3.png?​direct |}}+{{ :​icore4t:​iCore4T_ARM_HAL_62_3.png?​direct&​600 ​|}}
   - 计算X坐标时,在X+电极施加驱动电压Vref,X-极接地,所以X+与X-处形成了匀强电场,而触点处的电压通过Y+电极采集得到,由于ITO层均匀导电,触点电压与Vref之比等于触点X坐标与屏宽度之比,从而:   - 计算X坐标时,在X+电极施加驱动电压Vref,X-极接地,所以X+与X-处形成了匀强电场,而触点处的电压通过Y+电极采集得到,由于ITO层均匀导电,触点电压与Vref之比等于触点X坐标与屏宽度之比,从而:
-{{ :​icore4t:​iCore4T_ARM_HAL_62_4.png?​direct |}}+{{ :​icore4t:​iCore4T_ARM_HAL_62_4.png?​direct&​200 ​|}}
   - 算Y坐标时,在Y+电极施加驱动电压Vref,Y-极接地,所以Y+与Y-处形成了匀强电场,而触点处的电压通过X+电极采集得到,由于ITO层均匀导电,触点电压与Vref之比等于触点Y坐标与屏高度之比,从而:   - 算Y坐标时,在Y+电极施加驱动电压Vref,Y-极接地,所以Y+与Y-处形成了匀强电场,而触点处的电压通过X+电极采集得到,由于ITO层均匀导电,触点电压与Vref之比等于触点Y坐标与屏高度之比,从而:
-{{ :​icore4t:​iCore4T_ARM_HAL_62_5.png?​direct |}}+{{ :​icore4t:​iCore4T_ARM_HAL_62_5.png?​direct&​200 ​|}}
   * 为了方便检测触摸的坐标,一些芯片厂商制作了电阻屏专用的控制芯片,控制上述采集过程、采集电压,外部微控制器直接与触摸控制芯片通讯直接获得触点的电压或坐标。   * 为了方便检测触摸的坐标,一些芯片厂商制作了电阻屏专用的控制芯片,控制上述采集过程、采集电压,外部微控制器直接与触摸控制芯片通讯直接获得触点的电压或坐标。
  
行 107: 行 107:
 === 在本实验中,选用电阻触摸芯片NS2009来实现电阻触摸功能。以下为NS2009基础知识。 === === 在本实验中,选用电阻触摸芯片NS2009来实现电阻触摸功能。以下为NS2009基础知识。 ===
   * 1.电阻触摸芯片NS2009基本原理   * 1.电阻触摸芯片NS2009基本原理
-  ​* NS2009是一种典型的逐次逼近型ADC(SAR ADC),包含采样/​保持,模数转换,I2C数据输出功能。单电源供电,电源电压范围为2.0V~5.5V。通过控制寄存器的模拟输入(X,Y,Z)进入ADC,作为触摸屏应用,应将其配置为差分模式,以有效消除驱动器开关的寄生电阻和测量误差引起的外部干扰,并改善转换精度。+    ​* NS2009是一种典型的逐次逼近型ADC(SAR ADC),包含采样/​保持,模数转换,I2C数据输出功能。单电源供电,电源电压范围为2.0V~5.5V。通过控制寄存器的模拟输入(X,Y,Z)进入ADC,作为触摸屏应用,应将其配置为差分模式,以有效消除驱动器开关的寄生电阻和测量误差引起的外部干扰,并改善转换精度。
   * 2.模拟输入特性   * 2.模拟输入特性
-  ​* MUX,ADC的模拟输入以及I2C接口电路如下图所示。 +    ​* MUX,ADC的模拟输入以及I2C接口电路如下图所示。 
-{{ :​icore4t:​iCore4T_ARM_HAL_62_6.png?​direct |}} +{{ :​icore4t:​iCore4T_ARM_HAL_62_6.png?​direct&​800 ​|}} 
-  * 控制字节顺序位C3,C2,C1,C0以及NS2009之间的配置关系如下表所示: +    * 控制字节顺序位C3,C2,C1,C0以及NS2009之间的配置关系如下表所示: 
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_7.png?​direct&​800 |}}
   * 3.差分模式   * 3.差分模式
 +    * 当命令控制位C3为高电平时,NS2009处于X,Y,Z的测量模式,内部ADC参考电压源为差分模式,如下图所示。差分模式的优势:+REF和-REF直接输入YP,YN,可以消除由于开关导通电阻引起的测量误差。缺点是:无论是充裕的还是转换过程,驱动器都需要开启,相对于单端模式,功耗增加了。
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_8.png?​direct&​400 |}}
   * 4.压力测量   * 4.压力测量
 +    * NS2009可以测量触摸的压力,即Z方向的测量。通常,此类测量的性能要求不高,因此可以使用8位分辨率模式(但是,下面的计算是采用12位分辨率模式的)即可。有几种不同的方法可以实现压力测量。
 +    * 第一种方法需要知道X面板的电阻,X的测量位置,触摸屏面板在两个附加面板之间的测量值(Z1和Z2)。可以使用下列公式计算触摸电阻:
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_9.png?​direct&​400 |}}
 +    * 第二种方法需要检测X和Y面板的面板电阻,X和Y位置以及Z1位置。可以使用下列公式计算触摸电阻:
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_10.png?​direct&​600 |}}
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_11.png?​direct&​600 |}}
   * 5.数字接口   * 5.数字接口
 +    * NS2009的数据接口是I2C串行接口,满足I2C接口协议,可以实现标准模式(100K),快速模式(400K)或高速模式(3.4M),分为控制NS2009写入,读取两种命令格式 ,write命令用于输入地址和命令字节,以便在指定的NS2009配置和模式下工作,NS2009 read命令用于输出ADC转换的数据以获得与测量有关的信息。
 +    * 1)Write Command 写命令时序图如下
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_12.png?​direct&​800 |}}
 +    * 地址字节的第一个字节:
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_13.png?​direct&​800 |}}
 +    * 最低的R / W(bit0),0表示写入命令,1表示读取命令。
 +    * A0(Bit1)用于硬件地址的控制位,该位必须与8引脚电平一致,才能选中相应的NS2009。
 +    * 该软件的最高5位地址,必须输入一个固定的代码“10010”。
 +    * 在第二个字节全部被接收后,NS2009在第9个时钟周期发出响应信号ACK(0级),指示数据已经收到。
 +    * 命令字节的第二个字节:
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_14.png?​direct&​800 |}}
 +    * C3,C2,C1,C0决定输入信号的NS2009配置以及相应的测量功能。PD1,PD0用于控制内部基准电压源和笔中断信号,如下图所示:
 + {{ :​icore4t:​iCore4T_ARM_HAL_62_15.png?​direct&​800 |}} 
 +    * M----模式选择位,用于设置ADC的分辨率。MODE = 0,ADC为12位模式; MODE = 1,ADC为8位模式。
 +    * X位(bit3和bit0)为预留位,一般设置为0。
 +    * 在第二个字节全部被接收后,NS2009将在第18个时钟周期发出响应信号ACK(0-电平),指示数据已收到。
 +    * 2)Read Command 读命令时序图如下
 +{{ :​icore4t:​iCore4T_ARM_HAL_62_16.png?​direct&​800 |}}
 +    * 读取命令包含3个字节,第一个字节是地址,类似于bit0为高的写命令;接下来的2个字节是NS2009中的12位(如果是8位模式,则仅为1字节数据),冗余4位为零。
 +    * NS2009收到地址数据的第一个字节后,在第9个时钟周期发出响应信号ACK(0电平),然后开始输出数据的第一个字节,主机收到数据的第一个字节后应发出响应主机ACK(0级),NS2009接收到掩码(masker ACK)后,ACK开始发送第二个字节的数据,主机接收到第二个字节的数据后,不用应答,此时,SDA将被拉高,也就是上图所示的掩码(masker ACK)信号。
 +
   * 6.高速模式   * 6.高速模式
 +    * 当主机发送的数据“00001XXX” 被NS2009接收到后,主机不需要等待响应,NS2009将进入高速模式(串行速率可以为3.4Mhz),直到主机发出停止信号。高速模式下,读/​写命令格式与标准模式和速度模式相同,但无法发出STOP信号,否则高速模式将终止。
   * 7.数据格式   * 7.数据格式
- +    * NS2009输出的数据格式是标准的二进制格式。下图给出了不同电压对应的理想编码。 
-{{ :​icore4t:​iCore4T_ARM_HAL_62_7.png?​direct |}} +{{ :​icore4t:​iCore4T_ARM_HAL_62_17.png?​direct&​600 ​|}}
-{{ :​icore4t:​iCore4T_ARM_HAL_62_8.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_9.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_10.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_11.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_12.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_13.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_14.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_15.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_16.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_62_17.png?​direct |}}+
   * 8.PENIRQ中断输出功能   * 8.PENIRQ中断输出功能
-  ​* PENIRQ可以通过PD0设置,PEN中断输出功能如下图所示。 +    ​* PENIRQ可以通过PD0设置,PEN中断输出功能如下图所示。 
-当PD0=0时,YN驱动打开,Y触摸屏面板连接到GND。PENIRQ 输出通过两个开关连接到XP。在待机模式下,当有触摸屏操作时,XP输入通过触摸屏下拉至GND,PENIRQ输出为低电平。当没有运动的触摸屏断开至GND时,PENIRQ为高输出。在X,Y和Z的测量过程中,PENIRQ输出为低电平; +    ​* ​当PD0=0时,YN驱动打开,Y触摸屏面板连接到GND。PENIRQ 输出通过两个开关连接到XP。在待机模式下,当有触摸屏操作时,XP输入通过触摸屏下拉至GND,PENIRQ输出为低电平。当没有运动的触摸屏断开至GND时,PENIRQ为高输出。在X,Y和Z的测量过程中,PENIRQ输出为低电平; 
-  * PD0 = 1,禁止了PEN中断功能,无法监视触摸屏上的触摸运动。如果要重新启用中断功能PEN,需要控制PD0 = 0写入NS2009,如果最后一个控制字包含PD0 = 0,则该命令完成后将使能PEN中断输出。 +    * PD0 = 1,禁止了PEN中断功能,无法监视触摸屏上的触摸运动。如果要重新启用中断功能PEN,需要控制PD0 = 0写入NS2009,如果最后一个控制字包含PD0 = 0,则该命令完成后将使能PEN中断输出。 
-  * 为避免误触发,​建议处理器向NS2009发送命令时,​屏蔽掉PENIRQ的中断。 +    * 为避免误触发,​建议处理器向NS2009发送命令时,​屏蔽掉PENIRQ的中断。 
-{{ :​icore4t:​iCore4T_ARM_HAL_62_18.png?​direct |}} +{{ :​icore4t:​iCore4T_ARM_HAL_62_18.png?​direct&​600 ​|}}
- +
-=== 2.电阻触摸、电容触摸相关知识=== +
-  * 有了TFT裸屏后还要配套电阻触摸板或者电容触摸板才可以获取触摸信息。触摸板是贴到TFT屏上面的,然后再通过电阻触摸芯片就可以获取电阻触摸板的信息,通过电容触摸芯片采集电容触摸板的信息。目前市面上常用的电阻触摸IC是STMPE811,电容触摸IC是GT811、GT911和FT5X06。其中,电阻触摸和电容触摸两者的区别如下: +
-  * 电阻触摸芯片STMPE811其实就是ADC,返回的是ADC数值,而电容触摸芯片GT811、GT911和FT5X06返回的是显示屏实际的坐标值。 +
-  * 使用电阻触摸芯片STMPE811需要做触摸校准,而使用电容触摸芯片GT811、GT911和FT5X06是自动校准的,无需手动校准。 +
- +
-=== 3.电容触摸芯片GT911介绍=== +
-  * 在本实验中,选用电容触摸芯片GT911来实现电容触摸功能。 +
-  * 电容触摸相比电阻触摸简单,因为电容触摸不需要做触摸校准,而且用的是触摸板和触摸芯片一体的,也不需要做寄存器初始化配置,上电后直接读取参数即可。 +
-  * GT911、GT928、GT9147都属于GT9系列非单层多点触控芯片,他们支持的触控点数不同(GT928支持10个点、GT911支持5个点)、驱动和感应通道也可能不同。可是他们的寄存器和IIC通讯时序是相同的,也就是说驱动程序是兼容的。 +
-  * GT911是专为7”~8”设计的新一代5点电容触控方案,拥有26个驱动通道和14个感应通道,以满足更高的touch精度要求。GT911可同时识别5个触摸点位的实时准确位置,移动轨迹及触摸面积。并可根据主控需要,读取相应点数的触摸信息。 +
-  * 与主机的接口共有6PIN,分别为:VDD、GND、SCL、SDA、INT、RESET。 +
-    * INT、RESET不需要接上下拉电阻,可与主机直连。 +
-    * SCL、SDA需要接上拉电阻4.7K,毕竟400KHz的通信频率,没有上拉可能导致SCL、SDA边沿不够陡峭。 +
-    * RST是复位引脚,拉低100us以上,即可复位。正常工作时,应该保持拉高。 +
-    * INT是GT9xx的触摸信号输出引脚,在正常工作时,主机端要设置为悬浮输入,即不上下拉(GT9xx的驱动能力有限,如果外部上下拉,GT9xx可能驱动不了)。当有触摸发生时,INT引脚会输出上升沿或下降沿(内部寄存器可以配置),主机端可以一直读取INT脚的电平信号,也可以用端口外部中断检测。 +
- +
-=== 4.电容触摸芯片GT911的I2C通讯=== +
- +
-  * GT911提供标准的I2C通讯接口,由SCL和SDA与主CPU进行通讯。在系统中GT911始终作为从设备,所有通讯都是由主CPU发起,建议通讯速度为400Kbps或以下。其支持的I2C硬件电路支持时序如下: +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_2.png?​direct |}} +
-  * GT911的I2C从设备地址有两组,分别为0xBA/​0xBB和0x28/​0x29。主控在上电初始化时控制Reset和INT口状态进行设定,设定方法及时序图如下: +
-  * 上电时序图: +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_3.png?​direct |}} +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_4.png?​direct |}} +
- +
-  * **1)数据传输(以设备地址为0xBA/​0xBB为例)** +
- +
-  * 通讯总是由主 CPU 发起,有效的起始信号为:在 SCL 保持为“1”时,SDA 上发生由“1”到“0”的跳变。地址信息或数据流均在起始信号之后传输。 +
-  * 所有连接在I2C总线上的从设备,都要检测总线上起始信号之后所发送的8位地址信息, +
-  * 并做出正确反应。在收到与自己相匹配的地址信息时,GT911在第9个时钟周期,将SDA改为输出口,并置“0”,作为应答信号。若收到不与自己匹配的地址信息,即非0XBA或0XBB,GT911将保持闲置状态。 +
-  * SDA口上的数据按9个时钟周期串行发送9位数据:8位有效数据+1位接收方发送的应答信号ACK或非应答信号NACK。数据传输在SCL为“1”时有效。 +
-  * 当通讯完成时,由主CPU发送停止信号。停止信号是当SCL为“1”时,SDA状态由“0”到“1”的跳变。 +
- +
-  * **2)对GT911写操作(以设备地址为0xBA/​0xBB为例)** +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_5.png?​direct |}} +
-  * 上图为主CPU对GT911进行的写操作流程图。首先主CPU产生一个起始信号,然后发送地址信息及读写位信息“0”表示写操作:​0XBA。在收到应答后,主CPU发送寄存器的16位地址,随后是8位要写入到寄存器的数据内容GT911寄存器的地址指针会在写操作后自动加1,所以当主CPU需要对连续地址的寄存器进行写操作时,可以在一次写操作中连续写入。写操作完成,主CPU发送停止信号结束当前写操作。 +
- +
-  * **3)对GT911读操作(以设备地址为0xBA/​0xBB为例)** +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_6.png?​direct |}} +
-  * 上图为主CPU对GT911进行的读操作流程图。首先主CPU产生一个起始信号,然后发送设备地址信息及读写位信息“0”表示写操作:0XBA。在收到应答后,主CPU发送首寄存器的16位地址信息,设置要读取的寄存器地址。在收到应答后,主CPU重新发送一次起始信号,发送读操作:0XBB。收到应答后,主CPU开始读取数据。 +
-  * GT911同样支持连续的读操作,默认为连续读取数据。主CPU在每收到一个Byte数据后需发送一个应答信号表示成功接收。在接收到所需的最后一个Byte数据后,主CPU发送“非应答信号NACK”,然后再发送停止信号结束通讯。 +
- +
-===5.电容触摸芯片GT911功能描述=== +
-  * (一)工作模式 +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_7.png?​direct |}} +
-  * **a)Normal Mode** +
-  * GT911在Normal Mode时,最快的坐标刷新周期为7ms-10ms间(依赖于配置信息的设定,配置信息可控周期步进长度为1ms)。 +
-  * Normal mode状态下,一段时间无触摸事件发生,GT911将自动转入Green mode,以降低功耗。GT911无触摸自动进入Green mode的时间可通过配置信息设置,范围为0~15s,步进为1s。 +
-  * **b)Green Mode**  +
-  * 在Green mode下,GT911扫描周期约为40ms,若检测到有触摸动作发生,自动进入Normal mode。 +
-  * **c)Sleep Mode**  +
-  * 主CPU通过I2C命令,使GT911进入Sleep mode(需要先将INT脚输出低电平)。当需要GT911退出Sleep mode时,主机输出一个高电平到INT脚(主机打高INT脚2~5ms),唤醒后GT911将进入Normal mode。 +
-{{ :​icore4t:​iCore4T_ARM_HAL_63_8.png?​direct |}} +
- +
-  * (二)中断触发方式 +
-  * 当有触摸时,GT911 每个扫描周期均会通过 INT 脚发出脉冲信号,通知主 CPU 读取坐标信息。主CPU可以通过相关的寄存器位“INT”来设置触发方式。设为“0”表示上升沿触发,即在有用户操作时,GT911会在INT口输出上升沿跳变,通知 CPU;设为“1”表示下降沿触发,即在有用户操作时,GT911会在INT口输出下降沿跳变。 +
  
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
icore4t_62.1604904408.txt.gz · 最后更改: 2020/11/09 14:46 由 fmj