Back to page

− Links

 Print 

BTE098B DXMIO with IMU :: Besttechnology

knowledge:BTE098B DXMIO with IMU

Table of contents
    • DXMIOの特徴
    • 概要
    • 仕様
      • 同梱内容
      • 基本仕様
      • 外観・レイアウト
      • 回路図
      • 各機能詳細
        • CN1
        • CN2
        • CN3
        • CN4
        • LED1
        • LED2
        • PB1
        • U7
    • 各機能の詳細
      • CN1
      • CN2
      • CN3, CN4
      • クロック源
      • ブートローダー
    • プログラムの開発環境
      • GCC Developer Lite
      • LPC84x向けターゲットファイル及びライブラリ
      • サンプルコードとコンパイル済みファイルの転送及びと実行
      • サンプルコードのコンパイルから転送及び実行
    • 基本サンプルコード
      • LPCOpen
      • ペリフェラルのクロックソース
      • 端子機能
      • USART
      • IMU
      • FreeRTOS
    • Dynamixelプロトコル向けサンプルコード
      • Dynamixelホスト
      • Dynamixelクライアント
        • Dynamixel通信プロトコル
        • Dynamixel Protocol V1コントロールテーブル
          • Model Number
          • Version of Firmware
          • ID
          • Baudrate
          • WriteNVM
          • LED
          • Terminator
          • Pin Config 0~11
          • PWM Frequency
          • PWM Duty 0~5
          • Capture 0~5
          • OUT
          • IN
          • ADV 0~11
          • DAV
          • Accelerometer, Gyroscope Calibrated, Magnetic Field Calibrated, Linear Acceleration, Rotation Vector, Gravity, Temperature
          • USER 0~4
        • Dynamixel Protocol V2コントロールテーブル
          • Baudrate
      • PC用モニタツール・デモコード
    • 注意事項

ショップページへ[1]

E097C_3D.png

DXMIOの特徴 anchor.png[2]

  • Dynamixel互換I/F及び通信プロトコル対応
  • デジタル入出力・アナログ電圧計測・アナログ電圧出力・PWM出力・パルス数カウンタ・パルス幅計測をサポート
  • 任意のプログラムを組み込む事により、様々な処理を実現可能
  • 9軸IMU搭載
  • OSにFreeRTOS[3]を採用
  • 超小型
Page Top

概要 anchor.png[4]

DXMIOはNXP社[5]LPC845[6](cortex-M0+コア)を搭載し、Dynamixel互換I/Fを装備した汎用マイコンボードです。
IMUについては前バージョンのDXMIO[7]ではBNO055を採用していたのに対し、本バージョンではBNO085を採用しています。

Dynamixelで構成された装置にセンサ等を追加装備する場合、DXMIOを中継すれば同一のネットワーク上にフィードバック系を設ける事ができます。
基本機能はサンプルプログラムとして提供されるので、それらを参考に独自にプログラムを作成すれば機能拡張できるでしょう。

Page Top

仕様 anchor.png[8]

Page Top

同梱内容 anchor.png[9]

型式数量備考
本体1-
Robot Cable X3P1-
Robot Cable X4P1-
Page Top

基本仕様 anchor.png[10]

商品番号BTE098B
MPULPC845M301JHI33[6]
PCBリビジョンE097C (4層)
通信機能TTL(シングルエンド)及びRS-485(ディファレンシャル)の半二重
動作温度0~+50℃
動作電圧DC5.3~35V
絶対最大定格 ±50V
消費電流最大35mA
電源出力DC5V 最大400mA
リンク方式Multi Drop(daisy chain type Connector)
アナログ入力入力電圧範囲0~3.3V
入力インピーダンス0.1MΩ
デジタル入出力デジタル入力Lowレベル検出電圧範囲-0.5~1.5V
デジタル入力Highレベル検出電圧範囲1.5~5.5V
シンク・ソース電流最大40mA
デジタル出力High電圧2.9~3.3V
デジタル出力Low電圧0~0.4V
寸法約15×30mm
コネクタ等14ピンランド, RS-485 x1, TTL×1, モニタLED
環境配慮RoHS準拠, 鉛フリー半田

Page Top

外観・レイアウト anchor.png[11]

Page Top

回路図 anchor.png[16]

※2025/11以降のロットではX1・C16・C17が実装済

Page Top

各機能詳細 anchor.png[18]

Page Top
CN1 anchor.png[19]
E097C_CN1.png
  • 2.54mmピッチ14ピン
  • ランド穴径 0.9mm
  • 1pin(GND),2pin(5.0V)端子間から外部へDC5Vの電源供給可。
  • 各GPIOは基本DC3.3Vロジックレベルで、デジタルI/Oに構成されている間は5Vトレラント対応、アナログ入力に構成されている間は5Vトレラント非対応
  • 端子名
    No.端子名称 (MPU)No.端子名称 (MPU)
    1GND14GPIO5(PIO0_21/ADC5)
    25.0V13GPIO6(PIO0_20/ADC6)
    3GPIO4(PIO0_22/ADC4)12GPIO7(PIO0_19/ADC7)
    4GPIO3(PIO0_23/ADC3)11GPIO8(PIO0_18/ADC8)
    5GPIO2(PIO0_14/ADC2)10GPIO9(PIO0_17/ADC9)
    6GPIO1(PIO0_6/ADC1)9GPIO10(PIO0_13/ADC10)
    7GPIO0(PIO0_7/ADC0)8GPIO11(PIO0_4/ADC11)
Page Top
CN2 anchor.png[20]
E097C_CN2.png
  • 1.27mmピッチ5ピンランド
  • MPUのSWD端子に接続
    No.端子名称
    13.3V
    2GND
    3SWDIO
    4SWCLK
    5RESET
Page Top
CN3 anchor.png[21]
E097C_CN3.png
  • TTL I/F
    TTL_IF.png
  • 電源と通信用信号ラインが接続
    Pats NameJST Parts Number
    基板用ヘッダーB3B-EH, B3B-EH-A[22]
    ハウジングEHR-3[22]
    ターミナルSEH-00x[22]
    B3B-EH.png
    端子番号信号名
    1GND
    2VDD
    3TTL Signal
  • Dynamixel I/Fに準拠したコネクタで、TTLによるシリアル通信及びDXMIOへの電源供給を行う
  • ③ピンは220kΩの抵抗で5Vへプルアップ済
  • 物理的な最大データレートは10Mbps
  • ①ピン(GND)および②ピン(VDD)はそれぞれボード内全て共通
  • MPUとはCN4のRS-485 I/FとOR接続
