UARTtoRS485/電源供給モジュールを作りました

f:id:iteclab:20210116232809j:plain

f:id:iteclab:20210117005045j:plain

 

表題の機能のモジュールを作ってみました。

使い道は、例えば下図のような構成を想定します。

f:id:iteclab:20210117000428p:plain

ある場所にセンサやスイッチ操作盤を置き、ちょっと離れた(数m)場所で、表示機能や、メカの駆動などを行いたい場合、センサやスイッチの配線を距離分延ばすのは、線の本数が増えることや、センサの配線にノイズがのるなどの悪影響が考えられます。

そのため、センシング・スイッチの読み取り用にマイコンを一個使い、表示機能や、メカ駆動を行うマイコンを別に用意して、その間を通信(Arduinoなら、手軽なUARTが便利だと思います)で結ぶのが良いと思います。

ただし、上の図の場合、まだ問題が残ります。

 

 問題点1)UART通信の配線長が長くなると不安定になる

 問題点2)センサ・スイッチ側マイコンに別電源が必要

 

そこで、下図の構成を考えます。

f:id:iteclab:20210117000450p:plain

ということで、通信距離が長くなる部分をUARTからRS485トランシーバを介して信頼性を高めつつ、RS485とはいえ、ツイストペアケーブルを使わないと数mでも通信が安定しないので、身近なツイストペアケーブルとして、Ethernetケーブル(CAT5e)を使います。RJ45コネクタで安定性と運用性(ばらして運ぶ・再配線など)が向上します。ケーブルも必要な長さを買ってくるだけ。

ついでに、使わないペアがあるので、電源も載せてしまうと、リモート先で電源を用意する必要も無くて、これは便利なのでは??という思想です。

 

実際の基板の構成は下図のようになっています。
R1は、CAT5eケーブルのインピーダンスが100Ωなので、終端抵抗100Ωとしています。

 

f:id:iteclab:20210117001539p:plain

*RS485トランシーバは、調達したタイミングの数量の都合で、下記を採用

akizukidenshi.com

RS485トランシーバを使う際、送信時はDE端子をHigh、受信時はLowにする必要があります。マイコン側でピンを割り当てて、UARTの送受信に合わせてHigh、Lowにするのが真っ当かとは思いますが、片側が送信専用、または受信専用の場合は、基板上でTx、Rxの記載のパッドをはんだでジャンパすると、マイコンのピンが一本節約できます。

尚、双方向で通信を行う場合、ArduinoからRS485通信を行うためのライブラリもありますが、常に固定長のメッセージを通信する場合は、送信時間が常に一定ですので、Serial.writeで送信してから、送信が終わるまでの時間を、設定した通信速度とバイト数で計算して、DE制御のピンを指定時間DelayでHighに保ってあげれば、特にライブラリ使うほどのものでもないかなと思います。

 

自分で実際に使っていますが、5mのCAT5eケーブル使用で、特に今のところ不具合は無いように思います。

 

調子が良かったので、こちらのモジュールを勢いで数十個、部品実装まで作りましたので、販売を予定しています。販売というよりは、ほぼ原価以下で頒布に近いかも・・・

 

パッと見で、問題点などあれば是非ご指摘いただければ幸いです。