赤外線での制御もやってみたい・・2005年03月04日(データ復活版) [PIC]
ライトプレーンはやったことはないのですが、赤外線での制御については興味があります。
最初はラジコンのプロポ準拠のPPM方式にしようかとも思ったのですが複数人で同時に使えないことや外来ノイズでの信号誤りの検出ができないことから、PCM方式を検討中です。
赤外線受信ユニット(PL-IRM0208-A538:秋月で購入)の特性を調べてみたところ
a)変調信号38KHz(4MHzPICで26ステップ周期)出力(オン信号)では4サイクル以上出力しないと受信機からのディコード信号が安定してでない(潰されて無視される)
b)オフ信号に至っては10サイクル以上でないとつぶれる(前後のオン信号がくっ付く)
c)受信ユニットでディコードされたオン信号出力は実際のLED出力の幅より100μS程度長くなる。
d)逆にディコードされるオフ信号幅は実際のLED出力よりも100μS程度短くなる。
等の特性があり、単純にPCM通信しようとすると1ビット当りの信号幅を上記のブレが無視出来るくらい大きくしないと駄目でかなり低速通信になってしまうことがわかりました。
そこで次のようなフォーマットで制御しようと考えています。
1)PCM信号はLSB側から出力する。
2)ビット1は変調信号送信(オン)、ビット0は変調信号オフとする。
3)1ビット分の送信で
ビット1:38KHzの変調波を6サイクル送信
ビット0:6サイクルの時間38KHz信号をオフ。但し直前の送信ビットが1の
場合、12サイクルの時間オフにする。(現象bの対策)
4)制御信号フォーマットは7ビットx6の42ビット
1+ID(4)+11 + 1ff-ffff + 1ss-ssss + 1tt-tttt + 1oo-oooo + 0cc-cccc
f,s,t,oはそれぞれ1〜4chの値で6ビット長なので64段階の制御
cは制御信号のチェックサム値で誤り検出用
5)1→0のパターンのみ12サイクル(確率1/4)なのでビット当りの平均送信時間は
6x3/4+12x1/4=7.5サイクル
制御信号は42ビットなので送信に要する時間は
42*7.5/38 = 8.3mS
になります(この時間を出来るだけ短くするために上記のようなフォーマットにした)
6)IDが4ビット長なので原理的には16人の人が同時に使えます。
7)制御信号のぶつかりが発生しにくいように、各チャンネルの制御値が変化した場合のみ送信するようにします。
8)その他、色々考慮していることはあるのですが省略・・^^;
16F648(628より安かったので使用)を使って送信側のプログラムが完成(上記フォーマットで送信する部分のみ)し、受信側を629で作ろうかという段階です。単純に受信に専念するのであれば割合簡単なのですが、PWM制御も平行して動作させることを考えると色々悩ましいところです。
ニックネーム さと at 03:06 | Comment(2) | TrackBack(0) | 日記
最初はラジコンのプロポ準拠のPPM方式にしようかとも思ったのですが複数人で同時に使えないことや外来ノイズでの信号誤りの検出ができないことから、PCM方式を検討中です。
赤外線受信ユニット(PL-IRM0208-A538:秋月で購入)の特性を調べてみたところ
a)変調信号38KHz(4MHzPICで26ステップ周期)出力(オン信号)では4サイクル以上出力しないと受信機からのディコード信号が安定してでない(潰されて無視される)
b)オフ信号に至っては10サイクル以上でないとつぶれる(前後のオン信号がくっ付く)
c)受信ユニットでディコードされたオン信号出力は実際のLED出力の幅より100μS程度長くなる。
d)逆にディコードされるオフ信号幅は実際のLED出力よりも100μS程度短くなる。
等の特性があり、単純にPCM通信しようとすると1ビット当りの信号幅を上記のブレが無視出来るくらい大きくしないと駄目でかなり低速通信になってしまうことがわかりました。
そこで次のようなフォーマットで制御しようと考えています。
1)PCM信号はLSB側から出力する。
2)ビット1は変調信号送信(オン)、ビット0は変調信号オフとする。
3)1ビット分の送信で
ビット1:38KHzの変調波を6サイクル送信
ビット0:6サイクルの時間38KHz信号をオフ。但し直前の送信ビットが1の
場合、12サイクルの時間オフにする。(現象bの対策)
4)制御信号フォーマットは7ビットx6の42ビット
1+ID(4)+11 + 1ff-ffff + 1ss-ssss + 1tt-tttt + 1oo-oooo + 0cc-cccc
f,s,t,oはそれぞれ1〜4chの値で6ビット長なので64段階の制御
cは制御信号のチェックサム値で誤り検出用
5)1→0のパターンのみ12サイクル(確率1/4)なのでビット当りの平均送信時間は
6x3/4+12x1/4=7.5サイクル
制御信号は42ビットなので送信に要する時間は
42*7.5/38 = 8.3mS
になります(この時間を出来るだけ短くするために上記のようなフォーマットにした)
6)IDが4ビット長なので原理的には16人の人が同時に使えます。
7)制御信号のぶつかりが発生しにくいように、各チャンネルの制御値が変化した場合のみ送信するようにします。
8)その他、色々考慮していることはあるのですが省略・・^^;
16F648(628より安かったので使用)を使って送信側のプログラムが完成(上記フォーマットで送信する部分のみ)し、受信側を629で作ろうかという段階です。単純に受信に専念するのであれば割合簡単なのですが、PWM制御も平行して動作させることを考えると色々悩ましいところです。
ニックネーム さと at 03:06 | Comment(2) | TrackBack(0) | 日記
タグ:赤外線での制御
2008-01-04 02:31
nice!(0)
コメント(2)
トラックバック(1)
制作記事は
picfun.paslog.jp/article/1070700.html
にあります。
または 下の「さと」をクリックでも飛べます。
by さと (2009-10-18 11:45)
ブログ引越しに伴い、上記コメント中のURLは無効になり、下記に変更になりました。
http://piclabo.blog.so-net.ne.jp/2009-03-04
by skyriver (2016-05-22 23:47)