<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 電容式觸摸感應(yīng)的技巧

          電容式觸摸感應(yīng)的技巧

          作者: 時間:2016-12-16 來源:網(wǎng)絡(luò) 收藏




          PSoC 采用固件來配置,以采用一個5V 工作電源和一個內(nèi)部生成的24MHz 系統(tǒng)時鐘。對該24MHz 時鐘進行1:26 分頻,以提供一個用于115,200 波特TX8 模塊的時鐘。CapSense 用戶模塊選擇以“周期法”(Period Method)來運行,在該工作模式中,計數(shù)在固定數(shù)量的弛張振蕩器周期中累加。換言之,16 位計數(shù)器值代表了一個與傳感器電容成正比的周期。

          清單1 羅列了系統(tǒng)固件。與設(shè)立電容式觸摸感應(yīng)系統(tǒng)相關(guān)的大部分工作都已被編碼為一組由C 程序來調(diào)用的標準CSR例行程序。例如:CSR_1_Start()負責配置PSoC 的內(nèi)部布線,以使電流源DAC與模擬多路復(fù)用器相連,而比較器與經(jīng)過正確初始化的PWM和16 位計數(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( )時,均對Button1 的電容進行測量。原始計數(shù)值被存儲于CSR_1_iaSwResult[]陣列中。用戶模塊還跟蹤一個用于原始計數(shù)的基線。每個按鈕的基線值均為一個由IIR濾波器采用軟件進行周期性計算的平均原始計數(shù)值。IIR 濾波器的更新速率是可編程的?;€使得系統(tǒng)能夠適應(yīng)由于溫度和其他環(huán)境影響而在系統(tǒng)中引起的漂移。開關(guān)差分陣列CSR_1_iaSwDiff[]包含消除了基線偏移的原始計數(shù)值。按鈕目前的ON/OFF 狀態(tài)采用開關(guān)差值來決定。這可使系統(tǒng)的性能保持恒定,即便在基線有可能隨著時間的推移而發(fā)生漂移的情況下也是如此。
          圖6 示出了采用固件來實現(xiàn)的差分計數(shù)與按鈕狀態(tài)之間的轉(zhuǎn)移函數(shù)。該轉(zhuǎn)移函數(shù)中的遲滯提供了ON 和OFF 狀態(tài)之間的干凈轉(zhuǎn)換,即使計數(shù)是有噪的也不例外。這提供了一種針對按鈕的除跳功能。較低的閾值被稱為“噪聲閾值”,而較高的閾值則被稱為“手指閾值”。閾值水平的設(shè)定決定了系統(tǒng)的性能。在覆蓋物非常厚的場合,信噪比很低。在此類系統(tǒng)中設(shè)定閾值水平是一項具有挑戰(zhàn)性的工作,而這恰好是電容式觸摸感應(yīng)技巧的一
          部分。



          圖7 示出了一個持續(xù)時間為3 秒的按鈕觸壓操作的理想化原始計數(shù)波形。針對本項目的閾值水平示于此圖。噪聲閾值被設(shè)定為10 個計數(shù),而手指閾值被設(shè)定為60 個計數(shù)。為了清晰地顯示閾值水平,圖8 并未示出始終存在于實際計數(shù)數(shù)據(jù)之中的噪聲分量。


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();