RS485通信の電圧と波形をオシロスコープで確認してみた

インターフェース

RS485の差動の波形を実際に測定・解析してみました。

電圧レベル・差動信号をオシロスコープで確認しています。

RS485通信の基礎を実際の波形交えて、初心者の方にも分かりやすく紹介します。

 

スポンサーリンク

RS485通信の電圧と波形をオシロスコープで確認してみた

RS485の差動の波形をオシロスコープで測定してみました。

電圧レベルが「-7V~+12Vの範囲」「200mV以上の差動振幅」で規格内を確認しています。

 

ラズベリーパイからUSB-RS485変換モジュールを使ってPythonで通信しています。

終端抵抗は120Ωを接続しました。

 

USB-RS485変換モジュールの中身も調査しました。

RS485トランシーバーICはMAXIM製のMAX485を確認しています。

 

RS485通信テスト内容の詳細を紹介していきます。

 

USB-RS485変換モジュールを購入してみた

今回テストに使ったのはUSB-RS485変換モジュールです。

PCやラズパイにUSB接続するだけでRS485通信が出来るようになります

 

裏面の写真がこちらになります。

コネクタのどちらがポートA,Bか分かるようにシルクされています。

 

よく市販に売られているUSBシリアル変換ケーブルと同類のものとなります。

 

USBシリアル変換ケーブルの詳細・仕組みに関しては下記記事で紹介しています。

よろしければ一緒にご覧ください。(リンク先はこちらから)

USBシリアル通信のボーレートの最大は?通信速度(bps)をオシロで確認
シリアル通信の速度をオシロスコープで確認してみました。 USBシリアル変換ケーブルのICを調べて、最大のボーレートまで試しています。 シリアル通信のボーレートの設定で通信速度(bps)がどのように変化するか紹介します。

 

RS485のボードは通販などで購入できます

今回筆者が使用したのは一番簡易的なUSB-RS485変換モジュールです。

AmazonなどでRS485と調べれば色々な形状・IFのモジュールがあります。

 

RS485のボード・基板も最近は通販で簡単に購入可能です。

 

筆者同様にRS485に興味ある方・遊んでみたい方は確認してみてください。

 

RS485のICを確認してみた

変換モジュールを分解・ドライバの情報からRS485のICを確認してみます。

RS485変換モジュールのカバーを外すと下記形になります。

 

抵抗・コンデンサ・発振子もあるのですが重要な部品をピックアップすると下記になります。

  • USBコネクタ
  • USBシリアル変換IC (WCH製_CH341)
  • RS485トランシーバIC (MAXIM製_MAX485)
  • RS485ポートA,Bコネクタ

 

重要な部品だけの簡易的な回路図を記載すると下記形です

(あくまで筆者のイメージ図で配線もかなり省略しています)

 

簡易的な回路イメージ図を含めた形で写真を載せますと下記になります。

 

RS485のドライバIC_(CPU視点)

今回のUSB-RS485変換は「USBシリアル変換→RS485変換」の2段階の変換をしています。

2段階の変換の後にコネクタからRS485のポートA,Bが出力されています。

 

ホスト視点のドライバICとしてはUSBシリアル変換ICになります。

つまり通信テストで使うラズベリーパイはUSBシリアル変換ICと通信します。

 

USBシリアル変換ICがCH341と分かったのはラズパイ(Linux)で簡単に調査できるためです。

USBデバイスに何のICが搭載されているかは下記コマンドで調査できます

dmesg | grep -i usb

 

参考までにコマンド結果のUSB箇所の切り取りを下記に貼り付けておきます。

7行目の「usbcore」の箇所でCH341のICを使用していることが分かります。

 

RS232CとRS485のUSB変換は共通箇所もある

また今回使われているICのCH341に関してはUSB-RS232C変換ケーブルでも使用されていました。

 

トランシーバー箇所のICがRS232C変換のICになっています。

 

USB変換のケーブルでは色々なケースで使用されているICのようです。

RS232C変換に関しては下記記事で詳細に紹介しています。(リンク先はこちらから)

RS232Cの電圧レベルをオシロスコープで測定してみた
RS232Cの電圧をオシロスコープで測定してみました。また通信プロトコルも確認しています。 USB-RS232C変換ケーブルの電圧波形を実際に確認しています。 RS232C通信の基礎を初心者の方にも分かりやすく紹介します。

 

RS485のトランシーバーIC

今回の変換モジュールのRS485トランシーバーICはMAXIM製MAX485です。

変換モジュール内には120Ωの終端抵抗がありませんでした。(未実装でした)

そのため今回はドライバ側でも外部終端が必要になります。

 

MAX485はシリアル変換をRS485通信に変換するICです。

MAX485のデータシートを確認したい場合MAXIMのHPに載っています。リンク先はこちらから。

 

RS485の終端抵抗は120Ωを接続

変換モジュール先のRS485の終端抵抗を接続していきます。

RS485に関してはドライバ側・レシーバ側共に終端抵抗が必要です。

 

今回はトランシーバーICのMAX485のデータシートの参照回路と同様に120Ωを接続します。

RS485の終端抵抗は120Ωが多いと思われます。(100Ωのケースもあるようですが…)

実際に使う際は機器のデータシート・ケーブルのインピーダンスは確認お願いします。

 

終端抵抗120Ωをジャンパー線とブレッドボードで接続

今回はコネクタからジャンパー線で終端抵抗を接続しました。

 

(120Ωの抵抗が無かったので)100Ωと10Ω×2本の抵抗を直列にブレッドボードで接続しています。

 

