電容觸摸傳感的理論框架
簡單解碼:按鍵是否被按下
本文引用地址:http://m.butianyuan.cn/article/96947.htm為了確定按鍵是否被按下,需要先確定滑動平均值。確定平均值之后,根據(jù)測量值相對于平均值的偏差可以指示按鍵是否被按下。對于我們的系統(tǒng),讀數(shù)下降表示按鍵按下。因?yàn)樯婕暗揭恍┉h(huán)境效應(yīng)和其他因素(例如噪聲),所以必須設(shè)置一定的容限。但是,該系統(tǒng)未提供遲滯值,若讀數(shù)在均值與判決門限值之差附近上下變化,就會出現(xiàn)系統(tǒng)在判定按下與未按下之間來回振蕩這一糟糕的情形。為了避免這一點(diǎn),需要包含遲滯值:
if (reading < average – trip) {
Buttons.SENSOR0 = PRESSED;
} else if (reading > average – trip + hyst) {
Buttons.SENSOR0 = UNPRESSED;
}
以上代碼在按鈕釋放中增添了遲滯值,使按鈕不會產(chǎn)生振動。這也為電容開關(guān)構(gòu)造了最低程度的消抖功能。機(jī)械按鈕會在0-VDD之間來回抖動。電容按鈕不會產(chǎn)生該問題;但是,通過增添遲滯值,按鈕按下的操作與原來無異,只是加強(qiáng)了對按鈕釋放的判斷。這可以產(chǎn)生最低程度的消抖效果,因?yàn)閱未伟聪氯匀豢梢杂|發(fā)按鍵。要進(jìn)一步增強(qiáng)消抖,可以要求連續(xù)幾次的傳感器讀數(shù)均有效,才表示按鈕確實(shí)按下,然后向應(yīng)用程序指示按鈕被按下。這樣可以防止虛假的低讀數(shù)影響系統(tǒng)。
復(fù)雜解碼方案
上面用于確定按鈕是否被按下的解碼方案是相當(dāng)簡單的。
對于百分比按下檢測,將繼續(xù)使用前面討論的求均值方案。但是,讀數(shù)變量將變換為如下形式:
unsigned long percent;
percent = average – (reading*16);
if (percent < 0) {
percent = 0; // 忽略電容上升
} else {
percent = percent * 1000; // 乘以1000
percent = percent / average; // 結(jié)果使用100.0%的形式
}
結(jié)果變量percent包含0~1000的值,更具體地說,值的范圍約為0~200(代表20.0%)。結(jié)果值保持單個小數(shù)位,因?yàn)楦嘈?shù)位并不會提高精度。
更換先前的“if”語句,產(chǎn)生類似于以下語句的“if”語句:
#define PCT_ON 50 // >5.0%,打開
#define PCT_OFF 30 // <3.0%,關(guān)閉
if (reading < PCT_ON) {
Buttons.SENSOR0 = PRESSED;
} else if (reading > PCT_OFF) {
Buttons.SENSOR0 = UNPRESSED;
}
下一個復(fù)雜解碼方案稱為“多鍵表決”。如前面所討論,傳感器不僅會與手指和周圍的地產(chǎn)生耦合,而且會相互耦合。因此,觸摸一個傳感器會影響另一個傳感器,但影響程度通常會低于其他意外激勵。如果即使影響程度較低,影響仍足以觸發(fā)按下狀態(tài),會發(fā)生什么情況?
評論