【STA25】メイン基板TeensyのUART6個使った<ADS122とBNO085周期合わせ>

12月は、STM32サブCPU案で2週間無駄をしてしまったので、正月から気を取り直して、本来のTeensy4.1メインで仕様を
検討しなおしました。Teensy41のメリットを最大限に生かして、シリアル6個の仕様にしました。6個使っても、受信ロスタイムが
1msec以内なので、プログラム作成上は、シリアル受信時間は関係なしで、データの処理だけに集中できます。
Teesy4.1を1個壊してしまったので、予備用でTeensy4.1とTeens4.0をロボショップから急遽購入しました。
年末27日発注で28日に到着という超特急でした。ロボショップさんは、四国の徳島にあるのですが、発注と同時に発想してくれました。信州MAKERSにとって、DIGIKEYに代わる心強い購入先です。Teensy4.1は、国内最安姉で、DIGIKEYといい勝負です。
https://jp.robotshop.com/products/teensy-41-usb-microcontroller-development-board-no-pins

●レイアウトの工夫
ADS122の載った基板をIo基板として、Teensy4.1の載ったメイン基板と並列に並べることにしました。
理由は、メイン基板の下のSimpleRTK2Bが接続されて分厚くなるので、3階建てをさけるためです。

システムデバイスが多いので、広いデバッグ台に貼りつけます。
USBHUBを使っているのは、Teensyが外部電源設定になっているため、USBプラグから5Vが供給されないため、
別途、外部電源用のコネクタへUSBから5Vだけを供給するようになっているため、GNDを共通にしないといけないのでUSBHUBで、電源オンオフすることでデバッグ作業をおこなうためです。

●仕様検討結果
課題1 :MPU6500のI2Cの1mケーブル引き回しが不安定だった。
=>BNO085にして、UART接続にしました。
TOPがねじれがメインだろうということで、TOPだけにしました。
Teensyは、ハードシリアルが8個あるので、余裕で増やせます。
課題2:ADS122U04の2Ch使いだと、2,4msec周期でサンプリング固定なので、BNO085 RVCモード10msecと同期が合わない。
=>BNO085の周期のタイミングに9500μsec以上で切って、マージンをつけてばらつきの大きいADS122の2.4msecデータを拾いました。
コツ1:ADS122の2CH目の終わりフラフをendflipとして、2CH目が終わった時に同期を行う設定
コツ2:BNOのシリアルサンプリングをSerial1の直後にSerial3を読んで、読み取り時間差を数μsecまで短縮してあります。
※このように誤差が小さくできるには、600MHzで動作して、なおかつハードウェアシリアルの受信時間が数μ以下という超高速処理でのTeensy4.1だから出来る技です。ESP32やSTM32など遅いCPUでは絶対にできません。
TeensyのHPでの解説:https://www.pjrc.com/teensy/td_uart.html
※Teensy4.1のシリアルの凄さと使い方の私の投稿

【RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その5<HardwareSerial 超便利>

PGMは、GISTに置いてあります。
https://gist.github.com/dj1711572002/0164a2993157aa0d089a4822604a17e6

void loop() {
  // put your main code here, to run repeatedly:
  pt0_1=micros();
  p1=bnoread1(dB1,16);
  p3=bnoread3(dB3,16);
  if(endflip==1 && p1-p1_1>9500)
  {
    Serial.printf(“[%d,%d],%d,%d,%d,%d\n\r”,data1chi,data2chi,ft1,ft2,pt0-pt0_1,micros());
    Serial.printf(“%d,%d,[%4.3f,%4.3f,%4.3f],[%4.3f,%4.3f,%4.3f],%d\n\r”,p1,p3,dB1[0],dB1[1],dB1[2],dB3[0],dB3[1],dB3[2],p1-p1_1);
    p1_1=p1;
    pt0=micros();
    //Serial.println(“*”);
    endflip=0;
    //delayMicroseconds(100000);//5msec Period
  }

上記プログラムでの同期ばらつきは、平均10.6msec±0.093msecでした。

●以後
曲げセンサシステムのデータ収集はできたので、これをSDログして、10msecのデータファイルにします。
RTKシステムと同期させる必要があるので、次にRTKシステムをデバッグ台状に組んでから同期します。
RTKシステムは、1Base2Roverなので、1mのシリアル線で460800bpsができるかが課題です。

コメントを残す

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