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