全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6892
推到 Plurk!
推到 Facebook!

無線發射器編解碼疑問

答題得分者是:david69
極光空
一般會員


發表:4
回覆:15
積分:3
註冊:2006-07-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-23 20:19:54 IP:218.211.xxx.xxx 訂閱
我想請問一下,若不用編解碼IC,要這樣做編解碼阿?
我目前有一般市面可以買到的TG11無線發射模組,而編解碼部分我想用MC完成
不過我發現發射模組有一個問題耶!就是若發射端輸入訊號為 H = 200us L=200us的連續方波
輸出則變成 H = 160us L= 240us的連續方波,不知道有沒有哪位好心人士可以跟我說要這樣做編碼阿
我本來是打算直接輸入UART訊號的,但因有上述原因,因而放棄了
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-25 12:58:22 IP:220.131.xxx.xxx 訂閱
我不知道你的TG11 是怎樣的東西。
433MHz 我手上的收發模組它有說輸入的脈波寬度至少在200 us 以上較好辨識。
極光空
一般會員


發表:4
回覆:15
積分:3
註冊:2006-07-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-25 15:45:51 IP:218.211.xxx.xxx 訂閱
我的是315M的無線傳輸模組
但現在遇到接收模組會有傳輸延遲的問題!
假設我再發射端輸入H、L各208us的方波
我用示波器去看接收到的波形,會發現H的時間變短而L的時間變長
而且變化量會隨著鉅離的遠近而有所變動。

這讓我很苦惱!因為我這樣導致訊號無法同步,因此接收到的訊號都是錯誤的
我之前用義統的27M的RF傳送模組就沒有這種問題,但義統那個太貴了
一個模組要價800,而一般無線發射模組不到300,所以就想用一般無線發射模組
做做看,但沒想到會遇到如此問題ㄚ?

aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-27 10:08:57 IP:61.219.xxx.xxx 訂閱
大家的問題,以前就有先進指點過,問題如下:
=======================================
(1)
發信人: FreeZ , 看板: Electronics
標 題: Re: 89C51 與 RF 發射模組的問題....
發信站: Free Tech (Mon May 21 05:20:09 2001) 61-216-128-201.hinet-ip.hinet.net
轉信站: Maxwell!bbs.ee.ntu!news.ntu!ctu-gate!news.nctu!netnews.hinet.net!news

> ※ 引述《yigong@giga.net.tw (yigong)》之銘言:
> 我想請問 如果我用 89C51 的 txd 的串列傳輸
> 送出一各 8 bit 的串列訊號 如後
> 給 RF 的發射模組 (TG-11 303Mhz) 發射出去
> 然後 在 接收模組上 接到 RS232 送給PC
> 然後 用 VB MSCOMM 顯示出來
> 但市不知道為什麼 接收的訊後 都一直不對 會亂跳
> 如果不接發射模組 8051 直接接到 RS232
> 一切正常 想請問 這是什麼原因...
> 我們老師不讓我們用 編解碼 IC HT12E

空中最好不要直接用 UART , 因為裡面的訊號中會有太長的定態, 也就是在資料中, 常常會有連
續的 0 , 或連續的 1.

在連續的期間, 只要有一丁點的干擾, 你的資料就完蛋了! 有空可以參考一下各種軟碟機的低階
讀寫原理, 若你要用那些的編碼最好!

