ショップページへ

[Upload]

DXMIOの特徴 anchor.png

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

概要 anchor.png

DXMIOはNXP社LPC845(cortex-M0+コア)を搭載し、Dynamixel互換I/Fを装備した汎用マイコンボードです。
前バージョンのDXMIOに対して、IMUの変更がなされています。

Dynamixelで構成された装置にセンサ等を追加装備する場合、DXMIOを中継することで同一のネットワークにフィードバック系を設けることができます。
これらの基本機能はサンプルプログラムとして提供されますが、サンプルとして提供される機能では不十分な場合は独自にプログラムを追加することで機能を拡張する事ができます。
また今リビジョンより近藤科学製KRSやB3Mシリーズと合わせて使用するサンプルプログラムを同梱しています。

Page Top

仕様 anchor.png

Page Top

同梱内容 anchor.png

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

基本仕様 anchor.png

商品番号BTE098B
MPULPC845M301JHI33
PCBリビジョンE097C (4層)
通信機能TTL(半二重)及びRS485(半二重)
※いずれも5V
動作温度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ピンランド, RS485 x1, TTL×1, モニタLED
環境配慮RoHS準拠, 鉛フリー半田

Page Top

外観・レイアウト anchor.png

topbottom
E097C_TOP.png
E097C_BTM.png
3D pdf
Page Top

回路図 anchor.png

Page Top

各機能詳細 anchor.png

Page Top
CN1 anchor.png
[Upload]
  • 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
[Upload]
  • 1.27mmピッチ5ピンランド
  • SWD用
    No.端子名称
    13.3V
    2GND
    3SWDIO
    4SWCLK
    5RESET
Page Top
CN3 anchor.png
[Upload]
  • TTL I/F
    TTL_IF.png
  • 電源と通信用信号ラインが接続
    Pats NameJST Parts Number
    基板用ヘッダーB3B-EH, B3B-EH-A
    ハウジングEHR-3
    ターミナルSEH-00x
    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
[Upload]
  • RS-485 I/F
    RS485_IF.png
  • 電源と通信用信号ラインが接続
    Pats NameJST Parts Number
    基板用ヘッダーB4B-EH, B4B-EH-A
    ハウジングEHR-4
    ターミナルSEH-00x
    B4B-EH.png
    端子番号信号名
    1GND
    2VDD
    3RS-485 D+
    4RS-485 D-
  • Dynamixel I/Fに準拠したコネクタで、RS-485によるシリアル通信及びDXMOへの電源供給を行う
  • ③④ピン間にはプログラムによってON/OFFできる120Ωのターミネータを装備
  • 物理的な最大データレートは20Mbps
  • ①ピン(GND)および②ピン(VDD)はそれぞれボード内全て共通
    • MPUとはCN3のTTL I/FとOR接続
Page Top
LED1 anchor.png
  • 赤色LED
  • 3.3Vの生成と共に点灯
Page Top
LED2 anchor.png
  • 緑色LED
  • アプリケーションにてプログラマブルに点灯・消灯
  • 電流制限抵抗を介してMPUのGPIOにシンク接続
Page Top
PB1 anchor.png
[Upload]
  • プッシュスイッチ
  • 無操作でMPUのRESET端子を解放
  • 押下でMPUのRESET端子をLOW
Page Top
U7 anchor.png
[Upload]
  • CEVA社BNO085 9軸(3軸加速度計・3軸磁力計・3軸ジャイロスコープ)IMU
  • 32.768kHz外部クロック装備
  • ボード裏面中央に配置
  • 簡素化のためI²CバスのみがMPUと接続
Page Top

各機能の詳細 anchor.png

Page Top

CN1 anchor.png

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

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

Page Top

CN2 anchor.png

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

Page Top

CN3, CN4 anchor.png

ボードへの電源供給と通信を担います。
いずれのコネクタの電源は並列に接続されています。
通信に関してはCN3とCN4を個別に扱う事を想定しておらず、どちらからも同時に送信され、いずれか一方から受信するという運用となります。

Page Top

クロック源 anchor.png

システムクロックはMPUに内蔵されるFRO(Free Running Oscillator)を使用する前提なので外部クロックは装備されていません。FROは動作温度範囲内で±1%の精度となります。
GCC Developre Liteに同梱されるライブラリはFROを使用する前提で構成され、コアのクロックを30MHzに設定し、シリアル通信のみ他の装置との通信速度を一致させる必要から分周等を設定した上で32MHzのクロック源を供給しています。