Page Top
CN4 anchor.png[23]
E097C_CN4.png
  • RS-485 I/F
    RS485_IF.png
  • 電源と通信用信号ラインが接続
    Pats NameJST Parts Number
    基板用ヘッダーB4B-EH, B4B-EH-A[22]
    ハウジングEHR-4[22]
    ターミナルSEH-00x[22]
    B4B-EH.png
    端子番号信号名
    1GND
    2VDD
    3RS-485 D+
    4RS-485 D-
  • Dynamixel I/Fに準拠したコネクタで、RS-485によるシリアル通信及びDXMIOへの電源供給を行う
  • ③④ピン間にはプログラムによってON/OFFできる120Ωのターミネータを装備
  • 物理的な最大データレートは20Mbps
  • ①ピン(GND)および②ピン(VDD)はそれぞれボード内全て共通
  • MPUとはCN3のTTL I/FとOR接続
Page Top
LED1 anchor.png[24]
  • 赤色LED
  • 3.3Vの生成と共に点灯
Page Top
LED2 anchor.png[25]
  • 青色LED
  • アプリケーションにてプログラマブルに点灯・消灯
  • 電流制限抵抗を介してMPUのGPIOへシンク接続
Page Top
PB1 anchor.png[26]
E097C_PB1.png
  • プッシュスイッチ
  • 無操作でMPUのRESET端子を解放
  • 押下でMPUのRESET端子をLOW
Page Top
U7 anchor.png[27]
E097C_U7.png
  • CEVA社BNO085[28] 9軸(3軸加速度計・3軸磁力計・3軸ジャイロスコープ)IMU
  • 32.768kHz外部クロック装備
  • ボード裏面中央に配置
  • PS0・PS1・NRST・I²CバスのみがMPUと接続
Page Top

各機能の詳細 anchor.png[29]

Page Top

CN1 anchor.png[30]

5V電源とMPUの一部の端子が接続されています。ADCの他に入出力端子として構成したり、端子割り当てが自由なペリフェラルの機能を任意の端子に割り当てて使用する事ができます。

5V電源は外部機器へ供給する電源として使用できますが、400mAを上限とする電流制限が設定されています。
またボードそのもののサイズが小さい事もあり、電力消費量が大きくなるとそれなりの熱を持ちます。CN1に装着するピンヘッダを介して別の基板へ熱を逃がしたり、ボードそのものを放熱処置する事も考慮して下さい。

Page Top

CN2 anchor.png[31]

LPC-Link2[32]等を用いてMPUを直接デバッグするためのランドです。
出荷時にMPUのFLASH ROMにブートローダーを書き込む際に使用する事のみを想定しているため、コネクタは実装していません。

Page Top

CN3, CN4 anchor.png[33]

ボードへの電源供給と通信を担います。
両コネクタの電源は並列に接続されています。
MPUより送信を行うとどちらからも同時にデータが送出され、MPUからの送信が完全に完了すると受信待機となり、いずれか一方からのデータを受信するという運用となります。

Page Top

クロック源 anchor.png[34]

MPUに内蔵されるFRO(Free Running Oscillator)をシステムクロックとして使用する前提のライブラリを提供しています。
ライブラリはコアのクロックを30MHzに設定し、シリアル通信のみ他の装置との通信速度を一致させる必要から分周比を適宜設定した上で32MHzのクロックを供給する設定を行います。
FROは動作温度範囲内で±1%の精度となりますが、シリアル通信であればこの精度でも概ね支障はありません。しかしながら数分程度で秒オーダーの誤差が生じる精度のため、高精度な時間測定を要求するアプリケーションの場合は、提供されるライブラリを改修して外部クロック(X1)を活性化する必要があります。

Page Top

ブートローダー anchor.png[35]

MPUに予め書き込まれているブートローダによって、RS-485 I/FないしTTL I/Fを経由してPCからユーザプログラムの転送や諸設定を行う事ができます。
通信環境を整えた上で後述のSIMPLE TERMを使ってブートローダのコマンドモードに入ると、次のメッセージが表示されます。

LPC84x BL1.0
>

この状態で'?'を入力すると、使用できるコマンドの一覧が表示されます。

>?
LPC84x BL1.0
w:write e:erase d:dump g:go
>
  • w (UPLOAD)
    DXMIO用にコンパイルされたユーザプログラムをXMODEMプロトコルを使用してフラッシュROMに転送する。転送して実行できるファイルはスタートアドレスが0x00000c00にオフセットされたバイナリファイルのみ。
  • e (ERASE)
    ブートローダ本体を除くユーザプログラムエリアに書き込まれたデータを完全消去する。一度消去したデータは復活させる事はできない。
  • g (BOOT)
    フラッシュROMに転送されたユーザプログラムへ実行を遷移する。ユーザプログラム領域が消去されていると実行されない。
  • d (DUMP)
    MPUのメモリを16進数でダンプする。

なおユーザプログラムが書き込まれている状態で電源を投入するとユーザプログラムが即実行されるため、ブートローダのコマンドモードには遷移しません。
再度ユーザプログラムの転送や消去といった操作を行う場合は、SIMPLE TERM上でキーボードの「!」キーを押したままPB1を押すか電源を再投入した後に「!」キー放せばブートローダはコマンドモードへ遷移します。

Page Top

プログラムの開発環境 anchor.png[36]

Page Top

GCC Developer Lite anchor.png[37]

GCC Developer Liteの詳細についてはこちら[38]で紹介しています。「基本パック」と「ARMパック」をダウンロード[39]してインストールしてください。なおARMパックインストールの際に表示されるコンポーネントの選択画面では「LPC84xでのみ使用」を選択してください。

ArmPackLPC84x.png

また後述のサンプルコードに含まれるPC用のC言語やpythonのテストコードを実行するには、追加で「WIN64パック」をインストールします。

LPC845で使用される主要なコンポーネントを簡単に紹介します。

  • GCC Developer Lite[40]

    ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。

  • SIMPLE TERM[41]

    汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。
    USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。

  • ARMGCC[42]

    ARMコア向けC/C++言語向けのコンパイラ。できる限り最新のパッチを適用している。

  • CoFlash[43]

    CMSIS-DAPに対応したICEを使用してFLASH ROMへ任意のプログラムを直接書き込むツール。

  • ターゲットファイル

    MPUの内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、GDBにてデバッグする際に使用する初期化ファイル、シリーズ毎に異なるメモリマップを定義したリンカスクリプトファイル、スタートアップルーチンを含む。基本的にコンパイル済みライブラリとしてソースとリンクして使用する。

