ページへ戻る

− Links

 印刷 

BTE098 DXMIO with IMU のバックアップソース(No.4) :: Besttechnology

knowledge:BTE098 DXMIO with IMU のバックアップソース(No.4)

« Prev[4]  Next »[5]
TITLE:DXMIO wtih IMUマニュアル
#norelated
#contents
[[ショップページへ>https://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=271]]~

#ref(E097B_3D.png)
**DXMIOの特徴 [#e1560dc1]
-Dynamixel互換I/F及び通信プロトコル装備
-デジタル入出力・アナログ電圧計測・アナログ電圧出力・PWM出力・パルス数カウンタ・パルス幅計測をサポート
-任意のプログラムを組み込む事により、デフォルトで搭載した機能以上の処理を実現可能
-9軸IMU搭載
-OSに[[FreeRTOS>https://www.freertos.org/]]を採用
-超小型

**概要 [#ebd26e62]
DXMIOは[[NXP社>https://www.jp.nxp.com]]製[[LPC845>https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc800-cortex-m0-plus-/low-cost-microcontrollers-mcus-based-on-arm-cortex-m0-plus-cores:LPC84X]](cortex-M0+コア)を搭載し、Dynamixel互換I/Fを装備した汎用マイコンボードです。~
前バージョンの[[DXMIO>BTE088]]に対して、MPUのアップグレード・IMU搭載・TTLとRS-485の両I/F同時対応・5V電源の容量アップといった変更がなされています。

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

**仕様 [#w5d280da]
***同梱内容 [#wc5adce9]
| 型式 | 数量 | 備考 |h
|本体 | 1|- |
|Robot Cable X3P | 1|- |
|Robot Cable X4P | 1|- |

***基本仕様 [#x1141bd0]
|BGCOLOR(#d0d8e0):CENTER:||LEFT:|c
|商品番号|BTE098|<|
|MPU|>|[[LPC845M301JHI33>https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc800-cortex-m0-plus-/low-cost-microcontrollers-mcus-based-on-arm-cortex-m0-plus-cores:LPC84X]] |
|PCBリビジョン|>|E097B (4層) |
|通信機能|>|TTL(半二重)及びRS485(半二重)&br;※いずれも5V|
|動作温度|>|0~+50℃ |
|動作電圧|>|DC5.3~35V&br;絶対最大定格 ±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準拠, 鉛フリー半田 |

***外観・レイアウト [#i016df04]
| top | bottom |h
| #ref(E097B_TOP.png,25%) | #ref(E097B_BTM.png,25%) |
| [[3D pdf>https://www.besttechnology.co.jp/download/3D/E097B_3D.pdf]] |<|

#ref(E097B_LAYOUT.pdf)

***回路図 [#ba402fe4]
#ref(E097B_SCH.pdf)

***各機能詳細 [#of729bda]

****CN1 [#tf8c1e95]
#ref(E097B_CN1.png)
-2.54mmピッチ14ピン
-ランド穴径 0.9mm
-1pin(GND),2pin(5.0V)端子間から外部へDC5Vの電源供給可。
-各GPIOはDC3.3Vロジックレベルで、デジタルI/Oに構成されている間は5Vトレラント対応、アナログ入力に構成されている間は5Vトレラント非対応
-端子名
| No. | 端子名称 (MPU) | No. | 端子名称 (MPU) |h
| 1 | GND | 14 | GPIO5(PIO0_21/ADC5) |
| 2 | 5.0V | 13 | GPIO6(PIO0_20/ADC6) |
| 3 | GPIO4(PIO0_22/ADC4) | 12 | GPIO7(PIO0_19/ADC7) |
| 4 | GPIO3(PIO0_23/ADC3) | 11 | GPIO8(PIO0_18/ADC8) |
| 5 | GPIO2(PIO0_14/ADC2) | 10 | GPIO9(PIO0_17/ADC9) |
| 6 | GPIO1(PIO0_6/ADC1) | 9 | GPIO10(PIO0_13/ADC10) |
| 7 | GPIO0(PIO0_7/ADC0) | 8 | GPIO11(PIO0_4/ADC11) |

****CN2 [#m4cf2892]
#ref(E097B_CN2.png)
-1.27mmピッチ5ピンランド
-SWD用
| No. | 端子名称 |h
| 1 | 3.3V |
| 2 | GND |
| 3 | SWDIO |
| 4 | SWCLK |
| 5 | RESET |

****CN3 [#j8574659]
#ref(E097B_CN3.png)
-TTL I/F
#ref(DXLSHARE/TTL_IF.png)
-電源と通信用信号ラインが接続
| Pats Name | JST Parts Number |h
|基板用ヘッダー |[[B3B-EH, B3B-EH-A>https://www.jst-mfg.com/product/detail.php?series=58]] |
|ハウジング |[[EHR-3>https://www.jst-mfg.com/product/detail.php?series=58]] |
|ターミナル |[[SEH-00x>https://www.jst-mfg.com/product/detail.php?series=58]] |
#ref(DXLSHARE/jst_B3B-EH.png)
| 端子番号 | 信号名 |h
| 1 | GND |
| 2 | VDD |
| 3 | TTL Signal |
-Dynamixel I/Fに準拠したコネクタで、TTLによるシリアル通信及びDXMIOへの電源供給を行う
-③ピンは220kΩの抵抗で5Vへプルアップ済
-物理的な最大データレートは10Mbps
-①ピン(GND)および②ピン(VDD)はそれぞれボード内全て共通
-MPUとはCN4のRS-485 I/FとOR接続

****CN4 [#keaa8c78]
#ref(E097B_CN4.png)
-RS-458 I/F
#ref(DXLSHARE/RS485_IF.png)
-電源と通信用信号ラインが接続
| Pats Name | JST Parts Number |h
|基板用ヘッダー |[[B4B-EH, B4B-EH-A>https://www.jst-mfg.com/product/detail.php?series=58]] |
|ハウジング |[[EHR-4>https://www.jst-mfg.com/product/detail.php?series=58]] |
|ターミナル |[[SEH-00x>https://www.jst-mfg.com/product/detail.php?series=58]] |
#ref(DXLSHARE/jst_B4B-EH.png)
| 端子番号 | 信号名 |h
| 1 | GND |
| 2 | VDD |
| 3 | RS-485 D+ |
| 4 | RS-485 D- |
-Dynamixel I/Fに準拠したコネクタで、RS-485によるシリアル通信及びDXMOへの電源供給を行う
-③④ピン間にはプログラムによってON/OFFできる120Ωのターミネータを装備
-物理的な最大データレートは20Mbps
-①ピン(GND)および②ピン(VDD)はそれぞれボード内全て共通
--MPUとはCN3のTTL I/FとOR接続

****LED1 [#cd58e257]
-青色LED
-3.3Vの生成と共に点灯

****LED2 [#eb0323d6]
-緑色LED
-アプリケーションにてプログラマブルに点灯・消灯
-電流制限抵抗を介してMPUのGPIOにシンク接続

****PB1 [#hed8da57]
#ref(E097B_PB1.png)
-プッシュスイッチ
-無操作でMPUのRESET端子を解放
-押下でMPUのRESET端子をLOW

****U7 [#nfb8ec5a]
#ref(E097B_U7.png)
-Bosch社[[BNO055>https://www.bosch-sensortec.com/products/smart-sensors/bno055.html]] 9軸(3軸加速度計・3軸磁力計・3軸ジャイロスコープ)IMU
-32.768kHz外部クロック装備
-ボード裏面中央に配置
-簡素化のためI²CバスのみがMPUと接続

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

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

***CN2 [#i2053031]
[[LPC-Link2>https://www.nxp.com/design/microcontrollers-developer-resources/lpc-microcontroller-utilities/lpc-link2:OM13054]]等を用いてMPUを直接デバッグするためのランドです。~
出荷時にMPUのFLASH ROMにブートローダーを書き込む際に使用する事のみを想定しているため、コネクタの類いは実装していません。

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

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

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

***ブートローダー [#l5ac00b5]
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を押してリセットしするか電源を再投入して下さい。ブートローダはコマンドモードへ遷移します。

**プログラムの開発環境 [#ffd43480]
***GCC Developer Lite [#xcbed9da]
GCC Developer Liteの詳細については[[こちら>GCC Developer Lite]]で紹介しています。「基本パック」と「ARMパック」を[[ダウンロード>GCC Developer Lite#DOWNLOAD]]してインストールしてください。なおARMパックインストールの際に表示されるコンポーネントの選択画面では「LPC84xでのみ使用」を選択してください。
#ref(ArmPackLPC84x.png)

LPC845で使用される主要なコンポーネントを簡単に紹介します。
-''[[GCC Developer Lite>GCC Developer Lite#GCCDevL]]''
~ソースプログラムを編集するためのテキストエディタとその他のツールを起動するためのランチャ機能を有する。
-''[[SIMPLE TERM>GCC Developer Lite#STERM]]''
~汎用シリアルターミナル。簡易的なTELNETクライアントとしても機能する。~
USB等で提供されるCOMポートの動的な検出と、COMポートを使用する弊社ツールとの排他制御機能を持つ。
-''[[ARMGCC>https://launchpad.net/gcc-arm-embedded]]''
~ARMコア向けC/C++言語向けのコンパイラ。できる限り最新のパッチを適用している。
-''[[CoFlash>https://sourceforge.net/projects/coflash/]]''
~CMSIS-DAPに対応したICEを使用してFLASH ROMへ任意のプログラムを直接書き込むツール。
-''ターゲットファイル''
~MPUの内蔵ペリフェラルを定義したヘッダファイルやUARTを簡便に使うためのAPI、GDBにてデバッグする際に使用する初期化ファイル、シリーズ毎に異なるメモリマップを定義したリンカスクリプトファイル、スタートアップルーチンを含む。基本的にコンパイル済みライブラリとしてソースとリンクして使用する。

***LPC84x向けターゲットファイル及びライブラリ [#t1308d6a]
[[GCC Developer Lite>GCC Developer Lite]]では1つのソースプログラムのみを対象とするため、機能別にソースを分割して編集やコンパイルするといった使い方はできません(完全にできないという訳でもありません)。だからと言って全ての機能を一つのソースに記述する事は、プログラムの見通しが悪くなりバグの温床になりかねません。~
そこで、複数のソースに分割する事無くある程度のソースプログラムサイズでコーディングするために、頻繁に使用されるであろう一部の機能が専用のライブラリとして提供されます。~
GCC Developer Liteを標準的な環境のPCへインストールすると、「C:\Program Files\BestTech\GCC Developer Lite\TARGET」フォルダに必要なファイルがコピーされます。必要に応じて本フォルダを参照できますし、ユーザがソースを修正しライブラリを再構築する事も可能です。~
~
LPC84xは複数のライブラリを組み合わせて使用するため、実体はかなり複雑になっています。
-''LPC84xライブラリ''~
LPC84xシリーズ共通の内蔵ペリフェラルを簡便に扱う為のライブラリ。主に[[LPCOpen>https://www.nxp.com/support/developer-resources/software-development-tools/lpc-developer-resources-/lpcopen-libraries-and-examples:LPC-OPEN-LIBRARIES]]とシリアル通信、端子割り当て、ブートコードを含む。
-''LPC84x追加ライブラリ''~
LPC84xシリーズ用のよく使われるペリフェラルのラッパーライブラリ。主にDELAY,FLASH,I2C,SPI,ADC,DXLIB,DX2LIBを含む。
-''cortex-M0用FREERTOS''~
Cortex-M0+用に予めビルドされたリアルタイムオペレーティングシステム[[FreeRTOS>https://www.freertos.org/]]。
-''サーボ用ライブラリ''~
Dynamixelの他に、KONDO製 B3MシリーズとKRSシリーズ向けの通信用ライブラリ。クライアントとホストに対応。

***サンプルコードとコンパイル済みファイルの転送及びと実行 [#la4263e0]
以下のリンクにZIP形式の圧縮ファイルで設置しました。アーカイバ等にて適宜解凍して使用して下さい。~
ソースファイル(srcフォルダ)と一緒にコンパイル済みのbinファイル(binフォルダ)、GCC Developer Liteをインストールせずともコンパイル済みのbinファイルが転送できるWindows向け各種ツール等が同梱されています。出荷時に「smpl19(dxclient_imu)_V2.bin」が書き込まれていますが、統合環境なしに簡易的にコンパイル済みのバイナリファイルを転送して試すには以下の手順を踏んで下さい。
+[[DXHUB]]等にDXMIOを接続し、PCとDXMIO間で通信できる環境を整備する
+DXMIOへの電源供給を断っておく
+同梱の.\tools\sterm\conf.cmdを実行するとDXMIOへコンパイル済みのbinファイルを転送するための設定がなされたSIMPLE TERM(STERM.exe)が起動する
+起動したSTERMの'''ファイルメニュー'''→'''プロパティ'''をクリックし、''Connect to''のドロップダウンリストから任意のCOMポート番号を選択して''OK''ボタンを押す
+STERMの'''通信メニュー'''→'''ポートオープン'''をクリックし該当ポートを開いておく
+binフォルダ内の任意のbinファイルをSTERMのターミナルウィンドウ上へドロップダウンする
+STERMの'''転送メニュー'''→'''スクリプト実行'''をクリックすると10秒の転送タイムアウト画面が表示されるので、タイムアウトする前にDXMIOへ電源を供給する
+正常であれば即転送が開始され、転送が完了すれば転送したプログラムの実行が励起される
-''2022/06/30''~
--一部のWindows向けの実行ファイルが64bit版だったので32bit版として再構築~
--一部の環境でsmpl19(dxclient_imu).cを長時間実行するとスタックオーバーフローを起こすようだったので、TaskDXCommタスクをxTaskCreateで生成する際のusStackDepthを少し大きめに変更
#ref(https://www.besttechnology.co.jp/download/E097B_SMPL1.2.zip)

-2022/04/11
--GCC Developer Lite及びARMパックの更新に伴う改変とサンプルコードの追加~
--詳細は同梱のREADME.mdを参照の事
#ref(https://www.besttechnology.co.jp/download/E097B_SMPL1.1.zip)

-2021/01/17~
--初回リリース~
#ref(https://www.besttechnology.co.jp/download/E097B_SMPL1.0.zip)

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

+サンプルコードの参照とコンパイル条件の設定~
GCC Developer Liteを起動し、任意のサンプルコードを開きます。
#ref(DXMIO_GDL0.png,60%)
初めて開いたサンプルコードの場合は、コンパイルするための条件を設定する必要があります。まずメニューの'''ツール(T)'''→'''コンパイルオプション(O)...'''をクリックします。
#ref(DXMIO_GDL1.png,100%)
表示されたコンパイルオプションダイアログボックスの''設定リスト''から「LPC845 EXTRA (TERM, FREERTOS, EXTRA)」を選択して'''OK'''ボタンを押せばコンパイル条件の設定は完了です。
#ref(DXMIO_GDL2.png,100%)
なお既に諸設定がなされた上でコンパイルした事のあるサンプルコードを開くと、次のダイアログボックスが表示されます。'''OK'''を押すと先にコンパイルした条件が読み出されますので、その場合はコンパイル条件を改めて設定する必要はありません。
+コンパイル~
#ref(DXMIO_GDL3.png,80%)
メニューの'''コンパイル(C)'''→'''ビルド(B)'''もしくは「F9」キーを押すとコンパイル処理がなされ、正常であればウィンドウ下段にメモリ領域とコンパイル成功のメッセージが表示され多後に、STERM.exeを起動するかを問い合わせるダイアログボックスが表示されます。通常はそのまま'''OK'''ボタンを押し、SIMPLE TERM(STERM.exe)を起動させます。
#ref(DXMIO_GDL4.png,80%)
+転送の準備~
コンパイルしたファイルをDXMIOに転送するためには次の図のような構成でPCとDXMIO間を接続します。ここでは電源のON/OFFが容易にできたり部品点数が少なくて済む事から[[DXHUB]]を使用していますが、[[DXSharingBoard]]や[[USB2RS485 dongle>BTE079C]]、[[USB2RSTTL dongle>BTE080C]]、[[USB2DXIF dongle>BTE096]]、[[USB2DXIF]]といった装置を使用しても構いません。
#ref(DXMIO_DXHUB_PC_ConnectDiag.png,80%)
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''ボタンを押します。
#ref(DXMIO_STERM0.png,100%)
COMポートの設定が終わったら'''通信(C)'''メニュー→'''ポートオープン(C)'''をクリックしてポートを開きます。
+DXMIOのブートローダをコマンドモードに変更~
予めDXMIOにユーザプログラムが書き込まれている場合は、電源投入直後にそのユーザプログラムが自動的に実行されます。その際はSIMPLE TERM上でキーボードの「!」キー押しながらDXMIOの電源を入れ直す事でブートローダをコマンドモードに遷移させることができます。
#ref(DXMIO_STERM1.png,100%)
ターミナルウィンドウ上にブートローダのバージョンが表示されたら、DXMIOはコマンド-モードに遷移しています。
+転送と実行~
DXMIOがブートローダのコマンドモードで待機している状態であれば、SIMPLE TERMのメニューから「スクリプト実行[STERM_LPC84x]」をクリックします。
#ref(DXMIO_STERM2.png,100%)
転送中はステータスバーに進捗が表示され、転送が完了するとDXMIOからOKの応答が返りターミナルウィンドウに表示されます。
#ref(DXMIO_STERM3.png,100%)
この状態でキーボードの「g」を押すと転送したプログラムに実行が遷移します。

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

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

***LPCOpen [#vffb4464]
[[LPCOpen>https://www.nxp.com/design/microcontrollers-developer-resources/lpcopen-libraries-and-examples:LPC-OPEN-LIBRARIES]]はNXP社より提供されるペリフェラル用のライブラリです。しかしLPC84xシリーズは見捨てられたまま開発が止まっているようで、今後はメンテナンスされない可能性が高いと思われます。~
とは言えリソースはLPCOpen前提でこしらえたものも蓄積されてしまっていることから、LPC82x用のものをモディファイしてLPC84x向けに構成し直したものを同梱しています。
***ペリフェラルのクロックソース [#u59068f0]
初期状態において大抵のペリフェラルはクロックソースが選択されていないため、クロックソースが無選択状態のままペリフェラルの初期化を行っても動作しません。ライブラリにおいてもクロックソースは別途行うものとしていますので、DXMIOにおいても初期化する前にクロックを選択しています。なおUSART0に限り「e097b_def.h」内のResetExceptionDispatch_Tail関数(main関数へジャンプする直前にスタートアップルーチンから呼ばれる)で予めクロックソースを選択しています。
#html{{
<pre class="brush: c;">
#include &lt;chip.h&gt;

// 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;
</pre>
}}

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

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

#html{{
<pre class="brush: c;">
#include &lt;piocfg.h&gt;

// 端子機能設定配列
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
};
</pre>
}}

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

#html{{
<pre class="brush: c;">
void ToggleLED (void);
void SetLED (bool On);
</pre>
}}

***USART [#d60bbb63]
弊社では何をするにもUSART(UART)ありきなため、本MPUにおいてもライブラリとして基本的な送受信ルーチンをポーリング・割り込み・DMAの3パターンで用意しています。
#html{{
<pre class="brush: c;">
#include &lt;us.h&gt;
</pre>
}}
用意される関数はUSARTの初期化・1バイトないし複数バイトの送受信・簡易書式文字列送信・送受信バッファ内のデータ数確認といったところで、どのタイプであってもポートであっても同じフォーマットです。

#html{{
<pre class="brush: c;">
// 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, ...);
</pre>
}}

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

#html{{
<pre class="brush: c;">
void SetTerminator (bool On);
</pre>
}}

***IMU [#qc63a856]
[[BNO055>#nfb8ec5a]]はMPUとI²Cで通信する前提で接続され、スレーブアドレスは0x28に固定されています。I²C以外の端子はMPUとは一切接続されていませんので、BNO055の割り込み・リセット・ファームウェアの更新といった機能が使用できません。~
サンプルコードに含まれる「e097b_imu.h」には内部レジスタのアドレス定義と各レジスタへのアクセスルーチンが含まれており、BNO055を使用する上で最低限の機能は持っています。
#html{{
<pre class="brush: c;">
// 指定レジスタアドレスへ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);
</pre>
}}

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

**サーボ向けサンプルコード [#qe68e003]
以下は最新のサンプルコードを前提に記述されています。

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

***Dynamixelクライアント [#gbd36d66]
ホストとDXMIO間の通信処理はライブラリとして提供されるので、任意のコントロールテーブルや装置としての処理などを用意する事でクライアントとして機能させることができます。~
以下に接続例を紹介しますが、ホストとなるPCと同じI/FにDXMIOが接続されているならばどの位置に配置して構いません。
#ref(E097B_ClientDiag.png)
smpl19では各端子機能の割り当て・GPIOとしての入出力・PWM出力・アナログ電圧測定・IMUのデータ取得といった機能へコントロールテーブルを介してアクセスできます。

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

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

****Dynamixel通信プロトコル [#xd55d8ad]
Dynamixelシリーズには2種類のプロトコルがあります。
-[[DYNAMIXEL Communiation Protocol 1.0]]~
Dynamixel AX,DX,RX,MXシリーズと共通のプロトコル
-[[DYNAMIXEL Communiation Protocol 2.0]]~
Dynamixel X,PROシリーズと共通のプロトコル

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

****Dynamixel Protocol V1コントロールテーブル [#ld4f467a]
Dynamixelシリーズと共通する情報はコントロールテーブル上の先頭の5バイトのみで、それ以外のアドレスには互換性はありません。~
また複数バイトにまたがるアイテムはリトルエンディアンでストアされます。
| DXL V1版 |<|<|<|<|h
|=''Address''|=''Item''|=''Access''|=''Default Value''|=''Type/Range''|h
|CENTER:|LEFT:|CENTER:|CENTER:|CENTER:|c
|0 (0x0)|BGCOLOR(beige):[[Model Number>#n4d55da8]]|R|0x4023|uint16|
|1 (0x1)|~|~|~|~|
|2 (0x2)|BGCOLOR(beige):[[Version of Firmware>#s44e01a9]]|R|0x41|uint8|
|3 (0x3)|BGCOLOR(seashell):[[ID>#cf9c14f9]]|R/W (NVM)|200|uint8&br;0~253|
|4 (0x4)|BGCOLOR(seashell):[[Baudrate>#y9835609]]|R/W (NVM)|1|uint8&br;0~254|
|5 (0x5)|BGCOLOR(lightcyan):[[WriteNVM>#iee6d02c]]|R/W|0|uint8&br;0~1|
|6 (0x6)|BGCOLOR(lightcyan):[[LED>#db0623c9]]|R/W|0|uint8&br;0~1|
|7 (0x7)|BGCOLOR(seashell):[[Terminator>#u0c32f9c]]|R/W (NVM)|1|uint8&br;0~1|
|8 (0x8)|BGCOLOR(seashell):[[Pin Config 0>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|9 (0x9)|BGCOLOR(seashell):[[Pin Config 1>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|10 (0xA)|BGCOLOR(seashell):[[Pin Config 2>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|11 (0xB)|BGCOLOR(seashell):[[Pin Config 3>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|12 (0xC)|BGCOLOR(seashell):[[Pin Config 4>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|13 (0xD)|BGCOLOR(seashell):[[Pin Config 5>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|14 (0xE)|BGCOLOR(seashell):[[Pin Config 6>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|15 (0xF)|BGCOLOR(seashell):[[Pin Config 7>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|16 (0x10)|BGCOLOR(seashell):[[Pin Config 8>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|17 (0x11)|BGCOLOR(seashell):[[Pin Config 9>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|18 (0x12)|BGCOLOR(seashell):[[Pin Config 10>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|19 (0x13)|BGCOLOR(seashell):[[Pin Config 11>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|20 (0x14)|BGCOLOR(seashell):[[PWM Frequency>#x543dc01]]|R/W (NVM)|0|uint16&br;0~50000|
|21 (0x15)|^|^|^|^|
|22 (0x16)|BGCOLOR(seashell):[[PWM Duty 0>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|23 (0x17)|^|^|^|^|
|24 (0x1A)|BGCOLOR(seashell):[[PWM Duty 1>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|25 (0x1D)|^|^|^|^|
|26 (0x1E)|BGCOLOR(seashell):[[PWM Duty 2>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|27 (0x1F)|^|^|^|^|
|28 (0x22)|BGCOLOR(seashell):[[PWM Duty 3>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|29 (0x23)|^|^|^|^|
|30 (0x26)|BGCOLOR(seashell):[[PWM Duty 4>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|31 (0x27)|^|^|^|^|
|32 (0x2A)|BGCOLOR(seashell):[[PWM Duty 5>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|33 (0x2B)|^|^|^|^|
|34&br;~&br;43|BGCOLOR(silver):(reserve)|R|-|uint8|
|44 (0x2C)|BGCOLOR(lightcyan):[[Capture 0>#v88310ce]]|R/W|0|uint16&br;0~65535|
|45 (0x2D)|^|^|^|^|
|46 (0x2E)|BGCOLOR(lightcyan):[[Capture 1>#v88310ce]]|R/W|0|uint16&br;0~65535|
|47 (0x2F)|^|^|^|^|
|48 (0x30)|BGCOLOR(lightcyan):[[Capture 2>#v88310ce]]|R/W|0|uint16&br;0~65535|
|49 (0x31)|^|^|^|^|
|50 (0x32)|BGCOLOR(lightcyan):[[Capture 3>#v88310ce]]|R/W|0|uint16&br;0~65535|
|51 (0x33)|^|^|^|^|
|52 (0x34)|BGCOLOR(lightcyan):[[OUT>#]]|R/W|0|uint16&br;0~4095|
|53 (0x35)|^|^|^|^|
|54 (0x36)|BGCOLOR(beige):[[IN>#]]|R|-|uint16&br;0~4095|
|55 (0x37)|^|^|^|^|
|56 (0x38)|BGCOLOR(beige):[[ADV 0>#a489271c]]|R|-|uint16&br;0~4095|
|57 (0x39)|^|^|^|^|
|58 (0x3A)|BGCOLOR(beige):[[ADV 1>#a489271c]]|R|-|uint16&br;0~4095|
|59 (0x3B)|^|^|^|^|
|60 (0x3C)|BGCOLOR(beige):[[ADV 2>#a489271c]]|R|-|uint16&br;0~4095|
|61 (0x3D)|^|^|^|^|
|62 (0x3E)|BGCOLOR(beige):[[ADV 3>#a489271c]]|R|-|uint16&br;0~4095|
|63 (0x3F)|^|^|^|^|
|64 (0x40)|BGCOLOR(beige):[[ADV 4>#a489271c]]|R|-|uint16&br;0~4095|
|65 (0x41)|^|^|^|^|
|66 (0x42)|BGCOLOR(beige):[[ADV 5>#a489271c]]|R|-|uint16&br;0~4095|
|67 (0x43)|^|^|^|^|
|68 (0x44)|BGCOLOR(beige):[[ADV 6>#a489271c]]|R|-|uint16&br;0~4095|
|69 (0x45)|^|^|^|^|
|70 (0x46)|BGCOLOR(beige):[[ADV 7>#a489271c]]|R|-|uint16&br;0~4095|
|71 (0x47)|^|^|^|^|
|72 (0x48)|BGCOLOR(beige):[[ADV 8>#a489271c]]|R|-|uint16&br;0~4095|
|73 (0x49)|^|^|^|^|
|74 (0x4A)|BGCOLOR(beige):[[ADV 9>#a489271c]]|R|-|uint16&br;0~4095|
|75 (0x4B)|^|^|^|^|
|76 (0x4C)|BGCOLOR(beige):[[ADV 10>#a489271c]]|R|-|uint16&br;0~4095|
|77 (0x4D)|^|^|^|^|
|78 (0x4E)|BGCOLOR(beige):[[ADV 11>#a489271c]]|R|-|uint16&br;0~4095|
|79 (0x4F)|^|^|^|^|
|80&br;~&br;97|BGCOLOR(silver):(reserve)|R|-|uint8|
|98 (0x4A)|BGCOLOR(lightcyan):[[DAV>#ab508291]]|R/W|-|uint16&br;0~1023|
|99 (0x4B)|^|^|^|^|
|100&br;~&br;103|BGCOLOR(silver):(reserve)|R|-|uint8|
|104 (0x68)|BGCOLOR(seashell):[[OPR MODE>#o849bda9]]|R/W (NVM)|12|uint8&br;0~12|
|105 (0x69)|BGCOLOR(seashell):[[Axis Placement>#ye7c4de5]]|R/W (NVM)|0|uint8&br;0~7|
|106 (0x6A)|BGCOLOR(beige):[[Accel X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|107 (0x6B)|^|^|^|^|
|108 (0x6C)|BGCOLOR(beige):[[Accel Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|109 (0x6D)|^|^|^|^|
|110 (0x6E)|BGCOLOR(beige):[[Accel Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|111 (0x6F)|^|^|^|^|
|112 (0x86)|BGCOLOR(beige):[[Magnet X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|113 (0x87)|^|^|^|^|
|114 (0x88)|BGCOLOR(beige):[[Magnet Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|115 (0x89)|^|^|^|^|
|116 (0x8A)|BGCOLOR(beige):[[Magnet Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|117 (0x8B)|^|^|^|^|
|118 (0x8C)|BGCOLOR(beige):[[Gyro X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|119 (0x8D)|^|^|^|^|
|120 (0x78)|BGCOLOR(beige):[[Gyro Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|121 (0x79)|^|^|^|^|
|122 (0x7A)|BGCOLOR(beige):[[Gyro Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|123 (0x7B)|^|^|^|^|
|124 (0x7C)|BGCOLOR(beige):[[Euler Heading>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|125 (0x7D)|^|^|^|^|
|126 (0x7E)|BGCOLOR(beige):[[Euler Roll>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|127 (0x7F)|^|^|^|^|
|128 (0x80)|BGCOLOR(beige):[[Euler Pitch>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|129 (0x81)|^|^|^|^|
|130 (0x82)|BGCOLOR(beige):[[Quaternion W>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|131 (0x83)|^|^|^|^|
|132 (0x84)|BGCOLOR(beige):[[Quaternion X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|133 (0x85)|^|^|^|^|
|134 (0x86)|BGCOLOR(beige):[[Quaternion Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|135 (0x87)|^|^|^|^|
|136 (0x88)|BGCOLOR(beige):[[Quaternion Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|137 (0x89)|^|^|^|^|
|138 (0x8A)|BGCOLOR(beige):[[Linear Acc X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|139 (0x8B)|^|^|^|^|
|140 (0x8C)|BGCOLOR(beige):[[Linear Acc Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|141 (0x8D)|^|^|^|^|
|142 (0x8E)|BGCOLOR(beige):[[Linear Acc Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|143 (0x8F)|^|^|^|^|
|144 (0x90)|BGCOLOR(beige):[[Gravity Vect X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|145 (0x91)|^|^|^|^|
|146 (0x92)|BGCOLOR(beige):[[Gravity Vect Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|147 (0x93)|^|^|^|^|
|148 (0x94)|BGCOLOR(beige):[[Gravity Vect Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|149 (0x95)|^|^|^|^|
|150 (0x96)|BGCOLOR(beige):[[Temperature>#zbc1f9e9]]|R|-|int8&br;-128~127|
|151 (0x97)|BGCOLOR(beige):[[SYS STAT>#r60ca94d]]|R|-|uint8|
|152 (0x98)|BGCOLOR(beige):[[SYS ERR>#p6818184]]|R|-|uint8|
|153 (0x99)|BGCOLOR(lightcyan):[[USER 0>#r5df91b6]]|R/W|0|uint8&br;0~255|
|154 (0x9A)|BGCOLOR(lightcyan):[[USER 1>#r5df91b6]]|R/W|0|uint8&br;0~255|
|155 (0x9B)|BGCOLOR(lightcyan):[[USER 2>#r5df91b6]]|R/W|0|uint8&br;0~255|
|156 (0x9C)|BGCOLOR(lightcyan):[[USER 3>#r5df91b6]]|R/W|0|uint8&br;0~255|
|157 (0x9D)|BGCOLOR(lightcyan):[[USER 4>#r5df91b6]]|R/W|0|uint8&br;0~255|
|158 (0x9E)|BGCOLOR(lightcyan):[[USER 5>#r5df91b6]]|R/W|0|uint8&br;0~255|
|159 (0x9F)|BGCOLOR(lightcyan):[[USER 6>#r5df91b6]]|R/W|0|uint8&br;0~255|
|160 (0xA0)|BGCOLOR(lightcyan):[[USER 7>#r5df91b6]]|R/W|0|uint8&br;0~255|
|161 (0xA1)|BGCOLOR(lightcyan):[[USER 8>#r5df91b6]]|R/W|0|uint8&br;0~255|
|162 (0xA2)|BGCOLOR(lightcyan):[[USER 9>#r5df91b6]]|R/W|0|uint8&br;0~255|
|163 (0xA3)|BGCOLOR(lightcyan):[[USER 10>#r5df91b6]]|R/W|0|uint8&br;0~255|
|164 (0xA4)|BGCOLOR(lightcyan):[[USER 11>#r5df91b6]]|R/W|0|0~uint8&br;255|
|165 (0xA5)|BGCOLOR(lightcyan):[[USER 12>#r5df91b6]]|R/W|0|uint8&br;0~255|
|166 (0xA6)|BGCOLOR(lightcyan):[[USER 13>#r5df91b6]]|R/W|0|uint8&br;0~255|
|167 (0xA7)|BGCOLOR(lightcyan):[[USER 14>#r5df91b6]]|R/W|0|uint8&br;0~255|
|168 (0xA8)|BGCOLOR(lightcyan):[[USER 15>#r5df91b6]]|R/W|0|uint8&br;0~255|
|169 (0xA9)|BGCOLOR(lightcyan):[[USER 16>#r5df91b6]]|R/W|0|uint8&br;0~255|
|170 (0xAA)|BGCOLOR(lightcyan):[[USER 17>#r5df91b6]]|R/W|0|uint8&br;0~255|
|171 (0xAB)|BGCOLOR(lightcyan):[[USER 18>#r5df91b6]]|R/W|0|uint8&br;0~255|
|172 (0xAC)|BGCOLOR(lightcyan):[[USER 19>#r5df91b6]]|R/W|0|uint8&br;0~255|

*****Model Number [#n4d55da8]
本製品のモデルナンバーです。ホストはこの値で製品の種類を判別します。

*****Version of Firmware [#s44e01a9]
搭載されたマイコンに書き込まれたファームウェアのバージョンです。

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

*****Baudrate [#y9835609]
デバイスの通信速度を決める分周値で、デフォルトは1(1M[bps])です。通信速度は次式で導かれます。~
 Baudrate[bps]=2000000 / (value + 1)
主なBaudrateは以下の通りです。
| Set value | Actual Baudrate[bps] | Specified Baudrate[bps] | Error[%] |h
| 0 | 2000000.0| 2000000| 0.000|
| 1 | 1000000.0| 1000000| 0.000|
| 3 | 500000.0| 500000| 0.000|
| 4 | 400000.0| 400000| 0.000|
| 7 | 250000.0| 250000| 0.000|
| 9 | 200000.0| 200000| 0.000|
| 16 | 117647.1| 115200| -2.124|
| 34 | 57142.9| 57600| 0.794|
| 103 | 19230.8| 19200| -0.160|
| 207 | 9615.4| 9600| -0.160|
※ホストとのボーレートの誤差は±2%以下が要求されます。

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

*****LED [#db0623c9]
1を書き込むとLED1が点灯します。
*****Terminator [#u0c32f9c]
RS-485 I/FのターミネーターをON/OFFします。~
RS-485 I/Fには何も接続せずにTTL I/Fのみを使用する場合は、RS-485 I/Fのハイインピーダンス状態を回避するために1を設定して下さい。

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

*****PWM Frequency [#x543dc01]
PWM出力時の周波数を設定します。~
 Frequency [Hz] = Value * 1

*****PWM Duty 0~5 [#mf48bbdc]
PWM出力時の各端子のデューティー比を設定します。~
 Duty [%] = Value * 100 [%] / 65535

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

※現時点で機能しません

*****OUT [#u126a95c]
GPIOにデジタル出力機能を割り当てた際に、レジスタの該当ビットに設定した値をGPIOから出力します。
| ''Bit'' | 15~12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ''GPIO'' | - | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |

*****IN [#b0d5c532]
GPIOにデジタル入力機能を割り当てた際に、GPIOに入力された信号がレジスタに反映されます。
| ''Bit'' | 15~12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ''GPIO'' | - | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |

*****ADV 0~11 [#a489271c]
GPIOにアナログ入力機能を割り当てた際に、GPIOに入力された電圧を12bitの分解能で計測します。

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

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

*****DAV [#ab508291]
GPIOにアナログ出力機能を割り当てた際に、GPIOから指定された10bitの分解能で電圧を出力します。
 Output [V] = 3.3[V] * Value / 1023

*****OPR MODE [#o849bda9]
BNO055の動作モードを設定します。~
使用しない場合は0を設定します。
|CENTER:|CENTER:|LEFT:|c
|=''Value''|=''Operation Mode''|=''Description''|h
|0|CONFIG|計測処理停止。|
|1|ACCONLY|加速度センサのみ。フュージョンモード無し。|
|2|MAGONLY|地磁気センサのみ。フュージョンモード無し。|
|3|GYRONLY|ジャイロセンサのみ。フュージョンモード無し。|
|4|ACCMAG|加速度+地磁気センサ。フュージョンモード無し。|
|5|ACCGYRO|加速度+ジャイロセンサ。フュージョンモード無し。|
|6|MAGGYRO|地磁気+ジャイロセンサ。フュージョンモード無し。|
|7|AMG|加速度+地磁気+ジャイロセンサ。フュージョンモード無し。|
|8|IMUPLUS|センサの相対的な向きを加速度+ジャイロセンサから算出。高速データレート。フュージョンモード有り。|
|9|COMPASS|方位を地磁気と加速度センサより算出。フュージョンモード有り。|
|10|M4G|ジャイロセンサの代わりに地磁気センサを使用。フュージョンモード有り。|
|11|NDOF_FMC_OFF|高速地磁気センサキャリブレーションがOFF以外はNDOFと同様。フュージョンモード有り。|
|12|NDOF|9軸を使い絶対方位を算出。フュージョンモード有り。|

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

|CENTER:|CENTER:|c
|=''Value''|=''Placement''|h
|0|#ref(E097B_IMU_AxisPlaceP0.png)|
|1|#ref(E097B_IMU_AxisPlaceP1.png)|
|2|#ref(E097B_IMU_AxisPlaceP2.png)|
|3|#ref(E097B_IMU_AxisPlaceP3.png)|
|4|#ref(E097B_IMU_AxisPlaceP4.png)|
|5|#ref(E097B_IMU_AxisPlaceP5.png)|
|6|#ref(E097B_IMU_AxisPlaceP6.png)|
|7|#ref(E097B_IMU_AxisPlaceP7.png)|
ここで選択できるのは基板の表裏をZ軸方向に合わせた場合の8パターンのみですが、それらを除いた残りの16パターンを希望する場合はソースを適宜変更する必要があります。

*****Accel,Magnet,Gyro,Euler,Quaternion,Linear Accel,Gravity Vect,Temperature [#zbc1f9e9]
BNO055から得られる測定値及び計算値ですが、[[OPR MODE>#o849bda9]]によって得られなくなるアイテムがあります。
 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

*****SYS STAT [#r60ca94d]
BNO055のSystem Status Codeです。

*****SYS ERR [#p6818184]
BNO055のSystem Error Codeです。

*****USER 0~19 [#r5df91b6]
任意の自作タスクとコントロールテーブル間のI/Fです。使い道は自由です。

****Dynamixel Protocol V2コントロールテーブル [#d9945160]
複数バイトにまたがるアイテムはリトルエンディアンでストアされます。
| DXL V2版 |<|<|<|<|h
|=''Address''|=''Item''|=''Access''|=''Default Value''|=''Type/Range''|h
|CENTER:|LEFT:|CENTER:|CENTER:|CENTER:|c
|0 (0x0)|BGCOLOR(beige):[[Model Number>#n4d55da8]]|R|0x4023|uint16|
|1 (0x1)|~|~|~|~|
|2 (0x2)|BGCOLOR(beige):Model Information|R|0|uint32|
|3 (0x3)|~|~|~|~|
|4 (0x4)|~|~|~|~|
|5 (0x5)|~|~|~|~|
|6 (0x6)|BGCOLOR(beige):[[Version of Firmware>#s44e01a9]]|R|0x41|uint8|
|7 (0x7)|BGCOLOR(seashell):[[ID>#cf9c14f9]]|R/W (NVM)|200|uint8&br;0~253|
|8 (0x8)|BGCOLOR(seashell):[[Baudrate>#lfd52625]]|R/W (NVM)|3|uint8&br;0~4,6|
|9 (0x9)|BGCOLOR(lightcyan):[[WriteNVM>#iee6d02c]]|R/W|0|uint8&br;0~1|
|10 (0xA)|BGCOLOR(lightcyan):[[LED>#db0623c9]]|R/W|0|uint8&br;0~1|
|11 (0xB)|BGCOLOR(seashell):[[Terminator>#u0c32f9c]]|R/W (NVM)|1|uint8&br;0~1|
|12 (0xC)|BGCOLOR(seashell):[[Pin Config 0>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|13 (0xD)|BGCOLOR(seashell):[[Pin Config 1>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|14 (0xE)|BGCOLOR(seashell):[[Pin Config 2>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|15 (0xF)|BGCOLOR(seashell):[[Pin Config 3>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|16 (0x10)|BGCOLOR(seashell):[[Pin Config 4>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|17 (0x11)|BGCOLOR(seashell):[[Pin Config 5>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|18 (0x12)|BGCOLOR(seashell):[[Pin Config 6>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|19 (0x13)|BGCOLOR(seashell):[[Pin Config 7>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|20 (0x14)|BGCOLOR(seashell):[[Pin Config 8>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|21 (0x15)|BGCOLOR(seashell):[[Pin Config 9>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|22 (0x16)|BGCOLOR(seashell):[[Pin Config 10>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|23 (0x17)|BGCOLOR(seashell):[[Pin Config 11>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|24 (0x18)|BGCOLOR(seashell):[[PWM Frequency>#x543dc01]]|R/W (NVM)|0|uint16&br;0~50000|
|25 (0x19)|^|^|^|^|
|26 (0x1A)|BGCOLOR(seashell):[[PWM Duty 0>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|27 (0x1B)|^|^|^|^|
|28 (0x1C)|BGCOLOR(seashell):[[PWM Duty 1>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|29 (0x1D)|^|^|^|^|
|30 (0x1E)|BGCOLOR(seashell):[[PWM Duty 2>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|31 (0x1F)|^|^|^|^|
|32 (0x20)|BGCOLOR(seashell):[[PWM Duty 3>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|33 (0x21)|^|^|^|^|
|34 (0x22)|BGCOLOR(seashell):[[PWM Duty 4>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|35 (0x23)|^|^|^|^|
|36 (0x24)|BGCOLOR(seashell):[[PWM Duty 5>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|37 (0x25)|^|^|^|^|
|38&br;~&br;47|BGCOLOR(silver):(reserve)|R|-|uint8|
|48 (0x30)|BGCOLOR(lightcyan):[[Capture 0>#v88310ce]]|R/W|0|uint16&br;0~65535|
|49 (0x31)|^|^|^|^|
|50 (0x32)|BGCOLOR(lightcyan):[[Capture 1>#v88310ce]]|R/W|0|uint16&br;0~65535|
|51 (0x33)|^|^|^|^|
|52 (0x34)|BGCOLOR(lightcyan):[[Capture 2>#v88310ce]]|R/W|0|uint16&br;0~65535|
|53 (0x35)|^|^|^|^|
|54 (0x36)|BGCOLOR(lightcyan):[[Capture 3>#v88310ce]]|R/W|0|uint16&br;0~65535|
|55 (0x37)|^|^|^|^|
|56 (0x38)|BGCOLOR(lightcyan):[[OUT>#]]|R/W|0|uint16&br;0~4095|
|57 (0x39)|^|^|^|^|
|58 (0x3A)|BGCOLOR(beige):[[IN>#]]|R|-|uint16&br;0~4095|
|59 (0x3B)|^|^|^|^|
|60 (0x3C)|BGCOLOR(beige):[[ADV 0>#a489271c]]|R|-|uint16&br;0~4095|
|61 (0x3D)|^|^|^|^|
|62 (0x3E)|BGCOLOR(beige):[[ADV 1>#a489271c]]|R|-|uint16&br;0~4095|
|63 (0x3F)|^|^|^|^|
|64 (0x40)|BGCOLOR(beige):[[ADV 2>#a489271c]]|R|-|uint16&br;0~4095|
|65 (0x41)|^|^|^|^|
|66 (0x42)|BGCOLOR(beige):[[ADV 3>#a489271c]]|R|-|uint16&br;0~4095|
|67 (0x43)|^|^|^|^|
|68 (0x44)|BGCOLOR(beige):[[ADV 4>#a489271c]]|R|-|uint16&br;0~4095|
|69 (0x45)|^|^|^|^|
|70 (0x46)|BGCOLOR(beige):[[ADV 5>#a489271c]]|R|-|uint16&br;0~4095|
|71 (0x47)|^|^|^|^|
|72 (0x48)|BGCOLOR(beige):[[ADV 6>#a489271c]]|R|-|uint16&br;0~4095|
|73 (0x49)|^|^|^|^|
|74 (0x4A)|BGCOLOR(beige):[[ADV 7>#a489271c]]|R|-|uint16&br;0~4095|
|75 (0x4B)|^|^|^|^|
|76 (0x4C)|BGCOLOR(beige):[[ADV 8>#a489271c]]|R|-|uint16&br;0~4095|
|77 (0x4D)|^|^|^|^|
|78 (0x4E)|BGCOLOR(beige):[[ADV 9>#a489271c]]|R|-|uint16&br;0~4095|
|79 (0x4F)|^|^|^|^|
|80 (0x50)|BGCOLOR(beige):[[ADV 10>#a489271c]]|R|-|uint16&br;0~4095|
|81 (0x51)|^|^|^|^|
|82 (0x52)|BGCOLOR(beige):[[ADV 11>#a489271c]]|R|-|uint16&br;0~4095|
|83 (0x53)|^|^|^|^|
|84&br;~&br;101|BGCOLOR(silver):(reserve)|R|-|uint8|
|102 (0x66)|BGCOLOR(lightcyan):[[DAV>#ab508291]]|R/W|-|uint16&br;0~1023|
|103 (0x66)|^|^|^|^|
|104&br;~&br;107|BGCOLOR(silver):(reserve)|R|-|uint8|
|108 (0x6C)|BGCOLOR(seashell):[[OPR MODE>#o849bda9]]|R/W (NVM)|12|uint8&br;0~12|
|109 (0x6D)|BGCOLOR(seashell):[[Axis Placement>#ye7c4de5]]|R/W (NVM)|0|uint8&br;0~7|
|110 (0x6E)|BGCOLOR(beige):[[Accel X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|111 (0x6F)|^|^|^|^|
|112 (0x70)|BGCOLOR(beige):[[Accel Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|113 (0x71)|^|^|^|^|
|114 (0x72)|BGCOLOR(beige):[[Accel Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|115 (0x73)|^|^|^|^|
|116 (0x74)|BGCOLOR(beige):[[Magnet X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|117 (0x75)|^|^|^|^|
|118 (0x76)|BGCOLOR(beige):[[Magnet Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|119 (0x77)|^|^|^|^|
|120 (0x78)|BGCOLOR(beige):[[Magnet Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|121 (0x79)|^|^|^|^|
|122 (0x7A)|BGCOLOR(beige):[[Gyro X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|123 (0x7B)|^|^|^|^|
|124 (0x7C)|BGCOLOR(beige):[[Gyro Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|125 (0x7D)|^|^|^|^|
|126 (0x7E)|BGCOLOR(beige):[[Gyro Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|127 (0x7F)|^|^|^|^|
|128 (0x80)|BGCOLOR(beige):[[Euler Heading>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|129 (0x81)|^|^|^|^|
|130 (0x82)|BGCOLOR(beige):[[Euler Roll>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|131 (0x83)|^|^|^|^|
|132 (0x84)|BGCOLOR(beige):[[Euler Pitch>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|133 (0x85)|^|^|^|^|
|134 (0x86)|BGCOLOR(beige):[[Quaternion W>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|135 (0x87)|^|^|^|^|
|136 (0x88)|BGCOLOR(beige):[[Quaternion X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|137 (0x89)|^|^|^|^|
|138 (0x8A)|BGCOLOR(beige):[[Quaternion Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|139 (0x8B)|^|^|^|^|
|140 (0x8C)|BGCOLOR(beige):[[Quaternion Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|141 (0x8D)|^|^|^|^|
|142 (0x8E)|BGCOLOR(beige):[[Linear Acc X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|143 (0x8F)|^|^|^|^|
|144 (0x90)|BGCOLOR(beige):[[Linear Acc Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|145 (0x91)|^|^|^|^|
|146 (0x92)|BGCOLOR(beige):[[Linear Acc Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|147 (0x93)|^|^|^|^|
|148 (0x94)|BGCOLOR(beige):[[Gravity Vect X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|149 (0x95)|^|^|^|^|
|150 (0x96)|BGCOLOR(beige):[[Gravity Vect Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|151 (0x97)|^|^|^|^|
|152 (0x98)|BGCOLOR(beige):[[Gravity Vect Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|153 (0x99)|^|^|^|^|
|154 (0x9A)|BGCOLOR(beige):[[Temperature>#zbc1f9e9]]|R|-|int8&br;-128~127|
|155 (0x9B)|BGCOLOR(beige):[[SYS STAT>#r60ca94d]]|R|-|uint8|
|156 (0x9C)|BGCOLOR(beige):[[SYS ERR>#p6818184]]|R|-|uint8|
|157 (0x9D)|BGCOLOR(lightcyan):[[USER 0>#r5df91b6]]|R/W|0|uint8&br;0~255|
|158 (0x9E)|BGCOLOR(lightcyan):[[USER 1>#r5df91b6]]|R/W|0|uint8&br;0~255|
|159 (0x9F)|BGCOLOR(lightcyan):[[USER 2>#r5df91b6]]|R/W|0|uint8&br;0~255|
|160 (0xA0)|BGCOLOR(lightcyan):[[USER 3>#r5df91b6]]|R/W|0|uint8&br;0~255|
|161 (0xA1)|BGCOLOR(lightcyan):[[USER 4>#r5df91b6]]|R/W|0|uint8&br;0~255|
|162 (0xA2)|BGCOLOR(lightcyan):[[USER 5>#r5df91b6]]|R/W|0|uint8&br;0~255|
|163 (0xA3)|BGCOLOR(lightcyan):[[USER 6>#r5df91b6]]|R/W|0|uint8&br;0~255|
|164 (0xA4)|BGCOLOR(lightcyan):[[USER 7>#r5df91b6]]|R/W|0|uint8&br;0~255|
|165 (0xA5)|BGCOLOR(lightcyan):[[USER 8>#r5df91b6]]|R/W|0|uint8&br;0~255|
|166 (0xA6)|BGCOLOR(lightcyan):[[USER 9>#r5df91b6]]|R/W|0|uint8&br;0~255|
|167 (0xA7)|BGCOLOR(lightcyan):[[USER 10>#r5df91b6]]|R/W|0|uint8&br;0~255|
|168 (0xA8)|BGCOLOR(lightcyan):[[USER 11>#r5df91b6]]|R/W|0|0~uint8&br;255|
|169 (0xA9)|BGCOLOR(lightcyan):[[USER 12>#r5df91b6]]|R/W|0|uint8&br;0~255|
|170 (0xAA)|BGCOLOR(lightcyan):[[USER 13>#r5df91b6]]|R/W|0|uint8&br;0~255|
|171 (0xAB)|BGCOLOR(lightcyan):[[USER 14>#r5df91b6]]|R/W|0|uint8&br;0~255|
|172 (0xAC)|BGCOLOR(lightcyan):[[USER 15>#r5df91b6]]|R/W|0|uint8&br;0~255|
|173 (0xAD)|BGCOLOR(lightcyan):[[USER 16>#r5df91b6]]|R/W|0|uint8&br;0~255|
|174 (0xAE)|BGCOLOR(lightcyan):[[USER 17>#r5df91b6]]|R/W|0|uint8&br;0~255|
|175 (0xAF)|BGCOLOR(lightcyan):[[USER 18>#r5df91b6]]|R/W|0|uint8&br;0~255|
|176 (0xB0)|BGCOLOR(lightcyan):[[USER 19>#r5df91b6]]|R/W|0|uint8&br;0~255|

*****Baudrate [#lfd52625]
デバイスの通信速度で、デフォルトは1(1M[bps])です。~
設定可能なBaudrateは以下の通りです。
| Set value | Baudrate[bps] |h
| 0 | 9600|
| 1 | 57600|
| 2 | 115200|
| 3 | 1000000|
| 4 | 2000000|
| 6 | 4000000|
※ホストとのボーレートの誤差は±2%以下が要求されます。

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

****ICS/B3Mクライアントコントロールテーブル [#k3a0b7d8]
複数バイトにまたがるアイテムはリトルエンディアンでストアされます。
| ICS/B3M版 |<|<|<|<|h
|=''Address''|=''Item''|=''Access''|=''Default Value''|=''Type/Range''|h
|CENTER:|LEFT:|CENTER:|CENTER:|CENTER:|c
|0 (0x0)|BGCOLOR(beige):[[Model Number>#n4d55da8]]|R|0x4023|uint16|
|1 (0x1)|~|~|~|~|
|2 (0x2)|BGCOLOR(beige):[[Version of Firmware>#s44e01a9]]|R|0x41|uint8|
|3 (0x3)|BGCOLOR(seashell):[[ID>#gb3a1709]]|R/W (NVM)|-|uint8|
|4 (0x4)|BGCOLOR(seashell):[[Baudrate>#ld29b24a]]|R/W (NVM)|-|uint8|
|5 (0x5)|BGCOLOR(lightcyan):[[WriteNVM>#iee6d02c]]|R/W|0|uint8&br;0~1|
|6 (0x6)|BGCOLOR(lightcyan):[[LED>#db0623c9]]|R/W|0|uint8&br;0~1|
|7 (0x7)|BGCOLOR(seashell):[[Terminator>#u0c32f9c]]|R/W (NVM)|1|uint8&br;0~1|
|8 (0x8)|BGCOLOR(seashell):[[Pin Config 0>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|9 (0x9)|BGCOLOR(seashell):[[Pin Config 1>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|10 (0xA)|BGCOLOR(seashell):[[Pin Config 2>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|11 (0xB)|BGCOLOR(seashell):[[Pin Config 3>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|12 (0xC)|BGCOLOR(seashell):[[Pin Config 4>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|13 (0xD)|BGCOLOR(seashell):[[Pin Config 5>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|14 (0xE)|BGCOLOR(seashell):[[Pin Config 6>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|15 (0xF)|BGCOLOR(seashell):[[Pin Config 7>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|16 (0x10)|BGCOLOR(seashell):[[Pin Config 8>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|17 (0x11)|BGCOLOR(seashell):[[Pin Config 9>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|18 (0x12)|BGCOLOR(seashell):[[Pin Config 10>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|19 (0x13)|BGCOLOR(seashell):[[Pin Config 11>#xbae87b5]]|R/W (NVM)|0|uint8&br;0~20|
|20 (0x14)|BGCOLOR(seashell):[[PWM Frequency>#x543dc01]]|R/W (NVM)|0|uint16&br;0~50000|
|21 (0x15)|^|^|^|^|
|22 (0x16)|BGCOLOR(seashell):[[PWM Duty 0>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|23 (0x17)|^|^|^|^|
|24 (0x18)|BGCOLOR(seashell):[[PWM Duty 1>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|25 (0x19)|^|^|^|^|
|26 (0x1A)|BGCOLOR(seashell):[[PWM Duty 2>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|27 (0x1B)|^|^|^|^|
|28 (0x1C)|BGCOLOR(seashell):[[PWM Duty 3>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|29 (0x1D)|^|^|^|^|
|30 (0x1E)|BGCOLOR(seashell):[[PWM Duty 4>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|31 (0x1F)|^|^|^|^|
|32 (0x20)|BGCOLOR(seashell):[[PWM Duty 5>#mf48bbdc]]|R/W (NVM)|0|uint16&br;0~65535|
|33 (0x21)|^|^|^|^|
|34 (0x22)|BGCOLOR(lightcyan):[[Capture 0>#v88310ce]]|R/W|0|uint16&br;0~65535|
|35 (0x23)|^|^|^|^|
|36 (0x24)|BGCOLOR(lightcyan):[[Capture 1>#v88310ce]]|R/W|0|uint16&br;0~65535|
|37 (0x25)|^|^|^|^|
|38 (0x26)|BGCOLOR(lightcyan):[[Capture 2>#v88310ce]]|R/W|0|uint16&br;0~65535|
|39 (0x27)|^|^|^|^|
|40 (0x28)|BGCOLOR(lightcyan):[[Capture 3>#v88310ce]]|R/W|0|uint16&br;0~65535|
|41 (0x29)|^|^|^|^|
|42 (0x2A)|BGCOLOR(lightcyan):[[OUT>#]]|R/W|0|uint16&br;0~4095|
|43 (0x2B)|^|^|^|^|
|44 (0x2C)|BGCOLOR(beige):[[IN>#]]|R|-|uint16&br;0~4095|
|45 (0x2D)|^|^|^|^|
|46 (0x2E)|BGCOLOR(beige):[[ADV 0>#a489271c]]|R|-|uint16&br;0~4095|
|47 (0x2F)|^|^|^|^|
|48 (0x30)|BGCOLOR(beige):[[ADV 1>#a489271c]]|R|-|uint16&br;0~4095|
|49 (0x31)|^|^|^|^|
|50 (0x32)|BGCOLOR(beige):[[ADV 2>#a489271c]]|R|-|uint16&br;0~4095|
|51 (0x33)|^|^|^|^|
|52 (0x34)|BGCOLOR(beige):[[ADV 3>#a489271c]]|R|-|uint16&br;0~4095|
|53 (0x35)|^|^|^|^|
|54 (0x36)|BGCOLOR(beige):[[ADV 4>#a489271c]]|R|-|uint16&br;0~4095|
|55 (0x37)|^|^|^|^|
|56 (0x38)|BGCOLOR(beige):[[ADV 5>#a489271c]]|R|-|uint16&br;0~4095|
|57 (0x39)|^|^|^|^|
|58 (0x3A)|BGCOLOR(beige):[[ADV 6>#a489271c]]|R|-|uint16&br;0~4095|
|59 (0x3B)|^|^|^|^|
|60 (0x3C)|BGCOLOR(beige):[[ADV 7>#a489271c]]|R|-|uint16&br;0~4095|
|61 (0x3D)|^|^|^|^|
|62 (0x3E)|BGCOLOR(beige):[[ADV 8>#a489271c]]|R|-|uint16&br;0~4095|
|63 (0x3F)|^|^|^|^|
|64 (0x40)|BGCOLOR(beige):[[ADV 9>#a489271c]]|R|-|uint16&br;0~4095|
|65 (0x41)|^|^|^|^|
|66 (0x42)|BGCOLOR(beige):[[ADV 10>#a489271c]]|R|-|uint16&br;0~4095|
|67 (0x43)|^|^|^|^|
|68 (0x44)|BGCOLOR(beige):[[ADV 11>#a489271c]]|R|-|uint16&br;0~4095|
|69 (0x45)|^|^|^|^|
|70 (0x46)|BGCOLOR(lightcyan):[[DAV>#ab508291]]|R/W|-|uint16&br;0~1023|
|71 (0x47)|^|^|^|^|
|72 (0x48)|BGCOLOR(seashell):[[OPR MODE>#o849bda9]]|R/W (NVM)|12|uint8&br;0~12|
|73 (0x49)|BGCOLOR(seashell):[[Axis Placement>#ye7c4de5]]|R/W (NVM)|0|uint8&br;0~7|
|74 (0x4A)|BGCOLOR(beige):[[Accel X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|75 (0x4B)|^|^|^|^|
|76 (0x4C)|BGCOLOR(beige):[[Accel Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|77 (0x4D)|^|^|^|^|
|78 (0x4E)|BGCOLOR(beige):[[Accel Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|79 (0x4F)|^|^|^|^|
|80 (0x50)|BGCOLOR(beige):[[Magnet X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|81 (0x51)|^|^|^|^|
|82 (0x52)|BGCOLOR(beige):[[Magnet Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|83 (0x53)|^|^|^|^|
|84 (0x54)|BGCOLOR(beige):[[Magnet Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|85 (0x55)|^|^|^|^|
|86 (0x56)|BGCOLOR(beige):[[Gyro X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|87 (0x57)|^|^|^|^|
|88 (0x58)|BGCOLOR(beige):[[Gyro Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|89 (0x59)|^|^|^|^|
|90 (0x5A)|BGCOLOR(beige):[[Gyro Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|91 (0x5B)|^|^|^|^|
|92 (0x5C)|BGCOLOR(beige):[[Euler Heading>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|93 (0x5D)|^|^|^|^|
|94 (0x5E)|BGCOLOR(beige):[[Euler Roll>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|95 (0x5F)|^|^|^|^|
|96 (0x60)|BGCOLOR(beige):[[Euler Pitch>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|97 (0x61)|^|^|^|^|
|98 (0x62)|BGCOLOR(beige):[[Quaternion W>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|99 (0x63)|^|^|^|^|
|100 (0x64)|BGCOLOR(beige):[[Quaternion X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|101 (0x65)|^|^|^|^|
|102 (0x66)|BGCOLOR(beige):[[Quaternion Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|103 (0x67)|^|^|^|^|
|104 (0x68)|BGCOLOR(beige):[[Quaternion Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|105 (0x69)|^|^|^|^|
|106 (0x6A)|BGCOLOR(beige):[[Linear Acc X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|107 (0x6B)|^|^|^|^|
|108 (0x6C)|BGCOLOR(beige):[[Linear Acc Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|109 (0x6D)|^|^|^|^|
|110 (0x6E)|BGCOLOR(beige):[[Linear Acc Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|111 (0x6F)|^|^|^|^|
|112 (0x70)|BGCOLOR(beige):[[Gravity Vect X>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|113 (0x71)|^|^|^|^|
|114 (0x72)|BGCOLOR(beige):[[Gravity Vect Y>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|115 (0x73)|^|^|^|^|
|116 (0x74)|BGCOLOR(beige):[[Gravity Vect Z>#zbc1f9e9]]|R|-|int16&br;-32768~32768|
|117 (0x75)|^|^|^|^|
|118 (0x76)|BGCOLOR(beige):[[Temperature>#zbc1f9e9]]|R|-|int8&br;-128~127|
|119 (0x77)|BGCOLOR(beige):[[SYS STAT>#r60ca94d]]|R|-|uint8|
|120 (0x78)|BGCOLOR(beige):[[SYS ERR>#p6818184]]|R|-|uint8|

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

*****Baudrate [#ld29b24a]
デバイスの通信速度です。

ICSの場合の設定可能なBaudrateは以下の通りです。
| ICS版 |<|h
| Set value | Baudrate[bps] |h
| 0 | 115200|
| 1 | 625000|
| 2 | 1250000|
B3Mの場合はデバイスの通信速度を決める分周値を指定し、デフォルトは1(1M[bps])です。通信速度は次式で導かれます。~
 Baudrate[bps]=2000000 / (Set value + 1)
主なBaudrateは以下の通りです。
| B3M版 |<|<|<|h
| Set value | Actual Baudrate[bps] | Specified Baudrate[bps] | Error[%] |h
| 0 | 2000000.0| 2000000| 0.000|
| 1 | 1000000.0| 1000000| 0.000|
| 3 | 500000.0| 500000| 0.000|
| 4 | 400000.0| 400000| 0.000|
| 7 | 250000.0| 250000| 0.000|
| 9 | 200000.0| 200000| 0.000|
| 16 | 117647.1| 115200| -2.124|
| 34 | 57142.9| 57600| 0.794|
| 103 | 19230.8| 19200| -0.160|
| 207 | 9615.4| 9600| -0.160|
※ホストとのボーレートの誤差は±2%以下が要求されます。


« Prev[4]  Next »[5]