
如上圖為一個電容按鍵結構圖,由絕緣材料、金屬感應片以及FR-4板材構成,金屬感應片和接地的金屬片形成一個等效電容Cx,當手指觸摸時金屬感應片和手指會形成一個Cs等效電容。
工作原理:
在電路板未上電時,可以認為電容Cx是沒有電荷的,在上電時,在電阻作用下,電容Cx就會有一個充電過程,直到電容充滿, 即Vc電壓值為3.3V,這個充電過程的時間長短受到電阻R阻值和電容Cx容值的直接影響。但是在我們選擇合適電阻R並焊接固定到電路板上后,這個充電時間就基本.上不會變了,因為此時電阻R已經是固定的,電容Cx在無外界明顯干擾情況下基本上也是保持不變的。
當手指觸摸時,相同的電阻R情況下,電容容值=Cx+Cs,電容容值增大了,這就導致需要更長的充電時間,通過判斷充電時間就可以判斷電容按鍵是否被按下。
測量充電時間:
我們可以利用定時器輸入捕獲功能計算充電時間,即設置TIMx_CH為定時器輸入捕獲模式通道。這樣先測量得到無觸摸時的充電時間作為比較基准,然后再定時循環測量充電時間與無觸摸時的充電時間作比較,如果超過一定的閾值就認為是有手指觸摸。

圖33-4 為Vc跟隨時間變化情況,可以看出在無觸摸情況下,電壓變化較快;而在有觸摸時,總的電容量增大了,電壓變化緩慢一些。
為測量充電時間,我們需要設置定時器輸入捕獲功能為上升沿觸發,圖33-4中Vq就是被觸發_上升沿的電壓值,也是STM32認為是高電平的最低電壓值,大約為1.8V。 tl和t2可以通過定時器捕獲/比較寄存器獲取得到。
不過,在測量充電時間之前,我們必須想辦法制作這個充電過程。之前的分析是在電路板上電時會有充電過程,現在我們要求在程序運行中循環檢測按鍵,所以必須可以控制充電過程的生成。我們可以控制TIMx_ CH引腳作為普通的GPIO使用,使其輸出一小段時間的低電平,為電容Cx放電,即Vc為0V。當我們重新配置TIMx_ _CH 為輸入捕獲時電容Cx在電阻R的作用下就可以產生充電過程。