Page Top

LPC84x向けターゲットファイル及びライブラリ anchor.png[44]

GCC Developer Lite[38]では1つのソースプログラムのみを対象として編集する機能を持つため、機能別にソースを分割して編集したりコンパイルするといった使い方はできません。
そこで、複数のソースに分割する事無くある程度のソースプログラムサイズでコーディングを完結させるために、一部の機能をコンパイル済みライブラリとして提供しています。
GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET」フォルダに必要なファイルがコピーされます。必要に応じて本フォルダを参照でき、場合によってはユーザ自身がソースを修正しライブラリを再構築する事も可能です。

結果的にLPC84xは複数のライブラリを組み合わせて使用する事になるため、実体はかなり複雑になります。

  • LPC84xライブラリ
    LPC84xシリーズ共通の内蔵ペリフェラルを簡便に扱う為のライブラリ。主にLPCOpen[45]とシリアル通信、端子割り当て、ブートコードを含む。
  • LPC84x追加ライブラリ
    LPC84xシリーズ用のよく使われるペリフェラルのラッパーライブラリ。主にDELAY,FLASH,I2C,SPI,ADC,DXLIB,DX2LIBを含む。
  • cortex-M0用FREERTOS
    Cortex-M0+用に予めビルドされたリアルタイムオペレーティングシステムFreeRTOS[3]
  • サーボ用ライブラリ
    Dynamixelの他に、KONDO製 B3MシリーズとKRSシリーズ向けの通信用ライブラリ。クライアントとホストに対応。
Page Top

サンプルコードとコンパイル済みファイルの転送及びと実行 anchor.png[46]

以下のリンクにZIP形式の圧縮ファイルにしたファイルが置いてあります。アーカイバ等にて適宜解凍して使用して下さい。
ソースファイル(srcフォルダ)と一緒にコンパイル済みのbinファイル(binフォルダ)、GCC Developer Liteをインストールせずともコンパイル済みのbinファイルが転送できるWindows向け各種ツール等が同梱されています。出荷時に「smpl19(dxclient_imu)_V2.bin」が書き込まれていますが、統合環境なしに簡易的にコンパイル済みのバイナリファイルを転送して試すには以下の手順を踏んで下さい。

  1. DXHUB[47]等にDXMIOを接続し、PCとDXMIO間で通信できる環境を整える
  2. DXMIOへの電源供給を断つ
  3. 同梱の.\tools\sterm\conf.cmdを実行するとDXMIOへコンパイル済みのbinファイルを転送するための設定がなされたSIMPLE TERM(STERM.exe)が起動する
  4. 起動したSTERMのファイルメニュープロパティをクリックし、Connect toのドロップダウンリストから任意のCOMポート番号を選択してOKボタンを押す
  5. STERMの通信メニューポートオープンをクリックし該当ポートを開いておく
  6. binフォルダ内の任意のbinファイルをSTERMのターミナルウィンドウ上へドロップダウンする
  7. STERMの転送メニュースクリプト実行をクリックすると10秒の転送タイムアウト画面が表示されるので、タイムアウトする前にDXMIOへ電源を供給する
  8. 正常であれば即転送が開始され、転送が完了すれば転送したプログラムの実行が励起される
  • 2023/2
    • Beta版
Page Top

サンプルコードのコンパイルから転送及び実行 anchor.png[49]

サンプルコードに含まれるbinファイルとSIMPLE TERMだけで一通りの動作確認はできますが、GCC Developer Liteを使ってソースファイルからコンパイルする手順は以下の通りです。

  1. サンプルコードの参照とコンパイル条件の設定
    GCC Developer Liteを起動し、任意のサンプルコードを開きます。 初めて開いたサンプルコードの場合は、コンパイルするための条件を設定する必要があります。まずメニューのツール(T)コンパイルオプション(O)...をクリックします。
    DXMIO_GDL1.png
    表示されたコンパイルオプションダイアログボックスの設定リストから「LPC845 EXTRA (TERM, FREERTOS, EXTRA)」を選択してOKボタンを押せばコンパイル条件の設定は完了です。
    DXMIO_GDL2.png
    なお既に諸設定がなされた上でコンパイルした事のあるサンプルコードを開くと、次のダイアログボックスが表示されます。OKを押すと先にコンパイルした条件が読み出されますので、その場合はコンパイル条件を改めて設定する必要はありません。
  2. コンパイル
    メニューのコンパイル(C)ビルド(B)もしくは「F9」キーを押すとコンパイル処理がなされ、正常であればウィンドウ下段にメモリ領域とコンパイル成功のメッセージが表示され多後に、STERM.exeを起動するかを問い合わせるダイアログボックスが表示されます。通常はそのままOKボタンを押し、SIMPLE TERM(STERM.exe)を起動させます。
  3. 転送の準備
    コンパイルしたファイルをDXMIOに転送するためには次の図のような構成でPCとDXMIO間を接続します。ここでは電源のON/OFFが容易にできたり部品点数が少なくて済む事からDXHUB[47]を使用していますが、DXSharingBoard[53]USB2RS485 dongle[54]USB2RSTTL dongle[55]USB2DXIF dongle[56]USB2DXIF[57]といった装置を使用しても構いません。 DXHUBをPCに接続するとWindowsのデバイス一覧にCOMポートが追加されます。SIMPLE TERMからそのCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「USB Serial Port」が表示されたポートを選択)したらオープンしDXMIOに電源を供給する事で、SIMPLE TERMからDXMIOのブートローダの各種コマンドが使用できる様になります。SIMPLE TERMのCOMポートの選択はファイル(F)メニュー→プロパティ(P)...をクリックし、表示されるダイアログボックスのConnect to'から該当のCOMポート番号を選択してからOKボタンを押します。
    DXMIO_STERM0.png
    COMポートの設定が終わったら通信(C)メニュー→ポートオープン(C)をクリックしてポートを開きます。
  4. DXMIOのブートローダをコマンドモードに変更
    予めDXMIOにユーザプログラムが書き込まれている場合は、電源投入直後にそのユーザプログラムが自動的に実行されます。その際はSIMPLE TERM上でキーボードの「!」キー押しながらDXMIOの電源を入れ直す事でブートローダがコマンドモードに遷移します。
    [Upload]
    ターミナルウィンドウ上にブートローダのバージョンが表示されたら、DXMIOはコマンド-モードに遷移しています。
  5. 転送と実行
    DXMIOがブートローダのコマンドモードで待機している状態であれば、SIMPLE TERMのメニューから「スクリプト実行[STERM_LPC84x]」をクリックします。
    [Upload]
    転送中はステータスバーに進捗が表示され、転送が完了するとDXMIOからOKの応答が返りターミナルウィンドウに表示されます。
    DXMIO_STERM3.png
    この状態でキーボードの「g」を押すと転送したプログラムに実行が遷移します。