RS485の配線

今回のRS485トランシーバーICのMAX485は半二重通信用(HALF DUPLEX)です。

ドライバ・レシーバの相互通信が1つの差動線で対応できます。

 

今回のRS485通信テストの半二重通信の差動線はジャンパー線で接続しているだけです。

(本当はインピーダンス整合やツイストされたケーブルを使用した方が良いと思います)

 

またレシーバ側はICは無しで測定用の終端抵抗120Ωだけ接続しています。

 

ラズベリーパイでRS485通信をさせる

以前に下記記事でラズベリーパイとPythonでUSBシリアル出力しました。

USB経由ならばRS485でもシリアル通信と同じ対応が可能です。リンク先はこちらです。

Pythonでserial(シリアル)通信!Read/Writeの波形を見てみた
uartのシリアル通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、シリアル通信の使い方・基礎を確認したい方におすすめです。 以前...

 

今回もラズパイとPythonでUSB-RS485通信を行います

 

pyserialをインストール

Pythonでシリアル通信するために「pyserial」のパッケージをインストールします。

下記コマンドで簡単にインストールできました

pip3 install pyserial

 

ラズパイでPythonのプログラムを用意する

PythonでRS232C通信するプログラミングを行っていきます。

ラズベリーパイ(raspberry pi)はPythonがデフォルトでインストールされています。

 

一度もプログラミング・Pythonを使ったことが無い方でも大丈夫です。

下記記事でラズパイで簡単なプログラムの作成・実行方法を紹介しています

(リンク先はこちらから)

ラズベリーパイでプログラミング入門!Pythonの簡単な始め方
プログラミングを始めたい方にラズベリーパイを使った簡単な入門方法を紹介します。 プログラミング言語の中でも初心者にもやさしく、人気なPythonがラズパイならば簡単にスタートできます。 ラズベリーパイでプログラミング入門!Pytho...

 

「~~.py」というファイルを作って、Pythonの環境開いて3行書いて実行すれば完了です。

 

下記プログラムをコピペしてもらっても構いません。

 

Pythonのプログラムの内容

実際作成したプログラム内容も非常に簡単です。下記の2手順となっています

  1. 「pyserial」をインポートしてusb-シリアル変換(/dev/ttyUSB0)を使うように定義します
  2. RS485通信で「Hello World」とWrite(出力)します。

 

RS485の通信速度を変更する方法

Pythonを使ったUSB-RS485通信の速度変更の仕方は簡単です。

プログラム内の数字を変更するだけです。

9600bpsに速度を遅くしたいのであれば「9600」にすればOKです

 

RS485のA Bの電圧レベルをオシロで確認してみる

測定環境も整いましたので、オシロスコープでRS485の電圧レベルを確認していきます。

 

プローブ位置は回路のイメージ図で示しますと下記になります。

レシーバの終端抵抗のA,Bの電圧を測定しています。

 

今回測定した結果はあくまで筆者の1例ということをご了承ください。

使用するトランシーバーIC、終端抵抗の値、回路構成で値は簡単に変わります。

 

RS485の差動電圧

今回の差動電圧はオシロスコープの「MATH」機能を使って算出しています。

差動電圧A-Bは約2.24Vとなりました。(下記波形の紫箇所です)

RS485 のレシーバの規定は「200mV以上の電圧差」ですので十分にHi/Lowを認識できます。

 

ちなみにICのデータシートを見るとRS485の差動出力電圧(VOD2)は1.5V~5Vでした。

当たり前ですがICの出力範囲内にも入っている形になります

MAX485のデータシートのリンク先はこちらから。

 

RS485の電圧範囲

RS485のA,Bの電圧範囲を確認します。規格では-7V~+12Vの範囲にいる必要があります

今回の波形ではBの箇所で範囲内に入っているか確認しました。(特にAでも問題無し)

最大電圧でも3.56Vで特に問題有りませんでした。

 

RS485の通信速度

RS485の最大伝送速度は10Mbpsですが、今回は9600bpsで確認しました。

Pythonの設定を9600にして、実速度でも9600bpsを確認できました。

 

RS485の原理・プロトコルについて

最後に少し補足になりますが、RS485は物理層(電気的)な仕様の規格です。

特に明確な通信プロトコルはありません

今回のRS485通信テストの場合は、単純にシリアル通信を差動にしたイメージです。

 

そのため今回の場合だとシリアル通信の解析(デコード)機能を使えば信号解析も可能です。

 

RS485の機器を使うときには何のデータ通信されているかは把握するのが良いと思います。

トラブルが起きた時に信号解析も楽になるはずです。

 

まとめ

今回はRS485通信に関して紹介させていただきました。

記事をまとめますと下記になります。

RS485の規格の一例として「-7V~+12Vの電圧範囲」「200mV以上の電圧差」
USB-RS485変換を使えば簡単にRS485通信テストできる。
RS485には明確な通信プロトコルは無い(あくまで電気的な仕様の規格)

 

筆者のRIGOL DS1054Zは今回のRS485通信レベルならば十分に測定が可能です。

趣味にちょうど良いオシロスコープだと思います。

下記記事でも紹介していますので、よろしければご覧ください。(リンク先はこちらから)

オシロスコープはおすすめ!電子工作のために購入してみた
オシロスコープを個人で購入してみました。 オシロがあれば電子工作の測定、電子回路の勉強などに使えて非常に役立ちます。 現役のエンジニアが自宅でオシロを使うメリット・デメリットを説明します。 また実際に通販で購入して、使い始めるまでの一連の流れも紹介します。

コメント