XBEEでのUARTの通信誤差を検証

はじめに

Digi International社のXBeeがとても扱いやすい(流通・価格・情報)、便利な無線モジュールです。 しかし、UARTの通信レートがなんだかおかしいとのことだったので、調べてみました。

実験としては、正確さに若干問題がありますが、参考程度にお願いします。

XBeeは、802.15.4対応版とMeshNet用のSeries 2の2種類があります。 本実験では、802.15.4の通常版と電波強度が強いPro版、Seriese 2の通常版の3種類を実験しています。 802.15.4版とSeriese 2を明確に分けるために、シリーズ1 と シリーズ1 Pro、シリーズ2の3種類の名前で記述していますのでご注意ください。

実験結果概要

本実験は、通信レートの誤差(エラーレート)を求め、使用する上での参考になればと考えています。 詳細は、下記の実験結果をご参照ください。

シリーズ1とシリーズ1 Pro について

  • 1200 baud ~ 38400 baud は、誤差 0.16% 以下である。
  • 57600 baud は、誤差 2.18%前後である。
  • 115200 baud は、111111 baud (誤差3.55%)である。 これは、データシートに注記されている。

シリーズ1は、57600 baud と 115200 baud を通常使用するには、誤差が大きいため注意が必要である。

シリーズ2について

  • 1200 baud ~ 38400 baud は、誤差 0.08% 以下である。
  • 57600 baud は、誤差 0.12%前後である。
  • 115200 baud は、誤差 0.14%前後である。

このことから、シリーズ2のUARTは、高速でも十分に使用できる誤差範囲である。

シリーズ1とシリーズ1 Pro の非標準通信レートについて

ターミナル経由で、非標準通信レートが設定できることから、設定可能な通信レートを少し調べてみました。

  • 125kbaud (設定値 0x1E848) は、誤差 0.01%である。
  • 200kbaud (設定値 0x30D40) は、誤差 0.02%である。
  • 250kbaud (設定値 0x3D090) は、誤差 0.07%である。

non-standardの通信レートは、誤差が少ないためマイコンによっては、選択肢として良いと思われる。

また、115200baudを非標準通信レートで設定しても、111111baudになるので注意。(データシートには書かれていない。)

実験結果

通信速度 [baud] 誤差 [%]
1200 0.08
2400 0.08
4800 0.16
9600 0.03
19.2k 0.01
38.4k 0.16
57.6k 2.18
115.2k 3.55
シリーズ 1 802.15.4版
通信速度 [baud] 誤差 [%]
1200 0.04
2400 0.08
4800 0.16
9600 0.16
19.2k 0.16
38.4k 0.16
57.6k 2.12
115.2k 3.55
125k 0.01
200k 0.02
250k 0.07
シリーズ 1 Pro 802.15.4版 Pro
通信速度 [baud] 誤差 [%]
1200 0.04
2400 0.08
4800 0.03
9600 0.03
19.2k 0.03
38.4k 0.03
57.6k 0.12
115.2k 0.14
シリーズ 2

実験環境

実験装置

  • Digi社 Xbee 802.15.4版 2台
  • Digi社 Xbee 802.15.4版 Pro 1台
  • Digi社 Xbee seriese 2 2台
  • Spark fun社 xbee エクスプローラ
  • SwitchScience社 XBeeピッチ変換基板とソケットのセット
  • 抵抗器 10kΩ 2個 (Rx プルアップ・Tx プルダウン)
  • ブレッドボード
  • PC (windows7)
  • 安定化電源 Agilent E3642A (8V 5A)
  • オシロスコープ Tecktronix MSO3014 (100MHz、2.5GS/s)
実験風景

実験方法

環境
  • PCとXBeeを接続します。 (PC側環境)
  • 通信レートを変更した XBee に電源とオシロスコープを接続します。 (観測側環境)
手順
  1. 通信レートを X-CTU を用いて設定する。(1200~115200 baud)
  2. 観測側環境に実験用 XBee を設定する。
  3. PC側環境から、0x55 を送信する。(2進数 01010101 となる。スタートビットを入れて1010101となるのでこの値を使用した。)
  4. 観測側のUARTに出力されるので、オシロスコープで観測する。
  5. オシロスコープが自動計算してくれるパルス幅を元に実通信レートを計算する。

実験結果

通信測定結果

通信実験の結果を、オシロスコープのスクリーンショットとともに掲載します。

シリーズ1 1200baud

xbee シリーズ1 1200baud
  • 通信レート:1200 [baud]
  • 理論パルス幅:833.3 [us]
  • 実通信レート:1199.0 [baud]
  • 実パルス幅:834.0 [us]
  • 通信誤差:0.08 [%]

シリーズ1 2400baud

xbee シリーズ1 2400baud
  • 通信レート:2400 [baud]
  • 理論パルス幅:416.7 [us]
  • 実通信レート:2398.1 [baud]
  • 実パルス幅:417.0 [us]
  • 通信誤差:0.08 [%]