なおARMGCCそのものがSJISに対応していないため、コメント等に全角文字を使用するとコンパイルエラーが発生する場合があります。サンプルプログラムは日本語のコメントを使用していますが、全てUTF-8のエンコードにしているためそれに起因するエラーが発生しません。 GCC Developer Liteにて新規で作成したプログラムは必ずSJISで生成されるため、編集中にGCC Developer Liteのステータスバーに表示される「SJIS(CR+LR)」をマウスで右クリックし、ポップアップメニューのリストから「UFT8」を選んでからソースプログラムを保存して下さい。「UFT8」になってさえいれば全角文字のコメントによるコンパイルエラーは発生しません。

GDL_ENCODE.png

なおGCC Developer LiteとARMパックがインストール済みであれば、わざわざGCC Developer Liteを起動せずともsrcフォルダに同梱される「makebin.cmd」を実行する事で全サンプルソースをコンパイルしbinファイルが再構築されます。
お試し下さい。

Page Top

基本サンプルコード anchor.png[59]

smpl1~smpl13ではボード上のLEDやTTL/RS-485 I/Fを使ったシリアル通信、CN1を使用した入出力を一通り試食できます。その中で使用しているライブラリ等の概要を紹介します。

Page Top

LPCOpen anchor.png[60]

LPCOpen[61]はNXP社より提供されるペリフェラル用のライブラリです。しかしLPC84xシリーズは見捨てられたまま開発が止まっているようで、今後はメンテナンスされない可能性が高いと思われます。
とは言えリソースはLPCOpen前提であつらえたリソースが蓄積されているので、LPC82x用のものをモディファイしてLPC84x向けに構成し直したものを同梱しています。

Page Top

ペリフェラルのクロックソース anchor.png[62]

初期状態において大抵のペリフェラルはクロックソースが選択されていないため、そのままペリフェラルの初期化を行っても動作しません。提供するライブラリにおいてもクロックソースは別途行うものとしていますので、ペリフェラルを初期化する前にクロックを選択しています。なおUSART0に限り「e097c_def.h」内のResetExceptionDispatch_Tail関数(main関数へジャンプする直前にスタートアップルーチンから呼ばれる)で予めクロックソースを選択しています。

#include <chip.h>

// FRG0のソースとしてsys_pll0_clk(60MHz)を選択
LPC_SYSCON->FRG0MULT = 35;
LPC_SYSCON->FRG0DIV = 39;
LPC_SYSCON->FRG0CLKSEL = SYSCON_FRGCLKSRC_PLL;
// USART0のクロックソースとしてFRG0を選択
LPC_SYSCON->UART0CLKSEL = SYSCON_FLEXCOMMCLKSELSRC_FRG0;
Page Top

端子機能 anchor.png[63]

LPC8xxシリーズはペリフェラルの機能を任意の端子に自由に割り当てる事ができます。CN1にはMPUのGPIOのうちADCが割り当てられている端子を配置しています。

DXMIOでは端子番号のマクロと最低限の端子初期化用の構造体が「e097c_def.h」に定義してあり、自身のソースにインクルードしてコンパイルすればResetExceptionDispatch_Tail関数が呼び出されCN1を除くボード内の回路に接続されている端子の初期化が行われます。

#include <piocfg.h>

// 端子機能設定配列
static const TPin E097C_pins[] = {
  { _LED2,      PIO_TYPE_OUTPUT_1, 0,                  PIO_MODE_DEFAULT }, // P0_24      O

  { _TXD0,      PIO_TYPE_MOVABLE,  SWM_U0_TXD_O,       PIO_MODE_DEFAULT }, // USART0 TXD O
  { _RXD0,      PIO_TYPE_MOVABLE,  SWM_U0_RXD_I,       PIO_MODE_PULLUP  }, // USART0 RXD I
  { _RTS0,      PIO_TYPE_MOVABLE,  SWM_U0_RTS_O,       PIO_MODE_DEFAULT }, // USART0 RTS O
  { _TERM,      PIO_TYPE_OUTPUT_1, 0,                  PIO_MODE_DEFAULT }, // P0_16      O

  { _SCL0,      PIO_TYPE_FIXED,    SWM_FIXED_I2C0_SCL, PIO_MODE_DEFAULT }, // I2C0 SCL
  { _SDA0,      PIO_TYPE_FIXED,    SWM_FIXED_I2C0_SDA, PIO_MODE_DEFAULT }, // I2C0 SDA


  { _BNO085_NRST, PIO_TYPE_OUTPUT_1, 0,                PIO_MODE_DEFAULT },
  { _BNO085_PS0,  PIO_TYPE_OUTPUT_0, 0,                PIO_MODE_DEFAULT },
  { _BNO085_PS1,  PIO_TYPE_OUTPUT_0, 0,                PIO_MODE_DEFAULT },


  { _BOARD_REV, PIO_TYPE_INPUT,    0,                  PIO_MODE_PULLUP  }, // P0_1       I
};

LED2は「e097c_def.h」に宣言されているSetLEDとToggleLED関数を使用してプログラマブルに明滅できます。

void ToggleLED (void);
void SetLED (bool On);
Page Top

USART anchor.png[64]

弊社では何をするにもUSART(UART)ありきなため、本MPUにおいてもライブラリとして基本的な送受信ルーチンをポーリング・割り込み・DMAの3パターンで用意しています。

#include <us.h>

用意される関数はUSARTの初期化・1バイトないし複数バイトの送受信・簡易書式文字列送信・送受信バッファ内のデータ数確認といったところで、どのパターンであってもポートであっても同様のフォーマットとなります。