なおシリアル通信であればこの精度で概ね支障はありませんが、数分程度で秒単位の誤差が生じる計算になるため、高精度な時間測定を要求するアプリケーションの場合はそれなりのクロック源を外部に設け、提供されるライブラリを大幅に改修する必要性が生じます。

Page Top

ブートローダー anchor.png

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

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

Page Top

GCC Developer Lite anchor.png

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

ArmPackLPC84x.png

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

  • GCC Developer Lite

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

  • SIMPLE TERM

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

  • ARMGCC

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

  • CoFlash

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

  • ターゲットファイル

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

Page Top

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

GCC Developer Liteでは1つのソースプログラムのみを対象とするため、機能別にソースを分割して編集やコンパイルするといった使い方はできません(完全にできないという訳でもありません)。だからと言って全ての機能を一つのソースに記述する事は、プログラムの見通しが悪くなりバグの温床になりかねません。
そこで、複数のソースに分割する事無くある程度のソースプログラムサイズでコーディングするために、頻繁に使用されるであろう一部の機能が専用のライブラリとして提供されます。
GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET」フォルダに必要なファイルがコピーされます。必要に応じて本フォルダを参照できますし、ユーザがソースを修正しライブラリを再構築する事も可能です。

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

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

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

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

  1. DXHUB等に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. 正常であれば即転送が開始され、転送が完了すれば転送したプログラムの実行が励起される
  • 2022/07/15
    • 更新したSTERM.exeがファイルのドラッグドロップを受け付けなくなっていたのを修正
    • 一部のWindows向けの実行ファイルが64bit版だったので32bit版として再構築
    • 一部の環境でsmpl19(dxclient_imu).cを長時間実行するとスタックオーバーフローを起こすようだったので、TaskDXCommタスクをxTaskCreateで生成する際のusStackDepthを少し大きめに変更
Page Top

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

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

  1. サンプルコードの参照とコンパイル条件の設定
    GCC Developer Liteを起動し、任意のサンプルコードを開きます。
    DXMIO_GDL0.png
    初めて開いたサンプルコードの場合は、コンパイルするための条件を設定する必要があります。まずメニューのツール(T)コンパイルオプション(O)...をクリックします。
    DXMIO_GDL1.png
    表示されたコンパイルオプションダイアログボックスの設定リストから「LPC845 EXTRA (TERM, FREERTOS, EXTRA)」を選択してOKボタンを押せばコンパイル条件の設定は完了です。
    DXMIO_GDL2.png
    なお既に諸設定がなされた上でコンパイルした事のあるサンプルコードを開くと、次のダイアログボックスが表示されます。OKを押すと先にコンパイルした条件が読み出されますので、その場合はコンパイル条件を改めて設定する必要はありません。
  2. コンパイル
    DXMIO_GDL3.png
    メニューのコンパイル(C)ビルド(B)もしくは「F9」キーを押すとコンパイル処理がなされ、正常であればウィンドウ下段にメモリ領域とコンパイル成功のメッセージが表示され多後に、STERM.exeを起動するかを問い合わせるダイアログボックスが表示されます。通常はそのままOKボタンを押し、SIMPLE TERM(STERM.exe)を起動させます。
    DXMIO_GDL4.png
  3. 転送の準備
    コンパイルしたファイルをDXMIOに転送するためには次の図のような構成でPCとDXMIO間を接続します。ここでは電源のON/OFFが容易にできたり部品点数が少なくて済む事からDXHUBを使用していますが、DXSharingBoardUSB2RS485 dongleUSB2RSTTL dongleUSB2DXIF dongleUSB2DXIFといった装置を使用しても構いません。
    DXMIO_DXHUB_PC_ConnectDiag.png
    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
Page Top

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

smpl1~smpl13ではボード上のLEDやTTL/RS-485 I/Fを使ったシリアル通信、CN1を使用した入出力を一通り試すことができます。

Page Top

LPCOpen anchor.png

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

Page Top

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

初期状態において大抵のペリフェラルはクロックソースが選択されていないため、クロックソースが無選択状態のままペリフェラルの初期化を行っても動作しません。ライブラリにおいてもクロックソースは別途行うものとしていますので、DXMIOにおいても初期化する前にクロックを選択しています。なおUSART0に限り「e097b_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

