秋月の赤外光送受信モジュール(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」カテゴリの記事
- DDS IC「AD9833」をArduino UNO R3で制御:箱入れ #2(2025.07.03)
- DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる(2025.06.30)
- UNO R4はanalogWrite(n,128)でデュティー50%の方形波が出るぞ(2025.06.03)
- DDS IC「AD9833」の出力にバッファアンプを(2025.05.27)
- DDS IC「AD9833」をArduino UNO R3で制御(2025.05.25)
「IrDA」カテゴリの記事
- 赤外線リモコン受信モジュールの不思議(2024.02.02)
- FLUKE 87IV デジタルテスターのデータをIrDAで吸い上げる(2022.11.15)
- 周波数つながりで、赤外線受光モジュールのBPF周波数(2022.07.23)
- 手持ちの赤外線リモコン受光モジュールを発掘してみたら・・・(2022.07.08)
- シリアル通信ボーレートとクロック周波数(2022.07.07)
コメント
初めまして、武安/JA6XKQ です。「プロセッサ」時代から下間さんの記事を愛読しています。 トラ技2023年11月号の記事を参考に、FLUKE 289Si 用 IrDA アダプタを 115k2 bps で製作しています。 アダプタからの送信は OK なのですが、受光側の RXIR が化けてしまい、難儀しています。 下間さんは 9k6 bps でクロック系の波形を鈍らせて対処されたとありますが、そもそも RPM851A はノイズに弱いところ、秋月のプリント基板のパターンがマズいのでは?と、自分の技量を棚に上げて、疑心暗鬼になっています。 RPM851A のデータシートでは、RXIR 信号周辺のパターン配置に注記がされている他、RPM851A-H6 なるシールド付きモデルがあったりすることも、疑問を抱いている要因です。 115k2 bps が性能上限であることに起因するのか、配線がマズいのか? RXIR 側配線のシールドを意識して再製作しているところです。 9k6 bps 以上を試されたことはありますか?
投稿: 武安義幸 | 2023年12月 4日 (月) 21時45分
「プロセッサ」、懐かしいです。
秋月IrDAモジュールでの115.2kBPS通信は試していません。
1文字が90us以下です。
受信処理、間に合ってますか?
そちらの作業環境が不明ですので一般論で・・・
・ハードが悪いのかソフトなのかをはっきりさせる。
・ターゲット装置といきなりやりとりするのではなく、
テスト用のハードを作る。
・テストプログラムを書く。
・処理のタイミングを見るためテストパルスを空き
ポートに出してオシロで観察。
・マイコンの能力はokか。
speed、RAMサイズ
・割り込みは間に合っているか。
他の割り込みがじゃましてないか。
・ライブラリを使っていたら、ほんとにちゃんと動いて
いるのかを確認。(テストプログラムで攻める)
てなところです。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年12月 5日 (火) 08時51分
早速のアドバイス、ありがとうございます。 作業環境に触れず、唐突な内容で失礼しました。 構成はマイクロプロセッサを使わず、RPM851A/MCP2122/USB-UART でのハードウェアだけです。 検証は借用品の FLUKE 純正 IrDA アダプタを使用して対向させています。 自作のRPM851Aどうしを対向させたのでは問題が複雑化しますので、素性が明らかな物を使っています。 UART の先は、TeraTerm、Analyze232 シリアルモニタ、そして、ロガーである Sigrok SmuView を使いつつ、オシロで RXIR の波形をモニタしています。 ユニバーサル基板を使っての配線でした。 RPM851A 周辺の GND ラインの整理と強化を行うとMCP2122でのデコードに改善の兆しが見られたので、ユニバーサル基板をやめて、ベタGND の基板をこれから試すところです。 また、16倍クロックの単純化/配線最短化の観点から、1.8432MHz原発のオシレータを使います。 進展ありましたら、また書かせていただきます。
投稿: 武安義幸 | 2023年12月 5日 (火) 21時32分
私だと・・・
トラブルの原因を探るのは、単純なことの確認を積み上げて、
どこでおかしくなるのかの見極めから。
・RPM851Aの通信速度を上げたのが問題なのかを確かめる。
・RPM851A2つを対向させて単純な通信を。
・成功した9600BPSから始めて、徐々にスピードアップ。
・115.2kに上げたせいで、つまづくのかを見る。
MCP2122の「リセット問題」は見られましたでしょうか?
トラ技2023年11月号の記事では、ページ数の関係で
注意書きしか載せられませんでした。
p.180 ●MCP2122のリセットで問題が
トラ技のダウンロードサービスを解凍してもらうと、
https://toragi.cqpub.co.jp/download2023/
「MCP2122のリセットについて」という補足pdfが
出てきます。
また、ブログの記事では、
「UART←→IrDA」変換IC、MCP2122のクロック供給 #3 トラブル遭遇!
http://igarage.cocolog-nifty.com/blog/2022/06/post-4f1648.html
で、対策方法を記しています。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年12月 6日 (水) 08時50分
『9k6 bps でクロック系の波形を鈍らせて対処された・・・』
この原因。
ブレッドボードを使ってのテストだったからだと考えています。
ユニバーサル基板に組んでからは抵抗無しで大丈夫でした。
HC4060が出力する波形のほうが、マイコンでのクロック出力より
急峻なのかもしれません。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年12月 6日 (水) 09時06分
再度のアドバイス、ありがとうございます。 「トラブルの原因を探るのは、単純なことの確認を積み上げて、どこでおかしくなるのかの見極めから。」 - おっしゃるとおりです、トラブルシューティングを考え直します。
リセットについては MCP2122 のデータシートにある TCM809 を使い、遅延したリセット・パルスをオシロで確認して、安心(盲信)していました。 PDF での解説を読みました。 指摘されている観点で MCP2122 のデータシートを読み直すと、リセットに関するタイミング(リセットパルス長)に言及は無く、16倍クロックが先に安定していることが必須条件であると読み取れます。
下間さんの検証では、16倍クロックが安定していることはもちろんのこと、一旦 HIGH とすることが肝とのことなので、リセットに配慮します。
投稿: 武安義幸 | 2023年12月 6日 (水) 17時28分
RPM851A の対向で 115k2 bps が OK となりました。 問題はご指摘のリセットでした。 マイクロプロセッサを介していないので、とりあえずは手動でリセットを掛けて実験しました。
FLUKE IrDA アダプタおよびターゲットの 289Si との対向は、FLUKE送信/RPM851A受信の光軸合わせと間隔がクリチカルであることが分かってきました。 ラフに空間結合とはいかないようです。
こちらへの投稿は、これにてクローズとします。 アドバイス頂き、どうもありがとうございました。
投稿: 武安義幸 | 2023年12月 9日 (土) 22時15分
クロックの飛び込みはいかがでしたか?
おそらく・・・ブレッドボードじゃなくユニバーサル基板での配線だと大丈夫だったのでは。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年12月10日 (日) 10時08分
トラ技のReader's FORUMに、「役立ったよ」「参考にして作ったよ」とメッセージを送っていただければ(筆者+編集部の)励みになるかと。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2023年12月10日 (日) 10時11分
最初に作成したユニバーサル基板と、ベタ GND 基板の対向で OK でした。 ユニバーサル基板は 18.432MHz オシレータを 10 分周、ベタ GND 基板は 1.8432MHz オシレータを直結という、条件が悪いユニバーサル基板でも大丈夫でした。 ということで、クロック系の飛び込みは問題なかったようです。
トラ技 11 月号への読者アンケートは締切られているようなので、またの機会に投稿します。
投稿: 武安義幸 | 2023年12月10日 (日) 17時26分