// USART0 ポーリング版
// 初期化
uint32_t usart0_init (uint32_t clk, uint32_t baudrate, uint8_t us_param, uint8_t *txbuf, uint16_t txl, uint8_t *rxbuf, uint16_t rxl);
// ボーレート変更
uint32_t usart0_setbaudrate (uint32_t clk, uint32_t baudrate);
// 送信バッファ内データ数
uint16_t usart0_tx_buff (void);
// 受信バッファ内データ数
uint16_t usart0_rx_buff (void);
// 送信データ一掃
void usart0_tx_purge (void);
// 送信データ一掃
void usart0_rx_purge (void);
// 1文字(1バイト)送信
void usart0_putc (char ch);
// 文字列(ヌル終端文字列)送信
void usart0_puts (const char *s);
// 複数バイト送信
int usart0_putsb (const uint8_t *c, int len);
// 1文字(1バイト)受信
char usart0_getc (void);
// 文字列(LF/CR終端)受信
uint16_t usart0_gets (char *s, int len);
// 書式文字列送信
int usart0_printf (const char *fmt, ...);
// 書式指定文字列受信
int usart0_scanf (const char *fmt, ...);

なおCN3とCN4は電気的には半二重通信ですが、USARTとしては全二重で動作しています。そのためプログラムや運用方法によって半二重である事を意識しないとコンフリクトが発生します。
またRS-485 I/Fのターミネーターは「e097c_def.h」に宣言されているSetTerminator関数を使用してプログラマブルにON/OFFできます。

void SetTerminator (bool On);
Page Top

IMU anchor.png[65]

BNO085はMPUとI²Cで通信する前提で接続され、スレーブアドレスは0x4Aに固定されています。
SH2 Sensorhub driver[66]を使用してアクセスしますが、それらの詳細な情報が無いと運用は困難です。また「e097c_imu.h」ではSH2が要求するプラットホーム依存の低位ルーチン(主にI2Cバスアクセスルーチン)が納められています。

なおサンプルコードではBNO085の加速度計・ジャイロスコープ・地磁気センサの動的キャリブレーションをsh2_setCalConfig APIにより有効にしています。BNO085のデータにある通りに適切なモーションで動かす事により、キャリブレーションの精度を最大限に引き出す事ができます。
さらにsh2_setDcdAutoSave APIによってキャリブレーションデータが自動保存されるように設定しています。

Page Top

FreeRTOS anchor.png[67]

最低限必要と思われる機能だけを活性化した上でライブラリ化しています。詳細はFreeRTOS[3]のサイトを参照いただくとして、DXMIOではFreeRTOSありきのサンプルコードが提供されます。

Page Top

Dynamixelプロトコル向けサンプルコード anchor.png[68]

以下は最新のサンプルコードを前提に記述されています。

Page Top

Dynamixelホスト anchor.png[69]

DXMIO自身を他のDynamixelのホストとして使用する場合は、提供されるライブラリを使う事で簡便に通信が行えます(smpl14~smpl16)。DXMIOをホストとするとPC等に比べて物理的なサイズを格段に小さくできますが、メモリや処理能力には限りがありますので過大な期待は禁物です。
PC版と同等のDXLIB[70]DX2LIB[71]が提供されますが、ライブラリのリンク時の都合により追加APIのプレフィクスが少々異なります。詳細はdxlib.hやdx2lib.hを参照して下さい。
以下に接続例を紹介しますが、クライアントとなるDynamixelと同じI/FにDXMIOが接続されているならばどの位置に配置して構いません。またDXMIOへファームウェアを転送するためにはPC用のI/Fが必要になります。

Page Top

Dynamixelクライアント anchor.png[73]

DXMIOをクライアントとして使用する場合の通信処理はライブラリとして提供され、ユーザは独自のコントロールテーブルや様々な処理の組み込みに専念できます。
以下に接続例を紹介しますが、DXMIOはDXHUBに直接でもDynamixelと数珠つなぎでもどのように接続しても構いません。

smpl18はほぼ最小構成のコントロールテーブルと通信の確認を行うのに最低限必要な機能のみを実装、smpl19は各端子機能の割り当て・GPIOとしての入出力・PWM出力・アナログ電圧測定・IMUのデータ取得といった機能を網羅しています。

なおDynamixelクライアントライブラリでは不揮発メモリの扱いがDynamixelシリーズのそれと異なり、不揮発領域とあるアイテムを書き換えたとしても、電源を再投入すると書き換える前の値に戻ります。これは不用意な書き換えによる不慮の事態を軽減するためです。不揮発領域に書き込んだ値を次回起動時にも反映させるには、コントロールテーブル中のWriteNVMに1を書き込む事で行います。またWriteNVMのコントロールテーブル上のアドレスはライブラリ内で固定されています。

以下はsmpl19によって提供される機能の詳細です。

Page Top
Dynamixel通信プロトコル anchor.png[75]

Dynamixelシリーズには2種類のプロトコルがあります。

プログラム中のマクロを書き換えて再度コンパイルすれば、選択したプロトコルに対応したバイナリファイルが生成されます。

Page Top
Dynamixel Protocol V1コントロールテーブル anchor.png[78]

Dynamixelシリーズと共通する情報はコントロールテーブル上の先頭の5バイトのみで、それ以外のアドレスには互換性がありません。
複数バイトにまたがるアイテムはリトルエンディアンでストアされます。
なおIMUの個々のデータが浮動小数点提供される都合から、メモリがかなり逼迫しています。これ以上の領域を確保するとアプリケーションが起動しなくなるでしょう。