全てではありませんがLPC8xxシリーズはペリフェラルの機能をプログラムによって任意の端子に自由に割り当てることができます。CN1にはMPUのGPIOのうちADCが割り当てられている端子を配置していますが、可能な限りの機能を自由に割り振ることができます。

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

#include <piocfg.h>

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

  { _TXD,    PIO_TYPE_MOVABLE,  SWM_U0_TXD_O,       PIO_MODE_DEFAULT }, // USART0 TXD O
  { _RXD,    PIO_TYPE_MOVABLE,  SWM_U0_RXD_I,       PIO_MODE_PULLUP  }, // USART0 RXD I
  { _RTS,    PIO_TYPE_MOVABLE,  SWM_U0_RTS_O,       PIO_MODE_DEFAULT }, // USART0 RTS O
  { _TERM,   PIO_TYPE_OUTPUT_1, 0,                  PIO_MODE_DEFAULT }, // PIO0_16    O

  { _SCL,    PIO_TYPE_FIXED,    SWM_FIXED_I2C0_SCL, PIO_MODE_DEFAULT }, // I2C0 SCL
  { _SDA,    PIO_TYPE_FIXED,    SWM_FIXED_I2C0_SDA, PIO_MODE_DEFAULT }, // I2C0 SDA
};

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

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

USART anchor.png

弊社では何をするにも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, ...);

なおCN3CN4はいずれも電気的には半二重通信ですが、USARTとしてはそれを全く意識せずに全二重で動作します。そのためプログラムないし運用で半二重である事を想定しておかないと衝突が生じます。
またRS-485 I/Fのターミネーターは「e097b_def.h」に宣言されているSetTerminator関数を使用してプログラマブルにON/OFFできます。

void SetTerminator (bool On);
Page Top

IMU anchor.png

BNO055はMPUとI²Cで通信する前提で接続され、スレーブアドレスは0x28に固定されています。I²C以外の端子はMPUとは一切接続されていませんので、BNO055の割り込み・リセット・ファームウェアの更新といった機能が使用できません。
サンプルコードに含まれる「e097b_imu.h」には内部レジスタのアドレス定義と各レジスタへのアクセスルーチンが含まれており、BNO055を使用する上で最低限の機能は持っています。

// 指定レジスタアドレスへ1バイト書き込み
bool imu_write_byte (uint8_t page, uint8_t addr, uint8_t dat);
// 指定レジスタアドレスから1バイト読み出し
bool imu_read_byte (uint8_t page, uint8_t addr, uint8_t *dat);
// 測定データ及び計算値を一括読み出し
bool imu_read_datavalue (Tbno055 *r);
// CHIP IDの確認 (主に疎通確認用)
bool imu_cehckid (void);
// Operation Modeの取得
bool imu_get_opmode (TOperationMode *mode);
// Operation Modeの設定
bool imu_set_opmode (TOperationMode mode, TOperationMode *pprevmode);
// Power Modeの設定
bool imu_set_powermode (TPowerMode p);
// 外部クロック選択
bool imu_set_ext_osc (bool ext);
// センサ配置選択
bool imu_set_axix_place (TAxisPlace p);
// セルフテストおよび結果・システムステータス・システムエラー取得
bool imu_get_tst_stat_err (uint8_t *tst, uint8_t *stat, uint8_t *err);
// 初期化
bool init_imu (TOperationMode mode, TAxisPlace p);
Page Top

FreeRTOS anchor.png

最低限必要と思われる機能だけを活性化した上でライブラリ化しています。詳細はFreeRTOSのサイトを参照してもらうとしますが、このような小型なMPUにおいてもOSを使用する価値は十分にあります。

Page Top

サーボ向けサンプルコード anchor.png

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

Page Top

Dynamixelホスト anchor.png

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

E097B_HostDiag.png
Page Top

Dynamixelクライアント anchor.png

ホストとDXMIO間の通信処理はライブラリとして提供されるので、任意のコントロールテーブルや装置としての処理などを用意する事でクライアントとして機能させることができます。
以下に接続例を紹介しますが、ホストとなるPCと同じI/FにDXMIOが接続されているならばどの位置に配置して構いません。

E097B_ClientDiag.png

smpl19では各端子機能の割り当て・GPIOとしての入出力・PWM出力・アナログ電圧測定・IMUのデータ取得といった機能へコントロールテーブルを介してアクセスできます。

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

以下はクライアント機能を提供するサンプルプログラムの紹介です。

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

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

