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モジュールを使用して信号を送ろう。


RFモジュールの規格


今回用いるのは、SANWAのTM-211CS。
55mmx34mmの小型な箱で、お値段は8000円程度。

背面にはピンを刺す穴があるわけだが・・・

これが一般的なピンヘッダでは届かない。


そこで、千石電商で売っている、足の長いピンヘッダを使用する。
残念ながらネットでは見つけられなかった。

秋葉原一号店の1階のレジの横から進んだところの陳列棚にあった。
探したり、聞いたりすれば見つかるかと。


もし見つからなかったり、ネットで注文したい場合は、
秋月電子の連結ピンヘッダの片側の黒いやつを破壊してどうぞ。
http://akizukidenshi.com/catalog/g/gC-02959/

すると、基板に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