DXL V1版
AddressItemAccessDefault ValueType/Range
0 (0x0)Model NumberR0x4025uint16
1 (0x1)
2 (0x2)Version of FirmwareR0x41uint8
3 (0x3)IDR/W (NVM)200uint8
0~253
4 (0x4)BaudrateR/W (NVM)1uint8
0~254
5 (0x5)WriteNVMR/W0uint8
0~1
6 (0x6)LEDR/W0uint8
0~1
7 (0x7)TerminatorR/W (NVM)1uint8
0~1
8 (0x8)Pin Config 0R/W (NVM)0uint8
0~20
9 (0x9)Pin Config 1R/W (NVM)0uint8
0~20
10 (0xA)Pin Config 2R/W (NVM)0uint8
0~20
11 (0xB)Pin Config 3R/W (NVM)0uint8
0~20
12 (0xC)Pin Config 4R/W (NVM)0uint8
0~20
13 (0xD)Pin Config 5R/W (NVM)0uint8
0~20
14 (0xE)Pin Config 6R/W (NVM)0uint8
0~20
15 (0xF)Pin Config 7R/W (NVM)0uint8
0~20
16 (0x10)Pin Config 8R/W (NVM)0uint8
0~20
17 (0x11)Pin Config 9R/W (NVM)0uint8
0~20
18 (0x12)Pin Config 10R/W (NVM)0uint8
0~20
19 (0x13)Pin Config 11R/W (NVM)0uint8
0~20
20 (0x14)PWM FrequencyR/W (NVM)0uint16
0~50000
21 (0x15)
22 (0x16)PWM Duty 0R/W (NVM)0uint16
0~65535
23 (0x17)
24 (0x1A)PWM Duty 1R/W (NVM)0uint16
0~65535
25 (0x1D)
26 (0x1E)PWM Duty 2R/W (NVM)0uint16
0~65535
27 (0x1F)
28 (0x22)PWM Duty 3R/W (NVM)0uint16
0~65535
29 (0x23)
30 (0x26)PWM Duty 4R/W (NVM)0uint16
0~65535
31 (0x27)
32 (0x2A)PWM Duty 5R/W (NVM)0uint16
0~65535
33 (0x2B)
34
~
43
(reserve)R-uint8
44 (0x2C)Capture 0R/W0uint16
0~65535
45 (0x2D)
46 (0x2E)Capture 1R/W0uint16
0~65535
47 (0x2F)
48 (0x30)Capture 2R/W0uint16
0~65535
49 (0x31)
50 (0x32)Capture 3R/W0uint16
0~65535
51 (0x33)
52 (0x34)OUTR/W0uint16
0~4095
53 (0x35)
54 (0x36)INR-uint16
0~4095
55 (0x37)
56 (0x38)ADV 0R-uint16
0~4095
57 (0x39)
58 (0x3A)ADV 1R-uint16
0~4095
59 (0x3B)
60 (0x3C)ADV 2R-uint16
0~4095
61 (0x3D)
62 (0x3E)ADV 3R-uint16
0~4095
63 (0x3F)
64 (0x40)ADV 4R-uint16
0~4095
65 (0x41)
66 (0x42)ADV 5R-uint16
0~4095
67 (0x43)
68 (0x44)ADV 6R-uint16
0~4095
69 (0x45)
70 (0x46)ADV 7R-uint16
0~4095
71 (0x47)
72 (0x48)ADV 8R-uint16
0~4095
73 (0x49)
74 (0x4A)ADV 9R-uint16
0~4095
75 (0x4B)
76 (0x4C)ADV 10R-uint16
0~4095
77 (0x4D)
78 (0x4E)ADV 11R-uint16
0~4095
79 (0x4F)
80
~
97
(reserve)R-uint8
98 (0x4A)DAVR/W-uint16
0~1023
99 (0x4B)
100
~
103
(reserve)R-uint8
104 (0x6B)Accelerometer XR-float32
105
106
107
108 (0x6C)Accelerometer YR-float32
109
110
111
112 (0x70)Accelerometer ZR-float32
113
114
115
116 (0x74)Gyroscope Calibrated XR-float32
117
118
119
120 (0x78)Gyroscope Calibrated YR-float32
121
122
123
124 (0x7C)Gyroscope Calibrated ZR-float32
125
126
127
128 (0x80)Magnetic Field Calibrated XR-float32
129
130
131
132 (0x84)Magnetic Field Calibrated YR-float32
133
134
135
136 (0x88)Magnetic Field Calibrated ZR-float32
137
138
139
140 (0x8C)Linear Acceleration XR-float32
141
142
143
144 (0x90)Linear Acceleration YR-float32
145
146
147
148 (0x94)Linear Acceleration ZR-float32
149
150
151
152 (0x98)Rotation Vector iR-float32
153
154
155
156 (0x9C)Rotation Vector jR-float32
157
158
159
160 (0xA0)Rotation Vector kR-float32
161
162
163
164 (0xA4)Rotation Vector realR-float32
165
166
167
168 (0xA8)Rotation Vector AccuracyR-float32
169
170
171
172 (0xAC)Gravity XR-float32
173
174
175
176 (0xB0)Gravity YR-float32
177
178
179
180 (0xB4)Gravity ZR-float32
181
182
183
184 (0xB8)TemperatureR-int16_t
185
186 (0xBA)USER 0R/W0uint8
0~255
187 (0xBB)USER 1R/W0uint8
0~255
188 (0xBC)USER 2R/W0uint8
0~255
189 (0xBD)USER 3R/W0uint8
0~255
190 (0xBE)USER 4R/W0uint8
0~255
Page Top
Model Number anchor.png[79]

本製品のモデルナンバーです。ホストはこの値で製品の種類を判別します。

Page Top
Version of Firmware anchor.png[80]

搭載されたマイコンに書き込まれたファームウェアのバージョンです。

Page Top
ID anchor.png[81]

ネットワーク上の個体を特定する固有の番号です。同一ネットワークに同じIDを持ったデバイスが存在してはなりません。
デフォルトは200です。

Page Top
Baudrate anchor.png[82]

デバイスの通信速度を決める分周値で、デフォルトは1(1M[bps])です。通信速度は次式で導かれます。

Baudrate[bps]=2000000 / (value + 1)

主なBaudrateは以下の通りです。

Set valueActual Baudrate[bps]Specified Baudrate[bps]Error[%]
02000000.020000000.000
11000000.010000000.000
3500000.05000000.000
4400000.04000000.000
7250000.02500000.000
9200000.02000000.000
16117647.1115200-2.124
3457142.9576000.794
10319230.819200-0.160
2079615.49600-0.160

※ホストとのボーレートの誤差は±2%以下が要求されます。

Page Top
WriteNVM anchor.png[83]

1を書き込むとコントロールテーブルのNVMとあるアイテムの値を保存します。パワーサイクル毎に保存された値がアイテムの初期値となります。

Page Top
LED anchor.png[84]

1を書き込むとLED1が点灯します。

Page Top
Terminator anchor.png[85]

RS-485 I/FのターミネーターをON/OFFします。
RS-485 I/Fには何も接続せずにTTL I/Fのみを使用する場合は、RS-485 I/Fのハイインピーダンス状態を回避するために1を設定して下さい。

