uartのシリアル通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。
Pythonとraspberry piでテストして測定動画を撮っています。
シリアル通信の使い方・基礎を確認したい方におすすめです。
以前はPCでusb-シリアル変換の波形を確認
以前の記事でuartのシリアル波形の解析記事を上げましたが、その際はPC側からusb-シリアル変換ケーブルを使い波形を確認していました。(リンク先はこちらから)
今回はラズベリーパイ(raspberry pi)単体で「PythonでRead/Write」「ボーレート変更」をしてみたとき波形がどのようになるか確認していきます。
pyserialをインストールしてシリアル通信
Pythonでシリアル通信するために「pyserial」のパッケージをインストールします。下記コマンドで簡単にインストールできました
シリアル通信のRead/writeをPythonで行う
Pythonでシリアル通信のプログラミングを行っていきます。
ラズベリーパイ(raspberry pi)ならばデフォルトの環境でエディタまで入っているので簡単にPythonが触れます。
実際使ったPythonプログラム
実際作成したプログラム内容も非常に簡単です。下記の3手順となっています
①「pyserial」のパッケージをインストールしてusb-シリアル変換(/dev/ttyUSB0)を使うように定義します
②シリアル通信で「Hello World」とWrite(出力)します。
③シリアル通信でRead(入力)させて結果をprint文で表示させます
プログラムは下記に張り付けておきます
ser = serial.Serial('/dev/ttyUSB0', 1)
ser.write(b'Hello World')
c =ser.read(11)
print(c)
ser.close()
ちなみに筆者も少し前までPython初心者でした
ちなみに筆者は少し前までPython初心者でしたが、下記記事で紹介しているUdemy で勉強することで今回のレベルのことは出来るようになりました。
初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから
シリアル通信をループバックさせる
今回はラズベリーパイ(raspberry pi)単体でRead/Writeさせるので、usb-シリアル変換ケーブルのRX(受信)とTX(送信)をショートさせてシリアル通信をループバックさせます。
ループバックさせますのでシリアル通信のuartのRead(RX(受信))とWrite(TX(送信))は同じ波形になります。
シリアル通信のReadとWriteをLEDとリンク
単純にアナライザで波形を確認するだけでは面白くないため、シリアル通信のRead/Writeの動作をリンクさせたLEDを実装します。
今回ボーレートを落として(通信速度を遅くして)シリアル通信させますので、普段ならば目で見れないシリアル通信の波形をLEDでも見れるように改造しました。
直接uartからLEDを駆動することは難しいのでバッファIC(TC74HC4050AP)を一つ噛まして対応します。
そのため今回のテストの全体構成としては下記のようになります。シリアル通信確認用の黄色LEDがWrite,赤LEDがReadになりますがループバックしているので同じ光り方です。
アナライザを用意する
今回はシリアル通信(uart)の「Read/Write」「ボーレート」をアナライザを使って確認していきます。
最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。
筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。
(※値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)
但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。
回路図・配線
今回の回路図としては下記形です。どの部品も汎用的なデバイスで対応してますので誰でも同様に組むことができます。
ボーレートを変更してシリアル通信する
最初にボーレートを落として(通信速度を遅くして)テストをしていきます。
変更の仕方は簡単です。Pythonのプログラムでよく使う「115200」bpsになっている箇所を任意の値に変更するだけです。今回筆者は「1」bpsにしてみました。
プログラムを実行するとシリアル通信が動き、「Read/write」・LED点滅していることが確認できました。
ボーレートが1bpsにはならなかった
テスト後にボーレートが1bps(1bit辺り約1Hz)の波形になっているか確認しましたがアナライザの波形の周波数は約46Hzでした。
ボーレートを落とす(通信速度を遅くする)にも限界があるようです。
ボーレート変更後のPythonでシリアル通信した動画
実際にボーレート変更後にPythonでシリアル通信させて、アナライザとLED動作を確認する動画が下記となっています。
~3秒 アナライザ起動・Pythonプログラム実行
~7秒 Read/Write・LED動作を確認。Pythonプログラムが終了
~12秒 アナライザの波形を見やすい位置に移動
115200bpsのシリアル通信の波形をテストする
同様に115200bpsのシリアル通信をテストしました
今回はアナライザの機能を使って「Hello World」シリアルでRead/Writeされているのを確認しました。
ASCIIコード表通りに「Hello World」となっています
多くの箇所でデフォルトで使われている115200bpsの設定ですが、プログラム終了後アナライザで1bit辺り約115200Hzになっていることを無事確認できました。
ボーレート115200bpsでシリアル通信した動画
実際にボーレート115200bpsでPythonでシリアル通信させて、アナライザの波形を確認する動画が下記となっています。
~3秒 アナライザ起動・Pythonプログラム実行
~7秒 Read/Writeを確認。Pythonプログラムが終了
~13秒 「Hello World」がシリアル通信でRead/Writeされているのを確認
~30秒 波形を拡大して1bit辺り約115200Hzを確認
USBシリアル通信をPythonで高速化してみた
今回はボーレート115200まで測定しましたが、更にPythonで高速化して12Mbpsを試してみました。
下記記事でオシロスコープで波形を測定しながら確認しています。(リンク先はこちらから)
まとめ・感想
Pythonでプログラミングすることによりシリアル(uart)通信のテストを色々と試すことができました。
やはりPythonを使えるようになると色々なデバッグ・テストが捗ります。
筆者は下記記事で紹介しているUdemy で勉強することである程度のレベルのことは出来るようになりました。
初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから
コメント