基于51單片機(jī)自制觸摸屏 電容觸摸研究
電容式觸摸技術(shù)這么好,在哪里可以得到呢?上一期我也有講過(guò),現(xiàn)在市場(chǎng)有專業(yè)的電容式觸摸芯片,芯片廠商已經(jīng)把電容式觸摸的處理集成到芯片中。這種芯片的好處就是穩(wěn)定性好,不需要二次開(kāi)發(fā)就可以直接使用。芯片上都會(huì)留有各種接口,或與單片機(jī)連接或驅(qū)動(dòng)控制電路。缺點(diǎn)是價(jià)格太高而且不易買(mǎi)到,與觸摸芯片的好處相比,缺點(diǎn)好像是致命的。如果不能在一般的電子市場(chǎng)里買(mǎi)到,或者一片4鍵觸摸芯片要花30塊錢(qián)購(gòu)買(mǎi),那么又會(huì)有多少愛(ài)好者朋友真的可以輕松擁有呢?那么,能不能有更好的替代方案,我們可不可以用其他方法實(shí)現(xiàn)電容式觸摸操作呢? 為了用單片機(jī)實(shí)現(xiàn)精簡(jiǎn)電路的電容式觸摸操作,我是下了不少功夫的。結(jié)果很讓我滿意,心血沒(méi)有白費(fèi)。首先我研究了一下電容式觸摸技術(shù)的實(shí)現(xiàn)原理。因?yàn)槲倚枰獜脑斫嵌热胧?,看看在同一原理的情況下有沒(méi)有什么方法可以用單片機(jī)模擬觸摸芯片。上一期我們也簡(jiǎn)單地介紹過(guò)電容式觸摸技術(shù)的原理,其實(shí)就是利用了電容通交流阻直流的特性,把手指和觸摸片當(dāng)成電容器的兩個(gè)極片,手指和觸摸片之間的絕緣材料就是電容器中的隔離介質(zhì)。對(duì)了,另外還需要一個(gè)交流信號(hào)源的接觸片,讓它與信號(hào)輸入的觸摸片平行放置。當(dāng)手指按到觸摸區(qū)域時(shí),一個(gè)交流回路就形成了。觸摸片輸入端可以收到與交流信號(hào)源相同的信號(hào),這一信號(hào)的特性隨著手指觸摸面積和絕緣介質(zhì)的厚度和材質(zhì)而變化??吹竭@一原理,我閉上眼睛,用想象力構(gòu)建一個(gè)單片機(jī)實(shí)驗(yàn)平臺(tái),用PWM功能產(chǎn)生交流信號(hào),再用ADC功能作為觸摸片輸入端的信號(hào)讀取,用給單片機(jī)下載的RS232串口和串口助手軟件在電腦上顯示出ADC接收到的數(shù)據(jù)。 嗯,這個(gè)想法是可行的,于是我開(kāi)始行動(dòng),把想象的實(shí)驗(yàn)用實(shí)際的電路組建。這次依然使用了我所熟悉的STC單片機(jī),STC12C5A60S2具有2路PWM輸出和8路10位ADC功能,完全可以滿足我的實(shí)驗(yàn)需要。電腦上直接用STC-ISP軟件自帶的串口幫助軟件就可以顯示十六進(jìn)制的數(shù)據(jù)了。我在自己的網(wǎng)站里找到ADC和PWM功能的編程模板,新建立一個(gè)KEIL工程,開(kāi)始移植模板、設(shè)計(jì)程序。程序很簡(jiǎn)單,就是一直讀取ADC輸入引腳的數(shù)據(jù),從0×00到0×FF之間即表示0V到5V的電壓值。PWM輸出38kHz的方波信號(hào),占空比調(diào)整到50%。硬件電路方面則是用了兩片金屬片作觸摸片,一片連接到PWM輸出引腳,另一片連接到ADC輸入引腳,兩個(gè)觸摸片盡量靠近但不能碰上。絕緣介質(zhì)沒(méi)有精心選擇,只是找到一張名片,這是目前可以找到的最佳材料了。連接用的是普通的導(dǎo)線,先不去考慮外來(lái)的干擾問(wèn)題。 一切就緒,開(kāi)始實(shí)驗(yàn)。接通電源,單片機(jī)開(kāi)始工作,串口助手的接收窗口不斷顯示出ADC的讀數(shù)。在沒(méi)有手指按壓的時(shí)候,ADC的讀數(shù)范圍是在0×20到0x70之間,數(shù)據(jù)的變化看上去沒(méi)有規(guī)律??墒钱?dāng)我的手指按在名片上的時(shí)候,特別是靠近ADC輸入端觸摸片的時(shí)候,ADC的讀數(shù)是在0×10和0×FF之間有規(guī)律地跳變,不過(guò)跳變的頻率并不快。這一實(shí)驗(yàn)結(jié)果給了我信心,我又繼續(xù)實(shí)驗(yàn),用手掌觸摸、拿開(kāi)名片直接接觸觸摸片、把名片換成玻璃片、用手觸摸導(dǎo)線、用手觸摸單片機(jī)的引腳,把每一項(xiàng)實(shí)驗(yàn)的結(jié)果記錄下來(lái),感覺(jué)成功離我不遠(yuǎn)了。PWM輸出好像是必須的內(nèi)容,不然沒(méi)有交流信號(hào)源,也就不能產(chǎn)生電容回路了。那么我改變PWM的頻率,ADC的讀數(shù)會(huì)不會(huì)也隨之變化呢?于是我把用PWM功能實(shí)現(xiàn)的交流輸出改成了用I/O接口模擬,因?yàn)檫@樣一來(lái),在程序上更容易控制輸出方波的頻率。我試著把頻率從1Hz開(kāi)始慢慢調(diào)整到1kHz,在此過(guò)程中不斷地用手指觸摸,看看ADC讀數(shù)有什么變化。結(jié)果證明,變化是有的,可是不明顯,任憑方波頻率怎么變換,ADC讀數(shù)一直在一個(gè)固有頻率周圍徘徊。于是我試著關(guān)上方波輸出,看看ADC讀數(shù)的固有頻率是不是來(lái)自方波以外的什么東西。果然,關(guān)掉交流信號(hào)輸出,ADC還是可以讀到固有頻率的數(shù)據(jù),在0×10和0×FF之間交替。當(dāng)拿開(kāi)名片直接觸摸ADC輸入引腳時(shí),0×10還會(huì)變成0×00,也就是0V。這一結(jié)果讓我興奮,因?yàn)椴恍枰涣餍盘?hào)源也可以讀到一定頻率的ADC交流數(shù)據(jù),可是這一頻率又是哪里來(lái)的呢?這個(gè)問(wèn)題一直困擾著我,因?yàn)榧庇谙雽?shí)現(xiàn)單片機(jī)精簡(jiǎn)電容式觸摸技術(shù),所以就沒(méi)有花時(shí)間認(rèn)真研究這一頻率的來(lái)歷??赡苁?0Hz的市電頻率在人體上的干擾,或是人體自帶的雜波電流獨(dú)有頻率。我又考慮到這種頻率會(huì)不會(huì)是我實(shí)驗(yàn)場(chǎng)地這里特有的什么干擾,于是我又去了另外一些地方做同樣的實(shí)驗(yàn),結(jié)果證明并不是實(shí)驗(yàn)場(chǎng)地的問(wèn)題,這一頻率依然是一個(gè)未經(jīng)探索的秘密。 單片機(jī)實(shí)現(xiàn)電容式觸摸開(kāi)關(guān) 電容式觸摸開(kāi)關(guān)實(shí)驗(yàn)電路原理圖 對(duì)固有頻率的無(wú)知并不影響制作電容式觸摸操作,這是讓我很開(kāi)心的事情,不然我還需要做一大堆實(shí)驗(yàn)來(lái)深入研究下去。當(dāng)然,我以后會(huì)研究的,只是現(xiàn)在我最有興趣的是實(shí)現(xiàn)電容式觸摸。好的,我們整理一下思路。現(xiàn)在我們通過(guò)實(shí)驗(yàn)得到了這樣的結(jié)果,硬件電路上只需要一個(gè)觸摸金屬片連接到單片機(jī)的ADC輸入引腳,手指隔著名片觸摸操作時(shí),ADC的讀數(shù)會(huì)在0×10和0×FF之間以一定的頻率交替變化, 在沒(méi)有手指觸摸時(shí),ADC的讀數(shù)會(huì)在0×20和0×70之間交替變化。這些數(shù)據(jù)可能在環(huán)境不同時(shí)有所不同,但不變的是當(dāng)手指觸摸時(shí)ADC讀數(shù)的變化數(shù)值會(huì)比沒(méi)有觸摸時(shí)大。有了這一項(xiàng)實(shí)驗(yàn)現(xiàn)象作為支點(diǎn),我們接下來(lái)要做的就是用單片機(jī)處理ADC讀數(shù),判斷數(shù)值變化的規(guī)律,從而得知是否有觸發(fā)。編程并不難,每個(gè)人都可以有自己的數(shù)值處理方式。下面給出一段我編寫(xiě)的電容式觸摸按鍵的源程序,大家可以參考,但這并不是唯一的處理方式,還會(huì)有更好的方法等著你去發(fā)現(xiàn)呢。 “電容式觸摸開(kāi)關(guān)實(shí)驗(yàn)”是我制作的一款簡(jiǎn)單的觸摸開(kāi)關(guān),在單片機(jī)的P1.7接口上接一個(gè)LED,使用連接在P1.0接口上的觸摸片來(lái)控制LED的亮或滅。你可以直接制作這個(gè)觸摸開(kāi)關(guān),以此了解電容式觸摸的性能。當(dāng)然,這也是一個(gè)很好的實(shí)例,參考電路原理圖和源程序就可以了解其工作原理。只要在源程序上稍微修改就可以制作屬于你自己的電容式觸摸作品了。在制作電容式觸摸操作作品的時(shí)候需要注意一些問(wèn)題,這些問(wèn)題并不是從什么專業(yè)機(jī)構(gòu)找來(lái)的資料,而是我通過(guò)實(shí)驗(yàn)總結(jié)出來(lái)的經(jīng)驗(yàn),僅供大家參考。另外,對(duì)于沒(méi)有交流信號(hào)源參與的電路是否可靠我還沒(méi)有研究,這一制作是在我的幾個(gè)實(shí)驗(yàn)環(huán)境下完成的,并不能表示在你的環(huán)境里也可以實(shí)現(xiàn)。本文介紹的電容式觸摸技術(shù)僅算是拋磚引玉,也是大家和我一起共同驗(yàn)證的過(guò)程,看看我還有哪些沒(méi)有考慮周全的地方。歡迎讀者朋友把你的想法和建議與我交流,我真的很希望和大家一起把這項(xiàng)技術(shù)改進(jìn)到和專業(yè)的觸摸芯片媲美。 注意事項(xiàng): 細(xì)心的朋友可能注意到了,我在源程序中ADC讀數(shù)部分加入了防誤判程序,實(shí)踐證明這是非常有必要的。其實(shí)防誤判程序就是通過(guò)連續(xù)多次讀取ADC數(shù)值,然后把多次讀到的結(jié)果進(jìn)行對(duì)比。如果有外部干擾或是ADC讀數(shù)錯(cuò)誤,在這個(gè)對(duì)比的過(guò)程中就會(huì)被發(fā)現(xiàn),即達(dá)到防干擾、防誤判的作用。電容式觸摸開(kāi)關(guān)實(shí)驗(yàn)的源程序文件請(qǐng)到《無(wú)線電》雜志網(wǎng)站上下載。 防誤判部分源程序 /****************************************************************************** 制作mini48定時(shí)器 雖然上文介紹了這么多關(guān)于電容式觸摸技術(shù)的內(nèi)容,可是我們下面要完成的制作卻是使用了電平式觸摸技術(shù)。因?yàn)殡娙菔接|摸的設(shè)計(jì)還沒(méi)有成熟,還有可改進(jìn)的空間。另外我手上目前還沒(méi)有什么基于電容式觸摸技術(shù)的作品,雖然我正在開(kāi)發(fā)的mini3216準(zhǔn)備使用電容式觸摸按鈕,可是mini3216的創(chuàng)新重點(diǎn)并不是電容式觸摸,而是比電容式觸摸更好的設(shè)計(jì)。為難之下,我將mini48定時(shí)器作為這一期的制作實(shí)例。盡管是電平式觸摸,但mini48的精巧設(shè)計(jì)定會(huì)給你帶來(lái)創(chuàng)新的啟發(fā)。Mini48定時(shí)器依然是我的精簡(jiǎn)電路設(shè)計(jì)風(fēng)格,它的設(shè)計(jì)理念延續(xù)了mini1608,又另有獨(dú)特之處。電池盒、單片機(jī)、晶體、電容、蜂鳴器、數(shù)碼管,幾種元器件打造簡(jiǎn)單的定時(shí)器制作,我相信這是你所見(jiàn)過(guò)的最簡(jiǎn)單的定時(shí)器制作。Mini48采用4位共陽(yáng)一體數(shù)碼管,用來(lái)顯示定時(shí)值的小時(shí)和分鐘,最大定時(shí)時(shí)間是23小時(shí)59分。時(shí)間到時(shí)蜂鳴器會(huì)鳴響,提示用戶定時(shí)時(shí)間到。如果鳴響1分鐘依然沒(méi)有關(guān)閉電源,單片機(jī)就會(huì)進(jìn)入掉電模式,在此模式下系統(tǒng)幾乎不耗電。時(shí)間的設(shè)定沒(méi)有采用傳統(tǒng)的微動(dòng)開(kāi)關(guān),而是采用了電平式觸摸技術(shù),當(dāng)手指觸摸數(shù)碼管各位上方對(duì)應(yīng)的單片機(jī)引腳時(shí),定時(shí)值就會(huì)加1,設(shè)置簡(jiǎn)單,操作還很有趣。電路設(shè)計(jì)方面沒(méi)有使用PCB板,而是將單片機(jī)與數(shù)碼管直接焊接在一起,這也得益于元器件特有的結(jié)構(gòu),諸多創(chuàng)新設(shè)計(jì)都來(lái)源于發(fā)現(xiàn)元器件結(jié)構(gòu)和性能方面的巧合。 所需元器件 元器件清單 品名 型號(hào) 數(shù)量 說(shuō)明 電路原理圖 好了,閑言少講,開(kāi)始行動(dòng)吧。文中使用的是STC11L60XE,這是一款3V電壓的單片機(jī),可以用2節(jié)5號(hào)(AA)電池供電。如果你買(mǎi)不到3V單片機(jī),也可以使用STC11F60XE或者STC12C5A60S2系列等5V的單片機(jī)代替,當(dāng)然電源也要跟著換成3節(jié)5號(hào)電池。不能用89C51系列單片機(jī)代替,因?yàn)?9系列的單片機(jī)比較古老,不能實(shí)現(xiàn)電平式觸摸。蜂鳴器要購(gòu)買(mǎi)那種無(wú)源的,如果你想減小體積也可以用壓電陶瓷片代替。數(shù)碼管需要是4位共陽(yáng)的指定型號(hào),其實(shí)就是引腳定義要一致,數(shù)碼管的體積過(guò)大或過(guò)小都不能正好焊接在單片機(jī)上,所以這個(gè)部分一定要注意。 第1步:將12MHz晶體和30pF電容按電路原理圖焊接在單片機(jī)背面的引腳上。讓單片機(jī)具有外部精準(zhǔn)時(shí)鐘源,這樣可以產(chǎn)生準(zhǔn)確的定時(shí)器時(shí)間。在我寫(xiě)這篇文章時(shí)聽(tīng)說(shuō)STC公司新推出一款15C系列單片機(jī),它的內(nèi)部R/C振蕩器是高精度的,可以完全省去外部的時(shí)鐘晶體。如果以后有機(jī)會(huì)把mini48的單片機(jī)改成15C系列的話,我們就可以省去這一步,不需要焊接晶體和電容了。 第2步:把電池盒上自有的導(dǎo)線焊接在蜂鳴器上,并把焊接處用熱縮管包好。注意無(wú)源蜂鳴器也是分正、負(fù)極的,不要接反。這樣的焊接并不是最終的電路,一會(huì)我們還要把導(dǎo)線從中間剪斷。 第3步:把電池盒正極的導(dǎo)線(紅線)并聯(lián)在單片機(jī)的第40腳上。負(fù)極的導(dǎo)線剪斷,電池盒一端焊接在單片機(jī)的第20腳上,蜂鳴器一端焊接在單片機(jī)的第1腳上。如此焊接之后,電池盒、單片機(jī)、蜂鳴器三者仍然保持了原來(lái)的結(jié)構(gòu)。 第4步:把數(shù)碼管直接焊接在單片機(jī)上。奇妙的是數(shù)碼管的引腳正好和單片機(jī)的引腳相對(duì)應(yīng),好像是為其量身定做的一樣。單片機(jī)I/O接口采用推挽輸出方式,可以直接驅(qū)動(dòng)數(shù)碼管顯示,不需要驅(qū)動(dòng)電路。程序上采用逐點(diǎn)掃描方式,省去了限流電阻,并保證數(shù)碼管上的各段碼亮度一致。數(shù)碼管上方對(duì)應(yīng)的單片機(jī)引腳正好設(shè)計(jì)成電平式觸摸按鍵,省去了微動(dòng)開(kāi)關(guān),讓設(shè)計(jì)更加簡(jiǎn)潔。 第5步:打開(kāi)電源開(kāi)關(guān),系統(tǒng)初始從3分鐘開(kāi)始倒計(jì)時(shí)。觸摸小時(shí)和分鐘各位上方對(duì)應(yīng)的單片機(jī)引腳就可以將此位加1,加到9時(shí)返回到0,從而調(diào)整定時(shí)時(shí)間。 Mini48制作時(shí)需要注意以下事項(xiàng): 觸摸技術(shù)在電子產(chǎn)品中的應(yīng)用已經(jīng)很成熟了,可是在電子愛(ài)好者的圈子里卻還是個(gè)新鮮玩意。對(duì)于電平式和電容式觸摸技術(shù),我所做的研究仍然不夠。本文只是希望用我們電子愛(ài)好者現(xiàn)有的技術(shù)和材料實(shí)現(xiàn)與專業(yè)觸摸芯片同等的性能,讓觸摸技術(shù)可以在電子愛(ài)好者的圈子里興起。讓更多的朋友對(duì)單片機(jī)實(shí)現(xiàn)觸摸技術(shù)產(chǎn)生興趣,從而讓更多的人研究它,讓它成熟起來(lái),讓我們?cè)谖?dòng)開(kāi)關(guān)、薄膜鍵盤(pán)之外多出一個(gè)選項(xiàng)。讓觸摸技術(shù)的普及帶動(dòng)電子制作的創(chuàng)新,讓我們這群廢寢忘食的電子愛(ài)好者們玩得更新穎、更時(shí)尚。 | ||
聯(lián)系客服