RTK22のMovingbaseシステムは、BaseにSimpleRTK2B F9Pボード、RoverにSimpleRTK2B F9Hボードを使います。
F9Hボードは、119ドルとF9Pボードの半額近いので、今までSimpleRTK2B liteでRoverをやらせていたのを代替えに
して使うことにしました。F9Hは、heading角度しか出力しないので、ポジション(緯度経度標高)は、Base出力する構成になってます。
※Teensy備忘録
★Teensyいじるシリーズ
その1(導入とSD速度) その2(USBHOST初め) その3(USBHOST3ポート)
その4(USBHOST事例) その5(ハードウェアシリアル便利)
●USBポート出力データをマイコンで受信しないとならない
F9PのファームHPG1.13で、私が今一番困っているのは、データ出力ポートが少ない点です。
USBとUART1とUART2がありますが、UART2は、RTCM3をInputするための専用ポートでOutput機能がないです。
UART1のOutputは、Roverに460800bpsの高速送信するRTCM3で占有されているので、USBしか出力に残ってません。=>HPG1.3でOutputからUBXが使えるようになるらしいのですが、未だ時間がかかりそうです。
●USB HOSTの学習(マイコンがPCの代わりにデバイスのUSB端子からデータ受信できる機能)
こちらが図で説明されていて判り易かったです、感謝です。
http://www.picfun.com/usb02.html
①ホストは、通常はPCです。デバイスがGPSとか計測器です。
②ホストとデバイスの役割
ホストがデバイスをコントロールするのですが、パイプという通信ルートが2か所あって
USBの制御的な操作(コントロール転送)を行うのがデフォルトパイプで双方向です。
データを運ぶのがパイプですが、これはホストからOUTされてデバイスからINされる一方向です
③マイコンでのUSBホスト機能とデバイス機能
USBは、シリアル、SPI,I2Cなどの通信方式と違って多機能高速です。
そのため、制御処理が複雑で計算速度が速いプロセッサでないと動作できません。
ですので、マイコンでは、USBホスト機能、デバイス機能を搭載しているものは、非常に少ないです。
その代わりに、マイコンの周辺にUSBデバイスICやUSBホストデバイスICを付加して
ICチップにUSBの複雑で高速な計算処理をやらせて、結果だけをSPIで高速受信します。
USBホスト機能搭載マイコンは、ARM Cortex-M7 600MHzくらいの超高速マイコンになります。
メリットは、CPU単体でホスト・デバイス機能を果たしますので、回路の面積と制作手間がありません。
■USBホスト機能を使うのメリット
通常は、PCがホストなので、PCを持ち歩かないとUSBデバイスからデータを受信できません。
それでは、計測では、不便なので、PCの代わりに超小型でUSBホスト機能を持っているマイコンが便利です。
USBホストなので、ハブを通じて複数のデバイスからデータを受信できます。
しかも高速なので、受信データロスなども心配ありません。特に、USBポートしか出力がでない計測器など
は、USBホストマイコンと接続するだけでデータをログできます。
●USBホスト機能搭載マイコン Cortex-M7搭載のTeensy4.1 を使う
その1では、SDカード書き込みが18MB/secと超高速であることが判りましたが、
今回は、USBホストを初めて実験してみました。
①USBHOST Serialのサンプルプログラムだけで一発で動作完了
ArduinoIDEのスケッチ例の一番下のほうへいくとTeensy4.1用が膨大にあります。
USBHost_t36のSerialを選びます。コードが開きますので、コンパイルしてTeensy4.1に書き込みだけです。
コードの中身は複雑で、USBの設定記述が90%で、データを受信する部分数行です。
複数のデバイスを探して、登録して順次通信していく段取りは相当複雑ですので、コピペする以外にないです
※3か月後 2022年4月19日追記
USB2ポートで、F9P2個接続して MovingBaseシステムをデバッグ中ですが、ノウハウがありました。
ノウハウ1:USB2ポートの場合、バッファをBIGバッファーにして512バイトにします。
ノウハウ2:USBHOSTシリアルのボーレートを460800bps以上にします。F9Pの場合、961200bpsまで上げたほうが、データロス率が改善します。速いほどいいのですが、USBケーブルの接触などうるさくなるので、1mbpsまでにしてます。1ポートなら、全然問題なく受信できているので、その条件で2ポート以上で受信すると、10分受信で1%くらい片ポートデータ落ちが発生します。できるだけ、速い処理をさせるようにします。
●USBケーブルの作成
※3か月経て、気づいた点
使いまわしているうちに、USBHOST通信できなくなりました。ヘッダピンの半田付けが接触不良になったり、ケーブルの中継の接触抵抗が大きかったりすることで、高周波信号にノイズが入って、通信不能になったようです。一般的に、500Kbpsを超える信号線の結線は、しっかりした太い線で、固定をしっかりさせて、応力が半田部分にかからないようにして、ノイズ対策もシールド線のGNDもしっかりとらないといけない点です。アンテナしかり、460800bpsシリアル線、USBシリアル線も太くてしっかりしたシールド線を使うようにこころがけることが重要だと今更ながら、気づきました。
プログラムはコピペできたので、ケーブル作りをします。
こちらのページが親切に解説してます。ドレイン線は、そのままで配線しませんでした。
http://oyaideshop.blogspot.com/2018/03/diyusbusb-a.html
私は、モレックスのコネクタを使ってます。これの作り方は過去記事にあります。
USBマイクロと通常のUSBコネクタの2種類作っておいたほうがいいです。
SimpleRTK2B liteのデータをTeensyで受信します。今までは、USBケーブルの先にPCがあったのですが
今回は、小さなマイコンだけでデータをログできます。
NMEAだけ出力させてTeraTermで見てみました。背景が重なってスクリーンショットにでてますが、
PCが不調でこんな現象がでました。不思議な現象です。
●以後
ここ2年ほどUSBホストマイコンをいじってみたかったのですが、Teensy4.1であっけなく実現できました。
ケーブル作りだけでサンプルプログラムを書き込むだけなので小一時間で完成しました。
以後は、SDログのプログラムを合体させて、更にBaseとRoverの2ポートのUSBハブ受信を行います。