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