プログラム中のマクロを書き換えてコンパイルすれば、いずれかのプロトコルに対応させることができます。

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

Dynamixelシリーズと共通する情報はコントロールテーブル上の先頭の5バイトのみで、それ以外のアドレスには互換性はありません。
また複数バイトにまたがるアイテムはリトルエンディアンでストアされます。

DXL V1版
AddressItemAccessDefault ValueType/Range
0 (0x0)Model NumberR0x4023uint16
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 (0x68)OPR MODER/W (NVM)12uint8
0~12
105 (0x69)Axis PlacementR/W (NVM)0uint8
0~7
106 (0x6A)Accel XR-int16
-32768~32768
107 (0x6B)
108 (0x6C)Accel YR-int16
-32768~32768
109 (0x6D)
110 (0x6E)Accel ZR-int16
-32768~32768
111 (0x6F)
112 (0x86)Magnet XR-int16
-32768~32768
113 (0x87)
114 (0x88)Magnet YR-int16
-32768~32768
115 (0x89)
116 (0x8A)Magnet ZR-int16
-32768~32768
117 (0x8B)
118 (0x8C)Gyro XR-int16
-32768~32768
119 (0x8D)
120 (0x78)Gyro YR-int16
-32768~32768
121 (0x79)
122 (0x7A)Gyro ZR-int16
-32768~32768
123 (0x7B)
124 (0x7C)Euler HeadingR-int16
-32768~32768
125 (0x7D)
126 (0x7E)Euler RollR-int16
-32768~32768
127 (0x7F)
128 (0x80)Euler PitchR-int16
-32768~32768
129 (0x81)
130 (0x82)Quaternion WR-int16
-32768~32768
131 (0x83)
132 (0x84)Quaternion XR-int16
-32768~32768
133 (0x85)
134 (0x86)Quaternion YR-int16
-32768~32768
135 (0x87)
136 (0x88)Quaternion ZR-int16
-32768~32768
137 (0x89)
138 (0x8A)Linear Acc XR-int16
-32768~32768
139 (0x8B)
140 (0x8C)Linear Acc YR-int16
-32768~32768
141 (0x8D)
142 (0x8E)Linear Acc ZR-int16
-32768~32768
143 (0x8F)
144 (0x90)Gravity Vect XR-int16
-32768~32768
145 (0x91)
146 (0x92)Gravity Vect YR-int16
-32768~32768
147 (0x93)
148 (0x94)Gravity Vect ZR-int16
-32768~32768
149 (0x95)
150 (0x96)TemperatureR-int8
-128~127
151 (0x97)SYS STATR-uint8
152 (0x98)SYS ERRR-uint8
153 (0x99)USER 0R/W0uint8
0~255
154 (0x9A)USER 1R/W0uint8
0~255
155 (0x9B)USER 2R/W0uint8
0~255
156 (0x9C)USER 3R/W0uint8
0~255
157 (0x9D)USER 4R/W0uint8
0~255
158 (0x9E)USER 5R/W0uint8
0~255
159 (0x9F)USER 6R/W0uint8
0~255
160 (0xA0)USER 7R/W0uint8
0~255
161 (0xA1)USER 8R/W0uint8
0~255
162 (0xA2)USER 9R/W0uint8
0~255
163 (0xA3)USER 10R/W0uint8
0~255
164 (0xA4)USER 11R/W00~uint8
255
165 (0xA5)USER 12R/W0uint8
0~255
166 (0xA6)USER 13R/W0uint8
0~255
167 (0xA7)USER 14R/W0uint8
0~255
168 (0xA8)USER 15R/W0uint8
0~255
169 (0xA9)USER 16R/W0uint8
0~255
170 (0xAA)USER 17R/W0uint8
0~255
171 (0xAB)USER 18R/W0uint8
0~255
172 (0xAC)USER 19R/W0uint8
0~255
Page Top
Model Number anchor.png

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

Page Top
Version of Firmware anchor.png

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

Page Top
ID anchor.png

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

Page Top
Baudrate anchor.png

デバイスの通信速度を決める分周値で、デフォルトは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

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

Page Top
LED anchor.png

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

Page Top
Terminator anchor.png

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

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

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

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

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

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

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

※現時点で機能しません

Page Top
OUT anchor.png

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

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

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

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

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

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

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

Page Top
DAV anchor.png

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

Output [V] = 3.3[V] * Value / 1023
Page Top
OPR MODE anchor.png

