パワーメーター2019で初めてFLOW制御をいじってみました。しかし、本当の意味を理解していないためXbeeとマイコン間ではFLOW制御が不要な点に気づかずに、無駄なことをずいぶんしてしまいました。そこで、FLOW制御の基礎実験をして理解を深めました。
●FLOW制御の基礎実験(Nucleo L432KC 同士で通信)
仕入れたばかりのNucleo L432KC 2個間をシリアル接続します。
STM32マイコンのハードウェアFLOW制御の実験です。
115200bpsで通信します。
●やり方
「データの送信間隔をどんどん短くしていって制御がどうなるか実験」
使うピン名 | ピンの役割 | 送り側L432KC | クロス結線 | 受け側L432KC |
TXピン | データを送る出口 | PA_2(UART2_TX) | X | PA_2(UART2_TX) |
RXピン | データを受ける入口 | PA_3(UART2_RX) | PA_3(UART2_RX) | |
RTSピン | Request To Send 送信要求 | PA_1(UART2_RTS) | X | PA_1(UART2_RTS) |
CTSピン | Clear To Send 送信許可 | PA_0(UART2_CTS) | PA_0(UART2_CTS) |
ピン名称の参照記事:http://www.sacom.co.jp/lecture/rs232c.html
FLOW制御解説記事:
https://www.contec.com/jp/support/basic-knowledge/daq-control/serial-communicatin/
https://japan.moxa.com/upload/2010011907011614.pdf
➁プログラム
送り側 Xbee名でマイコン間シリアル接続します ASCIIで0x31=’1’ 1バイトを送信します
include “mbed.h”
DigitalOut myled(LED1); |
受け側 受けたバイトをPCへ表示させている
#include “mbed.h”
DigitalOut myled(LED1); |
●実験結果
①オシロ測定設定時 送信周期74μsec
送り側マイコンのTX(データ送信線):水色
受け側マイコンのCTS(データ
データは、下位4ビット上位4ビットの順で送信されてます
下位100011000上位=>逆に並べて0011 0001=>0x31となります
黄色のCTSの挙動はストップビット時にHIになって、一定時間で
LOWになります。LOWの時は通信許可なのか?HIの時に通信OKなのか?この時点ではまだわかりません。黄色で送信OKと書いてありますが、OK?なのかわからないということです。
➁送信周期を54μsecに短くすると
・CTSの立ち上がりエッジと下がりエッジがデータのスタートビットとストップビットが同期している
・CTSの周期が11456Hzまで高速化している115600bpsに接近
=>これをみるとストップビットを見てCTSがHIになって、HIの間にスタートビットが始まってスタートビットーストップビット間はCTSがLOWとなって送信禁止となっていると解釈できるのでCTSは、HIで送信許容状態である
③送信周期49μsecにしたらFLOW制御の動作が見えた
・➁の54μsecで115200bps直近で、ぎりぎりだったのを少し早くした場合の現象
・最初は、CTS LOWなのにスタートビットが始まってしまって
制御ができてない状況が発生しました。(上のグラフ)
・数秒間みてると徐々にCTSの幅が広がってきて下のグラフの
ようになりました。これはST32の制御が動作しているのが目視
できたようです。
・結果として、ストップビットが過ぎてからCTS立ち上がりエッジになってスタートビット開始でCTS立下りエッジが同期して制御的には
通信中は、CTS LOWで送信禁止となって制御状態となってます
③送信周期30μsecにしてみた。
・CTSが逆転していて通信中にHIになってしまって制御不能になったようです。制御アルゴリズムが115200Hz基準に動作しているためだと思います。
④この制御不能状態からボーレートを230400bpsにあげると
・送信周期30μsecでは、制御不能に陥ってしまったので
送信速度を上げたらどうなるか実験すると
・①と同じ状態に戻りました。(オシロのDIVは10μsecになってます)
・この状態では、ストップビットとともCTSが立ち上がって、HIが5μsecつづいて勝手に下がってしまってますが、禁止状態のはずだけどスタートビットが入ってしまっているので制御ルールからはずれてますが、
制御アルゴリズム的には、余裕があるときは制御してないのかな?
と理解すれば①~④の挙動は理解できると思います。
●以後
オシロで条件を振りながら通信を観察する面白さが分かったので、これからも機会がでたらやってみます。