2013年8月30日金曜日

syma s107gの赤外線プロトコル

夏休みの自由研究の発表という意味で、調べたことをつらつらと書いてみたいと思います。

※需要があるかどうか、かなり疑問ですけど


[レイヤー1]
赤外線LEDの波長は、一般的に入手しやすい940nmのモノで動作できてます。

データは一般的なテレビリモコンと同じように、0と1をパルス幅(というか、パルスとパルスの間隔というか)で判断してます。0が短く1が長いのもテレビと一緒。ただ、長さはテレビリモコンとはちょっと違ってます。

もう少し具体的に書くと、赤外線をONしている時間は0を送るときも1を送るときも共通で、約390usec。その後のOFFの時間が0を送るときには約210usecで、ONを送るときには約600usec。整理すると、

 0送信時 : ON→390usec OFF→210usec
 1送信時 : ON→390usec OFF→600usec

ただし、RCgroupsのMLでの情報では、ON時間が270usec程度、0の時のOFF時間が330usec程度、1の時のOff時間が730usec程度なので、1bitのデータを送信する時間が、0の時は約600usecで1の時は1000usec程度であれば、良いのかもしれません。

また、ONの時間はこれまた通常のリモコンと同じく38kHzの周波数でON/OFFを繰り返しています。つまり、390usecの間に約15回、ON/OFFを繰り返しています。


[レイヤー2]
フレームのフォーマットは、フレームの開始時に2msecのON→2msecのOFFがあり、その後データが続きます。最終ビットの幅を認識させるために一番最後にONのパルスが1発必要です。
__|~~~~~~|______|~~|__|~~|____|~~|____|~~|__|~~|__  ・・・・|~~|__
 |  2ms |  2ms |0.6ms| 1msec | 1msec |0.6ms|0.6ms| ・・・・

と、こんな感じです。データは全部で8×4の32bit。32ビット送信後は100msec程度の無送信区間があります。

つまり、操作は1秒間に約10回だけしか効かないということになります。といっても、操作していて違和感とかはありませんです。


[レイヤー3]
8ビットのうち、下位7ビットでプロポからの制御値を送信してます。上位1ビットは通常0で、3バイト目だけチャンネルによって0/1が変わります。

 |0YYYYYYY|0PPPPPPP|CTTTTTTT|0AAAAAAA|

こんな感じで、Y→ラダー、P→エレベーター、T→スロットル、A→調整ツマミの値となってます。Cはチャンネルで多分0がAch、1がBch。

また、Aの値はs800Gではエルロンの値となっているようで、s800Gのプロポでs107Gを操作するとエルロン操作しているのにラダー操作したのと同じ動きをするようです(こちらもRCgroupsの情報)。

また、制御値は最大が127、中心が64、最小が0。値の大きさと動きの方向は以下の通り。
 Y 右→小 左→大
 P  前→小 後→大
 T 遅→小 速→大
 A 右→小 左→大


---
と、こんな感じです。

0 件のコメント:

コメントを投稿