BNO055の動作モードを設定します。
使用しない場合は0を設定します。

ValueOperation ModeDescription
0CONFIG計測処理停止。
1ACCONLY加速度センサのみ。フュージョンモード無し。
2MAGONLY地磁気センサのみ。フュージョンモード無し。
3GYRONLYジャイロセンサのみ。フュージョンモード無し。
4ACCMAG加速度+地磁気センサ。フュージョンモード無し。
5ACCGYRO加速度+ジャイロセンサ。フュージョンモード無し。
6MAGGYRO地磁気+ジャイロセンサ。フュージョンモード無し。
7AMG加速度+地磁気+ジャイロセンサ。フュージョンモード無し。
8IMUPLUSセンサの相対的な向きを加速度+ジャイロセンサから算出。高速データレート。フュージョンモード有り。
9COMPASS方位を地磁気と加速度センサより算出。フュージョンモード有り。
10M4Gジャイロセンサの代わりに地磁気センサを使用。フュージョンモード有り。
11NDOF_FMC_OFF高速地磁気センサキャリブレーションがOFF以外はNDOFと同様。フュージョンモード有り。
12NDOF9軸を使い絶対方位を算出。フュージョンモード有り。

Page Top
Axis Place anchor.png

IMU055のチップ表面の1ピンのシルク位置を基準に8パターンのセンサ配置から1つを選択する事で、各軸の測定値及び計算値の出力先を変更できます。

ValuePlacement
0
E097B_IMU_AxisPlaceP0.png
1
E097B_IMU_AxisPlaceP1.png
2
E097B_IMU_AxisPlaceP2.png
3
E097B_IMU_AxisPlaceP3.png
4
E097B_IMU_AxisPlaceP4.png
5
E097B_IMU_AxisPlaceP5.png
6
E097B_IMU_AxisPlaceP6.png
7
E097B_IMU_AxisPlaceP7.png

ここで選択できるのは基板の表裏をZ軸方向に合わせた場合の8パターンのみですが、それらを除いた残りの16パターンを希望する場合はソースを適宜変更する必要があります。

Page Top
Accel,Magnet,Gyro,Euler,Quaternion,Linea​r Accel,Gravity Vect,Temperature anchor.png

BNO055から得られる測定値及び計算値ですが、OPR MODEによって得られなくなるアイテムがあります。

Accel[m/s²] = value / 100
Magnet[uT] = value / 16
Gyro[deg/s] = value / 16
Eular[deg] = value / 16
Quaternion = value / (2^14)
LIA[m/s²] = value / 100
GRV[m/s²] = value / 100
Temperature[degC] = value
Page Top
SYS STAT anchor.png

BNO055のSystem Status Codeです。

Page Top
SYS ERR anchor.png

BNO055のSystem Error Codeです。

Page Top
USER 0~19 anchor.png

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

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

複数バイトにまたがるアイテムはリトルエンディアンでストアされます。

