無(wú)線通信協(xié)議編寫.doc
《無(wú)線通信協(xié)議編寫.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《無(wú)線通信協(xié)議編寫.doc(9頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
單片機(jī)無(wú)線通信模塊開(kāi)發(fā)與應(yīng)用(五) 好久沒(méi)發(fā)貼了,這場(chǎng)病病得不輕啊,不過(guò)病早好了,這次延誤是因?yàn)樵诒本┙恿藗€(gè)項(xiàng)目,而且正好是關(guān)于這套系統(tǒng)的應(yīng)用,所以干脆就拖了一段時(shí)間. 說(shuō)正題了.前面那么多貼子只是一些外圍的制作和設(shè)計(jì),但沒(méi)有外圍的建設(shè)怎么能做出好東西呢?呵呵,這次給大家發(fā)點(diǎn)正經(jīng)東西,相信這就是大伙兒最關(guān)心的部分---通信協(xié)議,其實(shí)也不能稱其為協(xié)議,只能叫做射頻編碼,為了便于理解起見(jiàn)才叫它通信協(xié)議的,大家心里清楚這點(diǎn)就行了,免得說(shuō)我混淆視聽(tīng).通信協(xié)議分成硬件層和軟件層,硬件層,即數(shù)據(jù)的電信號(hào)表示方法,而軟件層,指的是數(shù)據(jù)包的處理.由于軟件層定義很廣,且跟應(yīng)用場(chǎng)合相關(guān),不同的應(yīng)用可能使用完全不同的協(xié)議,所以這里就只說(shuō)說(shuō)如何傳輸數(shù)據(jù)包吧.相信大家都有這能力進(jìn)行下一步的擴(kuò)展.我也會(huì)在今后的貼子里給出一些應(yīng)用的實(shí)例,以供參考. 我看到論壇上有些朋友之前也做過(guò)無(wú)線模塊的應(yīng)用,卻不成功,例如明浩提過(guò)他做的232無(wú)線模塊,干擾很大,通信不能進(jìn)行.為什么會(huì)這樣呢?要解釋這問(wèn)題,先要說(shuō)說(shuō)無(wú)線模塊的結(jié)構(gòu)和特性: 發(fā)射:無(wú)線模塊使用一個(gè)三級(jí)管進(jìn)行射頻發(fā)射,從說(shuō)明書上可看到,當(dāng)連續(xù)發(fā)送時(shí)間高于5毫秒時(shí),發(fā)射效率會(huì)降低. 接收:超再生電路.超再生電路有一個(gè)特性,即在沒(méi)有信號(hào)時(shí)會(huì)收到大量的白噪聲,接收模塊已經(jīng)對(duì)該噪聲進(jìn)行了處理,白噪聲被大幅度削弱了,但是,這并不是說(shuō)噪聲就完全消除了,事實(shí)上,當(dāng)信號(hào)源停止發(fā)射后幾毫秒,噪聲會(huì)再次出現(xiàn),也就是所謂的"零電平干擾",根據(jù)說(shuō)明書的提示,這段時(shí)間大約為5毫秒. 別外,說(shuō)明書上也指出,信號(hào)發(fā)射的寬度不應(yīng)小于0.08毫秒,占空比也不能太大,否則很容易受到干擾. 從上面的資料,我們可以很輕易地分析出干擾來(lái)源. 根據(jù)資料,我們可以得出一個(gè)大概的設(shè)計(jì)原則: 1.占空比有限制,我們?nèi)藶橄拗频?:4之內(nèi). 2.發(fā)射時(shí)間小于3毫秒. 3.兩次發(fā)射的間隔小于3毫秒. 4.正式發(fā)射信號(hào)前要使用前導(dǎo)信號(hào),以消除"零電平干擾". 根據(jù)上面幾點(diǎn),我參考紅外信號(hào)算法,寫出了發(fā)送一字節(jié)的算法: 1.高低信號(hào)電平交替使用,與實(shí)際被發(fā)送數(shù)據(jù)的電平值無(wú)關(guān),而發(fā)送寬度及兩次發(fā)送的間隔寬度,與被發(fā)送數(shù)據(jù)的電平值相關(guān),對(duì)應(yīng)關(guān)系在后面作出描述. 2.以寬度為0.6毫秒的寬度表示位低電平. 3.以寬度為1.2毫秒的寬度表示位高電平. 4.以寬度為1.8毫秒的寬度表示數(shù)據(jù)正文的發(fā)送與結(jié)束. 以下給出流程: 1.從零電平開(kāi)始,交替發(fā)送/停止寬度為0.6毫秒的信號(hào),數(shù)量為單數(shù)個(gè),最少要有2個(gè),發(fā)送完后信號(hào)電平自然回到高電平,這里,我稱該組信號(hào)為"前導(dǎo)信號(hào)",用來(lái)清除"零電平干擾".前導(dǎo)信號(hào)的第一個(gè)信號(hào)很可能會(huì)丟失,但其設(shè)計(jì)目的本來(lái)就是用來(lái)丟失的,所以無(wú)須關(guān)心接收方實(shí)際收到的數(shù)量,該信號(hào)在接收方接收時(shí)只要收到一個(gè)即可. 2.發(fā)送一個(gè)寬脈沖,作為數(shù)據(jù)引導(dǎo),指示下一個(gè)信號(hào)將是數(shù)據(jù)正文.由于有前導(dǎo)信號(hào)保護(hù),該信號(hào)不會(huì)丟失. 3.發(fā)送數(shù)據(jù)正文的各個(gè)位,低位在前,從bit0開(kāi)始,位的值為0時(shí)發(fā)送0.6毫秒信號(hào),值為1時(shí)發(fā)送1.2毫秒脈沖.這里要再次說(shuō)明,所謂"發(fā)送信號(hào)",并不等于發(fā)送射頻信號(hào),關(guān)閉射頻同樣是發(fā)送信號(hào). 4.發(fā)送一個(gè)寬脈沖,作為結(jié)束信號(hào),表示數(shù)據(jù)發(fā)送完畢,脈沖結(jié)束后射頻信號(hào)正好自然轉(zhuǎn)為停止發(fā)送,即零電平. 上面的文字說(shuō)明有點(diǎn)復(fù)雜,下面給出圖示,圖示中的字節(jié)數(shù)據(jù)值為十六進(jìn)制數(shù)A6,圖中高電平時(shí)為發(fā)送射頻信號(hào): 1 01 0 0 1 1 0 _________|-|_|-|_|-|___|--|_|--|_|-|__|--|_|---|_________ A B C D EF A: 無(wú)關(guān)信號(hào),可能為任何電平值.此時(shí)數(shù)據(jù)還未開(kāi)始發(fā)送,不關(guān)心其電平為何值. B: 前導(dǎo)信號(hào),交替發(fā)送/靜默0.6毫秒. C: 引導(dǎo)信號(hào),靜默1.8毫秒. D: 一字節(jié)數(shù)據(jù)正文,用發(fā)送/靜默0.6毫秒表示0,發(fā)送/靜默0.6毫秒1.2毫秒表示1. E: 結(jié)束信號(hào),發(fā)送射頻1.8毫秒. F: 無(wú)關(guān)信號(hào),可能為任何電平值.此時(shí)數(shù)據(jù)已經(jīng)發(fā)送完畢,不關(guān)心其電平為何值. 看圖是不是清楚多了?如果還不懂,那我也沒(méi)辦法了. 接下來(lái)是一個(gè)寫好的例子,發(fā)送和接收例程都有,一次發(fā)送或接收24個(gè)字節(jié)定長(zhǎng)數(shù)據(jù)包.程序使用了并行工作機(jī)制,發(fā)送和接收可同時(shí)進(jìn)行,但由于發(fā)送與接收共用同一個(gè)內(nèi)存塊作緩沖區(qū),所以應(yīng)用時(shí)不能時(shí)調(diào)用,有興趣的可以自已改改程序,使用獨(dú)立的緩沖區(qū),這樣就可以同時(shí)發(fā)送和接收了,但我個(gè)人認(rèn)為意義不大,因?yàn)槭盏降臄?shù)據(jù)就是自已發(fā)的數(shù)據(jù),沒(méi)什么實(shí)際用處.晶振采用22.1184M,串口通信速率115200bps如果使用11.059M,232串口通信速率要改成57600. MCU端源代碼下載:http://202.103.67.224/shaoshan/mu/mcu/rftest1.rar PC端源代碼下載:http://202.103.67.224/shaoshan/mu/mcu/scommtest.rar PC端代碼默認(rèn)端口是COM4,自已改改吧,改成你要的就行了,具體怎么改,去上一講里面找. 由于單片機(jī)的內(nèi)存限制,數(shù)據(jù)包不能做得太大,同時(shí),長(zhǎng)數(shù)據(jù)包比短數(shù)據(jù)包的受干擾機(jī)率更大,所以,24字節(jié)是一個(gè)比較實(shí)用的值.經(jīng)測(cè)試,發(fā)送接收全部不用天線,發(fā)射電壓為5V時(shí),傳輸距離5米,如果加上25公分天線,傳個(gè)幾十米不成問(wèn)題,想要更遠(yuǎn)則要提高發(fā)射電壓了,電壓上限為12V,理論上應(yīng)該有300米,由于我自已的應(yīng)用場(chǎng)合是家用,所以沒(méi)測(cè)試過(guò),不知道實(shí)際有多遠(yuǎn). 使用例子的時(shí)候注意一下,測(cè)試程序main()的發(fā)送與接收是用條件編譯分開(kāi)的,下面的代碼中已有說(shuō)明.發(fā)送與接收要單獨(dú)編譯和燒片,要兩套硬件才能完成測(cè)試.在正式應(yīng)用中,應(yīng)注意一點(diǎn):收發(fā)程序都并非退出后就有數(shù)據(jù)的,一定要重復(fù)調(diào)用,直到滿足特定條件.并且,每?jī)纱握{(diào)用的時(shí)間間隔不能超過(guò)50微秒,否則會(huì)丟失數(shù)據(jù).為什么要將程序?qū)懗蛇@樣?是因?yàn)?寫成這樣子,我們就可以在發(fā)送和接發(fā)數(shù)據(jù)的同時(shí)作一些別的事情,例如鍵盤掃描,紅外發(fā)送接收,LED數(shù)碼管驅(qū)動(dòng)等. #if 1//測(cè)試時(shí),發(fā)送方寫#if 1 接收改成 #if 0 //正式應(yīng)用的話,請(qǐng)將程序插入你自已的應(yīng)用中,收發(fā)不能同時(shí)執(zhí)行. //調(diào)用格式: //while(w_send_step < 6 + W_BUF_LEN * 8){ // w_send(); // //這里可寫些別的代碼,例如鍵盤掃描,LED驅(qū)動(dòng)等,但時(shí)間不能超過(guò)50uS //} //while(w_recv_step == 3 + W_BUF_LEN * 8) // w_recv(); // //這里可寫些別的代碼,例如鍵盤掃描,LED驅(qū)動(dòng)等,但時(shí)間不能超過(guò)50uS //} if(send_over){ for(i=0; i- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 無(wú)線 通信協(xié)議 編寫
鏈接地址:http://www.820124.com/p-9096785.html