電容觸摸傳感的理論框架
簡(jiǎn)單解碼:按鍵是否被按下
本文引用地址:http://dyxdggzs.com/article/96947.htm為了確定按鍵是否被按下,需要先確定滑動(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ā)生什么情況?
評論