1、電容觸摸簡介
ME32F030系列芯片的電容觸摸功能,可以對多達22管腳的電容進行測量,利用一個RC震蕩電路頻率的改變來檢測手指觸摸引起的電容C的變化,從而實現(xiàn)電容觸摸按鍵。其中的RC在芯片內(nèi)部有4擋可以通過軟件選擇,從而實現(xiàn)從350K/600K/1.4M/3.6M的一個基本頻率。在ME32F030封裝下面,RC也可以使用外部電阻,用戶可以任意調(diào)節(jié)基本頻率。其基本原理如下圖:
圖1基本原理圖
?支持多達22電容觸摸按鍵
?可配置RC振蕩計數(shù)頻率和單位時間,最大限度去適應(yīng)不同的應(yīng)用要求。
?硬件自動掃描,節(jié)省CPU資源。
觸摸按鍵相關(guān)管腳的映射關(guān)系如下表:
圖2管腳映射
2、應(yīng)用設(shè)計方式
在簡介中介紹到觸摸電容是通過測量RC振蕩器頻率變化,才而判斷是否手指觸摸到按鍵。針對不同的應(yīng)用環(huán)境,為提高系統(tǒng)抗干擾能力,增強檢測靈敏度,觸摸按鍵模塊提供多種方法:
1.利用內(nèi)部電阻改變基本頻率
觸摸按鍵模塊通過4種電阻組合,從而產(chǎn)生4種不同頻率去滿足大多數(shù)應(yīng)用需求。用戶可以選擇最適合應(yīng)用的一個頻率,通過這個選擇,用戶可以只通過軟件就解決像EMI,靈敏度之類的問題。
2.使用外部電阻改變模塊基本頻率
在一些特殊情況下,內(nèi)部電阻產(chǎn)生的頻率不足以滿足應(yīng)用要求,ME32F030R8T6還提供了另一個選擇外部電阻來產(chǎn)生用戶自己的一個頻率。當(dāng)外部電阻被采用時,TOUCH_OUT和TOUCH_IN必須被設(shè)定并連接到電阻的兩端。該頻率可以使用下列公式來估算:
fOSC=1/(1.386×R×CSENSOR)
3.配置頻率計數(shù)周期時間
采用較長的周期計數(shù)時間,用戶可以得到相對準(zhǔn)確的觸摸檢測。但是這也會減慢應(yīng)用對手指按鍵的反應(yīng)。選擇一個適當(dāng)?shù)臋z測時間,是取得一個好的用戶觸摸體驗的關(guān)鍵。
舉例:在大多數(shù)情況下,300ms的按鍵反應(yīng)時間還算是一個不錯的用戶體驗。如應(yīng)用采用4個觸摸按鍵,那么最長的頻率計數(shù)周期時間可以是300ms/4=85ms。按外設(shè)時鐘PCLK等于20MHz計算,寄存器SENSTM值應(yīng)配置20000*85=1700000。
4.使用門限寄存器判斷觸摸狀態(tài)
在一些無干擾,并且觸摸按鍵電容一致性好的應(yīng)用中,用戶可以使用門限寄存器去設(shè)置手指觸摸的界限,這樣可最大限度降低CPU時間和簡化應(yīng)用程序。
3、觸摸應(yīng)用函數(shù)
在簡化觸摸硬件開發(fā)的基礎(chǔ)上,ME32F030也提供了庫函數(shù)來降低軟件開發(fā)門檻,在Lib/common/Drives/source中提供了touch.c和touchme.c兩個庫函數(shù)C文件。
我們先做一個應(yīng)用例程,然后我們順著標(biāo)準(zhǔn)例程的應(yīng)用步驟,對庫函數(shù)的使用做解釋說明。歷程的源代碼如下。
externtouchitouch;//觸摸信息結(jié)構(gòu)體itouch
intmain(void)
{
uint16_tupdatefreq=0xfff;
PA_12_INIT(PA_12_TOUCH5);//PA12引腳復(fù)用為TOUCH5引腳
itouch_init(TOUCH5);//初始化TOUCH5引腳
GPIO_ConfigPinsAsOutput(PB,IO_PIN9);//PB9設(shè)置為輸出方向
GPIO_SetPin(PB,IO_PIN9);////PB9設(shè)置為輸出高電平
while(1)
{
if(!updatefreq)//減計數(shù)至0后,更新觸摸電容基準(zhǔn)
{
updatefreq=0xfff;//計數(shù)重置
itouch_update();//更新觸摸電容基準(zhǔn)
}
//檢查是否有觸摸按鍵按下
if(itouch.status)
updatefreq=0xfff;//計數(shù)重置
else
updatefreq--;//計數(shù)自減
//判斷觸摸按鍵發(fā)生的引腳
if(itouch.status&TOUCH5)
GPIO_ResetPin(PB,IO_PIN9);//燈亮
else
GPIO_SetPin(PB,IO_PIN9);//燈滅
}
}
首先我們說下touch結(jié)構(gòu)體,它定義在touchme.h頭文件中,它包含了所有的觸摸
信息和參數(shù),后面的庫函數(shù)基本都有用到它,而開發(fā)者直接使用這個結(jié)構(gòu)體就可以了。(筆者對這個結(jié)構(gòu)體參數(shù)的詳細配置也不是很掌握,如果有感興趣的開發(fā)者,還是建議向原廠的技術(shù)人員做詳細的了解)。
①、PA_12_INIT(PA_12_TOUCH5);使用前先將IO口復(fù)用為TOUCH功能。
②、itouch_init(TOUCH5);調(diào)用touchme.c中的庫函數(shù)來初始化TOUCH功能,這個庫函數(shù)只用我們把需要使能的觸摸引腳,作為參數(shù)傳遞給函數(shù)即可。庫函數(shù)來幫我們做詳細的初始化工作。
③、While(1)循環(huán)中做了一個倒計時,當(dāng)計時自減為0時,調(diào)用touchme.c文件中的庫函數(shù)itouch_update()來更新觸摸電容基準(zhǔn)。
④、當(dāng)有觸摸按鍵按下時在touchme.c中有voidTOUCH_IRQHandler(void)中斷服務(wù)程序,它來進行硬件中斷實時監(jiān)測觸摸狀態(tài),當(dāng)檢測到有觸摸按鍵按下后,會將狀態(tài)變量itouch.status相對應(yīng)的位置1。
⑤、有硬件中斷的實時監(jiān)測,這就簡化了主函數(shù)while(1)內(nèi)的函數(shù)流程,我們只需要進行if(itouch.status&TOUCH5)來判斷下對應(yīng)按鍵是否按下,根據(jù)狀態(tài)來執(zhí)行相應(yīng)的操作即可,這里是通過按鍵點亮小燈來做示范。
從上面流程可以看出,我們接觸最多的還是touchme.c文件中的函數(shù),它來幫助參數(shù)配置和模式的初始化流程。而真正進行底層寄存器操作的還是touch.c文件中的函數(shù)。開發(fā)者可以通過仿真來更加實際的了解詳細的底層操作。
4、下載驗證
程序編譯無誤后,便可以下載仿真測試。程序下載完成后,點擊全速運行即可。在這里為了方便演示,所以還是采用直觀的點燈方式。(有興趣的開發(fā)者,可以做個按鍵觸摸門鈴之類的小應(yīng)用。)
當(dāng)我們沒有去觸摸按鍵的時候,開發(fā)板上的小燈會處于熄滅狀態(tài),如圖所示:
圖3按鍵未觸摸狀態(tài)
接下來觸摸下開發(fā)板左上角的觸摸板,會觀察到LED點亮,松手后又繼續(xù)熄滅。
圖4按鍵觸摸狀態(tài)
責(zé)任編輯人:CC
-
電容觸摸
+關(guān)注
關(guān)注
0文章
70瀏覽量
16458 -
應(yīng)用設(shè)計
+關(guān)注
關(guān)注
0文章
10瀏覽量
8473
發(fā)布評論請先 登錄
相關(guān)推薦
評論