DXL V2版
AddressItemAccessDefault ValueType/Range
0 (0x0)Model NumberR0x4023uint16
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)OPR MODER/W (NVM)12uint8
0~12
109 (0x6D)Axis PlacementR/W (NVM)0uint8
0~7
110 (0x6E)Accel XR-float
?
111 (0x6F)
111 (0x6F)
111 (0x6F)
112 (0x70)Accel YR-float
?
113 (0x71)
113 (0x71)
113 (0x71)
114 (0x72)Accel ZR-float
?
115 (0x73)
115 (0x73)
115 (0x73)
116 (0x74)Magnet XR-float
?
117 (0x75)
117 (0x75)
117 (0x75)
118 (0x76)Magnet YR-float
?
119 (0x77)
119 (0x77)
119 (0x77)
120 (0x78)Magnet ZR-float
?
121 (0x79)
121 (0x79)
121 (0x79)
122 (0x7A)Gyro XR-float
?
123 (0x7B)
123 (0x7B)
123 (0x7B)
124 (0x7C)Gyro YR-float
?
125 (0x7D)
125 (0x7D)
125 (0x7D)
126 (0x7E)Gyro ZR-float
?
127 (0x7F)
127 (0x7F)
127 (0x7F)
128 (0x80)Euler HeadingR-int16
-32768~32768
129 (0x81)
130 (0x82)Euler RollR-int16
-32768~32768
131 (0x83)
132 (0x84)Euler PitchR-int16
-32768~32768
133 (0x85)
134 (0x86)Quaternion iR-float
?
135 (0x87)
135 (0x87)
135 (0x87)
136 (0x88)Quaternion jR-float
?
137 (0x89)
137 (0x89)
137 (0x89)
138 (0x8A)Quaternion kR-float
?
139 (0x8B)
139 (0x8B)
139 (0x8B)
140 (0x8C)Quaternion realR-float
?
141 (0x8D)
141 (0x8D)
141 (0x8D)
142 (0x8E)Linear Acc XR-int16
-32768~32768
143 (0x8F)
144 (0x90)Linear Acc YR-int16
-32768~32768
145 (0x91)
146 (0x92)Linear Acc ZR-int16
-32768~32768
147 (0x93)
148 (0x94)Gravity Vect XR-int16
-32768~32768
149 (0x95)
150 (0x96)Gravity Vect YR-int16
-32768~32768
151 (0x97)
152 (0x98)Gravity Vect ZR-int16
-32768~32768
153 (0x99)
154 (0x9A)TemperatureR-int8
-128~127
155 (0x9B)SYS STATR-uint8
156 (0x9C)SYS ERRR-uint8
157 (0x9D)USER 0R/W0uint8
0~255
158 (0x9E)USER 1R/W0uint8
0~255
159 (0x9F)USER 2R/W0uint8
0~255
160 (0xA0)USER 3R/W0uint8
0~255
161 (0xA1)USER 4R/W0uint8
0~255
162 (0xA2)USER 5R/W0uint8
0~255
163 (0xA3)USER 6R/W0uint8
0~255
164 (0xA4)USER 7R/W0uint8
0~255
165 (0xA5)USER 8R/W0uint8
0~255
166 (0xA6)USER 9R/W0uint8
0~255
167 (0xA7)USER 10R/W0uint8
0~255
168 (0xA8)USER 11R/W00~uint8
255
169 (0xA9)USER 12R/W0uint8
0~255
170 (0xAA)USER 13R/W0uint8
0~255
171 (0xAB)USER 14R/W0uint8
0~255
172 (0xAC)USER 15R/W0uint8
0~255
173 (0xAD)USER 16R/W0uint8
0~255
174 (0xAE)USER 17R/W0uint8
0~255
175 (0xAF)USER 18R/W0uint8
0~255
176 (0xB0)USER 19R/W0uint8
0~255
Page Top
Baudrate anchor.png

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

Set valueBaudrate[bps]
09600
157600
2115200
31000000
42000000
64000000

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

Page Top

ICS/B3Mクライアント anchor.png

一部の根強いリクエストにより近藤科学殿のKRSシリーズB3Mシリーズと一緒に使用する事を想定し、これらのプロトコルに対応したクライアント機能をsmpl20とsmpl21として提供します。
ICSの場合は適用例が極めて少ない拡張コマンドを使用してコントロールテーブルへのアクセス手段を提供しています。拡張コマンドではコントロールテーブル上で1バイトに相当するデータが2バイトに分割されて送受信される事に注意が必要です。また書き込んだ値等が許容範囲外の場合はレスポンスを返しません。
B3Mの場合はREAD/WRITE/RESETコマンドのみに応答します。
またIDの書き換えはコントロールテーブル上の値もしくはIDコマンドいずれを用いても行えますが、IDを始めNVM領域のアイテムを不揮発メモリに保存するにはDynamixel版と同様に、任意のアイテムの値を書き換えた後にコントロールテーブル中のWriteNVMに1を書き込む必要があります。

Page Top
ICS/B3Mクライアントコントロールテーブル anchor.png

複数バイトにまたがるアイテムはリトルエンディアンでストアされます。

