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