Page Top
Pin Config 0~11 anchor.png[86]

GPIO0~11の各端子の機能を設定します。
デフォルトはデジタル入力(0:DIN)です。

  • 0:DIN
    デジタル入力
    INレジスタに入力値がストアされる
    E097B_GPIO_IN.png
  • 1:DIN(PU)
    デジタル入力(数十~数百kΩ程度の内蔵プルアップ抵抗ON)
    INレジスタに入力値がストアされる
  • 2:DIN(PD)
    デジタル入力(数十~数百kΩ程度の内蔵プルダウン抵抗ON)
    INレジスタに入力値がストアされる
  • 3:DOUT
    プッシュプルデジタル出力
    OUTレジスタの値が出力される
    E097B_GPIO_OUT.png
  • 4:DOUT(OC)
    オープンコレクタデジタル出力
    OUTレジスタの値が出力される
    E097B_GPIO_OUT2.png
  • 5:AIN
    アナログ計測
    ADVレジスタに測定値がストアされる
    E097B_GPIO_ADV.png
  • 6~11:PWM0~5
    PWM出力
    PWM Frequencyレジスタの周波数でPWM Dutyレジスタで指定されたデューティー比でパルス出力する
  • 12~15:MPW0~3
    パルス幅計測
    Captureレジスタに測定値がストアされる
    ※実装はペンディング
  • 16~19:MPC0~4
    パルスカウント
    Captureレジスタに測定値がストアされる
    ※実装はペンディング
  • 20:AOUT
    アナログ電圧出力
    DAVレジスタの値が出力される
    ※GPIO9限定
  • 21:UFUNC
    ユーザ定義
    本設定以外の機能を割り当てる際に設定
Page Top
PWM Frequency anchor.png[87]

PWM出力時の周波数を設定します。

Frequency [Hz] = Value * 1
Page Top
PWM Duty 0~5 anchor.png[88]

PWM出力時の各端子のデューティー比を設定します。

Duty [%] = Value * 100 [%] / 65535
Page Top
Capture 0~5 anchor.png[89]

GPIOにMPWないしMPC機能を割り当てた際に、計測値を保持します。
逐次任意の値で初期化する事ができます。

※現時点で機能しません

Page Top
OUT anchor.png[90]

GPIOにデジタル出力機能を割り当てた際に、レジスタの該当ビットに設定した値をGPIOから出力します。

Bit15~1211109876543210
GPIO-11109876543210
Page Top
IN anchor.png[91]

GPIOにデジタル入力機能を割り当てた際に、GPIOに入力された信号がレジスタに反映されます。

Bit15~1211109876543210
GPIO-11109876543210
Page Top
ADV 0~11 anchor.png[92]

GPIOにアナログ入力機能を割り当てた際に、GPIOに入力された電圧を12bitの分解能で計測します。

Input [V] = 3.3[V] * Value / 4095

なお入力インピーダンスが低いため、チャンネル間の影響を受けやすくなっています。影響を軽減させるには入力バッファを介して接続するか、プログラムを修正して使用するチャネルそのものを制限する等の処置を講じる必要があります。

Page Top
DAV anchor.png[93]

GPIOにアナログ出力機能を割り当てた際に、GPIOから指定された10bitの分解能で電圧を出力します。

Output [V] = 3.3[V] * Value / 1023
Page Top
Accelerometer, Gyroscope Calibrated, Magnetic Field Calibrated, Linear Acceleration, Rotation Vector, Gravity, Temperature anchor.png[94]

BNO085から得られる測定値で、温度を除き32bitの浮動小数点となります。

  • Accelerometer (0x01)
    重力を含むデバイスの加速度。デバイスの総加速度は、X軸、Y軸、Z軸の加速度のベクトル和。単位はm/s²。
  • Gyroscope Calibrated (0x02)
    ドリフト補正済み回転速度。単位はrad/s。
  • Magnetic Field Calibrated (0x03)
    モジュール本体から発生する磁場と外界の磁場の影響を補正した地磁気場。ベクトルは地球磁場の偏角および方位に整合。単位はuT。
  • Linear Acceleration (0x04)
    重力を差し引いたデバイスの加速度。単位はm/s²。
  • Rotation Vector (0x05)
    デバイスの向き。回転ベクトルの形式はクォータニオン、方位精度推定値の単位はrad。
  • Gravity (0x06)
    デバイスの座標系における重力。単位はm/s²。
  • Temperature
    周囲温度。単位はdegC、16ビット整数。
Page Top
USER 0~4 anchor.png[95]

任意の自作タスクとコントロールテーブル間のI/Fです。使い道は自由です。

Page Top
Dynamixel Protocol V2コントロールテーブル anchor.png[96]

V1に対して冒頭のアイテムが若干異なっている程度です。
複数バイトにまたがるアイテムはリトルエンディアンでストアされます。