ICS/B3M版
AddressItemAccessDefault ValueType/Range
0 (0x0)Model NumberR0x4023uint16
1 (0x1)
2 (0x2)Version of FirmwareR0x41uint8
3 (0x3)IDR/W (NVM)-uint8
4 (0x4)BaudrateR/W (NVM)-uint8
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 (0x18)PWM Duty 1R/W (NVM)0uint16
0~65535
25 (0x19)
26 (0x1A)PWM Duty 2R/W (NVM)0uint16
0~65535
27 (0x1B)
28 (0x1C)PWM Duty 3R/W (NVM)0uint16
0~65535
29 (0x1D)
30 (0x1E)PWM Duty 4R/W (NVM)0uint16
0~65535
31 (0x1F)
32 (0x20)PWM Duty 5R/W (NVM)0uint16
0~65535
33 (0x21)
34 (0x22)Capture 0R/W0uint16
0~65535
35 (0x23)
36 (0x24)Capture 1R/W0uint16
0~65535
37 (0x25)
38 (0x26)Capture 2R/W0uint16
0~65535
39 (0x27)
40 (0x28)Capture 3R/W0uint16
0~65535
41 (0x29)
42 (0x2A)OUTR/W0uint16
0~4095
43 (0x2B)
44 (0x2C)INR-uint16
0~4095
45 (0x2D)
46 (0x2E)ADV 0R-uint16
0~4095
47 (0x2F)
48 (0x30)ADV 1R-uint16
0~4095
49 (0x31)
50 (0x32)ADV 2R-uint16
0~4095
51 (0x33)
52 (0x34)ADV 3R-uint16
0~4095
53 (0x35)
54 (0x36)ADV 4R-uint16
0~4095
55 (0x37)
56 (0x38)ADV 5R-uint16
0~4095
57 (0x39)
58 (0x3A)ADV 6R-uint16
0~4095
59 (0x3B)
60 (0x3C)ADV 7R-uint16
0~4095
61 (0x3D)
62 (0x3E)ADV 8R-uint16
0~4095
63 (0x3F)
64 (0x40)ADV 9R-uint16
0~4095
65 (0x41)
66 (0x42)ADV 10R-uint16
0~4095
67 (0x43)
68 (0x44)ADV 11R-uint16
0~4095
69 (0x45)
70 (0x46)DAVR/W-uint16
0~1023
71 (0x47)
72 (0x48)OPR MODER/W (NVM)12uint8
0~12
73 (0x49)Axis PlacementR/W (NVM)0uint8
0~7
74 (0x4A)Accel XR-int16
-32768~32768
75 (0x4B)
76 (0x4C)Accel YR-int16
-32768~32768
77 (0x4D)
78 (0x4E)Accel ZR-int16
-32768~32768
79 (0x4F)
80 (0x50)Magnet XR-int16
-32768~32768
81 (0x51)
82 (0x52)Magnet YR-int16
-32768~32768
83 (0x53)
84 (0x54)Magnet ZR-int16
-32768~32768
85 (0x55)
86 (0x56)Gyro XR-int16
-32768~32768
87 (0x57)
88 (0x58)Gyro YR-int16
-32768~32768
89 (0x59)
90 (0x5A)Gyro ZR-int16
-32768~32768
91 (0x5B)
92 (0x5C)Euler HeadingR-int16
-32768~32768
93 (0x5D)
94 (0x5E)Euler RollR-int16
-32768~32768
95 (0x5F)
96 (0x60)Euler PitchR-int16
-32768~32768
97 (0x61)
98 (0x62)Quaternion WR-int16
-32768~32768
99 (0x63)
100 (0x64)Quaternion XR-int16
-32768~32768
101 (0x65)
102 (0x66)Quaternion YR-int16
-32768~32768
103 (0x67)
104 (0x68)Quaternion ZR-int16
-32768~32768
105 (0x69)
106 (0x6A)Linear Acc XR-int16
-32768~32768
107 (0x6B)
108 (0x6C)Linear Acc YR-int16
-32768~32768
109 (0x6D)
110 (0x6E)Linear Acc ZR-int16
-32768~32768
111 (0x6F)
112 (0x70)Gravity Vect XR-int16
-32768~32768
113 (0x71)
114 (0x72)Gravity Vect YR-int16
-32768~32768
115 (0x73)
116 (0x74)Gravity Vect ZR-int16
-32768~32768
117 (0x75)
118 (0x76)TemperatureR-int8
-128~127
119 (0x77)SYS STATR-uint8
120 (0x78)SYS ERRR-uint8
Page Top
ID anchor.png

ネットワーク上の個体を特定する固有の番号です。同一ネットワークに同じIDを持ったデバイスが存在してはなりません。
設定可能な範囲はICSの場合は0~31でB3Mの場合は0~254、デフォルト値はICSの場合は31でB3Mの場合は254です。

Page Top
Baudrate anchor.png

デバイスの通信速度です。

ICSの場合の設定可能なBaudrateは以下の通りです。

ICS版
Set valueBaudrate[bps]
0115200
1625000
21250000

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

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

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

B3M版
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%以下が要求されます。


Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2023-01-15 (Sun) 22:19:29 (JST) (658d)