輕松編程實(shí)現(xiàn)無(wú)線遙控
無(wú)線收發(fā)組件中,315MHz收發(fā)組件是常用的一種,如在機(jī)動(dòng)車防盜應(yīng)用方面使用315MHz組件的就很多,一般電子商店出售的這種模塊,發(fā)送和接收都是三個(gè)接線端子,一個(gè)數(shù)據(jù)端,另外兩個(gè)則是電源端,且相對(duì)較便宜,作者所買的一對(duì)才13元,若要自制則相對(duì)要困難些,因?yàn)轭愃七b控電路這種高頻電路其調(diào)試是很專業(yè)的,需要專用的設(shè)備和儀器,大家可參考這方面的資料。
電路功能
本文所介紹的無(wú)線收發(fā)電路采用ATMEL公司的AT89C2051單片機(jī)作為編碼和解碼電路的核心器件,接收端采用1602字符液晶顯示器顯示所接收到的數(shù)據(jù)。
工作原理
首先介紹編碼電路。在使用過(guò)程中,筆者直接將發(fā)送模塊的三個(gè)端子與自制的一塊學(xué)習(xí)板相連,沒(méi)有添加其他電子元件,屬單片機(jī)最小系統(tǒng),S1和S2為兩個(gè)按鍵,本文程序未用。圖1所示為發(fā)送端電路圖,圖2為接收端電路圖。
接收端將接收到的數(shù)據(jù)送入單片機(jī)的同時(shí),還會(huì)驅(qū)動(dòng)發(fā)光二極管以便對(duì)硬件和軟件糾錯(cuò),若數(shù)據(jù)接收成功還將顯示在1602液晶顯示器上,因本文主要是介紹無(wú)線遙控,關(guān)于1602字符液晶顯示器的原理與應(yīng)用不做介紹,讀者可以參考《無(wú)線電》以往的相關(guān)文章,如果出于成本和程序難易程度的考慮,也可改用7段數(shù)碼管甚至用發(fā)光二極管來(lái)作數(shù)據(jù)的顯示。另外要注意一點(diǎn),發(fā)送端和接收端的時(shí)鐘晶振的頻率必須要相同,否則編程會(huì)很麻煩甚至數(shù)據(jù)無(wú)法正常接收,這一點(diǎn)在介紹程序時(shí)還會(huì)提到。
軟件方面,借鑒了紅外遙控的編碼思路,首先發(fā)送引導(dǎo)脈沖,緊接下來(lái)是數(shù)據(jù)碼和數(shù)據(jù)反碼,這一過(guò)程是在定時(shí)中斷里面完成的,定時(shí)時(shí)間一到就調(diào)用一加法程序,然后將結(jié)果作為數(shù)據(jù)發(fā)送出去,計(jì)數(shù)器溢出后就清零進(jìn)入下一循環(huán)。
引導(dǎo)脈沖由一個(gè)低電平和高電平組成,每個(gè)高低電平延時(shí)大約11ms,這個(gè)靠11ms的延時(shí)程序來(lái)實(shí)現(xiàn),數(shù)據(jù)碼和反碼每個(gè)位也是使用這個(gè)延時(shí),可以說(shuō)這11ms的延時(shí)就相當(dāng)于比較簡(jiǎn)單的通信協(xié)議,也是發(fā)送和接收程序的核心部分,只要兩邊的延時(shí)相同,00H到0FFH內(nèi)的數(shù)據(jù)都能被正確接收,接收端檢測(cè)到1 lms的高低電平變化后,就調(diào)用11ms的延時(shí)來(lái)判斷數(shù)據(jù)"0"和"1",并將正確接收到的數(shù)據(jù)顯示在液晶顯示器上。前面已講過(guò)若時(shí)鐘晶振的頻率不同那么發(fā)送端和接收端的延時(shí)子程序就要計(jì)算得相一致,這樣程序編制就很麻煩甚至不能正常接收數(shù)據(jù),這一點(diǎn)和單片機(jī)的串口通信是同樣的道理。加入數(shù)據(jù)反碼為的是提高抗干擾的效果,接收端的程序中就可以設(shè)置兩個(gè)數(shù)據(jù)存儲(chǔ)器,一個(gè)放原碼一個(gè)放反碼,接收完畢再將兩個(gè)存儲(chǔ)器的內(nèi)容作比較即可判斷是否接收正確,若正確再執(zhí)行應(yīng)執(zhí)行的程序。
本文是采用延時(shí),雖方法有點(diǎn)不一樣,但關(guān)鍵的一點(diǎn)是數(shù)據(jù)傳送速度都不能超過(guò)發(fā)送和接收模塊的最快速度,本文使用11ms的延時(shí),那每秒就大概是100個(gè)位的數(shù)據(jù)傳送速度,讀者可以將延時(shí)程序增大和減小,以此就可以測(cè)試出315MHz發(fā)送和接收模塊的最高和最低數(shù)據(jù)傳送速度。
發(fā)射端和接收端的程序見(jiàn)本期配刊光盤,都已盡量地模塊化,能共享的就共享,所以整個(gè)程序都比較簡(jiǎn)單,且收發(fā)程序都使用的是8051最基本最常用的指令,沒(méi)有用復(fù)雜的數(shù)學(xué)運(yùn)算和邏輯運(yùn)算指令,初學(xué)者很容易理解。因?yàn)橹饕敲嫦騿纹瑱C(jī)初學(xué)者,所以本文介紹的編碼格式是比較簡(jiǎn)單的,抗干擾效果較差,而無(wú)線數(shù)據(jù)通信的編碼方法有很多種,有行業(yè)內(nèi)的標(biāo)準(zhǔn)化編碼方法,也有廠家獨(dú)立研發(fā)的,而315MH2收發(fā)模塊的工作原理和工作速度就基本決定了它不能用于高速通信,且也沒(méi)有硬件抗干擾的能力,要排除干擾只能完全依靠軟件來(lái)實(shí)現(xiàn),本文的程序中,當(dāng)315MHz接收模塊接通電源后就一直處于工作狀態(tài),在有效接收范圍內(nèi)只要有315MHz發(fā)射模塊發(fā)射信號(hào),則接收端就會(huì)有輸出,程序經(jīng)筆者實(shí)際試驗(yàn)除配對(duì)的發(fā)射和接收兩個(gè)系統(tǒng)外,再外加了一個(gè)機(jī)動(dòng)車防盜遙控手柄,當(dāng)然也是315MHz的,當(dāng)發(fā)射和接收系統(tǒng)之間正在傳送遙控?cái)?shù)據(jù)時(shí)將遙控手柄的任意鍵按下,發(fā)現(xiàn)這樣會(huì)打斷系統(tǒng)間的數(shù)據(jù)傳送導(dǎo)致接收端接收不到任何數(shù)據(jù),這是最大的缺點(diǎn),但是對(duì)要求較低的應(yīng)用場(chǎng)合應(yīng)該可以滿足,因?yàn)槌绦蛑辽俨粫?huì)對(duì)其他的315MHz發(fā)射模塊有響應(yīng),意即不會(huì)有誤動(dòng)作,比如家里用來(lái)遙控電燈,不會(huì)隨時(shí)都有人拿著個(gè)汽車防盜遙控器在附近按來(lái)按去。
業(yè)余條件下的電路調(diào)試
筆者是單片機(jī)愛(ài)好者,個(gè)人水平和試驗(yàn)器材有限,是典型的"一臺(tái)萬(wàn)用表打天下",手中既沒(méi)有示波器來(lái)查看波形,也沒(méi)有仿真器,對(duì)于軟硬件只能靠收發(fā)兩個(gè)板子上的發(fā)光二極管和接收端的1602液晶顯示器的實(shí)際運(yùn)行來(lái)排錯(cuò),如果數(shù)據(jù)發(fā)出來(lái),則與發(fā)射模塊相連的發(fā)光二極管點(diǎn)亮,表明有信號(hào)發(fā)出,同樣接收端的發(fā)光二極管如果與發(fā)射端的變化同步,表明接收到了信號(hào),從而完成硬件排錯(cuò),最后將接收到的數(shù)據(jù)顯示在顯示器上。
程序上的排錯(cuò)主要集中在數(shù)據(jù)延時(shí)上,剛開(kāi)始筆者將要發(fā)送的每個(gè)數(shù)據(jù)位的延時(shí)選得很短,不知不覺(jué)中已遠(yuǎn)遠(yuǎn)超出315MHz發(fā)送和接收模塊的數(shù)據(jù)收發(fā)速度,也就是相當(dāng)于在串行通信中將波特率設(shè)置過(guò)高,導(dǎo)致收發(fā)失敗,這是筆者遇到的最大障礙,因?yàn)楣P者開(kāi)始把問(wèn)題歸結(jié)為硬件故障,在這個(gè)不大不小的問(wèn)題上白白花了很多時(shí)間,后來(lái)在一次上網(wǎng)查找資料的時(shí)候讀到與315MHz模塊相關(guān)的一篇文章,里面提到收發(fā)速度問(wèn)題,說(shuō)它的傳輸速度是很低的,不然將工作不正常甚至無(wú)法傳輸數(shù)據(jù),筆者這才恍然大悟,回家后立刻對(duì)延時(shí)進(jìn)行修改,改一次源碼就重?zé)浺淮涡酒?,直到最后將延時(shí)鎖定在11ms,至此排錯(cuò)告一段落,收發(fā)雙方能進(jìn)行正確的數(shù)據(jù)傳輸了,發(fā)送端發(fā)送的數(shù)據(jù)也基本都能在1602顯示器上顯示出來(lái),但仍有個(gè)別的數(shù)據(jù)不穩(wěn)定,筆者分析這主要是硬件本身固有的缺陷和程序的合理性造成的,感興趣的讀者朋友可以在本文的軟硬件基礎(chǔ)上,發(fā)揮自己的能力對(duì)電路和軟件再作進(jìn)一步的修改,以求達(dá)到更好的效果。希望大家到《無(wú)線電》雜志的BBS論壇里進(jìn)行討論,將自己對(duì)程序的改進(jìn)方法提出來(lái)。
實(shí)際應(yīng)用
在收發(fā)兩個(gè)電路的基礎(chǔ)上再增加一塊4路繼電器控制板,如圖3所示,可與收發(fā)電路配合進(jìn)行遙控控制。圖4是發(fā)送電路,左邊的發(fā)光二極管是電源指示,右下角的為數(shù)據(jù)指示,拍照時(shí)剛好點(diǎn)亮表明正在發(fā)送數(shù)據(jù),電路中的數(shù)碼管本實(shí)驗(yàn)沒(méi)有用到。圖5是接收電路,其中接收模塊是安放在面包板上再用數(shù)據(jù)線與單片機(jī)相連的。連接好電路后,隨著發(fā)送端不斷發(fā)出數(shù)據(jù),單片機(jī)就會(huì)根據(jù)接收到的數(shù)據(jù)控制相應(yīng)的繼電器接通,圖3中右下角的發(fā)光二極管點(diǎn)亮,表明此路繼電器已接通。