艾凱旋 ,劉云婷 ,劉 洋
(1.中國工程物理研究院 計量測試中心,四川 綿陽 621999;2.電子科技大學(xué) 電子科學(xué)與工程學(xué)院,四川 成都 610054)
隨著移動設(shè)備和5G 時代的到來,大到機械設(shè)備操作界面,小到人們?nèi)粘J褂玫囊苿与娮釉O(shè)備,觸摸屏都因其方便快捷的操作方式而被廣泛使用。
觸摸屏作為人機交互的媒介之一,具有十分重要的研究價值。隨著人們對觸摸屏功能需求提高,可折疊和柔性觸摸屏的設(shè)計制備是觸摸屏研發(fā)的主要方向之一[1-5]。同樣,伴隨觸摸屏功能屬性的豐富,基于觸摸屏的應(yīng)用擴展也是重要方向之一,例如電子皮膚和可穿戴設(shè)備等[6-11]。但在研究過程中,觸摸屏往往需要外部觸摸檢測電路對觸摸屏的功能進行驗證。Sarwar等人提出了一種基于AD7146 的觸摸檢測電路[12],可實現(xiàn)16 個觸摸點工作狀態(tài)的檢測,但只能檢測互電容觸摸屏。而針對自電容觸摸屏的檢測,Liu 等人和Ye 等人分別以AD7147 和MPR121 為核心設(shè)計了一種觸摸檢測電路[13-14],但限于芯片本身的電容通道數(shù)目約束,Liu 等人設(shè)計的觸摸檢測電路只能檢測12 個電容通道的自電容觸摸屏,而Ye 等人設(shè)計的觸摸檢測電路只能檢測最多13 個電容通道的自電容觸摸屏,均無法應(yīng)對超過13 個電容通道檢測數(shù)量的自電容觸摸屏功能驗證。
對此,本文提出了一種數(shù)據(jù)采集系統(tǒng),硬件部分為由Arduino 控制的觸摸檢測電路,其電路核心為MPR121,采用MPR121 地址位切換的原則,實現(xiàn)可檢測最多24 個電容通道數(shù)目的自電容觸摸屏的功能。同時,為了便于實時觀察觸摸屏中觸摸點的工作狀態(tài),設(shè)計了一種基于Python 的圖形化界面。最后,通過實驗對數(shù)據(jù)采集系統(tǒng)進行了功能驗證。
一個MPR121 只能檢測12 個電容通道的觸摸屏,為了讓觸摸檢測電路可以同時最多檢測24 個電容通道數(shù)目的自電容觸摸屏,觸摸檢測電路設(shè)計過程中選擇了兩個MPR121 以及一個CD74HC21E 為核心設(shè)計,其電路原理圖如圖1 所示。
圖1 觸摸檢測電路原理圖
該電路可以同時檢測具有24 個電容通道的自電容觸摸屏。其中,VDD 為觸摸檢測電路的電源輸入端,需要提供3.3 V 的電壓,觸摸檢測電路才能正常工作,而VREG 為MPR121 內(nèi)部電源電壓和內(nèi)部穩(wěn)壓器的輸出端,為了保證VDD 端與VREG 端電壓的穩(wěn)定性,均在其與接地端之間并聯(lián)一個0.1 μF 的去耦電容。
MPR121 作為具有12 個電容通道的芯片,其需要通過I2C 接口與微處理控制器通信才可以將觸摸屏中觸摸點的工作狀態(tài)傳輸?shù)接嬎銠C中,數(shù)據(jù)采集系統(tǒng)選擇由Arduino 控制,Arduino 通過I2C 接口讀取從機地址從而獲得MPR121 芯片采集到的觸摸點的數(shù)據(jù),MPR121 芯片對應(yīng)的從機地址可以為0x5A、0x5B、0x5C 和0x5D,本文中觸摸檢測電路可以提供任意兩個從機地址供Arduino讀取,且在觸摸檢測電路的SCL、SDA 以及端需加10 kΩ 的上拉電阻。
觸摸檢測電路在檢測觸摸點工作狀態(tài)過程中,需要提前為Q1~Q24 的電容通道依次進行充電,然后定期將電容通道中的電量通過觸摸點釋放到接地端,其電容通道的整個充放電過程如圖2 所示。
圖2 電容通道充放電過程圖
觸摸檢測電路中MPR121 電容通道的默認(rèn)充電時間為0.5 μs,峰值電壓為2.34 V,隨著觸摸檢測電路不斷檢測電容通道中的電壓變化,就可以檢測到觸摸屏中觸摸點的自電容大小,從而判斷觸摸屏中觸摸點的工作狀態(tài),其檢測原理表達式如下:
其中,Q 為電容通道中的總電量,V 為電容通道中的峰值電壓,I 和T 分別為電容通道的充電電流和充電時間,MPR121 的默認(rèn)充電電流為16 μA,其電源電壓VDD為3.3 V,其最高峰值電壓Vmax和最低峰值電壓Vmin表達式如下:
其可測量電容范圍計算如下:
式中Clow和Chigh分別是觸摸檢測電路可以檢測的最小電容值和最大電容值,當(dāng)觸摸檢測電路檢測到在3.08 pF~4.73 pF 之間的電容值時,觸摸屏中觸摸點顯示被觸摸狀態(tài)。
為了便于觸摸檢測電路檢測電容通道的拓展,觸摸檢測電路中采用CD74HC21E 器件作為兩個MPR121 的的連接端,CD74HC21E 器件具有4 輸入與門功能,可同時供4 個MPR121 共同連接使用,最終實現(xiàn)48 個電容通道數(shù)目檢測??紤]到觸摸檢測電路只用到了兩個MPR121,CD74HC21E 的另外兩個閑置輸入端口均接入高電平。觸摸檢測電路的硬件電路版圖如圖3 所示,可通過MPR121 的ADDR 端口自由設(shè)置從機地址。
圖3 觸摸檢測電路硬件版圖
觸摸檢測電路設(shè)計完成后,需要對其進行驅(qū)動程序的設(shè)計,包括觸摸檢測電路中寄存器地址的設(shè)置、電容通道的初始化設(shè)置以及從機數(shù)據(jù)的讀取設(shè)置等,因其采用Arduino 開發(fā)板,驅(qū)動程序的設(shè)計在Arduino IDE 開發(fā)環(huán)境中進行,圖4 所示為驅(qū)動程序模塊圖。
圖4 驅(qū)動程序模塊圖
觸摸檢測電路驅(qū)動程序主要包含“setup”模塊和“l(fā)oop”模塊兩部分,“setup”模塊的主要功能是對MPR121 芯片的工作模式和電容傳感通道進行基本設(shè)置,包括I2C 通信命令的設(shè)置,同時將引腳的初始工作電平設(shè)置為高電平。電容傳感通道設(shè)置模塊內(nèi)部包含的寄存器地址定義模塊主要用于對MPR121 芯片中的寄存器地址進行命名和歸類,而寄存器設(shè)置模塊用于對寄存器地址定義模塊定義的地址進行MPR121 芯片的原始設(shè)置。
“l(fā)oop”模塊的主要功能是對觸摸檢測電路中需要重復(fù)進行的操作進行一系列設(shè)置,其中主要是對透明觸摸屏上觸摸點觸摸狀態(tài)的讀取。觸摸狀態(tài)讀取模塊的主要功能就是讀取透明觸摸屏中觸摸點的工作狀態(tài),其通過內(nèi)部的中斷檢測模塊檢測觸摸檢測電路是否工作在正常狀態(tài),當(dāng)其工作在正常狀態(tài)時,則通過其內(nèi)部的雙字節(jié)數(shù)據(jù)讀取模塊,依次遍歷兩個不同從機地址MPR121芯片的12 個觸摸點數(shù)據(jù),最后按順序?qū)⑵鋭澐值?4 個觸摸點中,用于確定對應(yīng)觸摸點的觸摸狀態(tài)。當(dāng)觸摸點被觸摸時,Arduino IDE 開發(fā)環(huán)境的串口檢測界面中對應(yīng)觸摸點的數(shù)據(jù)會顯示“1”,相反,顯示“0”。
Arduino 控制兩個MPR121 進行電容通道的檢測采用遍歷的方式,依次選定MPR121 的從地址為0x5A 和0x5B,通過一個循環(huán)語句依次遍歷兩個MPR121 的電容通道檢測結(jié)果,當(dāng)觸摸多個按鍵時,Arduino 會以16 ms 采集一個電容通道電容變化的速度依次遍歷兩個zMPR121的電容通道,每秒可以遍歷共60 個電容通道以上的電容變化情況,因此當(dāng)人的手指觸摸多個按鍵時,不會發(fā)生數(shù)據(jù)沖突的現(xiàn)象。
觸摸檢測電路在實時采集觸摸點數(shù)據(jù)過程中,會產(chǎn)生大量觸摸點數(shù)據(jù),通過Arduino IDE 自帶的串口監(jiān)視界面無法直觀獲得觸摸屏中各觸摸點工作狀態(tài),因此設(shè)計了一種基于Python 的圖形化界面,其工作流程圖如圖5所示。
圖5 圖形化界面流程圖
圖形化界面采用Python 的PyQt4 單元庫為核心[15],并調(diào)用了sys 庫、time 庫以及serial 庫。圖形化界面主要由三個功能模塊組成,分別為觸摸點數(shù)據(jù)中轉(zhuǎn)模塊、多線程數(shù)據(jù)接收模塊以及顯示界面設(shè)置模塊。多線程數(shù)據(jù)接收模塊用于接收并更新觸摸檢測電路采集到的觸摸點數(shù)據(jù),觸摸點數(shù)據(jù)中轉(zhuǎn)模塊用于將多線程數(shù)據(jù)接收模塊接收到的觸摸點數(shù)據(jù)傳輸?shù)斤@示界面設(shè)置模塊,顯示界面設(shè)置模塊用于設(shè)置圖形化界面的外觀、形狀等,并將接收到的觸摸點數(shù)據(jù)實時刷新到圖形化界面中。圖形化界面的觸摸點數(shù)據(jù)刷新率為10 μs 一次,其完成后的圖形化界面如圖6 所示,為一個5×5 矩陣式分布的觸摸板樣式。
圖6 圖形化界面顯示圖
圖形化界面會按照觸摸屏上觸摸點的工作狀態(tài)實時變化,當(dāng)觸摸點被觸摸時,對應(yīng)位置的圖形化界面會顯示紅色,且隨著觸摸點數(shù)量的增多以及布局的改變,圖形化界面也可以進行相應(yīng)的程序調(diào)整。
為了驗證觸摸屏數(shù)據(jù)采集系統(tǒng)的有效性,觸摸檢測電路最終以印刷電路板的形式搭建完成,其工作電壓可由Arduino 開發(fā)板提供,實驗中采用Arduino Uno R3 開發(fā)板。
觸摸檢測電路在工作過程中需將其SCL 和SDA 端口分別與Arduino Uno R3 開發(fā)板對應(yīng)的I2C 端口相連,且觸摸檢測電路的VDD 與Arduino Uno R3 開發(fā)板的3.3 V 電壓端口相連,VSS 端與Arduino Uno R3 開發(fā)板的GND 端相連,端與Arduino Uno R3 開發(fā)板的任一數(shù)字引腳端口相連,且設(shè)置該數(shù)字引腳端口為輸入端口,起始電平為高電平。圖7 所示為數(shù)據(jù)采集系統(tǒng)的測試圖。
圖7 數(shù)據(jù)采集系統(tǒng)測試圖
數(shù)據(jù)采集系統(tǒng)在驗證過程中,選擇了一個5×5 簡易式觸摸板作為測試對象,并將其觸摸點連接端與觸摸檢測電路的對應(yīng)電容通道端口相連,其測試過程中因為觸摸檢測電路只能測試24 個電容通道,故觸摸板只有24個觸摸點的狀態(tài)可以被檢測到,圖8 所示為數(shù)據(jù)采集系統(tǒng)驗證結(jié)果圖。
圖8 數(shù)據(jù)采集系統(tǒng)結(jié)果圖
數(shù)據(jù)采集系統(tǒng)中的觸摸檢測電路在檢測到簡易觸摸板上的觸摸點被接觸時,其對應(yīng)位置的觸摸點數(shù)據(jù)會同步更新到圖形化界面中實時顯示出來,且在觸摸檢測電路檢測過程中沒有誤檢測的觸摸點產(chǎn)生,證明了觸摸檢測電路的有效性。
觸摸屏數(shù)據(jù)采集系統(tǒng)的設(shè)計完成,不僅使觸摸檢測電路的電容通道數(shù)量增加到24 個,可以用于更多觸摸點的觸摸屏檢測,且通過以Python 中的PyQt4 單元庫為核心的圖形化界面更直觀地觀測觸摸點變化情況,為觸摸屏數(shù)據(jù)采集系統(tǒng)的設(shè)計提供了新的思路。