Raspberry Pi CH340 RS485アダプタと格安RS485モジュールの接続テスト

カテゴリー: シングルボードコンピュータ  タグ:

Raspberry Pi (以降raspi)にolimexのUSB-RS485変換アダプタ(strawberry linuxで購入)を挿し、一方二個で1k円以下という格安RS485モジュールの接続をテストした覚書。

ラズベリーパイのUARTは他で使うので、USBシリアル変換タイプを試す

このアダプタにはCH340というUSBシリアル変換ICが使われている。raspiOSにドライバがロードされていれば、PnPで使えるはずです。まずそれを調べました。

また、格安RS485モジュール(Amazonで購入)は自動フロー回路と記載されていますが、回路図が公開されていないので回路を調査しました。

CH340ドライバを調べる。ドライバはロードされていた。

ターミナルで調査し、デバイス名を得る。ttyUSB0に割り付けられている。

あっけなく調査終了!

ちなみにFTDI系のUSBシリアルの場合は、

lsmod | grep ftdi です。

そして、CH340系とFTDI系同時に挿入したときは、ttyUSB0と1が使えますが、抜き差ししてみないとどちらかわからないのは、Windowsと同じです。

RS485モジュールを調べる。

このモジュールは3.3VLDO搭載で、インバータ4069とMAX485は3.3Vに接続されている。自動フロー制御回路の当たりを追う。

DIを反転してREとDEに入っている。立下りディレイはヒゲ防止か。CはLCRメータでインサーキット測定では80pと出ていたが、SGで動作させて信号遅延を確認。

上がRE/DE、下がTxd(DI)。約5μsの遅れがある

遅延から換算して8pF程度と推測。インバータが4069なのでTxDから数百nsすでに遅延しているハズ。これらの遅延は超高速のレスポンスでもない限り問題なし。

回路はOKだが、MAX485は3.3V対応ではない。交換予定

Amazonの該当ページでは「動く」というレビューが多いが、ICの記名は「MAX485ESA」。セカンドソースはいっぱいあるがこの型番は普通5V仕様。動くかもしれないけど治具として使うには3.3V品に交換しないといけない。

また、5V系と接続可能みたいな仕様でしたが、ICが3.3V駆動である以上、5Vの信号をTxDにいれてはまずい気がする。電源はmax33Vとうたっているが、LDOはmax26V。調べないとうかつに使えないのである。

というわけで、後日MAX3485に交換予定。

簡単な送受信プログラム

IC交換前だが、動作確認。本番は9600か19.2kbps程度で使う予定ですが、115.2kbpsにて。

RS485モジュール側には秋月「AE-FT234X」(3.3V系)で受け、teratermで表示。

import serial
import time

# シリアルポート設定
ser = serial.Serial('/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None)

try:
    data_to_send = b'Hello, World!'
    ser.write(data_to_send) # データを送信
    while True:             # 受信データのモニタ
        if ser.in_waiting > 0:
            received_data = ser.read(ser.in_waiting)
            print(f'Received: {received_data.decode("utf-8")}')
        time.sleep(1)       # 1秒ごとに受信を確認

except KeyboardInterrupt:
    print("abort")

finally:
    ser.close()

動作的には、すんなり動きました。

お気軽にコメントをどうぞ。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)