張賽男 陳梅金
摘 要:觸摸按鍵在電子產品中無處不在,而且越來越普遍,同時市面上出現觸摸按鍵的問題也越來越多,主要體現在使用過程中被外界干擾后觸摸按鍵自動觸發。該文提出一種多次循環偵測觸摸按鍵的算法,用來增強按鍵抗干擾的能力,以改善顯示器觸摸按鍵帶來的種種干擾問題。
關鍵詞:觸摸按鍵;偵測;人機交互
中圖分類號:TP212 文獻標志碼:A
0 引言
我們日常使用的家用電器中,大部分都在使用觸摸按鍵,并通過它對設備進行控制。觸摸按鍵也越來越受到廣大用戶的認可和喜愛。不過觸摸式按鍵在復雜的干擾環境下經常會出現一些問題,象自動觸發按鍵功能,并且去執行相應按鍵的動作,這樣就容易導致用戶不能正常使用設備。該文主要通過顯示器觸摸按鍵的偵測算法來改善按鍵偵測流程,利用偵測算法來改善按鍵的抗干擾能力。
該設計是基于顯示器的硬件系統,對軟件控制系統功能進行改善設計。硬件系統包括電源板電路、主板電路和觸摸按鍵回路。軟件上從3個方面著手設計,一方面是Scaler IC通過IIC控制方式與觸摸按鍵IC進行通信控制。另一方面是設計觸摸按鍵的偵測流程。第三是測試比對顯示器觸摸按鍵在不同的偵測條件下的作用效果。
1 硬件系統
1.1 硬件系統組成
該設計系統是基于顯示器系統研究的,主要由電源板、主板、按鍵板和喇叭以及液晶顯示面板組成。電源板輸出電源給主板和外圍電路。外圍電路包括按鍵板、Audio和顯示面板等這些電路回路。主板搭載著系統的核心處理器,即Scaler圖像處理芯片。Scaler及外圍電路給后續軟件設計提供了堅實的硬件基礎。顯示面板主要負責對圖像處理芯片送來的信號進行顯示處理。這些硬件電路模塊組成了該設計的硬件系統,系統框圖如圖1所示。
1.2 IIC電路
IIC總線是由串行數據(SDA)總線和串行時鐘(SCL)總線組成的。數據總線在器件上傳遞相關指令信息,每個器件都可以識別相對應的地址。器件在執行相關數據傳輸時,也可以被看成是主機或者是從機。主機主要負責初始化總線的數據傳輸和停止發送數據,被尋址的任何器件都將被認為是從機。SDA和SCL都是雙向線路,都通過一個電流源或上拉電阻連接到正電壓的電源。現在很多上拉電阻電路都已經不這樣設計了,原因是很多圖像處理器IC內部電路已經添加相關的上拉或下拉電阻電路模塊。當總線空閑時,這2條線都設置成高電平,同時連接到總線的器件。連到總線上的任一器件輸出為低電平時,都將使總線的信號變低,即各器件的SDA和SCL都是“線與”關系。IIC總線進行數據傳送過程中,時鐘信號為高電平,數據線上的數據必須保持穩定。只有在時鐘線上的信號為低電平時,數據線上的高電平或低電平狀態才允許變化。
1.3 按鍵控制電路
該設計按鍵板使用觸摸按鍵板。觸摸按鍵板有自己的MCU IC進行處理控制。上位機為圖像處理器IC,下位機為Touch Key MCU IC。圖像處理器到觸摸按鍵板之間的控制電路圖如圖2所示,與Scaler連接的部分有3個引腳,分別是SDA_KEY,SCL_KEY,INT_KEY即Reset Key。
2 軟件系統
有了硬件系統作為基礎,我們就可以對軟件控制系統進行設計搭建。軟件上我們分成2個模塊設計,模塊一是觸摸按鍵IIC驅動設計,需要完成對MCU IC通信命令控制和數據讀寫設計;模塊二是觸摸按鍵控制流程設計,需要完成加強對觸摸按鍵抗干擾能力的設計。
2.1 IIC軟件設計
IIC軟件設計分為起始條件控制、數據傳輸控制和停止控制。起始條件控制需要根據IIC標準設計,先將IIC的SCL拉高,再Delay一段時間(時間以微秒為單位),然后SDA產生一個從高電平到低電平的下降沿,這樣就符合IIC標準的起始信號條件。
有了起始控制條件后就可以對數據進行傳輸控制了。在數據傳輸控制時需要對狀態機進行忙狀態判斷,如果總線處理繁忙狀態則需要等待數據處理;如果收到正常可以發送命令的狀態,即主機收到正常ACK,則可以開始數據發送或接收處理。數據讀寫過程中同樣需要判定對應的ACK,再決定是否重新開始傳輸數據。
同樣IIC停止控制需要按照IIC標準設計。首先將SCL拉成低電平,確保停止信號是我們軟件操作控制的前提下;再將SDA拉成低電平;接著將SCL設置成高電平,這時形成了控制SCL為高電平的必要條件;等待一段時間后再將SDA設置成高電平,這樣就達到了IIC停止信號的控制。
2.2 觸摸按鍵板控制設計
觸摸按鍵是對Touch Key MCU的控制。從工作經驗來看,下位機Touch Key的MCU通常會告知上位機Scaler對應被執行的地址位數據信息,并且將其對應到相應的觸摸按鍵,這樣Scaler則直接去執行它讀取到的地址位數據而做出相應的按鍵動作控制。如果我們用這種一般的方式思考則會出現后續不可估量的隱藏問題,當電路受到干擾時,Touch Key 的MCU很有可能對數據識別出現錯誤。由于二進制數據可能會從“0”變成“1”,也可能從“1”變成“0”,因此當我們無法確保硬件線路絕對可靠的情況下,還是需要從軟件上對其進行盡可能多的嚴格控制設計。
對Key的定義,我們會以十六進制的數據進行定義,如下為該設計方案Key數據對應值的數據結構定義:
#define TPREG_POWER 0x10 //電源按鍵值定義。
#define TPREG_MENU_EXIT 0x04 //菜單和退出按鍵值定義。
#define TPREG_PLUS 0x01 //按鍵“+”值定義。
#define TPREG_MINUS 0x02 //按鍵“-”值定義。
#define TPREG_RESET 0x80 //重置按鍵值定義。
#define TPREG_SELECT 0x08 //選中按鍵值定義。
#define TPREG_UP 0x40 //向上按鍵值定義。
#define TPREG_DOWN 0x20 //向下按鍵值定義。
Touch Key軟件控制的流程圖如圖3所示。軟體主流程中會先對相關IC初始化,再對Touch Key MCU確認是否準備好或當前數據狀態是否正常,如果有異常,Scaler會要求Touch Key MCU執行Reset,接著再對Touch Key MCU發送相關讀寫控制命令。讀取指令是0x01,寫指令是0x00。在讀取數據過程中,需要先向下位機MCU確認其寄存器地址位置,并查找到對應的存放頁面,這些前提條件設置好后,我們就可以開始對下位機MCU進行數據命令的讀寫了。
2.3 TOUCH Key偵測
Touch Key偵測一般都會在運行OSD菜單中進行,由于每個按鍵的執行結果都會對應到菜單的顯示。原本對Touch Key的設計方法,基本上都是依靠軟體主流程的時間作為延長時間,并且是單次向Touch Key Register讀取數據,然后Scaler再去執行相關數據的動作。但問題很可能會出現從寄存器讀到的數據是被干擾到的數據的情況,也就是很有可能是錯誤的數據。該設計的提出就是需要確保這樣讀取到的數據是準確的,對每個Touch Key寄存器讀取一次是不足的,因此需要做多次循環讀取確認。根據系統的穩定性,該設計設置讀取數據次數為3次,在3次讀取數據都相同的情況下才判定有對應按鍵被觸發。這里需要說明一點,原來機械按鍵都會做De-bounce設計來防止抖動問題,基本上大家已經都知道了,但是觸摸按鍵往往不需要De-bounce。實際經驗和實驗結果表明觸摸按鍵也有必要做De-bounce設計。
在Touch Key偵測過程中,我們是使用中斷計數方式進行設計控制的,這樣能確保數據及時快速地處理,不容易出現卡頓情況。
3 人機交互顯示
當我們設計好按鍵后,就可以將編譯好的軟件燒錄到樣機顯示器上進行實際人機交互操作實驗。我們編譯出2套修改前后的軟體,分別燒錄到同一受干擾的顯示器中。在對沒有添加觸摸按鍵De-bounce流程的軟體進行測試時,可以發現樣機的觸摸按鍵自動被觸發,從而自動彈出菜單的問題。而在相同條件下,對有添加觸摸按鍵De-bounce程序流程的軟件進行測試,則不會發生被自動觸發菜單的問題,而且觸摸按鍵的流暢度體驗效果并不會被影響。
4 結語
該文提出的通過多次循環偵測觸摸按鍵的方法來增強按鍵抗干擾的能力,適用于相關觸摸按鍵的產品中。由于是用軟體方式實現的抗干擾觸摸按鍵,它經濟實用,不增加硬件成本,值得推廣使用。
參考文獻
[1]周志永,胡建人.低成本電容式觸摸按鍵設計[J].機電工程, 2011,28(3):365-368.
[2]凌六一,伍龍.基于軟件模擬的51單片機IIC總線的實現[J].電子技術,2004,31(5):13-16.
[3]洪勝和,林志賢,郭太良.基于OSD交互的液晶顯示器光學測試系統設計[J].電視技術,2017,41(4-5):268-273.
[4]劉穎.人機交互界面的可用性評估及方法[J].人類工效學,2002,8(2):35-38.