RFモジュール
RFモジュールとは、ある信号を高周波の波に変換して送信してくれる、ひとつのまとまりになった回路のことである。
(高周波にすると何がいいかは、勉強していくとわかると思うので、ここでは語りません。)
今回取り上げるのは、ラジコンに使われるFM40MHzの送信機とその受信機。
特定の決まりを守ると、改造なしにRFモジュールで任意の信号を送ることができる。
つまり、電波を用いた自作コントローラも夢じゃないということ。(近年のロボコンでは実際にやっているところが多い)
では、実際に見ていこう。
プロポとその信号
まずRFモジュールの前に、プロポの信号を見てみよう。
今回用いたのは、SANWAプロポのVG6000と受信機のRX-432。
CH数がプロポと受信機で違ったり、スティックが違うけど、そこはあまり気にせずに。
まず、何も押さないで信号を計ってみる。
(ただし、計る方法はPICkit2のロジックアナライザを使用。つまり3CHしか見れません。)
CH1の立下りとCH2の立上りが一緒であることが確認できる。
同様に、CH2とCH3、それ以降でも立上りと立下りは同じ。
そして、何も押さないと大体1.5msから1.6msのパルスが出ていることが確認できる。
今度はスティックを一本倒してみる。
そしてのその逆。
このように、倒した角度が、時間となって出力されている。
SANWAの仕様によると、本来は1.52msを中心として、+-0.5msの幅があるらしい。
さて、受信側の信号がわかったところで、今度はその信号を自由に発生させる方法を考えなくてはならない。
まず信号を送る方法として、実は2つの方法がある。
結果を言うと、プロポの中にはRFモジュールが入っている。
つまりどちらも信号は同じなのだが、トレーナーモードはプロポを持ち運ばなければならない。
そんなことは嫌なので、今回はRFモジュールを使用して信号を送ろう。
RFモジュールの規格
今回用いるのは、SANWAのTM-211CS。
55mmx34mmの小型な箱で、お値段は8000円程度。
背面にはピンを刺す穴があるわけだが・・・
これが一般的なピンヘッダでは届かない。
そこで、千石電商で売っている、足の長いピンヘッダを使用する。
残念ながらネットでは見つけられなかった。
秋葉原一号店の1階のレジの横から進んだところの陳列棚にあった。
探したり、聞いたりすれば見つかるかと。
すると、基板にRFモジュールがさせる。
これで実験が出来ると思いきや、端子の規格がわからない。
裏から見ると、8つ穴があることがわかる。
実はこのうち二つにはソケットがついていないので、ピンが刺さらない。
この2つのはずれを目印にして、
はずれ
はずれ
ENABLE(NC)
ANT
GND
VCC
VCC
DATA
らしいです。
(実際やってみて動いてるんで多分あってます)
電源は12V付近。
乾電池8本分。
充電池でも動かすことができ、およそ10V~13Vくらいなら問題なく動作する模様。
電圧を変えても届く範囲はほとんど変わりませんのでご安心を。
送信機側で電波の届く範囲を変更することはできません、むしろやったら電波法違反です。
送信側と受信側のプロセスは次のとおり。
コントローラのスティック情報をディジタル時間信号に変換
↓
送信機が入力をFM変調。
↓
送信機のアンテナから電波で送信
↓
受信機のアンテナで電波を受信
↓
FM波を復調しディジタル時間信号に戻す
↓
ディジタル時間信号をそれぞれの端子に出力
こんな感じ。
ノイズ対策についてはここでは考えない。
ちなみに先ほど送信機は電波法に触れると書いたけど、受信機に改造を施しても基本的には違反にはならない。
受信機で
「FM波を復調しディジタル時間信号に戻す」
をした波形を受信機の基板から取り出すと、実は送った波形そのものが取り出せるので、UART信号とかも送ることができたりする。
今回は改造をしないでうまく取り出す方法で考える。
送信機の端子にDATAという端子がある。
送るべき信号は時間情報であることはわかると思う。
と、いうことで送受信波形の関係をタイムチャートに示そう。
送信機のDATAの立ち上がりに合わせて、受信機のCHの出力が変化する。
ただし送信機と受信機の間には遅れが生じるので、時間は変わらなくても同時ではないです。
つまり、マイコンのタイマ機能やPWM機能を使えば簡単に送受信が実現できるというわけ。
この変調信号にパルス波を入れるに当たり,どうやってデジタルデータとアナログデータを変換するかがポイント.
今回やったのは1CHのアナログデータに3bitの情報を入れ,4CH使って全部で12bit分の情報を送るというもの.
ただしUARTは8bitなので,残りの4bitはデータの信頼性を上げるために使う.
まず標準状態を1.5msとする.
次に最少と最大を1.1msと1.9msとすると,
000 1.1ms
001 1.2ms
010 1.3ms
011 1.4ms
100 1.6ms
101 1.7ms
110 1.8ms
111 1.9ms
とする.1.5msは標準状態なので,これを受信したらノイズか無信号として扱う.
この秒数の波形はPWMモジュールを使うと簡単に作れる,はずだったが何とか作れた.
それは添付するtxtファイルを読めばわかるかも.
これを4CH繰り返すと,4bit余る.
そこでまず1bitはパリティチェックに使う.
パリティチェックとは1または0の数が奇数になるか偶数になるかを確認するエラー検知法.
間違いを確認したら,そのデータを破棄すればよい.
ただし,送信周期が50Hz程度なので,遅延を感じるほどデータを破棄しないように.
さらに一回の信号受信では保証がないため,複数回信号を受信してみて,データを確認する.
そのために残り3bitにはデータの受信回数を入れる.
これにより同じデータを受信しても,何回同じデータが送られたか判断することができる.
ということで回路を作り,データを送ってみた.
2010_RF_UART.zip
2010年度のNHK高専ロボコン,木更津Bで使用してみたところ動作.
たまにノイズを拾っていたみたいだけど,大会中は問題なかった模様.
プロポの送受信機を改造しなくて済むので,やってみては?
注* zipファイル内の回路図の,RFモジュールの接続番号が間違っています.txtファイルを参考にしてください.
最終更新:2011年08月07日 19:40