DXL V2版
AddressItemAccessDefault ValueType/Range
0 (0x0)Model NumberR0x4025uint16
1 (0x1)
2 (0x2)Model InformationR0uint32
3 (0x3)
4 (0x4)
5 (0x5)
6 (0x6)Version of FirmwareR0x41uint8
7 (0x7)IDR/W (NVM)200uint8
0~253
8 (0x8)BaudrateR/W (NVM)3uint8
0~4,6
9 (0x9)WriteNVMR/W0uint8
0~1
10 (0xA)LEDR/W0uint8
0~1
11 (0xB)TerminatorR/W (NVM)1uint8
0~1
12 (0xC)Pin Config 0R/W (NVM)0uint8
0~20
13 (0xD)Pin Config 1R/W (NVM)0uint8
0~20
14 (0xE)Pin Config 2R/W (NVM)0uint8
0~20
15 (0xF)Pin Config 3R/W (NVM)0uint8
0~20
16 (0x10)Pin Config 4R/W (NVM)0uint8
0~20
17 (0x11)Pin Config 5R/W (NVM)0uint8
0~20
18 (0x12)Pin Config 6R/W (NVM)0uint8
0~20
19 (0x13)Pin Config 7R/W (NVM)0uint8
0~20
20 (0x14)Pin Config 8R/W (NVM)0uint8
0~20
21 (0x15)Pin Config 9R/W (NVM)0uint8
0~20
22 (0x16)Pin Config 10R/W (NVM)0uint8
0~20
23 (0x17)Pin Config 11R/W (NVM)0uint8
0~20
24 (0x18)PWM FrequencyR/W (NVM)0uint16
0~50000
25 (0x19)
26 (0x1A)PWM Duty 0R/W (NVM)0uint16
0~65535
27 (0x1B)
28 (0x1C)PWM Duty 1R/W (NVM)0uint16
0~65535
29 (0x1D)
30 (0x1E)PWM Duty 2R/W (NVM)0uint16
0~65535
31 (0x1F)
32 (0x20)PWM Duty 3R/W (NVM)0uint16
0~65535
33 (0x21)
34 (0x22)PWM Duty 4R/W (NVM)0uint16
0~65535
35 (0x23)
36 (0x24)PWM Duty 5R/W (NVM)0uint16
0~65535
37 (0x25)
38
~
47
(reserve)R-uint8
48 (0x30)Capture 0R/W0uint16
0~65535
49 (0x31)
50 (0x32)Capture 1R/W0uint16
0~65535
51 (0x33)
52 (0x34)Capture 2R/W0uint16
0~65535
53 (0x35)
54 (0x36)Capture 3R/W0uint16
0~65535
55 (0x37)
56 (0x38)OUTR/W0uint16
0~4095
57 (0x39)
58 (0x3A)INR-uint16
0~4095
59 (0x3B)
60 (0x3C)ADV 0R-uint16
0~4095
61 (0x3D)
62 (0x3E)ADV 1R-uint16
0~4095
63 (0x3F)
64 (0x40)ADV 2R-uint16
0~4095
65 (0x41)
66 (0x42)ADV 3R-uint16
0~4095
67 (0x43)
68 (0x44)ADV 4R-uint16
0~4095
69 (0x45)
70 (0x46)ADV 5R-uint16
0~4095
71 (0x47)
72 (0x48)ADV 6R-uint16
0~4095
73 (0x49)
74 (0x4A)ADV 7R-uint16
0~4095
75 (0x4B)
76 (0x4C)ADV 8R-uint16
0~4095
77 (0x4D)
78 (0x4E)ADV 9R-uint16
0~4095
79 (0x4F)
80 (0x50)ADV 10R-uint16
0~4095
81 (0x51)
82 (0x52)ADV 11R-uint16
0~4095
83 (0x53)
84
~
101
(reserve)R-uint8
102 (0x66)DAVR/W-uint16
0~1023
103 (0x66)
104
~
107
(reserve)R-uint8
108 (0x6C)Accelerometer XR-float32
109
110
111
112(0x70)Accelerometer YR-float32
113
114
115
116(0x74)Accelerometer ZR-float32
117
118
119
120(0x78)Gyroscope Calibrated XR-float32
121
122
123
124(0x7C)Gyroscope Calibrated YR-float32
125
126
127
128(0x80)Gyroscope Calibrated ZR-float32
129
130
131
132(0x84)Magnetic Field Calibrated XR-float32
133
134
135
136(0x88)Magnetic Field Calibrated YR-float32
137
138
139
140(0x8C)Magnetic Field Calibrated ZR-float32
141
142
143
144(0x90)Linear Acceleration XR-float32
145
146
147
148(0x94)Linear Acceleration YR-float32
149
150
151
152(0x98)Linear Acceleration ZR-float32
153
154
155
156(0x9C)Rotation Vector iR-float32
157
158
159
160(0xA0)Rotation Vector jR-float32
161
162
163
164(0xA4)Rotation Vector kR-float32
165
166
167
168(0xA8)Rotation Vector realR-float32
169
170
171
172(0xAC)Rotation Vector AccuracyR-float32
173
174
175
176(0xB0)Gravity XR-float32
177
178
179
180(0xB4)Gravity YR-float32
181
182
183
184(0xB8)Gravity ZR-float32
185
186
187
188(0xBC)TemeratureR-int16_t
189
190 (0xBE)USER 0R/W0uint8
0~255
191 (0xBF)USER 1R/W0uint8
0~255
192 (0xC0)USER 2R/W0uint8
0~255
193 (0xC1)USER 3R/W0uint8
0~255
194 (0xC2)USER 4R/W0uint8
0~255
Page Top
Baudrate anchor.png[97]

デバイスの通信速度で、デフォルトは1(1M[bps])です。
設定可能なBaudrateは以下の通りです。

Set valueBaudrate[bps]
09600
157600
2115200
31000000
42000000

※ホストとのボーレートの誤差は±2%以下が要求されます。

Page Top

PC用モニタツール・デモコード anchor.png[98]

.\tools\dxl\guiと.\tools\dxl\cuiフォルダにはDXMIOにsmpl19(プロトコルV2)のファームウェアが書き込まれている前提で動作確認するためのホスト用プログラムが含まれています。
まずguiフォルダにはDXMIOのコントロールテーブルをセル上で確認しながら設定したりモニタするWindows用ツールDXCONFが同梱されています。DXCONFを起動したらポートやボーレートを適宜選択し、画面左側でマウスを右クリックしProtocolにV2を選択し使ってください。

E098C_DXCONF.png

cuiフォルダにはC/C++/pythonによるデモコードが同梱されています。GCC Developer LiteとWIN64パックがインストールされている前提でコンパイルや実行するための*.cmdファイルが用意されています。基本的に必要な情報はソース(*.c/*.cpp/*.py)に記述されていますので、適当なテキストエディタで編集した上で*.cmdを実行してコンパイルないし動かしてみて下さい。

Page Top

注意事項 anchor.png[99]

:idea:下記に記載された事項以外にも、経験を踏まえた危険回避方策を講じる事。
安全に配慮しない場合は人命や財産を失う恐れがある。
また従わない場合は保証対象外となる。
  • 基板上の露出パッドはいかなる場合も短絡してはならない。
  • 電源の逆接続保護および熱制限保護を備えているが、過度な期待をしない事。
  • 複数のタスクを起動すると、1つのタスクの実行時間が延びる。動作時間を優先する場合は、実行タスク数を制限する事。
  • Dynamixelクライアント通信ライブラリは高速応答性に主眼を置いていない。
  • BNO085は強い衝撃が加わるとIMUの値がジャンプするため、DXMIOを固定する際は衝撃吸収材等を用いて外部からの振動等が基板へ直接伝わらない措置を講じる事。
  • 本製品にかかるいかなる損害が生じても、本製品の単価を超える保障は行わない。

Last-modified: 2025-12-07 (Sun) 16:00:02 (JST) (6d) by takaboo