シリーズ1 4800baud

xbee シリーズ1 4800baud
  • 通信レート:4800 [baud]
  • 理論パルス幅:208.3 [us]
  • 実通信レート:4807.7 [baud]
  • 実パルス幅:208 [us]
  • 通信誤差:0.16 [%]

シリーズ1 9600baud

xbee シリーズ1 9600baud
  • 通信レート:9600 [baud]
  • 理論パルス幅:104.2 [us]
  • 実通信レート:9596.9 [baud]
  • 実パルス幅:104.2 [us]
  • 通信誤差:0.03 [%]

シリーズ1 19200baud

xbee シリーズ1 19200baud
  • 通信レート:19200 [baud]
  • 理論パルス幅:52.08 [us]
  • 実通信レート:19198 [baud]
  • 実パルス幅:52.09 [us]
  • 通信誤差:0.01 [%]

シリーズ1 38400baud

xbee シリーズ1 38400baud
  • 通信レート:38400 [baud]
  • 理論パルス幅:26.04 [us]
  • 実通信レート:38462 [baud]
  • 実パルス幅:26.00 [us]
  • 通信誤差:0.16 [%]

シリーズ1 57600baud

xbee シリーズ1 57600baud
  • 通信レート:57600 [baud]
  • 理論パルス幅:17.36 [us]
  • 実通信レート:58858 [baud]
  • 実パルス幅:16.99 [us]
  • 通信誤差:2.18 [%]

シリーズ1 115200baud

xbee シリーズ1 115200baud
  • 通信レート:115200 [baud]
  • 理論パルス幅:8.681 [us]
  • 実通信レート:111111 [baud]
  • 実パルス幅:9.0 [us]
  • 通信誤差:3.55 [%]

111111 baud になることはデータシートに注記されています。(教えてくださった皆さんありがとうございます。)

シリーズ1 Pro 1200baud

xbee シリーズ1 Pro 1200baud
  • 通信レート:1200 [baud]
  • 理論パルス幅:833.3 [us]
  • 実通信レート:1200.5 [baud]
  • 実パルス幅:833.0 [us]
  • 通信誤差:0.04 [%]

シリーズ1 Pro 2400baud

xbee シリーズ1 Pro 2400baud
  • 通信レート:2400 [baud]
  • 理論パルス幅:416.7 [us]
  • 実通信レート:2398.1 [baud]
  • 実パルス幅:417.0 [us]
  • 通信誤差:0.08 [%]

シリーズ1 Pro 4800baud

xbee シリーズ1 Pro 4800baud
  • 通信レート:4800 [baud]
  • 理論パルス幅:208.3 [us]
  • 実通信レート:4807.7 [baud]
  • 実パルス幅:208 [us]
  • 通信誤差:0.16 [%]

シリーズ1 Pro 9600baud

xbee シリーズ1 Pro 9600baud
  • 通信レート:9600 [baud]
  • 理論パルス幅:104.2 [us]
  • 実通信レート:9615.4 [baud]
  • 実パルス幅:104.0 [us]
  • 通信誤差:0.16 [%]

シリーズ1 Pro 19200baud

xbee シリーズ1 Pro 19200baud
  • 通信レート:19200 [baud]
  • 理論パルス幅:52.08 [us]
  • 実通信レート:19231 [baud]
  • 実パルス幅:52.00 [us]
  • 通信誤差:0.16 [%]

シリーズ1 Pro 38400baud

xbee シリーズ1 Pro 38400baud
  • 通信レート:38400 [baud]
  • 理論パルス幅:26.04 [us]
  • 実通信レート:38462 [baud]
  • 実パルス幅:26.00 [us]
  • 通信誤差:0.16 [%]

シリーズ1 Pro 57600baud

xbee シリーズ1 Pro 57600baud
  • 通信レート:57600 [baud]
  • 理論パルス幅:17.36 [us]
  • 実通信レート:58823 [baud]
  • 実パルス幅:17.00 [us]
  • 通信誤差:2.12 [%]

シリーズ1 Pro 115200baud

xbee シリーズ1 Pro 115200baud
  • 通信レート:115200 [baud]
  • 理論パルス幅:8.681 [us]
  • 実通信レート:111111 [baud]
  • 実パルス幅:9.0 [us]
  • 通信誤差:3.55 [%]

111111 baud になることはデータシートに注記されています。(教えてくださった皆さんありがとうございます。)

シリーズ1 Pro 125000baud (non-standard speed)

xbee シリーズ1 Pro 125000baud
  • 通信レート:125000 [baud]
  • 理論パルス幅:8.0 [us]
  • 実通信レート:124980 [baud]
  • 実パルス幅:8.001 [us]
  • 通信誤差:0.01 [%]

シリーズ1 Pro 200000baud (non-standard speed)

xbee シリーズ1 Pro 200000baud
  • 通信レート:200000 [baud]
  • 理論パルス幅:5.0 [us]
  • 実通信レート:199960 [baud]
  • 実パルス幅:5.001 [us]
  • 通信誤差:0.02 [%]

