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