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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于中穎8位微控制器的電容式觸摸按鍵控制器

          基于中穎8位微控制器的電容式觸摸按鍵控制器

          作者: 時間:2011-05-31 來源:網(wǎng)絡(luò) 收藏

            硬件實現(xiàn)

            圖4顯示了一個實現(xiàn)的實例。由R1,R2以及電極(CX)和手指(CT)并聯(lián)的(大約5pF) 形成一個RC網(wǎng)絡(luò),通過對該RC網(wǎng)絡(luò)充放電時間的測量,可以檢測到人手的。 所有電極共享一個“負(fù)載I/O”引腳。電阻R1和R2盡量靠近MCU放置。電容R1(阻值在幾百歐到幾兆歐之間)是主要電容,用于調(diào)節(jié)檢測的靈敏度。電容R2(10KΩ)是可選的,用于減少對噪聲影響。


          圖4:電容感應(yīng)實現(xiàn)實例。

            3 軟件實現(xiàn)

            本章描述了觸摸感應(yīng)RC原理的實現(xiàn)。

            3.1充電時間測量原理

            為了保證健壯的電容觸摸感應(yīng)的應(yīng)用,充電時間的測量需要足夠的精確。

            采用一個簡單的定時器(無需IC功能)和一系列簡單的軟件操作,即定時地檢查感應(yīng)I/O端口上的電壓是否達(dá)到閥值。這樣的話,時間測量的精確度就取決于執(zhí)行一次完整軟件查詢需要的CPU周期數(shù)。這種測量方法會由于多次測量帶來一些抖動,但是由于沒有硬件限制,這種方法適用于需要很多電極的場合。

            基本測量

            使用普通定時器進行充電時間的測量。對電容充電開始之前,定時器的計數(shù)器數(shù)值被記錄下來。當(dāng)采樣I/O端口上的電壓達(dá)到某個閥值(VTH)時,再次記錄定時器計數(shù)器的值。二者之差就是 充電或者放電的時間。


          圖5:定時器計數(shù)器值。

            過采樣

            過采樣的目的是以CPU時鐘的精度,對輸入電壓達(dá)到高電平和低電平(VIH和VIL)的時間測量。 為了跨越所有的取值范圍,每次測量都比上一次測量延遲一個CPU時鐘周期的時間。 為了跨越所有的取值范圍,測量的次數(shù)是和MCU核相關(guān)的。圖6說明了這個概念的應(yīng)用情況。



          圖6:輸入電壓測量。

            輸入電壓測量的原理

            為了提高在電壓和溫度變動情況下的穩(wěn)定性,對電極會進行連續(xù)兩次的測量:第一次測量對電容的充電時間,直到輸入電壓升至VIH。第二次測量電容的放電時間,直到輸入電壓降至VIL。下圖以及以下的表格詳細(xì)說明了對感應(yīng)電極(感應(yīng)I/O)和負(fù)載I/O引腳上的操作流程。


          圖7:電容充放電時間測量。

          表 電容充放電測量步驟




          關(guān)鍵詞: 控制器 按鍵 觸摸 電容 基于

          評論


          相關(guān)推薦

          技術(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); })();