RS-485は送信距離も多いですし2本の電線があればノイズに強い通信できるので今でもよく使われています。
特にFA関係ではまだまだ現役の通信方式です。
私もモジュールを作るときにマイコンで外と通信するときはよく採用していますが、最近作ったモジュールでうまく動かないことがありましたので、備忘録として残しておこうと思います。
スポンサーリンク
RS-485の自動方向制御
RS-485で通信するにはトランシーバICが必要です。
そのICには送受信の信号以外に送信時に"HIGH"にする信号が存在します。
方向制御用のREとかDEというピンですね。
よくある8ピンのRS485トランシーバICですが大体こんな配置です。
REとDEをショートしておいてデータを送信するときはそこにつないだマイコンのピンを"HIGH"にします。
具体的には下図みたいな回路です。
でもこれってマイコンのI/Oを1ピンを消費しますし、その制御も書かないといけないので少し面倒です。
ですので自動でできたらいいなと思うのではないのでしょうか。
そんな理想を実現してくれる回路は調べると色々出てきます。
個人的によく使うのはNOTゲートの74HC14を使った回路です。
ここでは動作は省略します。
なぜか動かないデバイス
この自動方向制御回路はもちろん問題なく使えます。
今までもずっと使えていましたし、どんなスレーブ機器と接続しても問題なく通信できていました、今までは...
表示器がほしいなと思ってAmazonでModbusで通信するLED表示器を買いました。
こういうのはAliexpressでも売っているようなものですが、少し早めに欲しかったのでAmazonで買いました。
「RS485 LED Dispaly」とかで検索すれば、いっぱい出てきますよ。
これも普通にやり取りできるかと思ったら、うんともすんとも反応しないのです。
試しに自動方向制御が入っていないモジュール(FT232R使用)とつなげてみるとちゃんと通信できました。
何がおかしいのか分からず頭を抱えていたのですが、とりあえずオシロスコープで信号波形を見てみました。
RS-485の信号波形
こちらが自動方向制御がかかったRS485の信号波形です。
一応プロトコル解析を入れてみるとASCIIコードで'$'を送っているはずが別のコード(DC2)として認識されてますね。
とは言ってもこの状況でも大半の機器と通信はできます。
使用したオシロスコープのプロトコル解析はRS-232C用だったので仕方ないのですが...
スポンサーリンク
そして、こちらがLED表示器と問題なく通信できたモジュール(FT232R使用)で通信したときのRS-485の波形(A側)です。
自動方向制御ではなかった最初の"HIGH"が入っていますね。
それ以外は特に変わりません。
でもオシロスコープのプロトコル解析ではちゃんとデータが認識されています。
ここがどうやら悪さをしているようです。
自動方向制御のクセ
自動方向制御は送信が開始されてすぐにRE/DEピンを切り替えます。
その影響でデータを送り始めた最初のアイドル状態("HIGH"のまま)がありません。
どうやら私が買ったLED表示器にはこの最初の"HIGH"を検出してデータのやりとりをしているようです。
...というわけで、自動方向制御をやめてみるとあっさりと解決しました。
この最初のアイドル状態も含めて自動方向制御で実現できたらいいんですけどね。
この問題をTwitterでつぶやくと助言をいただいて解決しました。
末筆ではありますが、改めて感謝いたします。
正常に読み取ってくれるRS-485の波形は最初の立ち上がりがある
右の波形にはその立ち上がりはないけど、今問題になっている機器以外ではちゃんとデータを拾ってくれる
受信側の問題なのかなあ... pic.twitter.com/rTb6lvxNWT— たまさ@Neulse (@EHbtj) December 29, 2021
スポンサーリンク
Leave a Comment