電容觸摸傳 ... 電容觸摸傳感的理論框架 " />
考慮到美觀(guān)、整潔和成本效益等方面的因素,在包括消費類(lèi)電子產(chǎn)品、家用電器等在內的許多電子產(chǎn)品中,觸摸傳感應用正變得越來(lái)越流行。本文將討論與電容觸摸傳感">電容觸摸傳感工作相關(guān)的基本概念,以及如何簡(jiǎn)便地實(shí)現電容觸摸傳感">電容觸摸傳感功能。 電容的相關(guān)物理性質(zhì) 為了更好地理解在電容觸摸傳感">電容觸摸傳感應用的硬件、布線(xiàn)和軟件開(kāi)發(fā)中需要采取哪些措施,了解它內在的物理性質(zhì)非常重要?刂扑氖莾蓚(gè)基本公式和一個(gè)常識。第一個(gè)公式(見(jiàn)公式1)用于求電容值,它說(shuō)明如何根據極板模型使用面積、距離和材料屬性來(lái)定義電容。第二個(gè)公式(見(jiàn)公式2)說(shuō)明電容電壓與電流的關(guān)系,并引入RC電路的充電速率(等于時(shí)間常數τ)。第三個(gè)公式(見(jiàn)公式3)說(shuō)明并聯(lián)電容的總電容值等于兩者相加。 公式1是雙極板電容的模型。它適用于觸摸傳感應用,因為在將手指靠近傳感器極板時(shí),手指的作用也類(lèi)似于一個(gè)極板。傳感器具有一定的標稱(chēng)電容C1(由于走線(xiàn)、附近的地線(xiàn)等原因而產(chǎn)生)。將手指靠近時(shí),距離“d”下降,而和A上升,并引入了并聯(lián)的附加電容“C2”。所產(chǎn)生的效果就是傳感器線(xiàn)路上的電容上升,上升值等于附加電容C2。然后,軟件必須通過(guò)硬件(向單片機中輸入傳感器讀數)來(lái)檢測電容變化。硬件將利用公式2(充電時(shí)間公式)的某種形式向單片機傳達傳感器讀數。 傳感器設計 傳感器設計通常很簡(jiǎn)單。設計布線(xiàn)時(shí),需要注意容性耦合效應及其關(guān)聯(lián)的物理性質(zhì)。焊盤(pán)的面積及覆蓋在其上方的材料的厚度是最關(guān)鍵的因素。對于小鍵盤(pán)類(lèi)型的應用,傳感器的大小應當至少為將手指按平時(shí),指尖面積的大小。根據公式1中的面積“A”,傳感器較大時(shí),其傳感能力通常也較好。此外,人們并不一定能夠恰當地控制手指的放置位置(從而控制產(chǎn)生的電容),而不同的兩個(gè)人也不會(huì )具有完全相同的電容。所以,傳感器的容限必須盡可能很大,可以處理遇到的各種觸摸情況,同時(shí)準確地報告按下?tīng)顟B(tài)。 有些時(shí)候,指尖大小的傳感器并不總是最佳的。作為一條準則,傳感器焊盤(pán)上方的材料越厚,焊盤(pán)就必須越大,才能檢測到是否有手指按下。這是因為根據公式1,當傳感器焊盤(pán)上方的材料厚度增加時(shí),距離“d”就會(huì )增大,從而手指的電容就會(huì )下降。對于需要非常精確的傳感器控制的應用(例如,傳感器很小),如果材料覆蓋層很厚,則最終會(huì )限制傳感器檢查按下?tīng)顟B(tài)的能力。因此,如果傳感器非常小,覆蓋層必須盡可能薄。此外,如果非常小的傳感器相互緊鄰,還會(huì )產(chǎn)生容性耦合,在傳感器之間布置接地電路可以減少這種耦合效應。此外,還可以使用一些軟件技巧來(lái)辨別相互耦合程度很高的傳感器。 用于捕捉傳感器數據并將其轉換為數值(讀數)的硬件可采用許多方式開(kāi)發(fā)。在電容觸摸傳感">電容觸摸傳感設計中,用硬件區分不同單片機供應商針對此應用推出的產(chǎn)品。根據公式2,可以測量和電流與電壓關(guān)系有關(guān)的3個(gè)基本量: 1. 充電至固定電壓需要的時(shí)間變化量(Δt,固定V); 2. 固定充電時(shí)間內的電壓變化量(ΔV,固定t); 3. 固定時(shí)間周期中的頻率變化量(Δf,固定T) 。 頻率測量方案基于充電速率公式(重復許多次),但它對應于較長(cháng)的周期T,而不是單個(gè)充電周期t。所以,充電至固定電壓需要的時(shí)間變化量(Δt,固定V)和固定充電時(shí)間內的電壓變化量(ΔV,固定t),定義了檢測電容變化的基本方法。根據需要,可以基于這些基本方法來(lái)構造新的測量方案。 對于測量充電至固定電壓需要的時(shí)間變化量這種方法,手指產(chǎn)生的附加電容會(huì )增加充電時(shí)間(C上升),所以時(shí)間讀數會(huì )相應地上升。對于測量固定充電時(shí)間內的電平變化量這種方法,附加電容會(huì )降低相同時(shí)間量?jì)人苓_到的電壓,所以電壓讀數會(huì )下降。最后,對于測量固定時(shí)間周期中的頻率這種方法,頻率會(huì )隨振蕩器RC常數的上升而下降。因此,頻率讀數會(huì )下降。 本文以頻率測量方案為例進(jìn)行說(shuō)明,但每個(gè)系統都會(huì )應用后處理方案。使用一種方案時(shí),電容讀數可能會(huì )上升,而使用另一種方案時(shí),電容讀數可能會(huì )下降,但這可以在軟件中調整。選擇了硬件方案之后,讀數將根據請求輸入單片機,或按照軟件配置指定的其他時(shí)間間隔輸入單片機。 單片機軟件與后處理 單片機中的軟件負責處理電容觸摸傳感">電容觸摸傳感應用中的許多工作,前提是硬件和傳感器均正常工作。傳感器和整個(gè)系統的質(zhì)量越好,軟件的實(shí)現就越簡(jiǎn)單。開(kāi)發(fā)軟件之前,需要記住每個(gè)傳感器都具有一定的固有寄生電容:Cp(或公式3中的C1)。因此,每個(gè)傳感器都可以檢測到某個(gè)標稱(chēng)值。通過(guò)觀(guān)察傳感器的輸出,可以直觀(guān)方便地確定它,但必須先在軟件中設定該標稱(chēng)值,然后才能以此為基準計算相對于它的偏差。實(shí)現它的最好方式是創(chuàng )建一個(gè)滑動(dòng)平均值——即,16 點(diǎn)平均值。通過(guò)存儲先前16個(gè)值來(lái)計算平均值的效率很低,所以改為使用一種看起來(lái)較復雜,但計算較簡(jiǎn)單、可節省存儲空間的求均值方法。 與具有極強計算能力的較大的計算機處理器相比,單片機通常在這方面受到限制。與實(shí)際執行除法相比,使用移位、加法和減法可以降低性能損失。此外,這個(gè)求均值程序并不僅限用于電容觸摸傳感">電容觸摸傳感——它對于8位單片機的很多應用都非常有用。 確定了平均值后,接下來(lái)必須構造傳感器掃描循環(huán),目的是監視相對于平均值的偏差。從一個(gè)簡(jiǎn)單循環(huán)開(kāi)始,如圖1流程圖所示。掃描循環(huán)使用中斷來(lái)驅動(dòng),并使用兩個(gè)定時(shí)器和頻率偏移檢測方法。Timer0決定固定的時(shí)間周期T,在該時(shí)間周期內,將測量進(jìn)入Timer1捕捉模塊的正邊沿數量,然后它產(chǎn)生一個(gè)頻率測量值。正邊沿數量越多,說(shuō)明頻率越高。準備好獲取測量值時(shí),Timer0發(fā)生溢出以觸發(fā)中斷,而Timer1會(huì )測量正邊沿數量。流程圖的“捕捉讀數”框顯示了何時(shí)獲取讀數。 下一步是確定按鈕是否被按下。如果按鈕未被按下,則繼續對傳感器讀數求均值。如果按鈕被按下,則不對傳感器讀數求均值,也就是說(shuō)它將繼續一直跟蹤讀數(通常這不是所期望的)。然后,通過(guò)在C代碼中使用位標志或通過(guò)其他方式,向應用程序代碼指示按鈕已被按下。不要在中斷服務(wù)程序(ISR)中調用需要大量進(jìn)一步計算的程序——較好的做法是設置一個(gè)標志,讓主循環(huán)進(jìn)行響應。 此時(shí),如果只有單個(gè)按鍵,則按照基本方法的描述,通過(guò)將定時(shí)器清零或將電容對地放電來(lái)重新開(kāi)始測量過(guò)程。如果存在多個(gè)按鍵,則按順序掃描每個(gè)按鍵。按照圖1中的流程圖,基本的系統可以定期掃描按鍵。 尚待討論的是如何確定按鍵是否被按下。最需要考慮和注意的是圖1中的“按鍵是否被按下?”判斷塊的細節。這將在下一步討論。 為了確定按鍵是否被按下,需要先確定滑動(dòng)平均值。確定平均值之后,根據測量值相對于平均值的偏差可以指示按鍵是否被按下。對于我們的系統,讀數下降表示按鍵按下。因為涉及到一些環(huán)境效應和其他因素(例如噪聲),所以必須設置一定的容限。但是,該系統未提供遲滯值,若讀數在均值與判決門(mén)限值之差附近上下變化,就會(huì )出現系統在判定按下與未按下之間來(lái)回振蕩這一糟糕的情形。為了避免這一點(diǎn),需要包含遲滯值: if (reading < average – trip) { Buttons.SENSOR0 = PRESSED; } else if (reading > average – trip + hyst) { Buttons.SENSOR0 = UNPRESSED; } 以上代碼在按鈕釋放中增添了遲滯值,使按鈕不會(huì )產(chǎn)生振動(dòng)。這也為電容開(kāi)關(guān)構造了最低程度的消抖功能。機械按鈕會(huì )在0-VDD之間來(lái)回抖動(dòng)。電容按鈕不會(huì )產(chǎn)生該問(wèn)題;但是,通過(guò)增添遲滯值,按鈕按下的操作與原來(lái)無(wú)異,只是加強了對按鈕釋放的判斷。這可以產(chǎn)生最低程度的消抖效果,因為單次按下仍然可以觸發(fā)按鍵。要進(jìn)一步增強消抖,可以要求連續幾次的傳感器讀數均有效,才表示按鈕確實(shí)按下,然后向應用程序指示按鈕被按下。這樣可以防止虛假的低讀數影響系統。 復雜解碼方案 上面用于確定按鈕是否被按下的解碼方案是相當簡(jiǎn)單的。 對于百分比按下檢測,將繼續使用前面討論的求均值方案。但是,讀數變量將變換為如下形式: unsigned long percent; percent = average – (reading*16); if (percent < 0) { percent = 0; // 忽略電容上升 } else { percent = percent * 1000; // 乘以1000 percent = percent / average; // 結果使用100.0%的形式 } 結果變量percent包含0~1000的值,更具體地說(shuō),值的范圍約為0~200(代表20.0%)。結果值保持單個(gè)小數位,因為更多小數位并不會(huì )提高精度。 更換先前的“if”語(yǔ)句,產(chǎn)生類(lèi)似于以下語(yǔ)句的“if”語(yǔ)句: #define PCT_ON 50 // >5.0%,打開(kāi) #define PCT_OFF 30 // <3.0%,關(guān)閉 if (reading < PCT_ON) { Buttons.SENSOR0 = PRESSED; } else if (reading > PCT_OFF) { Buttons.SENSOR0 = UNPRESSED; } 下一個(gè)復雜解碼方案稱(chēng)為“多鍵表決”。如前面所討論,傳感器不僅會(huì )與手指和周?chē)牡禺a(chǎn)生耦合,而且會(huì )相互耦合。因此,觸摸一個(gè)傳感器會(huì )影響另一個(gè)傳感器,但影響程度通常會(huì )低于其他意外激勵。如果即使影響程度較低,影響仍足以觸發(fā)按下?tīng)顟B(tài),會(huì )發(fā)生什么情況? 開(kāi)發(fā)多鍵表決系統可以幫助解決該問(wèn)題,以及與小鍵盤(pán)污染關(guān)聯(lián)的其他問(wèn)題。多鍵表決系統會(huì )選擇按下后受影響最大的按鍵,代價(jià)是多次按下動(dòng)作只能產(chǎn)生單個(gè)按鍵響應。例如,如果觸摸會(huì )影響兩個(gè)按鍵,但手指按下的按鍵受到的影響最大,該算法將選擇受影響最大的按鍵。 該算法必須獲取來(lái)自所有可用傳感器的數據。舉例來(lái)說(shuō),假定使用了4個(gè)傳感器。算法還是使用百分比按下檢測方法,因為每個(gè)傳感器的讀數可能會(huì )稍有不同,采用相對與原始值的偏差可以起到一些幫助。系統必須掃描全部4個(gè)傳感器,并在掃描之后執行以下步驟: 1. 首先,掃描所有傳感器; 2. 在每次掃描期間,記錄每個(gè)傳感器的受影響百分比; 3. 根據受影響程度進(jìn)行排序; 4. 基于步驟3,對索引進(jìn)行排序; 5. 位于數組單元0的傳感器的受影響程度最高; 6. 確定是否大于最小門(mén)限值; 7. 指示按下/未按下。 代碼示例1(略) 最后一個(gè)復雜解碼方案也是百分比方案。百分比計算會(huì )占用8位單片機上可用存儲器總空間中大量的程序和RAM存儲空間,占用。在可能的情況下,最好降低這種存儲器消耗。如果使用較大的數值,并可以承受一定的分辨率損失,則可以使用一種較簡(jiǎn)單的百分比方法。 通過(guò)使用更多的移位來(lái)代替除法(類(lèi)似于求均值方案),可以用如下方式確定平均值的百分比門(mén)限值: threshold = average >> 3; // 傳感器 // 門(mén)限值現在為1/8,即12.5% if (reading < average – threshold) {...} 以下列出了一些有用的百分比。 threshold = reading >> 1; // 1/2 = 0.500 threshold = reading >> 2; // 1/4 = 0.250 threshold = reading >> 3; // 1/8 = 0.125 threshold = reading >> 4; // 1/16 = 0.063 threshold = reading >> 5; // 1/32 = 0.031 threshold = reading >> 6; // 1/64 = 0.016 threshold = reading >> 7; // 1/128 = 0.008 對于進(jìn)行移位的每個(gè)位,門(mén)限值會(huì )損失一定的舍入分辨率。但是,使用較大的16位數值時(shí),對于1/16的百分比(即6.25%),損失4個(gè)最低位是可以接受的,F在,對于簡(jiǎn)單百分比計算,可以省去前面使用的unsigned long percent變量,以及執行除法所需的額外計算量。這是另一種并不僅限用于電容觸摸傳感">電容觸摸傳感的技術(shù),但它對于觸摸傳感的實(shí)現非常有用。 結論 有許多方法可以實(shí)現電容觸摸系統,市場(chǎng)上針對此應用推出的各種嵌入式產(chǎn)品充分證明了這一點(diǎn)。關(guān)于這些解決方案有趣的一點(diǎn)是它們基于相同的物理原理,具有共同的基礎。其中一些解決方案采用了不同的布線(xiàn)方式(將地與傳感器組合);許多解決方案涉及到使用專(zhuān)有的材料。但是,電容觸摸傳感">電容觸摸傳感背后的概念是相當簡(jiǎn)單的——關(guān)鍵在于在實(shí)現設計時(shí)需要理解應用背后隱含的物理原理;谶@種理解,結合對于所用硬件和軟件方案的良好理解,就可以簡(jiǎn)便地實(shí)現電容觸摸傳感">電容觸摸傳感系統。 |