【转载】315M无线模块数据传输——深入研究
生活随笔
收集整理的這篇文章主要介紹了
【转载】315M无线模块数据传输——深入研究
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基礎(chǔ)篇在這里:用廉價(jià)的315M遙控模塊實(shí)現(xiàn)數(shù)據(jù)傳輸
實(shí)驗(yàn)一:鏈路層協(xié)議(友情提醒:如果你沒有過通信調(diào)試的經(jīng)驗(yàn),看以下文字可能會(huì)覺得暈暈乎乎的,請(qǐng)?zhí)^本小節(jié)直接從第二節(jié)開始)用示波器查看315M接收模塊的輸出波形,發(fā)現(xiàn)有以下規(guī)律:1)平時(shí)沒信號(hào)的時(shí)候輸出雜波(串口一直接收到亂碼);2)有信號(hào)的時(shí)候,輸出發(fā)送模塊送來的波形,但是最開始的一個(gè)字節(jié)數(shù)據(jù)會(huì)有干擾;3)信號(hào)發(fā)送結(jié)束后,輸出端會(huì)有100ms左右的寂靜期(輸出低電平),然后重新輸出雜波;4)數(shù)據(jù)發(fā)送期間,剛開始的數(shù)據(jù)的輸出波形比較干凈,信號(hào)持續(xù)的時(shí)間越長(zhǎng),越容易出現(xiàn)干擾(串口接收數(shù)據(jù)出現(xiàn)1-2bit的誤碼)。
根據(jù)以上特點(diǎn),確定315M模塊發(fā)送的幀結(jié)構(gòu)如下:引導(dǎo)碼+間隔15ms+幀頭+數(shù)據(jù)+校驗(yàn)位,解釋如下:
1)引導(dǎo)碼的作用:從沒信號(hào)到有信號(hào)的開始階段,數(shù)據(jù)會(huì)有干擾,所以先發(fā)送幾個(gè)字節(jié)的引導(dǎo)碼。這樣即使其中的1-2個(gè)引導(dǎo)碼因?yàn)楦蓴_而丟掉也沒有關(guān)系。接收端收到引導(dǎo)碼不保存,自動(dòng)忽略。我的蓋革計(jì)數(shù)器協(xié)議中,引導(dǎo)碼為4個(gè)字節(jié)的字符‘A’。2)引導(dǎo)碼+間隔15ms:保證從幀頭開始,輸出信號(hào)的波形非常干凈;3)幀頭:告訴接收端一個(gè)幀的開始。我的蓋革計(jì)數(shù)器協(xié)議中,幀頭為兩個(gè)字符“AT”。幀頭第一個(gè)字節(jié)跟引導(dǎo)碼相同,這樣在接收端處理接收數(shù)據(jù)時(shí)可以自動(dòng)忽略重復(fù)收到的字符‘A’。4)校驗(yàn):因?yàn)?15M無線傳輸極易出現(xiàn)干擾,所以必須加上幀校驗(yàn),避免將干擾信號(hào)誤認(rèn)為是有效數(shù)據(jù)。我的蓋革計(jì)數(shù)器協(xié)議中,采用異或和的校驗(yàn)方式,具體為:將數(shù)據(jù)所有字節(jié)進(jìn)行異或計(jì)算,取得一個(gè)異或和作為校驗(yàn)位。5)檢驗(yàn)的改進(jìn):經(jīng)過大量測(cè)試發(fā)現(xiàn),經(jīng)常出現(xiàn)以下情況:數(shù)據(jù)的某一個(gè)bit受到干擾,例如0變成1,而恰巧校驗(yàn)和的同一個(gè)bit也同樣因?yàn)楦蓴_而由0變成1,這樣事實(shí)上收到了一位錯(cuò)誤的數(shù)據(jù),但是檢驗(yàn)卻剛好正確,接收端誤認(rèn)為是正確的數(shù)據(jù)。為了避免以上的情況,將校驗(yàn)和改為:異或和取反,即將數(shù)據(jù)所有字節(jié)進(jìn)行異或計(jì)算,取得一個(gè)異或和,再取反作為校驗(yàn)位。6 )幀長(zhǎng):由于上面觀察到的規(guī)律4,發(fā)送長(zhǎng)幀的時(shí)候容易出現(xiàn)誤碼,而發(fā)送短幀的時(shí)候正確率接近100%。我的蓋革計(jì)數(shù)器協(xié)議中,本來采用長(zhǎng)度為12字節(jié)的幀一次將一分鐘/5分鐘/1小時(shí)/1天測(cè)量平均值發(fā)送給PC機(jī),后來改為長(zhǎng)度為6字節(jié)的短幀,分4次發(fā)送4個(gè)測(cè)量平均值。幀結(jié)構(gòu)為:AAAA-15ms-AT-數(shù)據(jù)類型-數(shù)據(jù)高字節(jié)-數(shù)據(jù)低字節(jié)-校驗(yàn)和。
實(shí)驗(yàn)二:天線在網(wǎng)上查詢了資料,關(guān)于315M模塊的天線,有以下3種說法:1)彈簧天線,用1mm的銅線繞成彈簧形狀,彈簧直徑6mm,繞23圈。淘寶上賣的模塊有部分是不焊天線的,如果有天線,就是這樣的彈簧天線。2)用25cm的長(zhǎng)導(dǎo)線,豎起來。3)315M模塊用39cm的導(dǎo)線,433M模塊用23cm。測(cè)試條件:速率1200bps。接收模塊采用穩(wěn)壓5V供電,發(fā)送模塊采用未經(jīng)穩(wěn)壓的11V供電。發(fā)送模塊的工作電流:靜態(tài)3.7mA,發(fā)送數(shù)據(jù)時(shí)4-11mA(發(fā)送第一幀的時(shí)候4mA,第二幀5mA,第三幀6mA,如此逐次上升,到11mA再逐次下降到4mA。不知道為什么會(huì)變化)。發(fā)送連幀頭+數(shù)據(jù)+校驗(yàn)位共6個(gè)字節(jié)的短幀。測(cè)試結(jié)果:1)彈簧天線:直線距離大于8米開始出現(xiàn)誤碼幀;2)25cm導(dǎo)線:書房到客廳,距離13米,隔一堵墻,開始出現(xiàn)誤碼幀;3)39cm導(dǎo)線:書房到陽臺(tái),距離15米,隔2堵墻一道門,正確率100%。如果改為發(fā)送12字節(jié)的長(zhǎng)幀,開始出現(xiàn)誤碼,誤碼幀30%,正確70%。結(jié)論:采用39cm的導(dǎo)線效果最好。
實(shí)驗(yàn)三:采用歸零碼在網(wǎng)上查閱了一些資料,稱數(shù)據(jù)通信最好不要采用非歸零碼,尤其是不能出現(xiàn)長(zhǎng)1或者長(zhǎng)0,否則容易受到干擾。建議采用歸零碼,例如曼切斯特碼或者POCSAG碼等。所謂的歸零碼就是發(fā)送的所有數(shù)據(jù)中,出現(xiàn)高電平和低電平的時(shí)間總和剛好是50%-50%。例如曼切斯特碼,不再用高電平/低電平表示1和0,而是用電平跳變表示1和0,例如低電平變成高電平(上升沿)為1,下降沿為0,這樣無論發(fā)送任何數(shù)據(jù),都保證高電平和低電平的時(shí)間剛好是50%-50%。用示波器觀察接收波形,跟資料描述的一致。我發(fā)送的數(shù)據(jù)幀為:AT-00-01-02-校驗(yàn)和,其中有大量的長(zhǎng)0,很容易受到干擾將00變成01,或者40之類,其實(shí)只有一個(gè)bit出錯(cuò),由于校驗(yàn)失敗,整個(gè)幀就要丟棄。如果是12字節(jié)的長(zhǎng)幀,出現(xiàn)誤碼幀的概率更大,一共96個(gè)bit,只要任何一個(gè)bit受到干擾出錯(cuò),整個(gè)幀就要丟棄。原來的長(zhǎng)幀結(jié)構(gòu)為:AAAA-15ms-AT-10-00-01-02-03-04-05-06-07-XOR,現(xiàn)在改成歸零碼:0x5a-0x5a-0x5a-0x5a-15ms-0x5a-0xa5-99-55-56-59-5a-65-66-69-6a-XOR(原來的引導(dǎo)碼和幀頭AT不符合歸零碼規(guī)則,改為0x5a-0xa5)。效果超好!從書房到陽臺(tái)(距離15米,隔2堵墻一道門)正確率100%。發(fā)送在13樓,接收走到10樓,仍然保持正確率100%。走到9樓(隔4層樓)開始出現(xiàn)誤碼幀。走到8樓(隔5層樓)只能偶爾收到一幀。這個(gè)效果已經(jīng)超過我在TB上買的成品CC1100數(shù)傳模塊,單個(gè)模塊60塊錢,帶SMA鞭狀天線,在9600速率下,書房到陽臺(tái)ok,隔一層樓ok,1.5層樓開始出現(xiàn)誤碼,隔2層樓則只能偶爾收到數(shù)據(jù)。
------------------------------- 總結(jié)-------------------------------------------------1)采用幀結(jié)構(gòu):0x5a-0x5a-0x5a-0x5a-間隔15ms-0x5a-0xa5-數(shù)據(jù)-XOR_SUM_NOT,盡量縮短幀長(zhǎng)度;2)數(shù)據(jù)采用曼切斯特碼來編碼,可以極大地提高傳輸性能;3)天線采用39cm的導(dǎo)線,豎起來,效果最佳。
實(shí)驗(yàn)一:鏈路層協(xié)議(友情提醒:如果你沒有過通信調(diào)試的經(jīng)驗(yàn),看以下文字可能會(huì)覺得暈暈乎乎的,請(qǐng)?zhí)^本小節(jié)直接從第二節(jié)開始)用示波器查看315M接收模塊的輸出波形,發(fā)現(xiàn)有以下規(guī)律:1)平時(shí)沒信號(hào)的時(shí)候輸出雜波(串口一直接收到亂碼);2)有信號(hào)的時(shí)候,輸出發(fā)送模塊送來的波形,但是最開始的一個(gè)字節(jié)數(shù)據(jù)會(huì)有干擾;3)信號(hào)發(fā)送結(jié)束后,輸出端會(huì)有100ms左右的寂靜期(輸出低電平),然后重新輸出雜波;4)數(shù)據(jù)發(fā)送期間,剛開始的數(shù)據(jù)的輸出波形比較干凈,信號(hào)持續(xù)的時(shí)間越長(zhǎng),越容易出現(xiàn)干擾(串口接收數(shù)據(jù)出現(xiàn)1-2bit的誤碼)。
根據(jù)以上特點(diǎn),確定315M模塊發(fā)送的幀結(jié)構(gòu)如下:引導(dǎo)碼+間隔15ms+幀頭+數(shù)據(jù)+校驗(yàn)位,解釋如下:
1)引導(dǎo)碼的作用:從沒信號(hào)到有信號(hào)的開始階段,數(shù)據(jù)會(huì)有干擾,所以先發(fā)送幾個(gè)字節(jié)的引導(dǎo)碼。這樣即使其中的1-2個(gè)引導(dǎo)碼因?yàn)楦蓴_而丟掉也沒有關(guān)系。接收端收到引導(dǎo)碼不保存,自動(dòng)忽略。我的蓋革計(jì)數(shù)器協(xié)議中,引導(dǎo)碼為4個(gè)字節(jié)的字符‘A’。2)引導(dǎo)碼+間隔15ms:保證從幀頭開始,輸出信號(hào)的波形非常干凈;3)幀頭:告訴接收端一個(gè)幀的開始。我的蓋革計(jì)數(shù)器協(xié)議中,幀頭為兩個(gè)字符“AT”。幀頭第一個(gè)字節(jié)跟引導(dǎo)碼相同,這樣在接收端處理接收數(shù)據(jù)時(shí)可以自動(dòng)忽略重復(fù)收到的字符‘A’。4)校驗(yàn):因?yàn)?15M無線傳輸極易出現(xiàn)干擾,所以必須加上幀校驗(yàn),避免將干擾信號(hào)誤認(rèn)為是有效數(shù)據(jù)。我的蓋革計(jì)數(shù)器協(xié)議中,采用異或和的校驗(yàn)方式,具體為:將數(shù)據(jù)所有字節(jié)進(jìn)行異或計(jì)算,取得一個(gè)異或和作為校驗(yàn)位。5)檢驗(yàn)的改進(jìn):經(jīng)過大量測(cè)試發(fā)現(xiàn),經(jīng)常出現(xiàn)以下情況:數(shù)據(jù)的某一個(gè)bit受到干擾,例如0變成1,而恰巧校驗(yàn)和的同一個(gè)bit也同樣因?yàn)楦蓴_而由0變成1,這樣事實(shí)上收到了一位錯(cuò)誤的數(shù)據(jù),但是檢驗(yàn)卻剛好正確,接收端誤認(rèn)為是正確的數(shù)據(jù)。為了避免以上的情況,將校驗(yàn)和改為:異或和取反,即將數(shù)據(jù)所有字節(jié)進(jìn)行異或計(jì)算,取得一個(gè)異或和,再取反作為校驗(yàn)位。6 )幀長(zhǎng):由于上面觀察到的規(guī)律4,發(fā)送長(zhǎng)幀的時(shí)候容易出現(xiàn)誤碼,而發(fā)送短幀的時(shí)候正確率接近100%。我的蓋革計(jì)數(shù)器協(xié)議中,本來采用長(zhǎng)度為12字節(jié)的幀一次將一分鐘/5分鐘/1小時(shí)/1天測(cè)量平均值發(fā)送給PC機(jī),后來改為長(zhǎng)度為6字節(jié)的短幀,分4次發(fā)送4個(gè)測(cè)量平均值。幀結(jié)構(gòu)為:AAAA-15ms-AT-數(shù)據(jù)類型-數(shù)據(jù)高字節(jié)-數(shù)據(jù)低字節(jié)-校驗(yàn)和。
實(shí)驗(yàn)二:天線在網(wǎng)上查詢了資料,關(guān)于315M模塊的天線,有以下3種說法:1)彈簧天線,用1mm的銅線繞成彈簧形狀,彈簧直徑6mm,繞23圈。淘寶上賣的模塊有部分是不焊天線的,如果有天線,就是這樣的彈簧天線。2)用25cm的長(zhǎng)導(dǎo)線,豎起來。3)315M模塊用39cm的導(dǎo)線,433M模塊用23cm。測(cè)試條件:速率1200bps。接收模塊采用穩(wěn)壓5V供電,發(fā)送模塊采用未經(jīng)穩(wěn)壓的11V供電。發(fā)送模塊的工作電流:靜態(tài)3.7mA,發(fā)送數(shù)據(jù)時(shí)4-11mA(發(fā)送第一幀的時(shí)候4mA,第二幀5mA,第三幀6mA,如此逐次上升,到11mA再逐次下降到4mA。不知道為什么會(huì)變化)。發(fā)送連幀頭+數(shù)據(jù)+校驗(yàn)位共6個(gè)字節(jié)的短幀。測(cè)試結(jié)果:1)彈簧天線:直線距離大于8米開始出現(xiàn)誤碼幀;2)25cm導(dǎo)線:書房到客廳,距離13米,隔一堵墻,開始出現(xiàn)誤碼幀;3)39cm導(dǎo)線:書房到陽臺(tái),距離15米,隔2堵墻一道門,正確率100%。如果改為發(fā)送12字節(jié)的長(zhǎng)幀,開始出現(xiàn)誤碼,誤碼幀30%,正確70%。結(jié)論:采用39cm的導(dǎo)線效果最好。
實(shí)驗(yàn)三:采用歸零碼在網(wǎng)上查閱了一些資料,稱數(shù)據(jù)通信最好不要采用非歸零碼,尤其是不能出現(xiàn)長(zhǎng)1或者長(zhǎng)0,否則容易受到干擾。建議采用歸零碼,例如曼切斯特碼或者POCSAG碼等。所謂的歸零碼就是發(fā)送的所有數(shù)據(jù)中,出現(xiàn)高電平和低電平的時(shí)間總和剛好是50%-50%。例如曼切斯特碼,不再用高電平/低電平表示1和0,而是用電平跳變表示1和0,例如低電平變成高電平(上升沿)為1,下降沿為0,這樣無論發(fā)送任何數(shù)據(jù),都保證高電平和低電平的時(shí)間剛好是50%-50%。用示波器觀察接收波形,跟資料描述的一致。我發(fā)送的數(shù)據(jù)幀為:AT-00-01-02-校驗(yàn)和,其中有大量的長(zhǎng)0,很容易受到干擾將00變成01,或者40之類,其實(shí)只有一個(gè)bit出錯(cuò),由于校驗(yàn)失敗,整個(gè)幀就要丟棄。如果是12字節(jié)的長(zhǎng)幀,出現(xiàn)誤碼幀的概率更大,一共96個(gè)bit,只要任何一個(gè)bit受到干擾出錯(cuò),整個(gè)幀就要丟棄。原來的長(zhǎng)幀結(jié)構(gòu)為:AAAA-15ms-AT-10-00-01-02-03-04-05-06-07-XOR,現(xiàn)在改成歸零碼:0x5a-0x5a-0x5a-0x5a-15ms-0x5a-0xa5-99-55-56-59-5a-65-66-69-6a-XOR(原來的引導(dǎo)碼和幀頭AT不符合歸零碼規(guī)則,改為0x5a-0xa5)。效果超好!從書房到陽臺(tái)(距離15米,隔2堵墻一道門)正確率100%。發(fā)送在13樓,接收走到10樓,仍然保持正確率100%。走到9樓(隔4層樓)開始出現(xiàn)誤碼幀。走到8樓(隔5層樓)只能偶爾收到一幀。這個(gè)效果已經(jīng)超過我在TB上買的成品CC1100數(shù)傳模塊,單個(gè)模塊60塊錢,帶SMA鞭狀天線,在9600速率下,書房到陽臺(tái)ok,隔一層樓ok,1.5層樓開始出現(xiàn)誤碼,隔2層樓則只能偶爾收到數(shù)據(jù)。
------------------------------- 總結(jié)-------------------------------------------------1)采用幀結(jié)構(gòu):0x5a-0x5a-0x5a-0x5a-間隔15ms-0x5a-0xa5-數(shù)據(jù)-XOR_SUM_NOT,盡量縮短幀長(zhǎng)度;2)數(shù)據(jù)采用曼切斯特碼來編碼,可以極大地提高傳輸性能;3)天線采用39cm的導(dǎo)線,豎起來,效果最佳。
總結(jié)
以上是生活随笔為你收集整理的【转载】315M无线模块数据传输——深入研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汽水音乐怎么开启个性化设置
- 下一篇: (原创) 电源滤波为何要用几个不同量级的