關(guān)鍵詞: CYPRESS , 賽普拉斯 , 電容式觸摸感應(yīng) , CY8C21x34 , PSoC
觸摸傳感器被廣泛使用已經(jīng)有很多年了,不過(guò),混合信號(hào)可編程器件的近期發(fā)展使得電容式觸摸傳感器在眾多消費(fèi)類(lèi)產(chǎn)品中都成為了機(jī)械式開(kāi)關(guān)的一種實(shí)用、增值型替代方案。本文將粗略地介紹一種可透過(guò)一層厚玻璃覆蓋物來(lái)激活的觸摸感應(yīng)式按鈕的設(shè)計(jì)實(shí)例。典型的電容式傳感器設(shè)計(jì)所規(guī)定的覆蓋物厚度為3mm 或更薄。隨著覆蓋物厚度的增加,透過(guò)一層覆蓋物來(lái)檢測(cè)手指的觸摸將變得越來(lái)越困難。換句話說(shuō),伴隨著覆蓋物厚度的增加,系統(tǒng)調(diào)整的過(guò)程將從“科學(xué)”走向“技巧”。為了說(shuō)明如何制作一個(gè)能夠提升當(dāng)今技術(shù)極限的電容式傳感器,在本文所述的實(shí)例中,玻璃覆蓋物的厚度被設(shè)定為10mm。玻璃易于使用,購(gòu)買(mǎi)方便,而且是透明的(因此您可以看到位于其下方的金屬感應(yīng)墊)。玻璃覆蓋物還被直接應(yīng)用于白色家電。
手指電容
所有電容式觸摸感應(yīng)系統(tǒng)的核心部分都是一組與電場(chǎng)相互作用的導(dǎo)體。人體組織中充滿了覆蓋著一層皮膚(這是一種有損電介質(zhì))的導(dǎo)電電極。正是手指的導(dǎo)電特性使得電容式觸摸感應(yīng)成為可能。
簡(jiǎn)單的平行片電容器具有兩個(gè)導(dǎo)體,其間隔著一層電介質(zhì)。該系統(tǒng)中的大部分能量直接聚集在電容器極板之間。少許能量會(huì)溢出至電容器極板以外的區(qū)域中,而與該效應(yīng)相關(guān)的電場(chǎng)線被稱為“邊緣場(chǎng)”。制作實(shí)用電容式傳感器的部分難題是:需要設(shè)計(jì)一組印刷電路走線,以便將邊緣場(chǎng)引導(dǎo)至一個(gè)用戶可以夠得到的有效感應(yīng)區(qū)域。對(duì)于這樣一種傳感器模式來(lái)說(shuō),平行片電容器并非上佳之選。
把手指放在邊緣電場(chǎng)的附近將增加電容式系統(tǒng)的導(dǎo)電表面積。由手指所產(chǎn)生的額外電荷積聚電容被稱為手指電容CF。在本文中,無(wú)手指觸摸時(shí)的傳感器電容用CP 來(lái)表示,它代表寄生電容。
關(guān)于電容式傳感器的一個(gè)常見(jiàn)的誤解是:為了使系統(tǒng)正常工作,手指必需接地。手指是可以檢測(cè)到的,因?yàn)樗鼤?huì)保存電荷(而在手指浮置或接地時(shí)都將產(chǎn)生這種現(xiàn)象)。
傳感器的 PCB布局
圖1 示出了一塊印刷電路板(PCB)的頂視圖,在本設(shè)計(jì)實(shí)例中,該P(yáng)CB 實(shí)現(xiàn)了其中的一個(gè)電容式傳感器按鈕。該按鈕的直徑為10mm,這是一個(gè)成人指尖的平均大小。為該演示電路而組裝的PCB 包含4 個(gè)按鈕,它們的中心相隔20mm。如圖所示,接地平面也位于頂層。金屬感應(yīng)墊和接地平面之間設(shè)置了一個(gè)均勻的隔離間隙。該間隙的尺寸是一個(gè)重要的設(shè)計(jì)參數(shù)。如果間隙設(shè)置得過(guò)小,則過(guò)多的電場(chǎng)能量將直接傳遞至地。而如果間隙設(shè)置得過(guò)大,則將無(wú)法控制能量穿越覆蓋物的方式。選擇0.5mm 的間隙尺寸可以很好地使邊緣場(chǎng)透過(guò)10mm 厚的玻璃覆蓋物。
圖2 示出了同一種傳感器模式的截面圖。如該圖所示,PCB 中的一條通路將金屬感應(yīng)墊與電路板底面上的走線相連。當(dāng)電場(chǎng)試圖找到最短的接地路徑時(shí),介電常數(shù)εr 將對(duì)材料中的電場(chǎng)能量充填密度產(chǎn)生影響。標(biāo)準(zhǔn)窗戶玻璃的εr 約為8,而采用FR4 材料制成的PCB 的εr 則在4 左右。白色家電中常用的Pyrex?(派萊克斯)玻璃具有數(shù)值大約為5 的εr。在本設(shè)計(jì)實(shí)例中,采用的是標(biāo)準(zhǔn)的窗戶玻璃。需要注意的是,玻璃片是采用3M公司的468-MP 絕緣膠膜安裝在PCB 上的。
CapSense 101
電容式觸摸感應(yīng)系統(tǒng)的基本元件是:一個(gè)可編程電流源、一個(gè)精密型模擬比較器和一根可通過(guò)一組電容式傳感器進(jìn)行排序的模擬多路復(fù)用器總線。在本文給出的系統(tǒng)中,一個(gè)弛張振蕩器起著電容傳感器的作用。該振蕩器的簡(jiǎn)化電路示意圖見(jiàn)圖3。
比較器的輸出被饋入一個(gè)PWM 的時(shí)鐘輸入,該P(yáng)WM 負(fù)責(zé)對(duì)一個(gè)時(shí)鐘頻率為24MHz 的16 位計(jì)數(shù)器進(jìn)行選通。觸摸按鍵的手指使電容增大,從而導(dǎo)致計(jì)數(shù)值增加。手指就是以這樣的方式來(lái)檢測(cè)的。該系統(tǒng)的典型波形示于圖4。
圖5 給出了該項(xiàng)目的一種可實(shí)現(xiàn)方案的示意圖。為了實(shí)現(xiàn)電容式觸摸感應(yīng)和串行通信,該電路采用了賽普拉斯的 CY8C21x34 系列PSoC芯片,該芯片包含一組模擬和數(shù)字功能塊,這些功能塊可由存儲(chǔ)于板上閃存中的固件來(lái)配置。另一顆芯片負(fù)責(zé)處理RS232 電平移動(dòng),旨在提供至主機(jī)的通信鏈接,并實(shí)現(xiàn)115,200 波特的電容式觸摸感應(yīng)數(shù)據(jù)記錄。PSoC 是通過(guò)ISSP 頭(包含電源、地)以及編程引腳SCL和SDA 來(lái)編程的。主PC 通過(guò)一個(gè)DB9 連接器與電容式觸摸感應(yīng)電路板相連。
PSoC 采用固件來(lái)配置,以采用一個(gè)5V 工作電源和一個(gè)內(nèi)部生成的24MHz 系統(tǒng)時(shí)鐘。對(duì)該24MHz 時(shí)鐘進(jìn)行1:26 分頻,以提供一個(gè)用于115,200 波特TX8 模塊的時(shí)鐘。CapSense 用戶模塊選擇以“周期法”(Period Method)來(lái)運(yùn)行,在該工作模式中,計(jì)數(shù)在固定數(shù)量的弛張振蕩器周期中累加。換言之,16 位計(jì)數(shù)器值代表了一個(gè)與傳感器電容成正比的周期。
清單1 羅列了系統(tǒng)固件。與設(shè)立電容式觸摸感應(yīng)系統(tǒng)相關(guān)的大部分工作都已被編碼為一組由C 程序來(lái)調(diào)用的標(biāo)準(zhǔn)CSR 例行程序。例如:CSR_1_Start()負(fù)責(zé)配置PSoC 的內(nèi)部布線,以使電流源DAC 與模擬多路復(fù)用器相連,而比較器與經(jīng)過(guò)正確初始化的PWM和16 位計(jì)數(shù)器相連。
清單1:用于電容式觸摸感應(yīng)系統(tǒng)的固件
//-----------------------------start of listing--------------------------------------------------------
//----------------------------------------------------------------------------
// main.c, a CapSense program in C
// A demonstration of Capacitive Sensing with PSoC
// with a 10mm glass overlay
//----------------------------------------------------------------------------
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
void main()
{
//a flag that is set when a finger is on any buttons
int bBaselineButtonFlag;
CSR_1_Start(); //initialize CapSense user module
TX8_1_Start(TX8_1_PARITY_NONE); //initialize TX8 module
M8C_EnableGInt; //enable global interrupts
CSR_1_SetDacCurrent(200,0); //set current source to 200 out of 255
//use low range of current source
CSR_1_SetScanSpeed(255); //set number of osc cycles to 255-2=253
while(1)
{
CSR_1_StartScan(1,1,0); //scan one button only, button 1 on P2[3]
//wait for scanning of button to complete
while (!(CSR_1_GetScanStatus() & CSR_1_SCAN_SET_COMPLETE));
//update baseline if required, set flag if any button pressed
bBaselineButtonFlag = CSR_1_bUpdateBaseline(0);
//data log the raw counts on button 1
TX8_1_PutSHexInt(CSR_1_iaSwResult[1]);
TX8_1_PutChar(',');
//data log switch mask... which switch is on?
TX8_1_PutSHexInt(CSR_1_baSwOnMask[0]);
TX8_1_CPutString(",");
//data log switch difference = raw counts - baseline
TX8_1_PutSHexInt(CSR_1_iaSwDiff[1]);
TX8_1_PutChar(',');
//data log update timer as a teaching aid
TX8_1_PutSHexInt(CSR_1_bBaselineUpdateTimer);
TX8_1_PutChar(',');
//data log the baseline counts for button 1
TX8_1_PutSHexInt(CSR_1_iaSwBaseline[1]/4);
TX8_1_PutCRLF();
}
}
//-------------------------------end of listing--------------------------------------------------------
調(diào)整傳感器
每次在上列程序中調(diào)用函數(shù)CSR_1_StartScan( )時(shí),均對(duì)Button1 的電容進(jìn)行測(cè)量。原始計(jì)數(shù)值被存儲(chǔ)于CSR_1_iaSwResult[]陣列中。用戶模塊還跟蹤一個(gè)用于原始計(jì)數(shù)的基線。每個(gè)按鈕的基線值均為一個(gè)由IIR 濾波器采用軟件進(jìn)行周期性計(jì)算的平均原始計(jì)數(shù)值。IIR 濾波器的更新速率是可編程的。基線使得系統(tǒng)能夠適應(yīng)由于溫度和其他環(huán)境影響而在系統(tǒng)中引起的漂移。開(kāi)關(guān)差分陣列CSR_1_iaSwDiff[]包含消除了基線偏移的原始計(jì)數(shù)值。按鈕目前的ON/OFF 狀態(tài)采用開(kāi)關(guān)差值來(lái)決定。這可使系統(tǒng)的性能保持恒定,即便在基線有可能隨著時(shí)間的推移而發(fā)生漂移的情況下也是如此。
圖6 示出了采用固件來(lái)實(shí)現(xiàn)的差分計(jì)數(shù)與按鈕狀態(tài)之間的轉(zhuǎn)移函數(shù)。該轉(zhuǎn)移函數(shù)中的遲滯提供了ON 和OFF 狀態(tài)之間的干凈轉(zhuǎn)換,即使計(jì)數(shù)是有噪的也不例外。這提供了一種針對(duì)按鈕的除跳功能。較低的閾值被稱為“噪聲閾值”,而較高的閾值則被稱為“手指閾值”。閾值水平的設(shè)定決定了系統(tǒng)的性能。在覆蓋物非常厚的場(chǎng)合,信噪比很低。在此類(lèi)系統(tǒng)中設(shè)定閾值水平是一項(xiàng)具有挑戰(zhàn)性的工作,而這恰好是電容式觸摸感應(yīng)技巧的一
部分。
圖7 示出了一個(gè)持續(xù)時(shí)間為3 秒的按鈕觸壓操作的理想化原始計(jì)數(shù)波形。針對(duì)本項(xiàng)目的閾值水平示于此圖。噪聲閾值被設(shè)定為10 個(gè)計(jì)數(shù),而手指閾值被設(shè)定為60 個(gè)計(jì)數(shù)。為了清晰地顯示閾值水平,圖8 并未示出始終存在于實(shí)際計(jì)數(shù)數(shù)據(jù)之中的噪聲分量。
電流源DAC 的電流水平選擇和用于計(jì)數(shù)累加的振蕩器周期數(shù)的設(shè)定是調(diào)整過(guò)程的一部分。在固件中,函數(shù)CSR_1_SetDacCurrent(200,0)把電流源設(shè)定在其低電流水平范圍內(nèi),數(shù)值為200(最高255),大約對(duì)應(yīng)于14μA。函數(shù)CSR_1_SetScanSpeed(255)把振蕩器周期數(shù)設(shè)定為253(255-2)。原始計(jì)數(shù)和差分計(jì)數(shù)的分析表明:該系統(tǒng)具有一個(gè)約15pF 的寄生走線電容CP 和一個(gè)0.5pF 左右的手指電容CF。手指使總電容產(chǎn)生了約3%的變化。每個(gè)原始計(jì)數(shù)值的采集僅需500μs 的時(shí)間(每個(gè)按鈕)。
測(cè)量性能
電容式觸摸感應(yīng)系統(tǒng)的測(cè)量性能示于圖8。差分計(jì)數(shù)通過(guò)一個(gè)終端仿真程序在主PC 上捕獲,然后借助電子制表軟件加以繪制。手指放置在10mm 厚的玻璃覆蓋物上,并持續(xù)3 秒的時(shí)間。按鈕的ON/OFF 狀態(tài)被疊加在原始計(jì)數(shù)上。按鈕在這兩種狀態(tài)之間干凈地轉(zhuǎn)換,即使存在因通過(guò)厚玻璃進(jìn)行檢測(cè)而產(chǎn)生的比較嘈雜的原始計(jì)數(shù)信號(hào)時(shí)也是如此。請(qǐng)注意手指和按鈕閾值是如何隨著基線的漂移而進(jìn)行周期性調(diào)整的。當(dāng)檢測(cè)到手指的觸壓動(dòng)作時(shí),基線值將鎖定其數(shù)值,直到手指移開(kāi)為止。
圖9 和圖10 示出了每種狀態(tài)轉(zhuǎn)換的細(xì)部視圖。在圖9 中,按鈕狀態(tài)一開(kāi)始為“OFF”(關(guān)閉)。超過(guò)手指閾值的差分計(jì)數(shù)的第一個(gè)采樣把按鈕狀態(tài)轉(zhuǎn)換至“ON”(接通)。在圖10 中,利用低于噪聲閾值的差分計(jì)數(shù)的第一個(gè)采樣將按鈕轉(zhuǎn)換至OFF 狀態(tài)。
與機(jī)械式開(kāi)關(guān)相比,基于電容的觸摸傳感器的主要優(yōu)點(diǎn)是耐用性好,不易損壞。混合信號(hào)技術(shù)的近期發(fā)展不僅使得觸摸式傳感器的費(fèi)用降到了一個(gè)經(jīng)濟(jì)劃算的水平(故可在各種消費(fèi)類(lèi)產(chǎn)品中實(shí)現(xiàn)),而且還提高了檢測(cè)電路的靈敏度和可靠性(因而增加了覆蓋物的厚度和耐用性)。利用本文介紹的設(shè)計(jì)方法,即可通過(guò)一個(gè)10mm 的玻璃來(lái)檢測(cè)手指對(duì)按鍵的觸壓,并借助基于噪聲閾值和手指閾值的除跳法實(shí)現(xiàn)了ON 和OFF 按鈕狀態(tài)之間的干凈轉(zhuǎn)換,從而令電容式觸摸傳感器成為機(jī)械式開(kāi)關(guān)元件的一種實(shí)用型替代方案。
評(píng)論
查看更多