基于BU21023的電阻式觸摸屏兩點(diǎn)觸控功能設計
摘要:隨著(zhù)觸摸屏的普及,兩點(diǎn)/多點(diǎn)觸控功能成為人們新的關(guān)注點(diǎn)。本文介紹了電阻式觸摸屏兩點(diǎn)觸摸控制芯片BU21023的功能與應用,并基于嵌入式Linux系統實(shí)現了電阻式觸模屏的兩點(diǎn)觸控功能。該方案可以用于普通四線(xiàn)電阻式觸摸屏上,而且能夠有效地降低實(shí)現兩點(diǎn)觸控功能所需的硬件成本。
關(guān)鍵詞:電阻式觸摸屏;兩點(diǎn)觸控;嵌入式系統
引言
隨著(zhù)技術(shù)的進(jìn)步,便攜式電子設備已經(jīng)成為人們生活中必不可少的工具,而普通用戶(hù)的巨大數量使得便攜式電子設備的人機接口成為開(kāi)發(fā)者關(guān)注的重點(diǎn)。目前,絕大多數的手機和平板電腦都使用觸摸屏作為主要輸入設備,以提供友好的人機界面和良好的用戶(hù)體驗。目前,在便攜式電子設備上使用最廣泛的觸摸屏主要是電容式和電阻式兩種。電容式觸摸屏最大的優(yōu)勢在于其多點(diǎn)觸控技術(shù)已繹比較完善,廣泛應用于眾多電子產(chǎn)品中;但是電容式觸摸屏價(jià)格昂貴,且對工作環(huán)境、機械與電路設計有較高要求。而電阻式觸摸屏成本低、設計簡(jiǎn)單,此前制約其應用的主要因素在于僅能夠進(jìn)行單點(diǎn)觸控。事實(shí)上,對于電阻式觸摸屏兩點(diǎn)觸控的研究成果已經(jīng)達到可以大規模應用的階段。本文利用ROHM公司的兩點(diǎn)觸摸控制芯片BU21023實(shí)現了電阻式觸摸屏的兩點(diǎn)觸控功能。
1 BU21023簡(jiǎn)介
BU21023內置10位的ADC,并內置一顆8位的MCU 用于坐標的計算,提供的分辨率最高為1024×1024。BU21023的結構框圖如圖1所示。
該芯片通過(guò)觸摸屏接口的4個(gè)引腳與普通四線(xiàn)電阻式觸摸屏相連接。存MCU的Host接口方面,BU21023提供兩種通信方式——4線(xiàn)SPI或2線(xiàn)串行通信(類(lèi)似于I2C總線(xiàn)協(xié)議),用戶(hù)可以使用IFSEL引腳選擇通信方式。4線(xiàn)SPI協(xié)議可以提供最高15 Mbps的通信速度,但是根據協(xié)議,這種方式需要獨占4個(gè)引腳;而2線(xiàn)串行通信方式只占用2個(gè)引腳,且可以與其他設備共用總線(xiàn),但是最高只能提供400kbps的通信速度。實(shí)際應用中MCU的Host接口引腳資源通常比較緊張,因此采用串行通信較多?;诖朔N考慮,本文也采用2線(xiàn)串行通信。此外,該芯片在工作前需要下載一個(gè)8 192字節的固件。這段代碼可以存儲在EEPROM中通過(guò)EEPROM接口下載,也可以存放在MCU的程序空間通過(guò)串行通信下載。本文采取后一種方式。
BU21023的工作電壓范圍為2.7~3.6 V,符合一般便攜式電子設備的供電電壓要求。根據實(shí)際測量,其工作時(shí)電流消耗約為7 mA,而當芯片進(jìn)入休眠模式后,電流消耗下降到30~40μA。因此該芯片非常適合用于各類(lèi)便攜式電子設備中。
2 工作機制
典型電阻式觸摸屏的工作部分一般由3部分組成:兩層透明的阻性導體層、兩層導體之間的隔離層和電極。觸摸屏工作時(shí),上下導體層相當于電阻網(wǎng)絡(luò ),一些有壓力施加到觸摸屏上,上下層線(xiàn)路導通。此時(shí),在XP、XN上分別加VREF、0 V電壓,使X面上形成了從0~VREF的電壓梯度,觸摸點(diǎn)至XN端的電壓為該兩端電阻對VREF的分壓,分壓值代表了觸摸點(diǎn)在X方向的位置。然后,將Y面的一個(gè)電極(如YN)端懸空,可從另一電極(YP)取出這一分壓,將該分壓進(jìn)行A/D轉換,并與VREF進(jìn)行比較,便可得到觸摸點(diǎn)的X坐標。同理,在YP、YN上分別加VREF、0 V電壓,而將X面的一個(gè)電極(如XN)懸空,從另一電極(XP)上取出觸摸點(diǎn)在Y方向的分壓,即可得到Y坐標。
這種測量方式?jīng)Q定了它只能得出一個(gè)觸點(diǎn)的坐標。而B(niǎo)U21023則通過(guò)采集更多數據來(lái)計算得出兩個(gè)觸點(diǎn)的坐標。其工作時(shí)序如圖2所示。
在1時(shí)段,芯片在XP與YN兩端加上電壓,測量XN與YP端的電壓;在2時(shí)段,芯片在XP與XN兩端加上電壓,測量YP與YN端的電壓;在3時(shí)段,芯片在YP與YN兩端加上電壓,測量XP與XN端的電壓。通過(guò)這些測量獲得數據后,在4時(shí)段進(jìn)行計算得出兩個(gè)觸點(diǎn)的坐標。整個(gè)測量計算周期耗時(shí)約4 ms,相對一般的電阻式觸摸屏控制芯片的測量周期更長(cháng),但是仍然足夠檢測入手的動(dòng)作。在全部測量計算完成后,如果有設定間歇工作模式的話(huà),則會(huì )在5時(shí)段等待到足夠的時(shí)間。
3 系統硬件設計
本文采用的硬件平臺使用TI公司的OMAP3530作為主機。OMAP3530采用ARM Cortex-A8架構,具有豐富的外圍接口,包括3組I2C總線(xiàn)控制器與4組SPI控制器。BU21023部分的硬件連接電路如圖3所示。
BU21023芯片通過(guò)XP、XN、YP和YN四個(gè)引腳與4線(xiàn)電阻式觸摸屏相連接,將IFSEL置高選擇通信方式為2線(xiàn)串行模式,通過(guò)SCL和SDA連接Host端的I2C總線(xiàn)控制器,INT為中斷信號引腳,SEL_CSB和RSTB分別為片選與硬件復位。
4 驅動(dòng)軟件設計
本文所采用的系統環(huán)境為Android 2.2版本,使用Linux Kerncl 2.6.32。在Linux系統中,設備驅動(dòng)程序是一組相關(guān)函數的集合。它包括設備服務(wù)子程序和中斷處理程序。本文的驅動(dòng)程序中重要的是上電及初始化子程序和中斷處理程序。
4.1 上電及初始化子程序
在BU21023芯片上電后等待200μs,由主機將RSTB引腳拉高。然后對基本寄存器進(jìn)行配置,需要配置的共有20個(gè)寄存器。完成寄存器配置后,通過(guò)向SYSTEM(0x40)寄存器寫(xiě)入0x01來(lái)啟動(dòng)芯片的模擬部分。等待100μs后開(kāi)始下載固件,通過(guò)向CMN_SETUP1(0x31)寄存器寫(xiě)入0x02,將下載路徑配置為從Host端下載,此后可以向EX_WDAT(0x72)寄存器寫(xiě)入固件,共8192字節。在寫(xiě)入完成后可以通過(guò)讀取EX_CHK_SUM1~EX_CHK_ SUM3(0x74~0x76)的值來(lái)校驗。如果這個(gè)校驗值與固件前8189個(gè)字節的和相等,則下載成功。完成固件下載后,清除所有中斷信息,然后向SYSTEM(0x40)寄存器寫(xiě)入0x03以啟動(dòng)芯片的內置MCU。在得到啟動(dòng)成功的中斷信息后清除該中斷,則芯片初始化完成,進(jìn)入工作狀態(tài)。
4.2 中斷處理程序
中斷處理程序是整個(gè)觸控程序的關(guān)鍵部分。
BU21023的中斷包括6種情況,坐標更新和致命錯誤足主要的2種,另外4種為程序下載完成、進(jìn)入休眠模式、退出休眠模式和自動(dòng)校準完成。中斷類(lèi)型可以從INT_STS寄存器讀出。對于后4種中斷類(lèi)型,在中斷處理程序中不需要進(jìn)行處理,直接清除中斷即可。
若中斷類(lèi)型為致命錯誤,則應當瀆取ERR_STS寄存器的信息,該信息表明了發(fā)生錯誤的原因??赡艿腻e誤原因共有14種,包括固件下載異常中斷、自動(dòng)校準失敗、測量周期過(guò)短和ADC無(wú)響應。前3種情況可以通過(guò)軟件手段恢復,最后一種錯誤,可以嘗試重新上電啟動(dòng)。
當芯片處于正常工作狀態(tài),得到的中斷應該都是坐標更新。不同版本的固件其產(chǎn)生該類(lèi)型中斷的條件或有不同,為使得程序具有通用性,采取如下方法處理:將中斷設置為下降沿觸發(fā),當第一次發(fā)生坐標更新的中斷時(shí),屏蔽該類(lèi)型的中斷,然后讀取芯片的POS_X1_H~POS_ Y2_L(0x20~0x27)這8個(gè)寄存器。這些寄存器內存儲的是兩個(gè)觸點(diǎn)的X與Y坐標。若兩個(gè)觸點(diǎn)的坐標不都為0,則有接觸發(fā)生,此時(shí)將接觸坐標處理后上報至系統,并開(kāi)啟一個(gè)定時(shí)器。利用定時(shí)器定時(shí)讀取坐標信息,并將坐標處理后上報至系統,直至讀取到兩個(gè)觸點(diǎn)的坐標都為0。當兩個(gè)觸點(diǎn)的坐標都為0時(shí),表明此次觸控操作結束,將坐標上報后,關(guān)閉定時(shí)器,清除中斷信息,最后解除對坐標更新中斷的屏蔽。這樣,一次完整的觸控操作的檢測就完成了。
這種方法的好處有以下兒點(diǎn):
①首先,這種方法可以適用于不同版本的固件,當固件有升級時(shí)不需要修改驅動(dòng)程序。
②其次,使用定時(shí)器來(lái)定時(shí)讀取坐標可以有效減輕Host MCU的負擔。事實(shí)上考慮到人手的移動(dòng)速度,過(guò)高頻率地讀取坐標完全沒(méi)有必要,只會(huì )造成Host MCU的負擔增加??梢愿鶕到y的繁忙程度和采集到的信息情況選取一個(gè)合適的時(shí)間間隔。
③采用這種方法,INT引腳在有觸控的時(shí)候保持低電平,在沒(méi)有觸控的時(shí)候保持高電平,這也符合目前市場(chǎng)上絕大部分電阻式觸摸屏控制芯片的中斷定義,減輕了開(kāi)發(fā)時(shí)候的工作量。
5 觸摸屏參數測定
由于不同的觸摸屏其物理參數不同,因此在實(shí)際使用前需要測定相關(guān)參數,并寫(xiě)入芯片相關(guān)寄存器內,供坐標計算時(shí)使用。
需要測定的參數共有8個(gè),分別存儲于CMN_SETUP2(0x31)、SETUP_X(0x34)、SETUP_Y(0x35)、OFS_X(0x36)、OFS_Y(0x37)、TH_DET_TOUCH(0x3A)、EVR_X(0x63)及EVR_Y(0x64)這8個(gè)寄存器內。0x31寄存器存儲的主要是X軸與Y軸的方向設定信息。由于安裝時(shí)觸摸屏與顯示屏的坐標方向可能不同,通過(guò)此參數設定使觸摸屏的坐標系與顯爪屏統一。在完成方向沒(méi)定后,需要測定的參數為X方向與Y方向的ADC參考電阻阻值,數據分別存入0x63與0x64寄存器。之后設定的為0x3A寄存器,該寄存器存儲的參數為有觸點(diǎn)與無(wú)觸點(diǎn)的判斷閾值。0x34~0x37寄存器存儲的信息則用來(lái)判定是否兩點(diǎn)接觸并計算兩點(diǎn)坐標。
此外,BU21023還有手勢識別功能,由于A(yíng)ndroid系統自帶有手勢識別,故不使用BU21023的此功能,因此手勢閾值參數不做測定,對應的TH_DET_GESTURE(0x3B)寄存器直接使用初始值。
需要注意的是,這些參數測定的結果直接影響兩點(diǎn)檢測時(shí)的準確度。因此,在開(kāi)發(fā)時(shí)可以測定若下組參數后選取一組效果最佳的參數。
結語(yǔ)
BU21023具有低功耗、易開(kāi)發(fā)的特點(diǎn),可以在普通四線(xiàn)電阻式觸摸屏上實(shí)現兩點(diǎn)觸控功能。該芯片適用于各類(lèi)便攜式電子設備,并可以幫助開(kāi)發(fā)者用較低的硬件成本實(shí)現較好的用戶(hù)體驗。因此,該芯片有望大規模應用在移動(dòng)電話(huà)或平板電腦開(kāi)發(fā)中。
評論