8ビットPICを使用してIR信号のパルス幅を測定する方法は?


14

私の友人と私は、学習目的のために、このようなユニバーサル学習リモートコントローラーを設計したいと考えています。基本的にやりたいことは、赤外線パルスの保存と再生です。

36kHz、38kHz、40kHzの信号を検出したい。40kHzの信号は、25の期間になります秒。μ

8ビットPICマイクロコントローラーを使用したいので、現在は20MHz高速水晶発振器で動作するPIC16F616を選択しました。次の2つのオプションを使用できます。

  1. Interrupt On Changeモジュールを使用します。
  2. CCPモジュールのキャプチャモードを使用します。

最初のオプションは次のとおりです。

レジスタが次のように設定されていると仮定しますunsigned char _10_us = 0;。このレジスタは時間を保持します。周期レジスタとTMR2モジュールは、すべての10割り込み作成するために設定されている秒。割り込みが発生すると、レジスタをインクリメントして終了します。これにより、最大時間は2.55ミリ秒になります。さらに時間を測定する必要がある場合は、追加のレジスタを定義し、必要に応じてインクリメントできます。μ_10_us_1_ms

現在、あらゆる種類の変更(高から低または低から高)によって割り込みが生成されるたびに、プログラムは現在の時刻、つまり_10_usレジスタの値を記録します。しばらくして、次の割り込みが生成されると、プログラムは保存された値を_10_usレジスタから減算するため、その間にかかった時間は秒単位になります。μ

このオプションを使用すると、頭を悩ますことができます。TMR2割り込みは、約50命令ごとに発生します。割り込み処理には約20命令かかります。期間を計算して配列に保存するための30の命令が残っています。この方法は機能しますか?

2番目のオプションは次のとおりです。

CCP1ピンでイベント(高から低)が発生したときに割り込みを生成するように、CCPモジュールのキャプチャモードを設定します。割り込みルーチンでは、フラグを設定して、プログラム内のタスクが(必要に応じて)CCPR1H(おそらく必要ない)とCCPR1Lの値を計算して保存できるようにします。次に、キャプチャモードの構成を変更して、ローからハイのエッジが発生したときに割り込みをトリガーするようにします。そして、次のイベントを待ちます。使用したことがないため、この方法のパフォーマンスを推定することはできません。

別のオプション?

TSOP17xxシリーズなどの赤外線復調ICを使用できます。これで問題が完全に解決します。しかし、いくつかの質問が思い浮かびます。

読み取り距離の要件はそれほど大きくありません。1メートル(〜3フィート)。38kHzで動作することを意図したTSOP1738を選択した場合、36kHzと40kHzの信号でどれだけうまく動作しますか?

TSOP17xxシリーズのデータ​​シートの4ページには、「応答性の周波数依存性」グラフが示されています。わかっている限りでは。

  • 38kHzの約1.053である40kHzは、相対感度が約0.6になります。
  • 38kHzの約0.95である36kHzは、相対感度が約0.65になります。

これらの値はどういう意味ですか?TSOP1738を使用しても問題ありませんか?


パルス間のループ数を数えるソフトウェアループを作成しないのはなぜですか?
Rocketmagnet

@Rocketmagnetわかりません。時間があれば答えを書いていただけますか?また、上記の問題以外にも、RS232やSPIのような他の多くのことを行うことに注意してください。
アブドラkahraman

回答:


11

はい、TSOP1738はこの短い距離で動作します。0.65の相対感度は、36 kHzでIR LEDが必要であることを意味します0.65= 2乗法則により、同じ信号強度を見るために0.8倍近い。そのため、TSOP1738が1 mで38 kHzの特定のレベルを見た場合、36 kHzで同じ信号強度を得るには、トランスミッタを80 cmに保持する必要があります。ところで、新しい電池を使ったリモコンを使って、15 m以上の距離で完全な受信を測定したので、まったく問題ありませんでした。

PICのパフォーマンスについて心配する必要はありません。TSOP1738は38 kHz信号を出力しません。これが搬送周波数であり、TSOP1738によって除去され、ベースバンド信号を取り戻します。これは、はるかに低い周波数で、パルス持続時間は1ミリ秒のオーダーであるため、エッジ間の時間を正確に測定するのに十分な時間があります。

次のスコープ画像はこれを示しています。

ここに画像の説明を入力してください

これは1つのRC5コードです。一番上の信号は36 kHz変調信号で、一番下の信号は実際のコードを含むベースバンド信号です。

ここに画像の説明を入力してください

これは、ベースバンド信号の1つのパルスにズームインされます。36 kHzキャリアの個々のパルスを見ることができます。

キャリア周波数についてもう1つ説明します。この頻度がわからないリモコンを使用している可能性があります。TSOP1738は出力にそれを与えないので、読みたい場合は、IRフォトダイオードまたはトランジスタをPICの入力の1つに接続し、2つの同じエッジ間の時間を読み取る必要があります。それは実現可能です。さまざまなキャリア周波数の周期時間:

40 kHz:25 µs
38 kHz:26.3 µs
36 kHz:27.8 µs

20 MHz PIC16F616の命令サイクルは200 nsです(クロックを4分周します!)。したがって、3つの周波数の読み取り値は、約125、131、および139である必要があります。これで十分に区別できます。ただし、必要に応じて、1250、1316、1389のように、10回目の割り込み後にいくつかのエッジを通過させてタイマーを読み取ることができます。 。

成功!


今ではリラックスしています、ありがとう。私はずっと前にTSOP1738に基づいて「IRラーナー」を作成しましたが、それは混乱でした。
アブドラkahraman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.