SP5V210的嵌入式電容觸摸屏驅動設計
引言
本文引用地址:http://www.j9360.com/article/201609/303798.htm目前,隨著手機和平板電腦的廣泛使用,電容式觸摸屏已成為電子產品的重要組成部分,電容觸摸屏的多點觸摸功能是紅外式、電阻式觸摸屏所不具備的,其線性度、透明度和耐久度也有著明顯優勢。蘋果公司的多點觸摸技術使人們的生活方式有了極大變化,且隨著嵌入式設備和技術的成熟,電容觸摸屏作為新興的輸入設備必將得到廣泛應用。
SP5V210是基于Cortex—A8架構的32位處理器,帶有內存管理單元MMU,最高主頻為1.0 GHz,內部集成圖像處理器可以高效顯示與處理圖像,且可以十分流暢地運行Linux和Android高級系統;GT811為5點電容屏控制芯片,其內部觸摸檢測網絡由10路感應通道與16路驅動通道構成,通過內部的數模轉化模塊、模擬放大電路和MPU采集實時的觸摸信息,并由I2C總線傳輸到主控處理器。
本設計以SP5V210處理器和Linux2.6.25內核為系統的硬件與軟件平臺,用GT811作為電容式觸摸屏的控制器,設計了一種基于SP5V210的嵌入式多點電容觸摸屏驅動。
1 電容式觸摸屏
目前大部分電容屏是投射式互容電容屏。本文以投射式電容觸摸屏為例,應用OGS方案,即將氧化銦錫(ITO)導電膜直接鍍在保護玻璃上形成傳感器,此時保護玻璃具有了觸摸傳感功能。該電容觸摸屏采用單層ITO(SITO)結構,水平X和垂直Y電極通過蝕刻ITO層形成,電極交叉處有絕緣層,這樣X電極與Y電極之間形成了耦合電容CM。
通過檢測觸摸屏整個二維平面的互電容大小來計算觸摸位置,首先觸摸屏控制器會控制X電極依次發出激勵信號,Y電極同時接收,得到所有XY電極交叉處的電容值,當手指觸摸時會使觸摸位置局部電容CM減小,這樣根據二維電容數據變化量就可以計算出每個觸摸位置的真實坐標。
本設計采用三星公司的SP5V210處理器作為主機,通過I2C總線接口與電容式觸摸屏控制芯片GT811相連,GT811集成在柔性線路板上通過綁定技術連接到7寸電容觸摸屏屏體上。圖1為系統硬件連接示意圖。觸摸屏控制器GT811驅動端依次從drv00到drv15發出激勵脈沖,感應端sens00~sens09同時接收,并轉換為數字信號,此時為原始數據rawdata,經數據處理后再由內部MPU通過I2C總線與處理器SP5V210完成觸摸坐標信息的交互。

2 觸摸屏驅動程序設計
本文利用處理器SPSV210、觸摸屏控制器GT811和Linux輸入子系統來實現多點電容觸摸屏的驅動,程序流程如圖2所示。

2.1 I2C總線設備注冊
GT811是一個I2C設備,需向Linux內核注冊才可被使用。注冊GT811的I2C模塊先在Linux內核文件arch/arm/mach-s5pv210/mach-tq210.c的I2C通道2結構體中加入TC的I2C地址,也就是0x5d,添加后如下:

系統初始化時會根據板級I2C總線設備配置信息,創建I2C總線客戶端設備I2C_client,并將其添加到I2C子系統中。
2.2 I2C總線設備驅動注冊
I2C總線設備需要兩個結構體:struct IIC_driver表示I2C設備驅動,struct IIC_client用于描述I2C設備:

2.3 驅動入口函數
檢查到I2C總線設備進入探測函數static int sp5v210_tc_probe(struct IIC client*client,const struct dev_id*id),該函數的主要工作如下:


觸摸屏控制器GT811初始化,通過初始化函數static int tc_init_panel(struct IIC_client*client)配置各相關寄存器,檢測是否工作在正常模式。
手指按下時中斷引腳被拉低,處理器SP5V210調用中斷處理函數tc_irq_handler,首先該處理函數將提交任務ts→work給工作隊列tc_wq,然后進入工作隊列tc_wq中的tc_ work_fun函數。
2.4 觸摸屏工作函數設計
手指觸摸時電容控制器首先會采集多幀原始數據進行平均值處理并存儲,再進行數據處理得到實時的坐標信息,通過I2C總線傳輸觸點坐標給CPU,并在觸摸屏工作函數中完成坐標點的修正、上報以及多點處理功能。由于電容觸摸屏XY電極上一般會蝕刻成菱形的感應塊(對角線長約4~6 mm),這樣手指操作時會觸摸到4個感應塊(如圖3所示),需要采用算法定位坐標。

采用重心法計算觸點坐標位置(Px,P,y):

其中,Sn為第n個感應塊交叉處的信號值,Nx和Ny分別為X、Y電極方向上感應塊個數,R為觸摸屏的邏輯分辨率。再由工作函數tc_work_fun(struct worK_struct*work)進行數據的讀取與事件上報。
觸摸屏觸點坐標信息會保存在控制器GT811的輸出信息寄存器中,如表1所列。中斷觸發后進入tc_worK_fun()函數。該函數的主要工作:讀取GT811輸出信息寄存器中的坐標信息;向上層報告對應的事件和坐標信息。

評論