stm32 電容觸控按鍵

2021-10-08 07:08:18 字數 2114 閱讀 6151

電容觸控按鍵原理:使用的是檢測電容充放電時間的方法來判斷是否有觸控,圖中 r 是外接的電容充電電阻,cs 是沒有觸控按下時 tpad 與 pcb 之間的雜散電容。而 cx 則是有手指按下的時候,手指與 tpad 之間形成的電容。

圖中的開關是電容放電開關(由實際使用時,由 stm32f4 的io 代替)

#include

"tpad.h"

#include

"stm32f4xx.h"

#include

"delay.h"

#define tpad_arr_max_val 0xffffffff

//最大的arr值(tim2是32位定時器)

//定時器2通道1輸入捕獲

//arr為自動重裝載值,psc為預分頻數

void

tim2_ch1_cap_init

(u8 psc)

vu16 tpad_default_val=0;

//空載的時候(沒有手按下),計數器需要的時間

//獲得空載的時候觸控按鍵的取值,即無觸控時的取值

//psc:分頻係數,越小,靈敏度越高.

//返回值:0,初始化成功;1,初始化失敗

u8 tpad_init

(u8 psc)

for(i=

0;i<

9;i++

)//對捕獲到的10個值進行排序}}

temp=0;

for(i=

2;i<

8;i++

)temp+

=buf[i]

;//取中間的8個資料進行平均

tpad_default_val=temp/6;

printf

("tpad_default_val:%d\r\n"

,tpad_default_val);if

(tpad_default_val>tpad_arr_max_val/2)

return1;

//初始化遇到超過tpad_arr_max_val/2的數值,不正常!

return0;

}//復位一次

//釋放電容電量,並清除定時器的計數值,一般作為第一步

//等待捕獲

void

tpad_reset

(void

)//得到定時器捕獲值

//如果超時,則直接返回定時器的計數值.

//返回值:捕獲值/計數值(超時的情況下返回)

u16 tpad_get_val

(void);

return

tim_getcapture1

(tim2);}

//讀取n次,取最大值

//n:連續獲取的次數

//返回值:n次讀數裡面讀到的最大讀數值

u16 tpad_get_maxval

(u8 n)

;return res;

}//掃瞄觸控按鍵

//mode:0,不支援連續觸發(按下一次必須鬆開才能按下一次);1,支援連續觸發(可以一直按下)

//返回值:0,沒有按下;1,有按下;

#define tpad_gate_val 100

//觸控的門限值(乙個大概值),也就是必須大於tpad_default_val+tpad_gate_val,才認為是有效觸控.

u8 tpad_scan

(u8 mode)

rval=

tpad_get_maxval

(sample);if

(rval>

(tpad_default_val+tpad_gate_val)

&&rval<(10

*tpad_default_val)

)//大於tpad_default_val+tpad_gate_val,且小於10倍tpad_default_val,則有效

//printf("r:%d\r\n",rval);

keyen=3;

//至少要再過3次之後才能按鍵有效 }if

(keyen)keyen--

;return res;

}

STM32 十九 電容按鍵檢測

如上圖為乙個電容按鍵結構圖,由絕緣材料 金屬感應片以及fr 4板材構成,金屬感應片和接地的金屬片形成乙個等效電容cx,當手指觸控時金屬感應片和手指會形成乙個cs等效電容。工作原理 在電路板未上電時,可以認為電容cx是沒有電荷的,在上電時,在電阻作用下,電容cx就會有乙個充電過程,直到電容充滿,即vc...

電容觸控按鍵實驗(STM32F407)

觸控電容按鍵 tpad 控制led的亮滅。使用的是檢測電容充放電時間的方法來判斷是否有觸控。r 是外接的電容充電電阻 上拉電阻,給電容充電 無觸控時,cs是tpad 與 pcb 之間的雜散電容。當有觸控時,cx 則是手指與 tpad 之間形成的電容,總的電容就為cs cx。圖中的開關是電容放電開關。...

STM32F103ZET6 電容觸控按鍵

開關閉合,電容充電,直至電容兩端電壓 v1 rc電路充放電公式 vt v0 v1 v0 1 exp t rc v0 為電容上的初始電壓值 v1 為電容最終可充到或放到的電壓值 vt 為t時刻電容上的電壓值。如果v0為0,也就是從0v開始充電。那麼公式簡化 vt v1 1 exp t rc 結論 同樣...