秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)
制御装置本体にパラメータ設定用リモコンをシリアル通信で
つないでいる機器があります。
リモコンのスイッチ操作に応答して本体がデータ(文字列)を
送ってくるというもので、リモコンはそれを液晶表示(文字だけ)
しています。
データ量も多くないので通信速度は9600BPSにしてあります。
本体とリモコンのつなぎはコネクタ。
通常運転時、リモコンは不要。
取り外せるようにしてあるのです。
そんな装置に要望が。
・パラメータを再設定したいときはリモコンが必要。
・リモコンをつなぐのにコネクタを挿すのが面倒。
・設定後に外すのも面倒。
・無線か赤外線でリモコン操作できればうれしいなぁ。
※はい。ごもっともです
そして、
・動いている今のプログラムは触りたくない・・・
※無線だと制御コマンドのやりとり
があれこれ必要になっちゃいます。
ということで、赤外線通信を試してみようということに
なりました。
試しに買ってきたのはこれ。
秋月電子の「赤外光トランシーバ(送受信)モジュール
「AE-RPM851A」。
「赤外線で」というと、家電製品のリモコンで使われる
38kHzでの変調光が頭に浮かびます。
しかし「RPM851A」のブロック図を見ると、38kHzは
どこにも出てきません。
「IrDA」の制御、例えばこの装置に使っている制御マイコン
ルネサスRX220 だと、IrDAの機能を搭載していて、ハードウェア
マニュアルにはこんな波形図が出てきます。
UARTの出力から赤外モジュールのLEDを発光させるパルス
を作って、受光パルスからUARTへのシリアル信号を復元
しています。
「IrDA機能を搭載」ということは、これをしてくれる
ハードウェアが入っているということなんでしょう。
でも、マイコンにIrDA機能が載ってなかった時は
どうすれば?
ということで調べてみました。
「UART←→IrDA」をやってくれるチップが見つかりました。
単純そうな「8pin」で探しますと・・・
まず、TIの TIR1000。
※昔の50MHz AMトランシーバーを彷彿させる
エエ型番です。
そしてマイクロチップの MCP2122 。
※注意!
二つは同じ信号ピン配置ですが、5番ピンの「リセット」、
この論理が異なります。
TIのはHでリセット。
マイクロチップのはLでリセットです。
そして、マイクロチップの図には「Hアクティブ」のように
描かれていますんで要注意です。
※データシートの動作解説には「Lでリセット」を
ちゃんと記されています。
TIのデータシートを見ると、制御タイミングがもう
ちょっと詳しくわかります。
・送信時 TXDからTXIR(LED駆動信号)を
・受信時 RXIRからRX(UARTシリアルデータ)を
とりあえずこんな回路で試運転。
(クリックで拡大↑)
・マイクロチップのMCP2122を使う。
・2セット作って試す。
・PCどうしで通信。
・PCとはUSBで接続。 (5V電源供給もUSBから)
・使ったUSBインターフェースは秋月の
AE-CH340E-TYPEC
・74HC4060で4.9152MHzの水晶を発振させてQ5の
1/32から153.6kHzのクロックを取り出し。
・ブレッドボードで仮組み。
実際に動かしてみて確認したかったのは、
「送信した光を自分で受けるでしょ」。
今回の試運転は、これがどうなるのかを確かめたかっ
たのです。
送信したデータがそのまま受信データとして帰ってきたら、
そのデータを無視して捨ててしまうような処理を送信ルーチン
に入れなくてはなりません。
さて、結果。
赤外通信モジュールのピンで信号を観察すると、
・送信光を受信光として受ける。
つまり、
・TXIRパルス(Hアクティブ)と同じものが
LアクティブパルスとしてRXIRに出てくる。
これがMCP2122のRXIR端子に入ります。
しかし、RX(UARTシリアル出力データ)端子には受信信号
は出てきません。
・MCP2122が送信処理中に受けたRXIRパルスは
無視して受信データとして出さない。
という処理がなされているようです。
これで、自分で送信したデータを受けたらそれを
捨てるという処理は不要。 便利!
「UART←→IrDA」の制御、これがあたりまえの機能なので
しょうか?
データシートにはこのように。
・送信:RXIR受信中はTXIR出力を禁止する。
・受信:送信中は受信をやめる。
ということで、装置の本体・リモコン間接続コネクタを
無くすという話、進めそうな雰囲気です。
※余談
秋月のUSBシリアル変換モジュール「AE-FT234X 」。
小さくて良いのですが、シリアル出力TXDが0~3.3V
で出て来ます。
受信側がTTLレベルで受けてくれるのなら、そのままで
良いのですが、「3.3VではちょいとHには足らんぞ」
という回路だとレベル変換をしなくちゃなりません。
今回のMCP2122もHレベルの定格が「0.8 x VDD」で
(5V電源だと4.0Vが定格レベル)、3.3Vの信号だと
ちょい足りません。
そこで0~5Vで出てくる「AE-CH340E」を使ったのです。
3.3V→5Vへの信号レベル変換、3.3V電源が使えれば良いの
ですが、使えるのが5Vだけだと、
「Tr1コあるいはFET1コで簡単に」
ができません。
・2018年3月9日:放電特性記録機能付きバッテリー放電器、改造
無理やり3.3Vを引っ張り出してます
※HC4060 Q5出力の抵抗
クロック出力に入れた1kΩの抵抗、これはクロック波形をちょっと
鈍らせるためのもの。
ブレッドボードで組んだため、このクロック信号をジャンパー線で
渡ってました。 (HC4060→MCP2122)
そこから放射されるノイズ(方形波のエッジ)を赤外モジュールが
拾ってしまったのです。
RXIR信号が不安定に出ちゃうのです。
ジャンパー線を手で持つと改善。
(シールド効果か容量分加算か!)
長いのに変えたりループにしたりすると、誤パルス増大。
抵抗+ICの入力容量でパルスのエッジを押さえると改善した
という次第です。
※家電用リモコンの発光波形例 38kHzが見える
※MCP2122のTXIR出力と
TX LED発光の様子をフォトトラで観察
※送信データとTXIR、別ユニットのRXIRと受信データ
※Arduino-UNOで
MCP2122を試そうとするとボーレートの16倍のクロック
が必要です。
↑の例では4.9152MHzの水晶を1/32して使いました。
Arduino-UNOだと、タイマー2で方形波を出せばクロックとして
使えます。
※元が16MHzですんでちょっと誤差が出ます。
通信をテストするスケッチを書けば、様子が分かるかと。
※スケッチをアップロードする時は
RXDのジャンパーを外さなければ
なりません。
※続き
・秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2
| 固定リンク
「Arduino」カテゴリの記事
- 初めて買ったArduino UNO・・・今は(2023.05.25)
- 液晶表示コントローラ HD44780で迎撃(2023.05.16)
- Arduino UNOで3相モーターを回す(2023.05.01)
- Arduino サーミスタを使った温度測定で 【ゼロ除算問題】(2023.03.23)
- A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?(2023.03.21)
「IrDA」カテゴリの記事
- FLUKE 87IV デジタルテスターのデータをIrDAで吸い上げる(2022.11.15)
- 周波数つながりで、赤外線受光モジュールのBPF周波数(2022.07.23)
- 手持ちの赤外線リモコン受光モジュールを発掘してみたら・・・(2022.07.08)
- シリアル通信ボーレートとクロック周波数(2022.07.07)
- 「糸ようじ」のプラケースを使うシリーズ:赤外線リモコンチェッカー(2022.07.07)
コメント