有一個 PCM 的飛機遙控器, 就是用 APPLE ][ 軟碟的編碼方式...
若你要直接用 UART, 最好編碼後, 使之沒有連續的 1 (或 0) , 再用. 傳送資料時, 定態不要超
過三個 bit 的時間.

所以你可能要把一個 byte 的資料, 拆成兩 byte, 編碼插一些 bit 後, 再來送. 對方接到後, 再
組合回來.

同步碼, 前導碼....等等控制碼, 用資料編碼沒有用到的, 這樣接收的程式比較好寫.
當然, 無線通訊中, 由於失誤率遠大於有線, 故一定要有檢查碼 (有線幾乎都有在核對, 更何況是無
線呢? ) ; 以便讓收方要求重送, 還是丟棄.

另外 51 會干擾接收模組. 可的話, 用頻譜儀看一下在接收頻率附近的那幾根諧波, 有沒有很大根,
有沒有命中接收頻率.

注意 RF 模組的頻寬, 以便規化適合的鮑率.
~~~~~~
很精闢的見解,一針見血,佩服,這位仁兄所說得情形與敝人先行實驗的結果完全吻合,實為值得參考
的文章,好好研究個中道理,就會明白問題來源,編碼與通訊協定是重要的考慮與必要的措施..
Good luck....
--
=====================================================
(2)

Re: 使用無線模組(類似 tg11)與 rs232 連接,做無線單向的資料傳輸遇到的問題
>我是利用 RS232 連接無線模組來做簡單的單行資料傳輸(只傳過去別台電腦,不接收)
>大概的架構是降的
>PC -> RS232 -> 無線模組(傳送) (接收)無線模組 -> RS232 -> PC
>不過我直接降子接行不通。
>
>我寫的程式是參考下面的文章
>http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37427
>
>不過像上面降子接,問題很可能出現在很多地方。
>為了簡化問題。我先用一台電腦的 rs232(公接頭),將 pin2 跟 pin3 短路(連接),
>用降的連接來測試程式是否可以 work,結果是可以的
>所以應該代表我寫的程式是 OK 的.
>
>接著用同台電腦、同樣程式,我將 RS232(公接頭)的 pin3 接上無線模組的傳送模組,
>pin2 接上無線模組。結果還是不行,後來想想,以為是電壓位準的問題。
>我就用 hin232 這個 chip 來調整電壓位準。還是不行!
>
>想請問一下大家我那裡有可能出問題。不管是小是大的可能的問題。
>都可以提出來。因為我本身是唸資工的,在硬體方面有滿多的觀念都不大清楚。
>麻煩一下大家 謝謝
>
>這下面有幾個地方是相關的資料
>1. 我接地都有接在同一個接地
>2. 使用 BCB
>3. 我設的 Baud rate 為 2400
>4. 在電腦的硬體管理員也將 port com1 的 Baud rate 設成 2400 了!

TG-11 模組..基本上是用來傳送簡單的命令而已..類似機車的遙控發動器...
加上編解碼 IC,可以傳送的距離非常遠..我有測試過..可達到 50 幾公尺..再遠沒測過了..

至於你說的這個架構..基本上我也是有嘗試過...
只不過我的架構是...
PC -> RS-232 -> HIN232(電壓準位轉換) -> 無線發射模組 ~~ 無線接收模組 -> 8051 的 RS-232 埠
但是..可以傳送的距離很短..二~三公尺左右..

因此..基本上你的架構應該是可行的..只是有些地方可能你可以嘗試一下...
我傳送資料時..大概每秒要傳送 30 幾筆左右...每筆大約 10Byte 左右..
8051 才能穩定的接收到資料...
我的 Baud Rate = 4800 bps...8N1...
給你參考...希望對你有幫助...^^

另外..你可以到 Google 用 "RWS-434" 關鍵字應該可以查到很多資料..
還有..元智大學也有相關的文件..
http://designer.mech.yzu.edu.tw/article/articles/technical/(2001-08-30)
無線電收發模組電路製作介紹.htm


發表人 - fnk 於 2005/02/26 05:04:14
你可能要嘗試著將傳送資料的"頻率"提高...
例如..每秒傳送字串"123456789"... 30-40 次...
也就是說..每隔 30ms 左右..就將字串 "123456789" 傳送過去...
這樣可以提高資料傳送時的穩定度...
另外..二個模組不要擺太遠..一開始最好離近一點...
模組需要加上天線..會比較好..
嗯..是的..接收端會一直接收到雜訊..
若要排除接收到雜訊..則可以自定接收的格式...
例如..若你要傳送 "ABC" 這三個字元過去...
則你的格式可能可以類似寫成這樣子...
$ABCk@
$ -->表示前導符號...
ABC -->表示欲傳送的資料..
k -->表示檢查碼..(CheckSum)
@ -->表示結束符號...
程式可以寫成...
當接收到的字元..是 '$' 時..
則開始接收資料..並同時儲入 Buffer..
一直接收到..結束字元 '@' 出現...或資料長度大於某個值..才結束接收..
當字串接收完成後, 再比對 (CheckSum) 與傳送的資料是否符合..
若符合..則表示資料接收正確...
or see "CRC.txt" & "checksum.txt"
給你參考..希望有幫助..^^
===========
有興趣,就能進步
===========
呵呵~~~看來有人碰到跟我一樣的問題喔~~我之前有做一個題目,其中也是需要無線傳輸,
於是我用的架構跟你們討論的一樣(因為這是最方便的),但是我發現,這需要將傳送的包率達
到 115200 才能夠比較容易接收到,而且為了增加傳輸的可信度,使用了
handshake boardbast packet 的 protocol,因為我這是一個 server 對很多的 client 做控制,
但都是使用一樣的頻率,所以我是用 TDM 方式來做,但還是不穩,有時不到 1 秒就可以,
控制有時要等一分鐘?!@@a....這種通訊系統實在是太爛了....當下我也找不出方法可以解決就畢業了....
但是現在我知道問題所在了,
原因是 "0", "1" 分別要用不同的狀態來表示,不能直接把 "O" 當成電位 0V 送給模組,
這樣會變成接收段無法判斷現在是什麼狀態,這麼說好了,如果是送 1 出來的話還沒什麼錯誤,
但 RS232 是 "狀態 0" 就是 "0 電位",這時接收端就會接收到雜訊,運氣好的話若雜訊是在 TTL
的 0 準位以下,就收到 0,但雜訊一個過大,就變成 1 了,那這時就會出錯
所以很不幸的...不能直接送 RS232 訊號給模組....所以別偷懶了~~~自己寫個 protocol 來傳吧!
我建議可以遵循紅外線的傳送方式來送,因為 PT2262 這個無線遙控器 IC 就是用這樣的方式來傳,
大家可以去 GOOGLE 找這個 SPEC., 裡面有 PROTOCOL 的詳細解說或是使用 Manchester 編碼
也是可以的~~不管是用什麼方法,反正原則就是千萬不要用"電位 0" 來代表有意義的資料
送到無線模組!
~~說完了>_<||
david69
一般會員


發表:1
回覆:19
積分:19
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-05 17:54:31 IP:76.81.xxx.xxx 訂閱
你可用一種編碼方式: 每傳一個bit後就反向,且定logic 0時為一個時間長度,而logic 1時為另一個長度。例如: 送250us為0,送500us時為1,送010110時為: low:250us->high:500us->low:low:250us->high:500us->low:500us->high:250us
極光空
一般會員


發表:4
回覆:15
積分:3
註冊:2006-07-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-06 23:35:30 IP:218.211.xxx.xxx 訂閱
這種編碼方法我用過了,利用各代表不同長度的訊號來代表"0"和"1"這事可行的
但是我陷再又碰到一個蠻嚴重的問題,就是接收端的訊號會偏移的問題
假設我送出的脈波為H:400us L:600us的訊號,但我的接收端可能會收到H:350 L:650us OR H:450 L:550us
單然只是假設偏移50us,但我實際實驗後發現,偏移的情況會漂移不定,這樣導致我收到的訊號幾乎都有問題
運氣好的話可以收到正確的訊號,但有時又收不到了。

我是看我有文章說可以利用相對寬度的方法來克服偏移問題,不過它並沒有說明何謂相對寬度取法
不知道有沒有哪位人士有克服過無線傳輸模組訊號偏移的問題
david69
一般會員


發表:1
回覆:19
積分:19
註冊:2003-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-08 13:02:49 IP:76.81.xxx.xxx 訂閱
這種的偏移是常見的,尤其是AM modulation。我的經驗是,將0與1的的寬度差加大,一般來說,兩個差一倍就可以了。你定的400/600us就不太夠,我建議用400/800(或300/600)us試試,再以寬度600us(或450us)為0/1的判定界限; 再加個偵測寬度若小於200(或150)us或大於1000(或750)us的訊號就視為雜訊丟棄不要。
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-08 18:20:40 IP:61.219.xxx.xxx 訂閱
很好的建議.

這本書有提到一些 coding 的技巧與概念.

ET13x210/211/221 無線通訊模組應用實例

作(譯)者:李仁貴、劉新盛、陳俊錩

出版者:全華
書號:05381
ISBN:9572148176
頁數:240頁
出版日期: 2005/5/2
相關附件:

本書中使用義統電子公司推出單晶片ET13X210/211. 及ET13X221 其中整合了鎖相迴路 PLL
並簡化週邊的應用使工程人員很快上手。 ... 2.2 ET13X210/211 與ET13X221 晶片與
應用電路介紹. 2.3 ET13X210/221 模組使用介紹. 2.4 ET13X210/211 與
ET13X221 傳輸之 ...

有興趣的朋友可以參考一下喔!

===================引 用 david69 文 章===================
這種的偏移是常見的,尤其是AM modulation。我的經驗是,將0與1的的寬度差加大,一般來說,兩個差一倍就可以了。你定的400/600us就不太夠,我建議用400/800(或300/600)us試試,再以寬度600us(或450us)為0/1的判定界限; 再加個偵測寬度若小於200(或150)us或大於1000(或750)us的訊號就視為雜訊丟棄不要。
david69
一般會員


發表:1
回覆:19
積分:19
註冊:2003-06-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-10 06:01:39 IP:76.81.xxx.xxx 訂閱
老實說,那本書是為了推廣那顆RF IC而寫,初學者看那是還可以啦!但,若想省點錢,就照我的方法就可了。正常來說,上述的data偏移量太大,是要調整RF電路的。但你買的是module,我想你也不會調整電路。有件事忘了說,在傳data之前,一定要先傳幾個preamble,就是給它連續幾個hi/low。preamble除可吸收rf電路剛開通時所產生的data偏移的問題外,也可用來標示要用的資料要來了。為了確保資料的正確,checksun也不可少哦!
極光空
一般會員


發表:4
回覆:15
積分:3
註冊:2006-07-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-06-10 21:19:40 IP:218.211.xxx.xxx 訂閱
先感謝各位的回應啦!因為為了能夠讓發射與接收產生同步,我在引導碼後發射一個H:400 L:1.2ms的前置訊號
我的接收端會先判斷是否收道同步訊號,利用MCU去計數,若收到H大於500小於300就判定是雜訊,而L的部份也是加減0.1ms
來做為同步碼的確認,收到後判別"0"或"1"我的編碼方式利用若發射"0"則H:400 L:600 若是"1"則是H:"600" L:"400"來編碼

只是我的訊號偏移感覺蠻嚴重的,不知道是不是我電路本身的問題,還是模組的問題
往往都死在同步碼不能同步,因為很容易同步碼就超出我設定的範圍,而且還會隨著鉅離的變化
而有所變動,所以我實驗很久還是找不出一個範圍。

目前我實驗的結果是只做單向傳輸的話,成功機率約在6成左右,但有時還是會有問題
但是若做雙向傳輸的話',那成功機率不到3成,偶爾才能成功。

我採用半雙工方式對傳,當主控端傳送完資料後,我就直接把發射模組的電源接地,然後主控端就接廳附屬端是否有回傳資料
以確保剛剛傳送的資料無誤,不過常常發生附屬端已經送完資料,主控端還在癡癡等待。

後來覺得用自己做碥解碼有夠難做的,可能後來就不玩了。接下來可能會使用現有的模組來完成無線傳輸的工作
目前想玩玩看Zigbee的傳輸協定,不過Zigbee的協定看了有點頭大,感覺真複雜阿!

不知道有沒有人也在玩Zigbee,可以討論一下嗎?不過還是感謝各位的回應

TaylorKe
一般會員


發表:21
回覆:40
積分:17
註冊:2003-08-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-07-21 00:11:54 IP:219.68.xxx.xxx 訂閱
你可以考慮使用曼徹斯特編碼,基本上可以去除連續"0"或連續"1"的問題,缺點是鮑率會/2.
系統時間:2024-05-12 18:49:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!