シリーズ1 Pro 250000baud (non-standard speed)

xbee シリーズ1 Pro 250000baud
  • 通信レート:250000 [baud]
  • 理論パルス幅:4.0 [us]
  • 実通信レート:249812 [baud]
  • 実パルス幅:4.003 [us]
  • 通信誤差:0.07 [%]

シリーズ2 1200baud

xbee シリーズ2 1200baud
  • 通信レート:1200 [baud]
  • 理論パルス幅:833.3 [us]
  • 実通信レート:1200.5 [baud]
  • 実パルス幅:833.0 [us]
  • 通信誤差:0.04 [%]

シリーズ2 2400baud

xbee シリーズ2 2400baud
  • 通信レート:2400 [baud]
  • 理論パルス幅:416.7 [us]
  • 実通信レート:2398.1 [baud]
  • 実パルス幅:417.0 [us]
  • 通信誤差:0.08 [%]

シリーズ2 4800baud

xbee シリーズ2 4800baud
  • 通信レート:4800 [baud]
  • 理論パルス幅:208.3 [us]
  • 実通信レート:4798.4 [baud]
  • 実パルス幅:208.4 [us]
  • 通信誤差:0.03 [%]

シリーズ2 9600baud

xbee シリーズ2 9600baud
  • 通信レート:9600 [baud]
  • 理論パルス幅:104.2 [us]
  • 実通信レート:9596.9 [baud]
  • 実パルス幅:104.2 [us]
  • 通信誤差:0.03 [%]

シリーズ2 19200baud

xbee シリーズ2 19200baud
  • 通信レート:19200 [baud]
  • 理論パルス幅:52.08 [us]
  • 実通信レート:19194 [baud]
  • 実パルス幅:52.10 [us]
  • 通信誤差:0.03 [%]

シリーズ2 38400baud

xbee シリーズ2 38400baud
  • 通信レート:38400 [baud]
  • 理論パルス幅:26.04 [us]
  • 実通信レート:38388 [baud]
  • 実パルス幅:26.05 [us]
  • 通信誤差:0.03 [%]

シリーズ2 57600baud

xbee シリーズ2 57600baud
  • 通信レート:57600 [baud]
  • 理論パルス幅:17.36 [us]
  • 実通信レート:57670 [baud]
  • 実パルス幅:17.34 [us]
  • 通信誤差:0.12 [%]

シリーズ2 115200baud

xbee シリーズ2 115200baud
  • 通信レート:115200 [baud]
  • 理論パルス幅:8.681 [us]
  • 実通信レート:115367 [baud]
  • 実パルス幅:8.668 [us]
  • 通信誤差:0.14 [%]

non-standard 通信レートの設定方法

設定方法として、Digi社から提供されているX-CTUを使用している人が多いと思います。 non-standard 通信レートを設定するには、Terminalを使用する必要があります。

Terminalを開いていただいて次のように打つと出来ます。()の中は、XBeeから送られてくる情報です。

+++(OK)
ATBD 0x1E848(OK)
ATWR(OK)
ATCN(OK)

この時点で転送速度が変わるので注意。(ATWRは無くても大丈夫です。詳細は後述参照)

125kbaud への設定

+++(OK)
ATBD 0x1E848(OK)
ATWR(OK)
ATCN(OK)

この時点で転送速度が変わるので注意。125000にX-CTUの速度を変えないと通信ができなくなる。

200kbaud への設定

+++(OK)
ATBD 0x30D40(OK)
ATWR(OK)
ATCN(OK)

この時点で転送速度が変わるので注意。200000にX-CTUの速度を変えないと通信ができなくなる。

250kbaud への設定

+++(OK)
ATBD 0x3D090(OK)
ATWR(OK)
ATCN(OK)

この時点で転送速度が変わるので注意。250000にX-CTUの速度を変えないと通信ができなくなる。

ATコマンドについて

通信速度設定に使用しているATコマンドは、次のようになっています。

  • +++ :ATコマンドモード開始
  • ATBD : 通信速度設定
  • ATWR :設定保存
  • ATCN :コマンド終了

上の設定では、ATWRを実行していますが、実験するだけならATWRを飛ばし、ATCNすると設定が変更されます。 ただし、電源を切ると前の設定に戻りますので注意してください。

おわりに

通信レートの誤差は、オシロスコープの誤差もあるため、0.2%以下の誤差はほぼ無いと考えられます。

誤差の計算は、オシロスコープの設定が10kpointで計測していることや、タイムスケールが適切でないため、正確ではないのが残念です。

115200baudと書くより、115200bpsと書く方が検索には引っかかり良いようです。 こだわりとしてUARTは、変調速度のため115200bpsと書くより1秒間の変調回数115200baudと書いています。 bpsは1秒間の通信ビット数で、baudは1秒間の変調回数の単位となります。

役立つかわかりませんが、実験したので公開しておきます。気になる点があれば、ご意見をいただければと思います。

リファレンス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です