Ver.1.2.0
はじめに
いつも近藤科学製品をご利用いただきましてありがとうございます。このマニュアルはPMXシリーズのデバイスと通信を行うためのリファレンスマニュアルです。内容についての著作権など法的な権利は、近藤科学株式会社にあります。
独自のプログラムでデバイスを制御する場合は、本資料をもとに正しい手順で制御してください。独自に作成したプログラム、及びご使用になった結果について、当社は責任は負いません。
各種設定値の変更により、サーボの振動や動作精度が落ちる場合があります。設定値のすべての範囲において動作を保証するものではありません。
誤字脱字などについては弊社窓口までお申し出ください。内容についてのご質問、及びプログラミングについてのご質問については、お答え出来ない場合がございますのであらかじめご了承ください。
なお本マニュアルの内容、各種名称については予告なく変更される場合があります。
ご利用になる前に、このマニュアルをよくお読みになり注意事項に記載する内容を含め、ご同意いただいてからご採用ください。
【はじめにお読みください】
●ご利用の前に当オンラインマニュアルをよくお読みになってください。
●電源の電圧はサーボの対応電圧の範囲内でご利用ください。またサーボのスペックに対して余裕のある容量をご用意ください。容量の低い電源では正常に動作しません。また、乾電池を使用することはできません。
●本製品はホビー、研究用途に開発、製造された製品です。長期間、精度に変わりなく繰り返し動作を保証することはできません。また、搭載したことによるトラブルに対して弊社は責任を負いかねます。
●本製品を使用する場合は、周囲の状況やロボットの状態をよく確認し、安全に十分ご注意ください。高トルクのサーボを誤って使用した場合は、使用者または他の人が重傷を負う危険性があります。お客様が本製品を使用された結果につきまして、弊社は責任を負いかねます。
●各パラメータを変更すると、サーボの特性変化により振動したり、適正な位置て停止できなくなる場合があります。パラメータの変更は自己責任で行ってください。
●モータ、ギヤ、その他加工品、及び電子部品などにより、サーボに個体差が発生する場合があります。
●当サーボは、防水、防塵構造になっていません。本体へ水やほこりが侵入すると故障の原因になります。また、電源がショートし事故の原因になる可能性がありますのでご注意ください。
●ロボットに組み込んだ際、サーボがスムーズに動くことをご確認ください。ブラケットのガタやたわみ、ビスの貫通等により、動きが重いと負担がかかり、消費電力が増えてサーボの寿命が短くなります。
●サーボをロックした状態で放置すると故障の原因になります。また、ロックをしていなくても電源を入れたまま放置することで火災の原因になる可能性があります。使用しないときはサーボの電源を切ってください。
●サーボを分解、改造しないでください。改造した場合は故障の原因になる可能性があります。また分解、改造した製品は修理サポートの対象外になる場合があります。
●制御方法をよくご検討の上でご使用ください。無理なコントロール環境下で動作させますと十分な性能を発揮できず、サーボの寿命が極端に短くなることがあります。使用方法に疑問がありましたら、まず当オンラインマニュアル、及び弊社ウェブサイトにて該当情報などがないかお調べのうえ、はっきりしない場合には、弊社サービス部までお問い合わせください。ただし、コントロール側でのプログラミングそのものの内容などについてはお答えできません。あらかじめご了承ください。
●初期不良に関しては、初回のご利用時に弊社製品(RS-485 USBアダプターHS)にて、無負荷で動作するかが判断基準となっております。組込んだ状態では、機器により過度な負荷がかかる可能性がありますので初期不良の判定対象にはなりません。
1.PMXサーボについて
PMXシリーズとは
PMXシリーズは、多彩な機能を備えたサーボモータのラインアップです。パケット通信によるコマンド指示により、角度による位置制御のみならず、速度、電流(トルク)の指示データによる制御方法を備えています。また、現在の角度や温度、電流値など多彩なフィードバックを得ることができます。
KONDOブランドでこれまで開発、販売してきたKRSサーボシリーズ、B3Mサーボシリーズの高トルク、高精度、高剛性はPMXサーボにも引き継がれています。
PMXシリーズはすべて同じプロトコルを採用していますので、シリーズ中のサーボを混在しても同じプログラムを使用し、同一の通信ライン上で制御することが可能です。※1
サーボについての詳細は、近藤科学ウェブサイトの商品ページをご参照ください。
※1 サーボの対応電圧が異なる場合は、対応電圧ごとにラインを分けてご利用ください。対応電圧以上を給電しないようにご注意ください。
対応機種
・PMX-SCR-9204HV(No.03219, 03220)
・PMX-SCR-9203HV(No.03217, 03218)
・PMX-SCR-5204HV(No.03223, 03224)
・PMX-SCR-5203HV(No.03221, 03222)
対応バージョン
このマニュアルは、ファームウェアバージョンが1.1.0.0のサーボに対応しています。Ver.1.0.1.0からの変更点は下記の通りです。
・制御モードで速度制御との組み合わせができるようになりました。
・PIDゲインプリセットを3種類に増やしました。
・何かしらのエラーが発生した時に、命令を実行しなかった場合は「実行エラー」が返ってくるようになりました。
・LED点灯モードを実装しました。通常の点灯モードと消灯モードを選択することができます。
・一部の初期値が変更になりました。
・その他、軽微なバグを修正しました。
Ver.1.0.1.0をご利用の場合はこちらのマニュアル(後でリンク)をご参照ください。
Ver.1.0.0.6をご利用の場合はこちらのマニュアルをご参照ください。
ファームウェアバージョンは、「PMX Servo Manager software」で確認することができます。
多彩な制御モード
サーボは組み込むメカやご利用方法より用途が異なりますが、PMXサーボは制御モードを位置制御、速度制御、電流制御、トルク制御に切り替えることで幅広いニーズに対応することができます。
・位置制御モード
角度(ポジション)を指定し、目標の角度に向けて軸が移動する制御方法です。一般的なサーボモータの制御モードです。片側最大320°の範囲で指定することができます。
・速度制御モード
軸の回転速度を指定して動作するモードです。位置制御モードと組み合わせていない場合は無限回転しますので、車輪やプーリーの動力として使用できます。
・電流制御、トルク制御モード
指定した電流値、または推定トルク値に合わせて一定の出力で動作するモードです。位置制御モードと組み合わせていない場合は、サーボの軸が無限回転します。
トルク制御は電流値から推定トルクを算出して指令値としています。内部にトルクを検出するセンサは搭載していません。そのため、搭載しているモータや機構部品の個体差により出力するトルクと指令値に差が発生する場合があります。動作は電流制御と同一です。
・PWMモード
モータの出力を指定して動作するモードです。デューティー比-100.00%(CCW)~+100.00%(CW)の範囲で指定することができます。
制御の組み合わせに対応
上記の制御モードを組み合わせて使用することができますので、組み込み個所や動作に合わせて多彩なモードから最適な制御方法を選択することができます。
組み合わせ例
・位置制御+トルク制御:指定されたトルク値を超えないように出力を制御しつつ、指定した目標角度まで移動します。トルク制御と組み合わせていない場合は、最大トルクで動作します。
・位置制御+移動時間:指定した角度まで、指定した時間で到着するように動作します。「移動時間」を組み合わせることで補間制御による位置制御になります。また、補間制御の種類を選択することにより加減速のパターンを変更することが可能です。
ファームウェアバージョンが1.1.0.0より速度制御との組み合わせに対応しました。
【ご注意ください】
※トルク制御は電流値から推定トルクを算出して指令値としています。内部にトルクを検出するセンサは搭載していません。そのため、搭載しているモータや機構部品の個体差により出力するトルクと指令値に差が発生する場合があります。
※位置制御+電流(トルク)制御+補間制御の組み合わせは、無負荷で動作させた場合に出力軸ががたつく場合があります。これは、補間制御がモータを断続的に制御している結果であり、誤動作ではありません。ロボットに組み込んだ状態など、出力軸に適切な負荷がかかった状態でご利用いただきますと解消されますのでお試しください。
※過剰に負荷をかけ続けますとサーボの故障を早める原因になります。適切な負荷でご利用ください。
※弊社ウェブサイトで掲載しているトルクは、瞬間最大トルクです。 瞬間最大トルクは、瞬間的に発せられる最大のトルクであり、常に最大トルクを出力し続けるものではありません。サーボを選定される場合は、余裕を持ったスペックのサーボをご利用き、試作の際に実機にて性能をお確かめください。
PMXサーボの制御にはMotorWRITEコマンドが便利です。詳しくはMotorWRITEの解説をご参照ください。
端子構成
PMXシリーズは、6ピンのコネクタを採用しています。端子構成は以下の通りです。
※ハウジングに刻印されている端子番号順にNo.が割り当てられています。ケーブル自作の際の目印にしてください。
No.6:V+ | No.4:D- | No.2:V+ |
No.5:GND | No.3:D+ | No.1:GND |
【コネクタ型番】
・サーボ側:DF1BZ-6DP-2.5DSA(ヒロセ)
・ケーブル側:ハウジング DF1B-6DS-2.5RC(ヒロセ)
コンタクトピン DF1B-2428SCF(ヒロセ)
サーボには、コネクタが二つ実装されています。二つのコネクタは基板上でつながっていますので、どちらにつないでも動作は変わりません。
PMXの特徴として、電源のV+とGNDを2ピンずつ割り当てています。これにより、2倍(理論値)の電流を流すことができますので、従来のサーボより安定した動作が可能です。
機構部品
機種により使用している部品が異なります。詳しくは各サーボの商品ページをご参照ください。
【ご注意ください】
※サーボに搭載しているモータや機構部品の個体差により、性能や動作に差がある場合がございます。
※サーボ内部のギヤ同士の接触により動作音が発生します。またバックラッシュの都合により、動作音は一定ではない場合があります。
※繰り返し使用しますと、ギヤなど機構部品の摩耗により出力軸が振動しやすくなる場合があります。
ケーブル
PMXにはセットにつき1本のケーブルが付属します。6ピンに対して3本のツイストケーブルを連結して6線としています。※ケーブルを自作する場合は、V+とGNDのペア、信号線同士のペアでツイストしてください。
・HC-6P接続ケーブル 200mm(No.02254)
・HC-6P接続ケーブル 400mm(No.02255)(サーボ付属品)
通信機器
RS-485 USBアダプターHS
PCのUSBシリアルをRS-485準拠の信号に変換するためのUSBアダプターです。PCのUSBポートに接続し、対応するドライバソフトウェアをインストールして使用します。WindowsOSのPCの他、LinuxOSのPC(小型シングルボードコンピュータ含む)でも使用できます。※
※2023年7月現在、RaspberryPi4をハードウェアとし、Ubuntu(20.04LTS)、Raspberry Pi OSで動作確認をしました。その他のディストリビューション、バージョンについては自己責任でご利用ください。
Linuxにドライバをインストールする場合は、こちらの記事をご参照ください。
【電気・通信特性】
項目名 | 内容 | |
USB | USB2.0およびUSB1.1 | |
RS-485 | 転送モード | 半二重調歩同期式通信 |
最大通信速度 | 3[Mbps] | |
バス上ノード数 | 最大239まで | |
RS-485ライン(A,B) | -8~13[V] | |
採用している素子 | SN65HVD75 (TI社製) |
【端子構成】
No.3:GND | No.2:D- | No.1:D+ |
下記の電源分配基板とセットで使用します。サーボへの電源は、下記の電源分配基板から給電します。
電源分配基板
RS-485 USBアダプターHSとサーボを接続する際に、電源を供給するための中継基板として使用します。基板上では、電源端子からサーボに電源を分配しているだけですので、別途電源を分配する回路を用意すれば本基板を省き、省スペース化することができます。
電源分配基板はRS-485 USBアダプターHSのセットに付属しています。
RS-485変換基板
マイコンボードのUART端子をRS-485準拠の信号に変換するための中継基板です。UARTの送信(TX)と受信(RX)と送受信を切り替えるENを使用して、RS-485のD+とD-に変換をします。また、信号線の電圧をIOREF端子に接続した電圧に変換できますので、信号線が3.3V~5Vの間でしたらマイコンの電圧を気にすることなく通信することができます。
【ご注意ください】
すべての環境において動作を保証するものではありません。動作環境や機器の仕様、ライブラリなど、都合により正常に動作しない場合があります。また機器により通信速度に制限があります。
ライブラリ
PMXサーボをご利用いただくためのライブラリを公開しました。環境に合わせてご利用ください。
・Python用
・Arduino用
電源
サーボの対応電圧、消費電流にあったバッテリ、または安定化電源をご用意ください。
※容量不足のため、ACアダプターを電源としてご利用いただくことはできません。
製品構成
PCから制御する場合
【必要な製品】
●PMXサーボ
・HC-6P接続ケーブル(サーボに付属)
●RS-485 USBアダプターHS
・シリアル延長ケーブル(USBアダプターに付属)
・電源分配基板(USBアダプターに付属)
●HV電源スイッチハーネス
●電源
【配線図】
電源分配基板を中継しRS-485 USBアダプターとサーボを接続します。電源分配基板には、電源端子が装備されています。ここにHV電源スイッチハーネスを中継し、電源を接続してください。
RS-485 USBアダプターを使用する場合は、PCにUSBアダプターを認識させるためにKO Driverをインストールしてください。
マイコンボードから制御する場合
【必要な製品】
●PMXサーボ
・HC-6P接続ケーブル(サーボに付属)
●RS-485変換基板
●HV電源スイッチハーネス
●電源
【配線図】
RS-485変換基板を中継し、マイコンボードのUART端子に接続して通信します。
デイジーチェーン接続
PMXは、サーボ同士を接続するデイジーチェーン接続に対応しています。サーボに実装された二つのコネクタに、下図の方法でケーブルをつないでいくことで配線することができます。
1つのデイジーチェーン接続上に20個以上のサーボを接続すると動作が不安定になる場合があります。20個以上使用する場合は、終端抵抗を追加するか、コントローラ側のシリアル端子(USB、UARTなど)を追加で用意してラインを二つ以上に分けてご利用ください。また、複数台のサーボが同時に動作すると電気が不足する場合がありますので、必要に応じてラインの途中に電源を追加してください。
ID、通信速度、その他設定の変更
デイジーチェーン接続の場合、ID番号によって自身に対する命令か否かを判断しますので、同一のデイジーチェーン接続上のサーボはすべて異なるID番号を割り振ってください。同じID番号が同じライン上に接続されている場合は、受け取ったパケットによりサーボが同時に返事を出しますので信号がぶつかり誤動作の原因になる可能性があります。同じID番号を同じライン上で使用する場合は、下記で解説する「クローン」機能をご利用ください。「クローン」をONにするとサーボから返事を返さなくなります。
また、デイジーチェーン接続でつながっているサーボの通信速度を統一してください。本マニュアルを参考にサーボに対してコマンドを送受信することでID番号、通信速度を変更することは可能ですが、弊社より便利なマネージャソフトウェアを公開していますので、こちらをご利用ください。
【マネージャソフトウェア】
【必要な製品】
●WindowsOSのPC(Windows10, 11)(Intel推奨。Arm系はドライバが非対応です)
●RS-485 USBアダプターHS
・シリアル延長ケーブル(USBアダプターに付属)
・電源分配基板(USBアダプターに付属)
●HV電源スイッチハーネス
●電源
(配線例は製品構成の「PCから制御する場合」を参照してください)
LEDの機能
サーボ本体に実装されているLEDの点滅パターンでサーボの状態が確認できます。また、「LED点灯モード」を「消灯モード」に設定することでLEDを常に消灯することができます。
正常 | LED | 点滅周期 |
プログラムが動いていない | 点灯, 消灯 | |
プログラム更新モード時 | 点滅 | 100ms周期 |
システム、モータエラー | 点滅 | 500ms周期 |
その他エラー 通信、コマンド、モード、データ、RAM |
点滅 | 1000ms周期 |
通常 | 点滅 | 10ms周期 |
※TorqueONモード時はLED点滅の優先度が低いため、規則正しく点滅しない場合があります。
FreeモードまたはBrake、Holdモードでエラーステータスを確認してください。
2.通信仕様について
通信仕様
項目 | 仕様 |
同期方式 | 調歩同期式 |
スタートビット | 1 |
データビット長 | 8 |
パリティ | 無し, 奇数, 偶数(デフォルトは「無し」) |
ストップビット | 1 |
伝送回線 | ディファレンシャル(RS-485通信準拠) |
伝送方式 | 半二重 |
伝送速度 | 3M, 2M, 1.5M, 1.25M, 1M,, 625k, 115.2k, 57.6k bps(デフォルト 115.2kbps) |
ID番号 | 0x00~0xEF(239) 0xFFはブロードキャストID(デフォルト 0) |
リンク制御方式 | 無手順 |
誤り検出 | CRC-16-CCITT |
注意事項 | ※コマンドは2バイト分以上の間隔が空くと一連のコマンドとして認識されません。 ※連続して通信を行う場合は通信間隔を2バイト以上空けて下さい。 |
通信プロトコル
通常の通信
基本的に1つのID番号に対してパケットを送信し、該当するID番号のサーボから返事が返ってきます。デイジーチェーン接続上のサーボは、コントローラから送信されたすべてのパケットを受け取りますが、自身のID番号に該当しないパケットはすべて破棄します。
ブロードキャストIDを使用した通信
ブロードキャストIDで送信されたパケットは、どのID番号でも受け取ったすべてのサーボが一斉に処理を実行します。すべてのサーボに対して同じ命令を実行する場合に便利な機能です。ただし、ブロードキャストIDで動作したサーボは返事を返しません。
ブロードキャストIDとして送信する場合もデータ構造に違いはありません。ID番号のみを0xFFに指定することにより全体に対する命令として発信することができます。
データ構造
データ構造は、コントローラからサーボへ送信する「送信フォーマット」と、サーボから返事が返ってくるときの「受信フォーマット」の2種類あります。
送信フォーマット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE(特殊コマンドは0xFC) |
+01 | 0xFE(特殊コマンドは0xFC) | |
+02 | ID番号 | 0x00~0xEF(239) 0xFFはブロードキャストID |
+03 | パケット長 | ヘッダからCRC16までの長さ |
+04 | コマンド | コマンド、オプションを指定することにより、サーボの多彩な機能を使用することができます。また、サーボを制御する角度、速度のデータや、設定を変更するデータ、読み出しをする際のメモリマップのアドレスをデータとして送ることができます。 コマンド、オプション、データについては後述の「コマンド詳細」を参照してください。 |
+05 | オプション | |
+06(+n) | データ | |
+07(+n) | CRC16 | ヘッダ~データの最後までのCRC16-CCITT(x^16+x^12+x^5+1)ビットシフト方向:左送り, 初期値:0x0000, 出力XOR:0x0000) |
+08(+n) |
受信フォーマット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE(特殊コマンドは0xFC) |
+01 | 0xFE(特殊コマンドは0xFC) | |
+02 | ID番号 | 0x00~0xEF(239) ブロードキャストID(0xFF)を指定した場合、サーボからの返事はありません。 |
+03 | パケット長 | ヘッダからCRC16までの長さ |
+04 | コマンド | 送信したコマンドのBit7を0にした値 |
+05 | ステータス |
0の時はエラー無し B0: システムエラー B1: モータエラー B2: 通信エラー B3: コマンドエラー B4: RAMアクセスエラー B5: モードエラー B6: データエラー エラーに関しての詳細は「5.エラー状態」の項をご参照ください。 |
+06(+n) | データ | コマンドによって変化 主にメモリマップの情報や、サーボの状態をデータとして受け取ることができます。 |
+07(+n) | CRC16 | ヘッダ~データの最後までのCRC16-CCITT(x^16+x^12+x^5+1)ビットシフト方向:左送り, 初期値:0x0000, 出力XOR:0x0000) |
+08(+n) |
ヘッダ
送信、受信パケットの先頭を表します。
ID番号
ユーザーが各サーボに対して任意で割り振ることができる番号です。0~239まで指定することができます。
サーボは、自身に割り当てられたID番号により、コントローラから送られてきた送信パケットが自身に向けた命令かどうかを判断します。デイジーチェーン接続などサーボ同士を連結して接続する場合は、他のサーボと受信パケットがぶつからないように、各サーボに他とは被らない個別のID番号を割り振ってください。
ただし、サーボが「クローン」に設定されている場合は返事を返しましせんので、ID番号が他のサーボと同じでも問題ありません。
ブロードキャストIDとして0xFFを指定することができます。ブロードキャストIDの命令は、受け取ったすべてのサーボが一斉に処理を実行します。ただし、サーボから返事を返しません。
パケット長
ヘッダからCRC16までのパケット全体のByte数です。
コマンド
コマンドにより命令の種類を指定することができます。コマンドの詳細は「4.コマンド詳細」参照してください。受信パケットのコマンドは、送信パケットで指定したコマンドのBit7が0になって返ってきます。
例)送信パケット 0xA1 → 受信パケット 0x21
オプション(送信パケットのみ)
コマンドの機能に対して、より詳細な命令を指定することができます。コマンドの種類により内容が異なります。オプションの詳細は「4.コマンド詳細」を参照してください。
ステータス(受信パケットのみ)
ステータスによりサーボのエラー状態を受け取ることができます。正常であれば0x00が返ってきます。ステータスの詳細な情報は「5.エラー状態」を参照してください。
データ
サーボを制御するためのデータを送信したり、受信パケットで各設定値や制御のフィードバックを受け取ることができます。データの種類によりバイト数が異なります。また、コマンドによってはデータがない場合があります。
サーボ内の2Byte以上のデータは、すべてリトルエンディアンで格納されています。データを読み出す場合は、読み出したデータをリトルエンディアン方式で組み合わせてご利用ください。また、書き込みの場合は、リトルエンディアン方式に合わせて1Byteずつに分けて書き込みを実行してください。
CRC16
ヘッダ~データの最後までのCRC16-CCITTを計算して送信パケットの最後に付属して送信します。また、受信パケットの末尾にも同様にCRC16が付属します。
(x^16+x^12+x^5+1)ビットシフト方向:左送り, 初期値:0x0000, 出力XOR:0x0000)
3.PMXサーボの制御方法
サーボに対して制御に合わせた動作指令データを送信することにより、サーボを制御することができます。この章では、電源をONにしてからサーボが動作するまでの簡単な流れを解説します。
手順一覧
①各サーボのID番号、通信速度、パリティを変更する
②制御モードを設定する
③応答データを設定する
④サーボのトルクをONにする
⑤動作指令データを送信する
①各サーボのID番号、通信速度、パリティを変更する
初期状態の通信速度、パリティで問題なければ変更する必要はありませんが、複数のサーボをデイジーチェーン接続で連結して制御する場合は、必ず各サーボに違うID番号を割り振る必要があります。SystemWRITEコマンドを実行するか、近藤科学のウェブサイトから配布されているマネージャソフトを使用してID番号を書き換えてください。
【マネージャソフトウェア】
変更したID番号、通信速度、パリティはサーボのROM領域に保存されますので、使用するたびに再設定する必要はありません。
※通信速度、パリティは全サーボ統一してください。
②制御モードを設定する
MemWRITEコマンドで「制御モード(アドレス501)」のデータを書き換えて、サーボの制御方法を指定します。
PMXサーボには5種類の制御方法が備わっています。
1)位置制御モード:角度を指定して制御するモードです。受け取ったサーボは、指定された角度で停止します。
2)速度制御モード:回転速度を指定して制御するモードです。速度制御のサーボは、指定された速度を維持しつつ無限に回転します。負荷が変わっても一定速度を維持するよう制御します、
3)電流制御モード:動作する際のモータが消費する電流値を指定して制御するモードです。電流制御のサーボは、指定された電流値を維持しつつ無限回転します。
4)トルク制御モード:動作する際のサーボのトルクを指定して制御するモードです。トルク制御のサーボは、指定されたトルクを維持しつつ無限回転します。なお、PMXのトルク制御は、推定トルク指令値により内部では電流制御を実行しています。内部にトルクを検出するセンサは搭載していません。そのため、搭載しているモータや機構部品の個体差により出力するトルクと指令値に差が発生する場合があります。
5)PWM制御:サーボ内のモータを回転させるPWMデューティー比を直接指定して制御するモードです。PWM制御のサーボは、指定されたデューティー比で無限回転します。
また、各制御を組み合わせることも可能です。
組み合わせ対応表
パターン解説
パターン1:サーボが動作する速度を指定して位置制御ができます。サーボに負荷がかかった場合は、速度を維持するためにモータの出力が上がります。
パターン2:サーボが出力する電流を指定して位置制御ができます。サーボに負荷がかかり電流が増えた場合は、動作がその場で停止します。
パターン3:サーボが出力するトルクを指定して位置制御ができます。パターン1の電流制御との組み合わせと同じ動作をします。
パターン4:補間制御による位置制御を実行します。「移動時間」により現在地点から目標地点まで到達する時間を指定することができます。補間制御の種類は、メモリマップの「補間制御軌道生成タイプ指定(アドレス503)」で指定することができます。
パターン5:指定した電流値を超えないように、指定した速度で回転します。サーボに負荷がかかった場合は、指定した電流値を超えない範囲で速度を維持します。
パターン6:指定したトルク値を超えないように、指定した速度で回転します。サーボに負荷がかかった場合は、指定したトルク値を超えない範囲で速度を維持します。
パターン7:指定した速度、電流値を超えない出力で、指定した位置に移動します。サーボに負荷がかかった場合は、指定した電流値を超えない範囲で速度を維持し、指定した位置へ移動します。
パターン8:指定した速度、トルク値を超えない出力で、指定した位置に移動します。サーボに負荷がかかった場合は、指定したトルク値を超えない範囲で速度を維持し、指定した位置へ移動します。
パターン9:補間制御による位置制御に、電流値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定した電流値の出力で動作します。
パターン10:補間制御による位置制御に、トルク値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定したトルクの出力で動作します。
※PWM制御は組み合わせに対応していません。単独でのみ使用できます。
③応答データを設定する
MemWRITEコマンドで「応答データ指定(アドレス502)」のデータを書き換えて、サーボから受け取る情報を指定します。
MotorWRITEコマンド、またはMemWRITEコマンドでサーボに動作指令データを送信した後、サーボからの返事の中にサーボの現在のパラメータを含めて返事を受け取ることができます。この受信パケットの中にどのパラメータを含めて返してもらうかを指定するのが「応答データ指定」です。
下記のデータから選択することができます。
・現在位置
・現在速度
・現在電流値
・現在推定トルク
・PWM出力割合
・モータ温度
・CPU温度
・入力電圧
各データは、サーボから受信パケットを発信する時点の情報です。PWM出力割合は、サーボ内のモータを制御しているPWMデューティー比の割合になります。
「応答データ指定」に0を書き込むことで受信パケットにデータを含まないように指定することも可能です。これにより、最低限のByte数で通信をすることができます。
上記の「制御モード」「応答モード」は、RAM領域のデータを書き換えています。そのため、電源をOFFにすると設定が消えてしまいますが、SAVEコマンドにより設定を保存することができます。最初の1回だけMemWRITEコマンドで設定を書き換え、SAVEコマンドを実行して保存しておけば次回から再設定をする必要はありません。
つまり、以下の④から制御することができますので、トルクONに指定すれば即サーボの制御を開始することができます。
④サーボのトルクをONにする
電源をONにした直後は、サーボにトルクが入っていない状態(Freeモード)です。サーボを動作させる場合は、MotorWRITEコマンドでTorqueONに指定します。
また、MemWRITEコマンドでアドレス500の「トルクスイッチ」に1を書き込んでTorqueONにします。
⑤動作指令データを送信する
MotorWRITEコマンドで動作指令データを送信し、サーボを制御します。パケットを受け取ったサーボは、自身のID番号と一致し、データが正しければ即動作を開始します。動作指令データは、指定した「制御モード」によりByte数がことなります。詳しくはMotorWRITEコマンドの解説を参照してください。
また、MemWRITEコマンドでも動作指令データを送信することができます。通常、MemWRITEコマンドはオプションを0で実行しますが、動作指令データを送信する場合はオプションを1に指定して送信します。
MotorWRITEコマンド、MemWRITEコマンドのどちらで制御した場合でも、サーボの動作に違いはありません。
以上です。詳しい内容は、各コマンド、メモリマップの解説をご参照ください。
4.コマンド詳細
コマンド一覧
コマンド | 内容 | 送信 | 受信 | BCID |
MemREAD | RAM上にあるデータをアドレスで指定して読み出し | 0xA0 | 0x20 | |
MemWRITE | アドレスの指定によりRAMへ書き込み | 0xA1 | 0x21 | ● |
LOAD | ROMのデータをRAMに展開 | 0xA2 | 0x22 | ● |
SAVE | RAMのデータをROMに保存 | 0xA3 | 0x23 | ● |
MotorREAD | モータデータ読み出し | 0xA4 | 0x24 | |
MotorWRITE | モータデータ書き込み。サーボへの動作指示 | 0xA5 | 0x25 | ● |
SystemREAD | シリアル番号読み出し | 0xBB | 0x3B | |
SystemWRITE | ID・通信速度、パリティ、応答時間変更 | 0xBC | 0x3C | |
ReBoot | 機器再起動 | 0xBD | 0x3D | |
FactoryReset | データを工場出荷データに初期化 | 0xBE | 0x3E |
リストの「BCID」はブロードキャストIDの略です。BCIDに●マークがついているコマンドは、ブロードキャストIDに対応しています。
メモリマップ
PMXは、各設定値や現在値などあらゆるデータをアドレスを指定して読み出し、書き込みができます。
RAM領域
MemREAD、MemWRITEコマンドで読み書きできる領域です。電源投入後にROM領域から自動でデータが展開されます。または、LOADコマンドによりROM領域からRAM領域へ上書き展開することができます。
各データにはアドレスとよばれるメモリマップ上の番地を指定してアクセスします。MemWRITEで書き込まれたデータは、即時サーボの制御に反映されます。
RAM上のデータは電源を切ると全て消えてしまいますので、MemWRITEで書き換えた設定値を保存したい場合は、SAVEコマンドを実行してROM領域に保存してください。
メモリマップの詳細は「6.メモリマップ」を参照ください。
ROM領域
サーボの制御に必要な設定値が保存されている領域です。各データはRAM領域に展開されてからサーボの制御に利用されます。LOAD、SAVEコマンドにより、RAMへの展開、ROMへの保存を命令できますが、特定のアドレスのみを展開、保存することはできません。すべてのデータに対して展開、保存が実行されます。
サーボ初期値を保存するROM領域
サーボの設定値を変更、SAVEを繰り返した後、すべてのデータを初期値に戻したい場合があります。PMXは、サーボ内部に初期値を保存しているROM領域がありますので、FactoryResetコマンドを実行することでROM領域のデータを全て初期値に上書き保存することができます。また、FactoryReset後に自動でLOADコマンドが実行されますので、RAM領域も初期値に戻ります。
この「サーボ初期値を保存するROM領域」の内容をユーザーが変更することはできません。
コマンド概略図
メモリデータの読み出し(MemREAD)
メモリマップの先頭アドレスとデータの長さを指定してデータを読み出すコマンドです。現在位置や、現在速度など制御に必要なデータや、RAM領域の各種設定値を読み出すことができます。
実行可能モード:TorqueON, Free, Brake, Hold
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x0B(11) |
+04 | コマンド | 0xA0 |
+05 | オプション | 0x00 |
+06 | 先頭アドレス | 【0x00~0xFF】下位アドレスを指定 |
+07 | 【0x00~0x04】上位アドレスを指定 | |
+08 | 読出データ数 | 読み出すデータのByte数(0x01~0xF7(247)) |
+09 | CRC16 | +00~+08までのCRC16 |
+10 |
「先頭アドレス」でメモリマップから読み出すデータの先頭のアドレスを指定します。「先頭アドレス」は下位と上位の2Byteに分けて指定します。例えば、アドレス300(0x12C)から読み出す場合は、0x2C+0x01となります。
サーボはMemREADコマンドを受け取ると「先頭アドレス」で指定したアドレスから、「読出データ数」の数だけデータが返ってきます。例えば、アドレス300の「現在位置(データ数2Byte)」を「先頭アドレス」に指定し、「読込データ数」を6にすると「現在位置」からアドレス304の「現在電流値(データ数2Byte)」までのデータを1つの送信パケットで読み出すことができます。
メモリマップの詳細は、「6.メモリマップ」を参照してください。
※現在位置は「制御モード」の設定により読み出されるデータ型が異なります。詳しくはこちらをご参照ください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x09~0xFF(255) (8+「読出データ数」) |
+04 | コマンド | 0x20 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | データ | 正常時:送信パケットの「読出データ数」で指定した数のデータが返ってきます。 エラー時:ステータスにエラーが発生しても通信に問題が無い場合はデータを読み出すことができます。サーボ内トラブルなど正常に読み出せない場合は送信パケットの「読出データ数」と同じ数の0が返ってきます(詳細情報)。 |
+06+n | ||
+07+n | CRC16 | +00~+06+nまでのCRC16 |
+08+n |
送信パケットで指定した「先頭アドレス」から「読出データ数」の数だけサーボからデータが返ってきます。コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。また、MemREADコマンドで読み出せる範囲外のアドレスを指定した場合は、MemREADが実行されず「RAMアクセスエラー」が返ってきますので、アドレスを確認して再度実行してください。
使用例
ID0のサーボに対して、メモリマップのアドレス300「現在位置」から6Byteのデータを読み出す
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0B(11Byte) | |
コマンド | 0xA0 | |
オプション | 0x00 | |
先頭アドレス | 0x2C 0x01 | |
読出データ数 | 0x06(6Byte) | |
CRC16 | 0x14 0xFD |
MemREADが実行されたID0のサーボからの受信パケット。指定した通り、アドレス300から6Byteのデータが返ってきています。データはリトルエンディアンで分割されていますので、組み合わせてご利用ください。
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0E(14Byte) | |
コマンド | 0x20 | |
ステータス | 0x00 | |
データ | 現在位置(300) | 0xE8 0x03 (1000) |
現在速度(302) | 0x2C 0x01 (300) | |
現在電流値(304) | 0x64 0x00 (100) | |
CRC16 | 0xD0 0xB7 |
メモリへのデータ書き込み(MemWRITE)
先頭アドレスから指定した長さのデータをメモリマップへ書き込むコマンドです。主にメモリマップのRAM領域にある各種設定値の変更に使用します。ID、通信速度、パリティ、応答時間の変更は専用コマンド「SystemWRITE」を使用します。
「オプション」の書き込み許可切り替えについて
送信パケットの「オプション」を0にして送信した場合は、サーボの「トルクスイッチ」がFree、Brake、Holdの時にのみ反映されます。TorqueONの時は反映されませんので、パラメータ設定の変更が必要な場合はサーボが動き出す前に変更するか、一度停止してFree、またはBrake、Holdに変更してから書き換えてください。
「オプション」を1にして送信すると、TorqueONの状態でも書き込んだデータが反映されます。ただし、PIDゲインなど動作に影響するパラメータを極端に変更すると、思わぬ動作をする場合がありますので、なるべく停止してから値を変更してください。
近藤科学としては、制御中に設定値が書き換わると誤動作の原因になる可能性がありますので「オプション」は0でご利用いただくことを推奨します。
書き換えた設定値の保存について
MemWRITEでサーボの設定値を変更した場合は、RAM領域のデータが書き換わっていますので電源をOFFにすると設定がリセットされます。書き込んだデータを残したい場合は、電源をOFFにする前にSAVEコマンドを実行して保存してください。
※データの制限値について
MemWRITEコマンドで設定できるデータ範囲は最小値、最大値を決められている場合があります。制限値を超えてデータを送信した場合、サーボからはステータスに「データエラー」のフラグを立てて返事を返します。最小値、最大値は機種ごとに異なる場合があります。メモリマップの「指令制限値」(アドレス600番台)をMemREADコマンドで読み出して確認してください。
【ご注意ください】
本紙「6.メモリマップ」に掲載されているアドレス外にデータを書き込まないでください。基本的に、書き込みができる範囲外のアドレスに対しては、MemWRITEは実行されず「RAMアクセスエラー」が返ってきますが、例外によりデータが書き換わってしまった場合、サーボが正常に動作しなくなる可能性があります。また、書き込んだ場所によっては復旧できなくなることがありますのでご注意ください。
実行可能モード:
・「オプション」=0の場合 Free, Brake, Hold(TorqueONでは実行できません。ステータスのモードエラーが返ってきます)
・「オプション」=1の場合 すべてのモードで実行可能です。
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239), 0xFF(ブロードキャストID) |
+03 | パケット長 | 0x0B(11)~0xFF(255) (10+書込データのByte数) |
+04 | コマンド | 0xA1 |
+05 | オプション | 0x00(通常) 0x01(TorqueONでデータ書き込み許可モード) |
+06 | 先頭アドレス | 【0x00~0xFF】下位アドレスを指定 |
+07 | 【0x00~0x04】上位アドレスを指定 | |
+08 | 書込データ | メモリマップに書き込むデータ(データの数は1~245Byte) |
+08+n | ||
+09+n | CRC16 | +00~+08+nまでのCRC16 |
+10+n |
「先頭アドレス」でメモリマップへ書き込むデータの先頭のアドレスを指定します。「先頭アドレス」は下位と上位に分けて指定します。サーボはMemWRITEコマンドを受け取ると「先頭アドレス」で指定したアドレスから、「書込データ」の数だけデータを書き込みます。例えば、アドレス76の「入力電圧最小値設定(データ数2Byte)」を「先頭アドレス」に指定し、「書込データ」を4Byte用意すると「入力電圧最小値設定」からアドレス78の「入力電圧最小時の出力%値(データ数2Byte)」までのデータを1つの送信パケットで書き込むことができます。
メモリマップの詳細は、「6.メモリマップ」を参照してください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x21 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合は、データの書き換えは実行されません。エラーを解消してから再度コマンドを実行してください。
※ブロードキャストIDで全体に命令した場合は、受信パケットはありません。
使用例
ID0のサーボに対して、メモリマップのアドレス76「入力電圧最小値設定(データ数2Byte)」から4Byteのデータを書き込む。つまりアドレス76「入力電圧最小値設定」に加えてアドレス78「入力電圧最小時の出力%値」に対して1パケットで同時にデータを書き込みます。データはリトルエンディアンに分割して送信パケットに組み込んでください。
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0E(14Byte) | |
コマンド | 0xA1 | |
オプション | 0x00 | |
先頭アドレス | 0x4C 0x00 | |
書込データ | (計4Byte) | 0x4C 0x1D |
0x50 0x00 | ||
CRC16 | 0x58 0xA2 |
MemWRITEが実行されたID0のサーボからの受信パケット。正常なパケットが返ってきていることと、ステータスにエラーがないかを確認してください。
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08(8Byte) | |
コマンド | 0x21 | |
ステータス | 0x00 | |
CRC16 | 0x97 0x7D |
ROMに保存されたデータをRAMに展開(LOAD)
メモリマップのROM領域に保存されているデータをRAM領域に展開します。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239), 0xFF(ブロードキャストID) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0xA2 |
+05 | オプション | 0x00 |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x22 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合は,LOADコマンドが実行されません。エラーを解消してから再度コマンドを実行してください。
※ブロードキャストIDで全体に命令した場合は、受信パケットはありません。
使用例
ID0のサーボに対して、LOADコマンドを実行する
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0xA2 | |
オプション | 0x00 | |
CRC16 | 0x5C 0x33 |
LOADコマンドが実行されたID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0x22 | |
ステータス | 0x00 | |
CRC16 | 0xC4 0x28 |
RAMのデータをROMに保存(SAVE)
メモリマップのRAM領域に展開されているデータをROM領域に保存します。MemWRITEコマンドでサーボの設定値を変更した場合は、RAM領域のデータが書き換わっていますので電源をOFFにすると設定がリセットされます。保存したい場合は、電源を切る前にSAVEコマンドで保存してください。
なお、SystemWRITEコマンド、FactoryResetコマンドの場合はROM領域のデータを書き換えますので、保存の為にSAVEコマンドを実行する必要はありません。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239), 0xFF(ブロードキャストID) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0xA3 |
+05 | オプション | 0x00 |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x23 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合は,SAVEコマンドが実行されません。エラーを解消してから再度コマンドを実行してください。
※ブロードキャストIDで全体に命令した場合は、受信パケットはありません。
使用例
ID0のサーボに対して、SAVEコマンドを実行する
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0xA3 | |
オプション | 0x00 | |
CRC16 | 0x6D 0x00 |
SAVEコマンドが実行されたID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0x23 | |
ステータス | 0x00 | |
CRC16 | 0xF5 0x1B |
モータ関連データ読み出し(MotorREAD)
モータの動作に関連するデータを読み出すコマンドです。一つの送信パケットで現在位置や速度、電流値など制御に必要な情報を読み出すことができます。
実行可能モード:TorqueON, Free, Brake, Hold
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0xA4 |
+05 | オプション | 0x00(固定) |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
メモリマップの「応答データ指定(アドレス502)」の各Bitを1にすることで、読み出すデータを指定することができます。例えば、位置(Bit0)と速度(Bit1)、電流値(Bit2)を読み出す場合は、0x07と指定します。
0x00を指定するとデータなしで返事を受け取ることができます。
「応答データ指定」のデータを書き換える場合は、MemWRITEコマンドを使用してください。
応答データ指定 アドレス:502 数値型:Byte バイト数:1
Byte | 項目 | 返信されるデータサイズ |
Bit0 | 現在位置 | 2Byte |
Bit1 | 現在速度 | 2Byte |
Bit2 | 現在電流値 | 2Byte |
Bit3 | 推定トルク | 2Byte |
Bit4 | PWM出力割合 | 2Byte |
Bit5 | モータ温度 | 2Byte |
Bit6 | CPU温度 | 2Byte |
Bit7 | 入力電圧 | 2Byte |
※現在位置は「制御モード」の設定により読み出されるデータ型が異なります。詳しくはこちらをご参照ください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x09~0x19(25)(9+「応答データ指定」) |
+04 | コマンド | 0x24 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | トルクスイッチ | トルクスイッチの状態を返します。 【0x01】TorqueON(トルクON) 【0x02】Free(トルクOFF) 【0x04】Brake(ブレーキ) 【0x08】Hold(その場で保持) |
+07 | 受信データ (応答データ) |
下記参照 |
+07+n | ||
+08+n | CRC16 | +00~+07+nまでのCRC16 |
+09+n |
受信データ(応答データ)詳細
Byte | データ種類/ (応答データ値) |
受信データ サイズ |
データフォーマットの内容 |
位置 (Bit0 == 1) |
2Byte (Int16) |
位置(角度)データ[1/100°] (例:1000=10°) |
|
速度 (Bit1 == 1) |
2Byte (Int16) |
速度データデータ[1/10°/S]
(例:1000=100°/S) |
|
電流値 (Bit2 == 1) |
2Byte (Int16) |
電流データデータ[mA] | |
トルク (Bit3 == 1) |
2Byte (Int16) |
トルクデータデータ[mN・m] (例:1000=1N・m) |
|
モータ出力 (Bit4 == 1) |
2Byte (Int16) |
モータ出力(PWM)データ[デューティ比1/100%] (例:10000=100%) |
|
モータ温度 (Bit5 == 1) |
2Byte (Int16) |
モータ温度[1/10℃] (例:300=30℃) |
|
CPU温度 (Bit6 == 1) |
2Byte (Int16) |
CPU温度データ[1/10℃] (例:300=30℃) |
|
電圧 (Bit7 == 1) |
2Byte (Uint16) |
入力電圧値データ[mV] | |
メモリマップの「応答データ指定」で指定したデータがサーボから返ってきます。例えば位置(Bit0)と速度(Bit1)、電流値(Bit2)の読み出しを指定した場合は、「データ2」に6Byte(2 + 2 + 2(Byte))のデータが返ってきます。データが返ってくる順番は、Bit0からになります。
0x00を指定すると、トルクスイッチの状態のみを受け取ることができます。
「ステータス」にエラーが発生しても、「応答データ指定」で指定した数のデータが空のデータ(0x00)として受信パケットに含まれて返ってきますので、受信パケットのパケット長は変わりません(詳細情報)。
使用例
「応答データ指定」で「位置」「電流」「モータ温度」設定されているID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0F | |
コマンド | 0x24 | |
ステータス | 0x00 | |
トルクスイッチの状態 | 0x00 | |
受信データ (応答データ) |
位置 | 0xB8 0x0B |
電流 | 0xC8 0x00 | |
モータ温度 | 0x18 0x01 | |
CRC16 | 0xB5 0x35 |
モータ関連データ書き込み(MotorWRITE)
モータの動作に関連するデータを書き込むコマンドです。トルクスイッチの指定と、目標位置、目標速度などサーボが動作するために必要な情報を書き込むことができます。MotorWRITEを受け取ったサーボは、サーボが「TorqueON」の状態であり、IDとデータが正しければ即動作を開始します。「Free」「Hold」「Brake」の場合、サーボは動作指示を受けても動作せず、受信パケットの「ステータス」でモードエラーを返します。
このコマンドは、「オプション」によりデータの内容が変わります。またメモリマップの「制御モード」「補間制御軌道生成タイプ指定」により制御方法を指定することができます。
実行可能モード:
・トルクスイッチ切り替えの場合 TorqueON, Free, Brake, Hold
・動作指令の場合 TorqueON(Free, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)、0xFF(ブロードキャストID) |
+03 | パケット長 | 0x08~0x0E(14) (8+「動作指令データ」) |
+04 | コマンド | 0xA5 |
+05 | オプション |
0:動作指令データを使用し動作指示 1:TorqueON 2:Free 4:Brake 8:Hold 上記以外はエラー |
+06 | 動作指令データ | 「動作指令データ詳細」参照 ※オプションが0以外の場合(トルクスイッチ指定の場合)はデータなし |
+06+n | ||
+07+n | CRC16 | +00~+06+nまでのCRC16 |
+08+n |
MotorWRITEはオプションにより2種類の処理を実行することができます。
機能1:MotorWRITEコマンドでトルクスイッチのモード指定
「オプション」を0にするとサーボのトルクスイッチのモードを指定することができます。MotorWRITEコマンドを「トルクスイッチ」で実行する場合は送信パケットの「動作指令データ」はありません。
・TorqueON(オプション:1)
サーボがトルクONであり、角度指示など動作指示により動作する状態です。サーボを動作させる場合は、どの制御モードでもTorqueONにしてから制御します。
・Free(オプション:2)
「Free」はサーボのトルクがOFFの状態です。近藤科学の各マニュアルや解説では「脱力状態」ともよびます。思わぬ動作を防ぐために、一部のパラメータはFree、Brake、Hold、またはFreeのみの状態で書き換えることができます。また、サーボの電源投入直後は、必ずFreeで起動します。
・Brake(オプション:4)
サーボがトルクONになりますが、その場でブレーキがかかった状態になります。モータ制御のショート(短絡)ブレーキと同様です。ただし、過度な外乱や長時間の状態を維持すると発熱や過電流により故障する場合がありますのでご注意ください。
・Hold(オプション:8)
サーボのトルクがONになりますが、その場で保持します。動作指示があっても動作しません。待機状態でトルクONにしたいときはこちらのモードがお勧めですが、長期間トルクONの状態ですとサーボが熱くなり、故障する原因になりますのでご注意ください。
BrakeとHoldの違いについて
Brakeは、モータにブレーキがかかった状態であり制御はしていません。よって、外乱やロボットの自重によりその場から移動しても、元の位置に戻る制御はしません。対してHoldは、その場に留まるように制御していますので、外乱で位置がずれた場合は元の場所に戻ります。ただし、Holdは位置に留まるために常に制御をしているため電流が流れ続けます。用途に合わせて使い分けてください。
機能2:MotorWRITEコマンドで動作指令
送信パケットに含まれる「オプション」を0にすると動作指令データを送信することができます。
ロボットのアームなどが絡まっていないか、周りに人がいないかなど安全を確認してから送信パケットを送ってください。
サーボが動作するためには、トルクスイッチがTorqueONの状態である必要があります。Free、またはBrake、Holdモードの時は動作指令データを受け取っても動作せず、モードエラーが返ってきます。
動作指令を実行する前にサーボの制御方法を設定する
MotorWRITEコマンドでサーボの制御を開始する前に「制御モード」で制御方法を指定してください。サーボの制御方法は、メモリマップの「制御モード(アドレス501)」により指定することができます。「制御モード」のデータを書き換える場合は、MemWRITEコマンドを使用してください。
制御モード アドレス:501 数値型:Byte バイト数:1
Byte | 項目 | 指定するデータサイズ |
Bit0 | 位置指示 | 2Byte |
Bit1 | 速度指示 | 2Byte |
Bit2 | 電流指示 | 2Byte |
Bit3 | トルク指示 | 2Byte |
Bit4 | モータ出力指示(PWM) | 2Byte |
Bit5 | 移動時間指示 | 2Byte |
Bit6 | 0(固定) | なし |
Bit7 | 0(固定) | なし |
「制御モード」で指定した制御方法の数により「動作指令データ」のデータサイズが変わります。
位置制御(00000001b)のみを指定した場合は、「位置」データ(2Byte)のみを「動作指令データ」として送信します。
また、制御モードで位置制御とトルク制御を指定した場合(00001001b)は、「位置」データと「トルク」データを合わせて4Byteのデータを「動作指令データ」として送信します。制御モードのBit0の動作指令データから順番に送ってください。位置+トルク制御の場合、トルクだけ変えたい場合でも、位置指示も必要となりますので制御データ値で指定したすべての指示データを送ってください。
Byte | データ種類/ (制御データ値) |
データサイズ | データフォーマットの内容 |
+06+1 |
位置 (Bit0 == 1) |
2Byte (Int16) |
位置(角度)データ[1/100°] |
+06+2 | |||
+06+1 |
速度 (Bit1 == 1) |
2Byte (Int16) |
速度データデータ[1/10°/S] (例:1000=100°/S)(データ範囲:アドレス636, 638参照) |
+06+2 | |||
+06+1 | 電流値 (Bit2 == 1) |
2Byte (Int16) |
電流データデータ[mA] (例:1000=1000mA)(データ範囲:アドレス640, 642参照) |
+06+2 | |||
+06+1 | トルク (Bit3 == 1) |
2Byte (Int16) |
トルクデータデータ[mN・m] (例:1000=1N・m)(データ範囲:アドレス644, 646参照) |
+06+2 | |||
+06+1 |
モータ出力 (Bit4 == 1) |
2Byte (Int16) |
モータ出力(PWM)データ[デューティ比1/100%] (例:10000=100%)(データ範囲:-10000~10000) |
+06+2 | |||
+06+1 |
移動時間 (Bit5 == 1) |
2Byte (Uint16) |
移動時間指示データ[mS] |
+06+2 |
※データの制限値について
動作指令データの範囲は、サーボのスペックにより最小値、最大値が決まっています。制限値を超えてデータを送信した場合、サーボからは受信パケットのステータスに「データエラー」のフラグを立てて返事を返します。各制限値についてはメモリマップの「指令制限値」(アドレス600番台)をMemREADコマンドで読み出して確認してください。
それぞれの制御は単独で使用できます。単独で使用した場合、位置制御は指定した位置で停止しますが、その他の制御では回転し続けます。
※「移動時間」のみの指定はできません。以下の組み合わせ対応表を参考に位置制御と組み合わせて使用してください。
制御方法を組み合わせることも可能です。組み合わせパターンは下記の通りです。
組み合わせ対応表
パターン解説
パターン1:サーボが動作する速度を指定して位置制御ができます。サーボに負荷がかかった場合は、速度を維持するためにモータの出力が上がります。
パターン2:サーボが出力する電流を指定して位置制御ができます。サーボに負荷がかかり電流が増えた場合は、動作がその場で停止します。
パターン3:サーボが出力するトルクを指定して位置制御ができます。パターン1の電流制御との組み合わせと同じ動作をします。
パターン4:補間制御による位置制御を実行します。「移動時間」により現在地点から目標地点まで到達する時間を指定することができます。補間制御の種類は、メモリマップの「補間制御軌道生成タイプ指定(アドレス503)」で指定することができます。
パターン5:指定した電流値を超えないように、指定した速度で回転します。サーボに負荷がかかった場合は、指定した電流値を超えない範囲で速度を維持します。
パターン6:指定したトルク値を超えないように、指定した速度で回転します。サーボに負荷がかかった場合は、指定したトルク値を超えない範囲で速度を維持します。
パターン7:指定した速度、電流値を超えない出力で、指定した位置に移動します。サーボに負荷がかかった場合は、指定した電流値を超えない範囲で速度を維持し、指定した位置へ移動します。
パターン8:指定した速度、トルク値を超えない出力で、指定した位置に移動します。サーボに負荷がかかった場合は、指定したトルク値を超えない範囲で速度を維持し、指定した位置へ移動します。
パターン9:補間制御による位置制御に、電流値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定した電流値の出力で動作します。
パターン10:補間制御による位置制御に、トルク値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定したトルクの出力で動作します。
※PWM制御は組み合わせに対応していません。単独でのみ使用できます。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x09~0x19(25) |
+04 | コマンド | 0x25 |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | トルクスイッチ | トルクスイッチの状態を返します。 【0x01】TorqueON(トルクON) 【0x02】Free(トルクOFF) 【0x04】Brake(ブレーキ) 【0x08】Hold(その場で保持) |
+07 | 受信データ (応答データ) |
下記参照 |
+07+n | ||
+08+n | CRC16 | +00~+07+nまでのCRC16 |
+09+n |
受信データ(応答データ)詳細
Byte | データ種類/ (応答データ値) |
データサイズ | データフォーマットの内容 |
位置 (Bit0 == 1) |
2Byte (Int16) |
位置(角度)データ[1/100°] |
|
速度 (Bit1 == 1) |
2Byte (Int16) |
速度データデータ[1/10°/S] (例:1000=100°/S) |
|
電流値 (Bit2 == 1) |
2Byte (Int16) |
電流データデータ[mA] | |
トルク (Bit3 == 1) |
2Byte (Int16) |
トルクデータデータ[mN・m] (例:1000=1N・m) |
|
モータ出力 (Bit4 == 1) |
2Byte (Int16) |
モータ出力(PWM)データ[デューティ比1/100%] (例:10000=100%) |
|
モータ温度 (Bit5 == 1) |
2Byte (Int16) |
モータ温度[1/10℃] (例:300=30℃) |
|
CPU温度 (Bit6 == 1) |
2Byte (Int16) |
CPU温度データ[1/10℃] (例:300=30℃) |
|
電圧 (Bit7 == 1) |
2Byte (Int16) |
入力電圧値データ[mV] | |
メモリマップの「応答データ指定」で指定したデータがサーボから返ってきます。例えば位置(Bit0)と速度(Bit1)、電流値(Bit2)の読み出しを指定した場合は、「データ2」に6Byte(2 + 2 + 2(Byte))のデータが返ってきます。データが返ってくる順番は、Bit0からになります。
0x00を指定するとデータなしで返事を受け取ることができます。
「応答データ指定」のデータを書き換える場合は、MemWRITEコマンドを使用してください。
応答データ指定 アドレス:502 数値型:Byte バイト数:1
Byte | 項目 | 返信されるデータサイズ |
Bit0 | 現在位置 | 2Byte |
Bit1 | 現在速度 | 2Byte |
Bit2 | 現在電流値 | 2Byte |
Bit3 | 現在推定トルク | 2Byte |
Bit4 | PWM出力割合 | 2Byte |
Bit5 | モータ温度 | 2Byte |
Bit6 | CPU温度 | 2Byte |
Bit7 | 入力電圧 | 2Byte |
※現在位置は「制御モード」の設定により読み出されるデータ型が異なります。詳しくはこちらをご参照ください。
エラーが発生しても、「応答データ指定」で指定した数のデータが空のデータ(0x00)として受信パケットに含まれて返ってきますので、受信パケットのパケット長は変わりません(詳細情報)。
使用例1
「制御モード」で「位置制御」「電流制御」を指定し、「応答データ指定」で「位置」「電流」「モータ温度」に設定されているID0のサーボの場合
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0C | |
コマンド | 0xA5 | |
オプション | 0x00 | |
動作指令データ | 位置制御 | 0x88 0x13(5000) |
電流制御 | 0x2C 0x01(300) | |
CRC16 | 0x7F 0x84 |
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0F | |
コマンド | 0x25 | |
ステータス | 0x00 | |
トルクスイッチの状態 | 0x00 | |
受信データ (応答データ) |
位置 | 0xB8 0x0B(3000) |
電流 | 0xC8 0x00(200) | |
モータ温度 | 0x18 0x01(280) | |
CRC16 | 0x16 0x5E |
使用例2
「トルクスイッチ」でTorqueONを実行、「応答データ指定」で「位置」「電流」「モータ温度」に設定されているID0のサーボの場合
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0C | |
コマンド | 0xA5 | |
オプション | 0x01(TorqeON) | |
CRC16 | 0x2A 0x66 |
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0F | |
コマンド | 0x25 | |
ステータス | 0x00 | |
トルクスイッチの状態 | 0x01 | |
受信データ (応答データ) |
位置 | 0xB8 0x0B(3000) |
電流 | 0xC8 0x00(200) | |
モータ温度 | 0x18 0x01(280) | |
CRC16 | 0x77 0xE6 |
「オプション」を変更することでFree (0x02), Brake (0x04), Hold (0x08)を指定することができます。
使用例3
「応答データ指定」で「位置」「電流」「モータ温度」に設定されているID0のサーボをFreeにする場合
送信パケット | データ |
ヘッダ | 0xFE 0xFE |
ID番号 | 0x00 |
パケット長 | 0x0C |
コマンド | 0xA5 |
オプション | 0x02(Free) |
CRC16 | 0x49 0x56 |
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0F | |
コマンド | 0x25 | |
ステータス | 0x00 | |
トルクスイッチの状態 | 0x00 | |
受信データ (応答データ) |
位置 | 0xB8 0x0B(3000) |
電流 | 0xC8 0x00(200) | |
モータ温度 | 0x18 0x01(280) | |
CRC16 | 0x16 0x5E |
システム情報読み出し(SystemREAD)
サーボのシステム情報を読み出すコマンドです。シリアル番号、製品番号、ファームウェアバージョン番号、及びサーボ通信時の応答時間を読み出すことができます。シリアル番号は、SystemWRITEコマンドやFactoryResetコマンドなどを実行する際に必要になります。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0xBB |
+05 | オプション | 0x00 |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
・シリアル番号
PMXシリーズは、各サーボが固有のシリアル番号を持っています。SystemREADを実行するとサーボから4Byteのシリアル番号を読み出すことができます。
・製品番号
サーボモータの型番です。
・ファームウェアバージョン
ファームウェアのバージョン番号です。
・応答時間
サーボが命令を受け取り、返事を返すまでの時間です。[μs](マイクロ秒)単位で設定することができます。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x15(21) |
+04 | コマンド | 0x3B |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | シリアル番号 | 正常時:4Byteのシリアル番号が返ってきます。 エラー時:4Byteの0x00が返ってきます。 |
+07 | ||
+08 | ||
+09 | ||
+10 | 製品番号 | 正常時:4Byteの製品番号が返ってきます。 エラー時:4Byteの0x00が返ってきます。 |
+11 | ||
+12 | ||
+13 | ||
+14 | F/Wバージョン番号 | 正常時:4Byteのバージョン番号が返ってきます。 エラー時:4Byteの0x00が返ってきます。 |
+15 | ||
+16 | ||
+17 | ||
+18 | 応答時間 | 応答時間[μs](1~255) エラー時:1Byteの0x00が返ってきます。 |
+19 | CRC16 | +00~+18までのCRC16 |
+20 |
受信した4Byteの各データは、リトルエンディアンで格納されています。
シリアル番号は、SysemWRITEコマンドFactoryResetコマンドで使用する場合は、読み出したそのままの並びで送信パケットに代入することができます。
「ステータス」にエラーが発生しても、13Byteの空のデータ(0x00)が受信パケットに含まれて返ってきますので、受信パケットのパケット長は変わりません(詳細情報)。
使用例
ID0のサーボに対して、SystemREADコマンドを実行する
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0xBB | |
オプション | 0x00 | |
CRC16 | 0xB7 0x8A |
SystemREADコマンドが実行されたID0のサーボからの受信パケット
※シリアル番号はサーボ固有の番号です。また製品番号、F/Wバージョンは機種により異なります。下記の番号はサンプルです。
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x15(21Byte) | |
コマンド | 0x3B | |
ステータス | 0x00 | |
シリアル番号 | 0x78 0x56 0x34 0x12 | |
製品番号 | 0x12 0x34 0x56 0x78 | |
F/Wバージョン | 0x20 0x23 0x01 0x01 | |
応答時間 | 0xC8 | |
CRC16 | 0x0E 0xC9 |
SYSTEMデータ書き込み(SystemWRITE)
ID、通信速度、パリティ、及びサーボ通信時の応答時間を変更するコマンドです。変更の際は、誤動作を避けるためにシリアル番号でサーボを指定して処理を実行します。前述のSystemREADコマンドでサーボのシリアル番号を取得してから使用してください。
SystemWRITEコマンドは、ROM領域のデータを直接書き換えますので、データを保存するためにSAVEコマンドを実行する必要はありません。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x10(16) |
+04 | コマンド | 0xBC |
+05 | オプション | 変更するデータを指定 Bit0: ID番号の変更 Bit1: 通信速度の変更 Bit2: パリティの変更 Bit3: 応答時間の変更 |
+06 | シリアル番号 | SystemREADで読み出したシリアル番号 読み出した状態のままここに代入して使用することができます。 |
+07 | ||
+08 | ||
+09 | ||
+10 | IDデータ | 変更するID番号(0x00~0xEF(239)) |
+11 | 通信速度 | 【0x00】 57.60kbps 【0x01】115.20kbps 【0x02】625.00kbps 【0x03】 1.00Mbps 【0x04】 1.25Mbps 【0x05】 1.50Mbps 【0x06】 2.00Mbps 【0x07】 3.00Mbps |
+12 | パリティ | 【0x00】無し(None) 【0x01】奇数(Odd) 【0x02】偶数(Even) |
+13 | 応答時間 | サーボ返信時間[μs](1~255) |
+14 | CRC16 | +00~+13までのCRC16 |
+15 |
・応答時間
サーボが命令を受け取り、返事を返すまでの時間です。[μs](マイクロ秒)単位で設定することができます。応答時間は、出荷状態で最適な長さに設定されています。書き換えると通信状態に影響が出る可能性がありますので、通信環境によりやむを得ない場合にのみ書き換えてください。
通信速度が3Mbpsの場合は指定した応答時間+30μsで応答します、115.2kbpsの場合は+70μsです。
SAVE、SystemWRITE、FactoryResetコマンドは指定した応答時間+15msで応答します。
「オプション」の各Bitを1にすることで変更する項目を指定することができますので、変更しないパラメータに対して、現状と同じパラメータを代入する必要はありません。ただし、送信パケットのパケット長は21Byteである必要があります。設定しない項目にも0x00など適当なデータを入れて送信してください。「オプション」で指定されていないパラメータは破棄されます。
このコマンドを使用する場合は、サーボが個別に持っているシリアル番号が必要です。SystemREADコマンドでシリアル番号を取得してから使用してください。SystemREADコマンドで取得した4Byteのリトルエンディアンのシリアル番号は、読み出したそのままの並びで送信パケットに代入することができます。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x3C |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合はSystemWRITEコマンドが実行されません。エラーを解消してから再度コマンドを実行してください。
使用例
ID0のサーボに対してSystemWRITEコマンドを実行し、IDを1に、通信速度を3Mbpsに変更する。
※シリアル番号はサーボ固有の番号です。SystemREADでシリアル番号を読み出してから送信パケットに加えてください。
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x10(16Byte) | |
コマンド | 0xBC | |
オプション | 0x03(0b00000011) | |
シリアル番号 | 0x78 0x56 0x34 0x12 | |
IDデータ | 0x01 | |
通信速度 | 0x07 | |
パリティ | 0x00 | |
応答時間 | 0x00 | |
CRC16 | 0x74 0x3E |
SystemWRITEコマンドが実行されたID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0x3C | |
ステータス | 0x00 | |
CRC16 | 0xB8 0x08 |
再起動(ReBoot)
指定した時間が経過した後にサーボを再起動するコマンドです。
※ReBootを実行するとメモリマップのRAM領域に書き換えたパラメータはすべて消えます。保存する場合は、ReBootコマンドを実行する前にSAVEコマンドを実行してください。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストIDは使用不可) |
+03 | パケット長 | 0x0A(10) |
+04 | コマンド | 0xBD |
+05 | オプション | 0x00 |
+06 | リセット時間 | 実行時間[ms](0~65535ms) 【0x00~0xFF】下位データ |
+07 | 【0x00~0xFF】上位データ | |
+08 | CRC16 | +00~+7までのCRC16 |
+09 |
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x3D |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合はReBootコマンドが実行されません。エラーを解消してから再度コマンドを実行してください。
※ブロードキャストIDで全体に命令した場合は、受信パケットはありません。
使用例
ID0のサーボに対して、Rebootコマンドを実行する
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0A(10Byte) | |
コマンド | 0xBD | |
オプション | 0x00 | |
リセット時間 | 0x0A 0x00 | |
CRC16 | 0xBE 0xAF |
Rebootコマンドが実行されたID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0x3D | |
ステータス | 0x00 | |
CRC16 | 0x89 0x3B |
ROMの保存データを工場出荷データに更新(FactoryReset)
サーボに保存されているROM領域のデータを工場出荷時のデータに書き換えるコマンドです。変更の際は、誤動作を避けるためにシリアル番号でサーボを指定して処理を実行します。前述のSystemREADコマンドでサーボのシリアル番号を取得してから使用してください。
なお、FactoryResetは、ID番号、通信速度、パリティ、応答時間を書き換えませんので、FactoryResetを実行しても引き続き同じ通信設定のままサーボと通信することができます。
実行可能モード:Free(TorqueON, Brake, Holdでは実行できません。ステータスのモードエラーが返ってきます)
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストIDは使用不可) |
+03 | パケット長 | 0x0C(12) |
+04 | コマンド | 0xBE |
+05 | オプション | 0x00 |
+06 | シリアル番号 | SystemREADで読み出したシリアル番号 読み出した状態のままここに代入して使用することができます。 |
+07 | ||
+08 | ||
+09 | ||
+10 | CRC16 | +00~+09までのCRC16 |
+11 |
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x08 |
+04 | コマンド | 0x3E |
+05 | ステータス | エラー情報(正常時は0を返します) B7実行, B6データ, B5モード, B4 RAM, B3 コマンド, B2 通信, B1 モータ, B0 システム |
+06 | CRC16 | +00~+05までのCRC16 |
+07 |
サーボが、FactoryResetを実行する前に返事が返ってきます。
コマンド実行時にサーボにエラーが発生すると、受信パケットの「ステータス」でエラー内容を返します。エラーが発生した場合は,FactoryResetコマンドが実行されません。エラーを解消してから再度コマンドを実行してください。
※ブロードキャストIDで全体に命令した場合は、受信パケットはありません。
使用例
ID0のサーボに対して、FactoryResetコマンドを実行する
※シリアル番号はサーボ固有の番号です。SystemREADでシリアル番号を読み出してから送信パケットに加えてください。
送信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x0C(12Byte) | |
コマンド | 0xBE | |
オプション | 0x00 | |
シリアル番号 | 0x78 0x56 0x34 0x12 | |
CRC16 | 0xC1 0x9C |
FactoryResetコマンドが実行されたID0のサーボからの受信パケット
受信パケット | データ | |
ヘッダ | 0xFE 0xFE | |
ID番号 | 0x00 | |
パケット長 | 0x08 | |
コマンド | 0x3E | |
ステータス | 0x00 | |
CRC16 | 0x42 0x75 |
5.エラー状態
ステータスのエラー情報
サーボに問題が発生した場合、サーボから返ってくる受信パケット内の「ステータス」を確認することで、サーボのエラー状態を知ることができます。エラーが発生すると「ステータス」の対象のBitが1になります。
受信パケット「ステータス」詳細
Bit (LSB順) |
状態 | 内容 |
Bit0 | システムエラー | Watchdog、ROM、入力電圧、CPU温度のエラー |
Bit1 | モータエラー | 位置、電流、ロック検知、モータ温度、ホールICのエラー |
Bit2 | 通信エラー | 通信状態が原因によるエラー |
Bit3 | コマンドエラー | コマンド番号の不一致や、オプションの設定可能範囲外など |
Bit4 | RAMアクセス エラー |
RAMへのデータ読み出し、書き込みで指定したアドレスがアクセス許可範囲外の場合、範囲外アドレスの先頭アドレスを通知します。 |
Bit5 | モードエラー | トルクスイッチの状態で使用できないモードのまま実行した場合のエラー |
Bit6 | データエラー | 設定範囲外のデータを送信した場合のエラー |
Bit7 | 実行エラー | エラーが発生し、命令が実行されなかった場合に1になる |
例えば、「モータエラー」が発生した場合は、受信パケットの「ステータス」が0x02になります。
※送信パケットのヘッダ、ID、パケット長、CRC16の不一致が原因のエラーに対しては、サーボからの返答はありません。その他機種用のコマンドや異常パケットなどの例外に対して、多数のサーボが返答して通信線内が混雑しないように例外パケットを無視する仕様になっています。
エラーに関連するメモリマップ
・エラーステータス(アドレス:400)
エラーの総合的な内容が通知されます。受信パケットの「ステータス」と同じ内容です。
・システムエラー(アドレス:401)
「エラーステータス」で通知されたシステムエラーの詳細です。Watchdog、ROM、入力電圧、CPU温度にエラーが発生するとフラグが立ちます。
・モータエラー(アドレス:402)
「エラーステータス」で通知されたモータエラーの詳細です。サーボの位置(角度)、消費電流、ロック検知、モータ温度、ホールICにエラーが発生するとフラグが立ちます。
・RAMアクセスエラー(アドレス:404, 405)
MemREADコマンドやMemWRITEコマンドなどメモリマップのアドレスを指定して実行するコマンドで、アクセス許可範囲外のアドレスを指定した時に、許可範囲外のアドレスの先頭アドレスを通知します。
エラーフラグの解除方法
エラーが発生した場合は、メモリマップの該当するエラーの各アドレスをMemREADコマンドで読み出すことでエラーが解除されます。
詳細通知がある「システムエラー(401)」「モータエラー(402)」「RAMアクセスエラー(404, 405)」でエラーが発生した場合は、「エラーステータス(400)」だけを読んでも401~405までのエラーは解除されません。「ステータスエラー(400)」に加えて各エラーの詳細も読み出してください。
何度も読み出しをする時間を削減したい場合は、MemREADで「ステータスエラー(400)」を先頭アドレスに6Byte指定することで一気にエラー通知を読み出し、エラーを解除することができます。
温度エラーや入力電圧エラーなど設定した閾値を上回って発生したエラーの場合は、エラーの原因を解決しない限りエラーをリセットしても再びエラーになります。
エラーが発生した場合の受信パケットのバイト数
MemREADコマンドやMotorREADコマンドなど、サーボの情報を読み出すコマンドを実行したときに、サーボに問題が発生し受信パケットの「ステータス」エラーがある場合は、データを正常に読み出せない場合があります。その際に、受け取るはずだったデータ分のバイトがない状態でサーボからパケットを受け取ると、予定していないバイト数により例外を引き起こす恐れがありますが、PMXはエラーが発生しても送信パケットで指定した数のデータが空のデータ(0x00)として受信パケットに含まれて返ってくる仕様になっていますので、エラー時でも受信パケットのパケット長は変わりません。
例)ステータスにエラーがあった場合(読み出すデータを2Byteに指定)
受信パケット | データ |
ヘッダ | 0xFE 0xFE |
ID番号 | 0x00 |
パケット長 | 0x10 |
コマンド | 0x20 |
ステータス | 0x08 |
データ | 0x00 0x00 |
CRC16 | 0xBF 0xA8 |
通常は2Byteのデータが返ってきますが、エラーが発生したため空データの0x00が「データ」として2Byte返ってきます。空データが含まれることでエラーが発生してもパケット長は正常時と変わりません。
ステータスエラーの詳細がないエラー項目
受信パケットの「ステータス」、及び「ステータスエラー(400)」の内容で詳細がない項目の解説をします。システムエラー、モータエラーについては次項で解説します。
・通信エラー
通信状態の悪化などが原因により、サーボにエラーが発生した場合に通知されます。
・コマンドエラー
パケット内のコマンド番号の不一致や、オプションで指定できる範囲を超えた設定値の場合に通知されるエラーです。コマンドエラーが発生した場合は、コントローラから送信されるパケットの内容を確認してください。
・モードエラー
コマンドの種類によっては、トルクスイッチのTorqueON、Free、Brake、Hpldの指定状態により実行できない場合があります。実行できないモードのままコマンドの実行命令を送信すると、モードエラーとしてコマンドは実行されず、エラー通知が返ってきます。コマンドの実行可否については、各コマンドの詳細をご参照ください。
・データエラー
データエラーは、設定可能範囲を超えたデータを指定した場合に通知されるエラーです。MotorWRITEの動作指令データや、MemWRITEの各種設定値など、指定できる値は最小値、最大値を決められている場合があります。最小値、最大値はサーボのスペックにより異なります。メモリマップの「指令制限値」(アドレス600番台)をMemREADコマンドで読み出して確認してください。
・実行エラー
ステータスエラーに何らかのエラーが発生した場合、そのまま命令を実行する場合と、命令を中止する場合に分かれます。この「実行エラー」は、サーボが命令をうけとったとき処理が中止された場合に1になりますので、サーボの命令が実行されたかを知ることができます。
例えば、設定可能範囲を超えてデータを書き込もうとしたときは「データエラー」になり命令が実行されませんので「実行エラー」も1になります。また、入力電圧が閾値より低い場合を示す「入力電圧エラー」の状態でMemWRITEを実行した場合は、データの書き換えは実行されますので「実行エラー」は0になります(「入力電圧エラー」と「システムエラー」が1になります)。
「システムエラー」詳細を読み出す
システム関連でエラーが発生すると「システムエラー」として通知されます。エラーの詳細を読み出す方法は下記の通りです。
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x0B(11) |
+04 | コマンド | 0xA0(MemREAD) |
+05 | オプション | 0x00 |
+06 | 先頭アドレス | 0x91(0x191(401)の下位アドレス) |
+07 | 0x01(0x191(401)の上位アドレス) | |
+08 | 読出データ数 | 0x01(1Byte読み出し) |
+09 | CRC16 | +00~+08までのCRC16 |
+10 |
エラーが発生したサーボのIDを指定し、この送信パケットをサーボに送信してください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x09(9) |
+04 | コマンド | 0x20 |
+05 | ステータス | エラー情報(サーボの状態によります) |
+06 | データ | システムの状態が返ってきます。詳細は下記の表を参照してください。 |
+07 | CRC16 | +00~+06までのCRC16 |
+08 |
システムエラー詳細
Bit (LSB順) |
状態 | 内容 |
Bit0 | Watchdog | Watchdog timerが起動したときに通知されるエラーです。 |
Bit1 | ROM | ROMの書き込み、読み出しに失敗した場合にエラーになります。 |
Bit2 | 入力電圧 | 電源電圧の下限、上限閾値より電圧が超えるとエラーになります。 |
Bit3 | CPU温度 | CPUが設定された閾値の温度を上回るとエラーになります。 |
Bit4 | なし | |
Bit5 | なし | |
Bit6 | なし | |
Bit7 | なし |
・Watchdogエラー
何かしらの原因によりWatchdog Timerが起動した場合に「Watchdogエラー」が通知されます。Watchdog Timerが起動するとサーボ内の処理がすべてリセットされ、リセット完了後に「Watchdogエラー」のフラグが1になり、エラーとして処理されます。
Watchdog Timerが起動すると内部処理が再起動されROMのデータが自動でLOADされますが、RAMに展開していたデータはすべてリセットされてしまいますのでご注意ください。
・ROMエラー
主にマネージャソフトを使用し、ブートローダーでファームウェアを書き換えている最中に発生する可能性があるエラーです。「ROMエラー」が発生した場合は、再度ブートローダーでプログラムを書き直す必要があります。または、フラッシュメモリ自体が破損している場合は修理が必要です。
・入力電圧エラー
電源電圧が、「入力電圧最小値設定」、または「入力電圧最大値設定」で設定した閾値の範囲から外れた場合に通知されるエラーです。このエラーが発生すると、サーボの出力が「入力電圧最小時の出力%値」、または「入力電圧最大時の出力%値」で指定した%値に落ちます。エラー詳細を読み出すことでフラグがリセットされますが、電源電圧が閾値から外れている場合は、再度エラーが通知されます。このエラーが通知された場合は、まず電源電圧を確認してください。
・CPU温度エラー
サーボのCPUが「CPU温度最大値設定」以上になった場合に通知されるエラーです。このエラーが発生すると、サーボの出力が「CPU温度最大時の出力%値」で指定した%値に落ちます。エラーの詳細を読み出すことでエラーフラグがリセットされますが、依然としてCPUの発熱が収まっていない場合は、再度エラーが通知されます。一度電源をOFFにしてサーボを休ませることをお勧めします。
「モータエラー」詳細を読み出す
モータに異常があった場合に「モータエラー」が通知されます。エラーの詳細を読み出す方法は下記の通りです。
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x0B(11) |
+04 | コマンド | 0xA0(MemREAD) |
+05 | オプション | 0x00 |
+06 | 先頭アドレス | 0x92(0x192(402)の下位アドレス) |
+07 | 0x01(0x192(402)の上位アドレス) | |
+08 | 読出データ数 | 0x01(1Byte読み出し) |
+09 | CRC16 | +00~+08までのCRC16 |
+10 |
エラーが発生したサーボのIDを指定し、この送信パケットをサーボに送信してください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x09(9) |
+04 | コマンド | 0x20 |
+05 | ステータス | エラー情報(サーボの状態によります) |
+06 | データ | モータの状態が返ってきます。詳細は下記の表を参照してください。 |
+07 | CRC16 | +00~+06までのCRC16 |
+08 |
モータエラー詳細
Bit (LSB順) |
状態 | 内容 |
Bit0 | 位置 | サーボの目標指令値が指定範囲外、またはサーボの現在位置が動作可能範囲外にあるとエラーになります。 |
Bit1 | 電流 | サーボから検出した電流値が設定された閾値を上回るとエラーになります。 |
Bit2 | ロック | サーボがロックしていることを検知するとエラーになります。 |
Bit3 | モータ温度 | モータが設定された閾値の温度を上回るとエラーになります。 |
Bit4 | ホールIC | ブラシレスモータに内蔵されたホールICから異常な値が検出されるとエラーになります。 |
Bit5 | なし | |
Bit6 | なし | |
Bit7 | なし |
・現在位置エラー
サーボの現在位置が「位置制御時CW方向最大角値」、または「位置制御時CCW方向最大角値」以上になった場合に通知されるエラーです。このエラーが発生すると、サーボの出力が「位置制御時CW方向最大角閾値外時の出力%値」、または「位置制御時CCW方向最大角閾値外時の出力%値」で指定した%値に落ちます。稼働範囲が限られている個所に最大角度を設定しておくこと関節とフレームの干渉などを防ぐことができますが、電源投入直後など設定範囲内にサーボの位置がある場合にこのエラーが通知されます。一度ロボットの電源をOFFにし、姿勢を範囲内の位置に修正してから電源を入れてください。
・モータ電流エラー
モータの電流が「モータ消費電流最大値設定」以上になった場合に通知されるエラーです。このエラーが発生すると、サーボの出力が「モータ消費電流最大時の出力%値」で指定した%値に落ちます。モータの出力軸に対する負荷が大きすぎる場合に発生しますので、エラーが発生した場合は負荷を減らす必要があります。負荷の状態を確認してから再度ご利用ください。
・モータロックエラー
サーボが動作指示を受けモータに対して電気を流しているが、サーボとフレームの干渉などが原因により動作できない状態をロック状態とよびます。また、サーボの出力軸に対する負荷が大きすぎると軸が回転することができず同様にロック状態となります。ロック状態は過剰な電流が流れ続けていますので、モータや基板が破損する可能性があります。「モータロックエラー」は「ロックと認識される出力割合」の期間が「ロック時間閾値」の間経過するとエラーが通知されます。このエラーが発生すると、サーボの出力が「ロック時間の出力%値」で指定した%値に落ちます。ロックエラーが通知された場合は、速やかにサーボの電源をOFFにし、各関節の状態を確認してください。
・モータ温度エラー
モータの温度が「モータ温度最大値設定」以上になった場合に通知されるエラーです。このエラーが発生すると、サーボの出力が「モータ温度最大時の出力%値」で指定した%に落ちます。エラーの詳細を読み出すことでエラーフラグがリセットされますが、依然としてモータの発熱が収まっていない場合は、再度エラーが通知されます。一度電源をOFFにしてモータを休ませることをお勧めします。
・ホールICエラー(ブラシレスモータ搭載時のみ)
ブラシレスモータに内蔵しているホールICに異常値があった場合にエラーを通知します。モータが故障している可能性がありますので、エラーが解消されない場合は修理をご依頼ください。
コアレスモータなどホールICを持たないモータを搭載している場合は通知されません。
「RAMアクセスエラー」詳細を読み出す
MemREADや、MemWRITEコマンドでメモリマップのアドレスを指定する際に、アクセス範囲外のアドレスを指定した場合は「RAMアクセスエラー」が通知されます。「RAMアクセスエラー」が発生した場合は、読み出し、書き込みは実行されません。エラーの詳細を読み出す方法は下記の通りです。
送信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239)(ブロードキャストID使用不可) |
+03 | パケット長 | 0x0B(11) |
+04 | コマンド | 0xA0(MemREAD) |
+05 | オプション | 0x00 |
+06 | 先頭アドレス | 0x94(0x194(404)の下位アドレス) |
+07 | 0x01(0x194(404)の上位アドレス) | |
+08 | 読出データ数 | 0x02(2Byte読み出し) |
+09 | CRC16 | +00~+08までのCRC16 |
+10 |
エラーが発生したサーボのIDを指定し、この送信パケットをサーボに送信してください。
受信パケット
Byte | 項目 | 内容 |
+00 | ヘッダ | 0xFE |
+01 | 0xFE | |
+02 | ID番号 | 0x00~0xEF(239) |
+03 | パケット長 | 0x0A(10) |
+04 | コマンド | 0x20 |
+05 | ステータス | エラー情報(サーボの状態によります) |
+06 | データ | RAMへの読み出し、書き込みで範囲外で指定しエラーが発生した先頭アドレスが返ってきます。エラーがない場合は0x00が返ってきます。 |
+07 | ||
+08 | CRC16 | +00~+07までのCRC16 |
+09 |
受信パケットの「データ」により、エラーが発生したアドレスを知ることができます。サーボから受け取った2Byteのアドレスデータは、リトルエンディアンで格納されています。アドレスを確認し、プログラムを修正してください。
6.メモリマップ
この章は、メモリマップのRAM領域に関する解説です。メモリマップのデータを書き換えることで、各機能の閾値を変更したり、サーボを制御することができます。またサーボの動作特性を変更することも可能です。各機能のパラメータは、データが書き換わった時点で機能に反映されます。
表の項目について
・アドレス:メモリマップでデータの所在地を示す数値です。データのサイズが2Byte以上ある場合、「アドレス」はデータの先頭アドレスが表記されています。
・サイズ:データの長さです。Byte単位で表記されています。
・型
型 | 内容 |
Int32 | 符号あり32bit整数型 |
Uint32 | 符号なし32bit整数型 |
Int16 | 符号あり16bit整数型 |
Uint16 | 符号なし16bit整数型 |
Byte | 符号なし8bit整数型 |
・単位
単位 | 内容 |
bps | データ転送レートの単位 |
deg | 角度の単位(度) |
℃ | 温度の単位 |
mA | 電流の単位(1/1,000A) |
mV | 電圧の単位(1/1,000V) |
deg/sec | 1秒間で移動する角度 |
Nm | トルクの単位 |
μs | 1,000,000秒 |
ms | 1/1,000秒 |
sec | 秒の単位 |
Hz | 周波数の単位 |
・属性
属性 | 内容 |
R/W | Read / Write 読み込み・書き込みが出来ます。 書き換えるとシステムの挙動が変化するパラメーターです。 |
RO | Read Only 読み込みのみ可能です。 |
各パラメータの設定範囲について
MemWRITEコマンドで設定できるデータ範囲は、サーボの限界値を超えて設定されないように機種ごとに最小値、最大値が決まっている場合があります。制限値を超えてデータを送信した場合、サーボからはステータスに「データエラー」のフラグを立てて返事を返します。最小値、最大値は機種ごとに異なる場合があります。メモリマップの「指令制限値」(アドレス600番台)をMemREADコマンドで読み出して確認してください。
また、下記のページでサーボパラメータの一覧表を公開しています。こちらのアドレス600番台が該当しますので、参考にしてください。
『PMXサーボ初期値一覧表』(準備中)
データの変更について
MemWRITEコマンドの送信パケットの「オプション」を0にして送信した場合は、サーボの「トルクスイッチ」がFree、Brake、Holdの時にのみ反映されます。TorqueONの時は反映されませんので、パラメータ設定の変更が必要な場合はサーボが動き出す前に変更するか、一度停止してFree、またはBrake、Holdに変更してから書き換えてください。
「オプション」を1にして送信すると、TorqueONの状態でも書き込んだデータが反映されます。ただし、PIDゲインなど動作に影響するパラメータを極端に変更すると、思わぬ動作をする場合がありますので、なるべく停止してから値を変更してください。
データの保存について
設定値の書き換えはMemWRITEコマンドを使用しますが、RAM領域のデータを書き換えますので電源をOFFにすると設定値が書き換え前に戻ります。MemWRITEコマンドで書き換えた設定値を保存する場合はSAVEコマンドを実行してから電源をOFFにしてください。
ID、通信速度、パリティ、応答時間の変更について
ID、通信速度、パリティ、応答時間の変更はSystemWRITEコマンドを使用します。SystemWRITEで書き換えたデータは、ROM領域のデータが直接書き換わりますのでSAVEコマンドにより保存する必要はありません。
※安全機能について
PMXサーボには、電源電圧や消費電流など各データを監視することで、自動で出力を落とし誤動作や破損を防ぐ機能が備わっています。ただし、これらの機能は完全に誤動作、破損を防ぐことはできません。本機能は予防処置とし、適切な電圧、負荷でご利用いただきますようお願いします。
メモリマップ一覧
2024.1.12 Ver.1.0.1.0からの機能として「電流制御時のショートブレーキ指定」などを追記
名称 | アドレス | サイズ | 型 | 属性 |
位置制御ゲイン Kp | 0 | 4 | Uint32 | R/W |
位置制御ゲイン Ki | 4 | 4 | Uint32 | R/W |
位置制御ゲイン Kd | 8 | 4 | Uint32 | R/W |
位置制御ストレッチ | 12 | 4 | Uint32 | R/W |
速度制御ゲイン Kp | 16 | 4 | Uint32 | R/W |
速度制御ゲイン Ki | 20 | 4 | Uint32 | R/W |
速度制御ゲイン Kd | 24 | 4 | Uint32 | R/W |
(Reserved) | 28 | 4 | Uint32 | R/W |
電流制御ゲイン Kp | 32 | 4 | Uint32 | R/W |
電流制御ゲイン Ki | 36 | 4 | Uint32 | R/W |
電流制御ゲイン Kd | 40 | 4 | Uint32 | R/W |
(Reserved) | 44 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp | 48 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki | 52 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd | 56 | 4 | Uint32 | R/W |
(Reserved) | 60 | 4 | Uint32 | R/W |
位置制御不感帯 | 64 | 2 | Int16 | R/W |
速度制御不感帯 | 66 | 2 | Int16 | R/W |
電流制御不感帯 | 68 | 2 | Int16 | R/W |
トルク制御不感帯 | 70 | 2 | Int16 | R/W |
中央値オフセット | 72 | 2 | Int16 | R/W |
クローン・リバース設定 | 74 | 1 | Byte | R/W |
入力電圧最小値設定 | 76 | 2 | Uint16 | R/W |
入力電圧最小時の出力%値 | 78 | 2 | Uint16 | R/W |
入力電圧最大値設定 | 80 | 2 | Uint16 | R/W |
入力電圧最大時の出力%値 | 82 | 2 | Uint16 | R/W |
モータ消費電流最大値設定 | 84 | 2 | Uint16 | R/W |
モータ消費電流最大時の出力%値 | 86 | 2 | Uint16 | R/W |
モータ温度最大値設定 | 88 | 2 | Int16 | R/W |
モータ温度最大時の出力%値 | 90 | 2 | Uint16 | R/W |
CPU温度最大値設定 | 92 | 2 | Int16 | R/W |
CPU温度最大時の出力%値 | 94 | 2 | Uint16 | R/W |
CW方向最大角値 | 96 | 2 | Int16 | R/W |
CW方向最大角閾値外時の出力%値 | 98 | 2 | Uint16 | R/W |
CCW方向最大角値 | 100 | 2 | Int16 | R/W |
CCW方向最大角閾値外時の出力%値 | 102 | 2 | Uint16 | R/W |
最大速度指令値 | 104 | 2 | Int16 | R/W |
最大電流指令値 | 106 | 2 | Int16 | R/W |
最大動推定トルク指令値 | 108 | 2 | Int16 | R/W |
モータ総出力割合%値 | 110 | 2 | Uint16 | R/W |
ロック時間設定 | 112 | 2 | Uint16 | R/W |
ロックと認識される出力割合 | 114 | 2 | Uint16 | R/W |
ロック時間の出力%値 | 116 | 2 | Uint16 | R/W |
位置制御ゲインプリセット | 118 | 1 | Byte | R/W |
速度制御ゲインプリセット | 119 | 1 | Byte | R/W |
電流制御ゲインプリセット | 120 | 1 | Byte | R/W |
トルク制御ゲインプリセット | 121 | 1 | Byte | R/W |
位置制御ゲイン Kp2 | 124 | 4 | Uint32 | R/W |
位置制御ゲイン Ki2 | 128 | 4 | Uint32 | R/W |
位置制御ゲイン Kd2 | 132 | 4 | Uint32 | R/W |
位置制御ストレッチ2 | 136 | 4 | Uint32 | R/W |
速度制御ゲイン Kp2 | 140 | 4 | Uint32 | R/W |
速度制御ゲイン Ki2 | 144 | 4 | Uint32 | R/W |
速度制御ゲイン Kd2 | 148 | 4 | Uint32 | R/W |
(Reserved) | 152 | 4 | Uint32 | R/W |
電流制御ゲイン Kp2 | 156 | 4 | Uint32 | R/W |
電流制御ゲイン Ki2 | 160 | 4 | Uint32 | R/W |
電流制御ゲイン Kd2 | 164 | 4 | Uint32 | R/W |
(Reserved) | 168 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp2 | 172 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki2 | 176 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd2 | 180 | 4 | Uint32 | R/W |
(Reserved) | 184 | 4 | Uint32 | R/W |
位置制御ゲイン Kp3 | 188 | 4 | Uint32 | R/W |
位置制御ゲイン Ki3 | 192 | 4 | Uint32 | R/W |
位置制御ゲイン Kd3 | 196 | 4 | Uint32 | R/W |
位置制御ストレッチ3 | 200 | 4 | Uint32 | R/W |
速度制御ゲイン Kp3 | 204 | 4 | Uint32 | R/W |
速度制御ゲイン Ki3 | 208 | 4 | Uint32 | R/W |
速度制御ゲイン Kd3 | 212 | 4 | Uint32 | R/W |
(Reserved) | 216 | 4 | Uint32 | R/W |
電流制御ゲイン Kp3 | 220 | 4 | Uint32 | R/W |
電流制御ゲイン Ki3 | 224 | 4 | Uint32 | R/W |
電流制御ゲイン Kd3 | 228 | 4 | Uint32 | R/W |
(Reserved) | 232 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp3 | 236 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki3 | 240 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd3 | 244 | 4 | Uint32 | R/W |
(Reserved) | 248 | 4 | Uint32 | R/W |
現在位置 | 300 | 2 | Int16/ Uint16 |
RO |
現在速度 | 302 | 2 | Int16 | RO |
現在電流値 | 304 | 2 | Int16 | RO |
出力推定トルク | 306 | 2 | Int16 | RO |
現在のPWM出力割合 | 308 | 2 | Int16 | RO |
モータ温度 | 310 | 2 | Int16 | RO |
CPU温度 | 312 | 2 | Int16 | RO |
入力電圧 | 314 | 2 | UInt16 | RO |
現在の補間時間 | 316 | 2 | Uint16 | RO |
エンコーダの現在値 | 318 | 2 | Uint16 | RO |
エラーステータス | 400 | 1 | Byte | RO |
システムエラー | 401 | 1 | Byte | RO |
モータエラー | 402 | 1 | Byte | RO |
RAMアクセスエラー | 404 | 2 | Uint16 | RO |
トルクスイッチ | 500 | 1 | Byte | R/W |
制御モード | 501 | 1 | Byte | R/W |
応答データ指定 | 502 | 1 | Byte | R/W |
補間制御軌道生成タイプ指定 | 503 | 1 | Byte | R/W |
電流制御時のショートブレーキ指定 | 530 | 1 | Byte | R/W |
トルク制御時のショートブレーキ指定 | 531 | 1 | Byte | R/W |
PWM制御時のショートブレーキ指定 | 532 | 1 | Byte | R/W |
LED点灯モード | 533 | 1 | Byte | R/W |
中央値オフセット 最小値 | 600 | 2 | Int16 | RO |
中央値オフセット 最大値 | 602 | 2 | Int16 | RO |
入力電圧最小制限値 最小値 | 604 | 2 | Uint16 | RO |
入力電圧最小制限値 最大値 | 606 | 2 | Uint16 | RO |
入力電圧最大制限値 最小値 | 608 | 2 | Uint16 | RO |
入力電圧最大制限値 最大値 | 610 | 2 | Uint16 | RO |
フェールセーフ電圧 最小値 | 612 | 2 | Uint16 | RO |
フェールセーフ電圧 最大値 | 614 | 2 | Uint16 | RO |
モータ消費電流設定値 最小値 | 616 | 2 | Uint16 | RO |
モータ消費電流設定値 最大値 | 618 | 2 | Uint16 | RO |
モータ温度設定値 最小値 | 620 | 2 | Int16 | RO |
モータ温度設定値 最大値 | 622 | 2 | Int16 | RO |
CPU温度設定値 最小値 | 624 | 2 | Int16 | RO |
CPU温度設定値 最大値 | 626 | 2 | Int16 | RO |
CW方向最大値 最小値 | 628 | 2 | Int16 | RO |
CW方向最大値 最大値 | 630 | 2 | Int16 | RO |
CCW方向最大値 最小値 | 632 | 2 | Int16 | RO |
CCW方向最大値 最大値 | 634 | 2 | Int16 | RO |
最大速度設定値 最小値 | 636 | 2 | Int16 | RO |
最大速度設定値 最大値 | 638 | 2 | Int16 | RO |
最大電流設定値 最小値 | 640 | 2 | Int16 | RO |
最大電流設定値 最大値 | 642 | 2 | Int16 | RO |
最大トルク設定値 最小値 | 644 | 2 | Int16 | RO |
最大トルク設定値 最大値 | 646 | 2 | Int16 | RO |
目標指令値1 | 700 | 2 | Int16 | R/W |
目標指令値2 | 702 | 2 | Int16 | R/W |
目標指令値3 | 704 | 2 | Int16 | R/W |
PIDゲイン1
名称 | アド レス |
サイズ (Byte) |
型 | 属性 |
位置制御ゲイン Kp1 | 0 | 4 | Uint32 | R/W |
位置制御ゲイン Ki1 | 4 | 4 | Uint32 | R/W |
位置制御ゲイン Kd1 | 8 | 4 | Uint32 | R/W |
位置制御ストレッチ1 | 12 | 4 | Uint32 | R/W |
速度制御ゲイン Kp1 | 16 | 4 | Uint32 | R/W |
速度制御ゲイン Ki1 | 20 | 4 | Uint32 | R/W |
速度制御ゲイン Kd1 | 24 | 4 | Uint32 | R/W |
(Reserved) | 28 | 4 | Uint32 | R/W |
電流制御ゲイン Kp1 | 32 | 4 | Uint32 | R/W |
電流制御ゲイン Ki1 | 36 | 4 | Uint32 | R/W |
電流制御ゲイン Kd1 | 40 | 4 | Uint32 | R/W |
(Reserved) | 44 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp1 | 48 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki1 | 52 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd1 | 56 | 4 | Uint32 | R/W |
(Reserved) | 60 | 4 | Uint32 | R/W |
ゲインについて
各ゲイン値を変更すると即座に制御に反映されます。
Pゲイン
・Pゲインは比例ゲインのことで、目標値と現在値の誤差(偏差)に対して、比例的に入力値(操作量)を変化させるための倍率(利得)のことです。
・Pゲインを減らすと比例的に入力値が減るため、モータのパワー・スピードともに減ります。大きくすると動作が振動的になります。
Dゲイン
・Dゲインは微分ゲインのことで、目標値と現在値の偏差に対して、比例的に操作量を変化させるための倍率(利得)のことです。
・Dゲインは位置変化の傾きに寄与するため、応答が振動的になるのを抑制し収束しやすくなります。
Iゲイン
・Iゲインは積分ゲインのことで、目標値と現在値の偏差の累積値(積分値)に対して、比例的に操作量を変化させるための倍率(利得)のことです。
・Iゲインを大きくすると目標値と現在値の差分を小さくするようになり、他のP/D制御で到達できない部分を補います。ただし偏差が0の状態または積分値が小さいような、主に応答開始時の反応が遅れるようになります。
位置制御ストレッチ
位置制御時の出力軸の柔らかさを調整するための設定値です。1~127まで指定することができます。こちらの数値を下げるほど軸が柔らかくなります。処理としては、ストレッチの値を元にPゲインの数値を下げています。Pゲインを直接下げることにより同様の効果を得ることができます。
計算式: 位置制御Pゲイン = 位置制御Pゲイン × 位置制御ストレッチ(%)
PIDゲインプリセット
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
位置制御ゲインプリセット | 118 | 1 | Byte |
【0x00】自動 【0x01】ゲイン1 【0x02】ゲイン2 【0x03】ゲイン3 |
R/W |
速度制御ゲインプリセット | 119 | 1 | Byte | R/W | |
電流制御ゲインプリセット | 120 | 1 | Byte | R/W | |
トルク制御ゲインプリセット | 121 | 1 | Byte | R/W |
PIDゲインのプリセットを切り替えることができます。プリセットは「位置制御」「速度制御」「電流制御」「トルク制御」ごとにまとめて切り替わります。1を指定すると「PIDゲイン1」が選択されます。2、3も同様です。0は各制御モードや組み合わせに適したプリセットに自動で切り替わります。目的がない限り0のまま使用することをお勧めします。4以上を指定するとデータエラーになります。
PIDゲイン2・3
名称 | アド レス |
サイズ (Byte) |
型 | 属性 |
位置制御ゲイン Kp2 | 124 | 4 | Uint32 | R/W |
位置制御ゲイン Ki2 | 128 | 4 | Uint32 | R/W |
位置制御ゲイン Kd2 | 132 | 4 | Uint32 | R/W |
位置制御ストレッチ2 | 136 | 4 | Uint32 | R/W |
速度制御ゲイン Kp2 | 140 | 4 | Uint32 | R/W |
速度制御ゲイン Ki2 | 144 | 4 | Uint32 | R/W |
速度制御ゲイン Kd2 | 148 | 4 | Uint32 | R/W |
(Reserved) | 152 | 4 | Uint32 | R/W |
電流制御ゲイン Kp2 | 156 | 4 | Uint32 | R/W |
電流制御ゲイン Ki2 | 160 | 4 | Uint32 | R/W |
電流制御ゲイン Kd2 | 164 | 4 | Uint32 | R/W |
(Reserved) | 168 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp2 | 172 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki2 | 176 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd2 | 180 | 4 | Uint32 | R/W |
(Reserved) | 184 | 4 | Uint32 | R/W |
位置制御ゲイン Kp3 | 188 | 4 | Uint32 | R/W |
位置制御ゲイン Ki3 | 192 | 4 | Uint32 | R/W |
位置制御ゲイン Kd3 | 196 | 4 | Uint32 | R/W |
位置制御ストレッチ3 | 200 | 4 | Uint32 | R/W |
速度制御ゲイン Kp3 | 204 | 4 | Uint32 | R/W |
速度制御ゲイン Ki3 | 208 | 4 | Uint32 | R/W |
速度制御ゲイン Kd3 | 212 | 4 | Uint32 | R/W |
(Reserved) | 216 | 4 | Uint32 | R/W |
電流制御ゲイン Kp3 | 220 | 4 | Uint32 | R/W |
電流制御ゲイン Ki3 | 224 | 4 | Uint32 | R/W |
電流制御ゲイン Kd3 | 228 | 4 | Uint32 | R/W |
(Reserved) | 232 | 4 | Uint32 | R/W |
トルク制御ゲイン Kp3 | 236 | 4 | Uint32 | R/W |
トルク制御ゲイン Ki3 | 240 | 4 | Uint32 | R/W |
トルク制御ゲイン Kd3 | 244 | 4 | Uint32 | R/W |
(Reserved) | 248 | 4 | Uint32 | R/W |
制御モードの組み合わせにより、適したPIDゲインに切り替えるため「PIDゲイン2」「PIDゲイン3」を新たに設けました。機能はPIDゲイン1と同様にPIDゲインを設定することができます。PIDゲイン1、2、3の内どのゲインを使用するかは「PIDゲインプリセット」で選択することができます。また、この「PIDゲイン2」「PIDゲイン3」は「PIDゲイン1」と同様に自由に書き換えることができますので、任意の値でパターンを用意し、制御中に切り替えるような使い方をすることも可能です。
不感帯(デッドバンド)
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
位置制御 不感帯 | 64 | 2 | Int16 | 1/100deg | R/W |
速度制御 不感帯 | 66 | 2 | Int16 | 1/10 deg/s | R/W |
電流制御 不感帯 | 68 | 2 | Int16 | mA | R/W |
トルク制御 不感帯 | 70 | 2 | Int16 | 1/000N.m | R/W |
サーボの停止位置に対する不感帯を設定できます。
値が大きいほど不感帯が広くなり、目標位置より離れた位置で停止しますが、停止位置の補正による微量な動作が軽減され静かに停止するようになります。
値を小さくすることで不感帯が狭くなり、目標位置により近い位置で停止することができますが、範囲内に停止するため微量が調整が発生し動作が機敏になる場合や、目標位置に留まるために出力軸が振動する場合があります。
中央値オフセット
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
中央値オフセット | 72 | 2 | Int16 | 1/100deg | R/W |
サーボの動作角の中心位置をオフセットすることができます。これにより、サーボの搭載個所や用途によって中心位置を任意の場所に調整することが可能です。
クローン・リバース設定
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
クローン・リバース設定 | 74 | 1 | Byte | 下記参照 | R/W |
Byte | 項目 |
Bit0 | クローン設定 |
Bit1 | リバース設定 |
Bit2 | 0(固定) |
Bit3 | 0(固定) |
Bit4 | 0(固定) |
Bit5 | 0(固定) |
Bit6 | 0(固定) |
Bit7 | 0(固定) |
クローン
クローンとは、どのコマンドでもサーボから返事を返さない設定です。通常は、同じIDのサーボがデイジーチェーン接続のライン上に複数台存在すると該当するサーボが同時に返事を出すことで誤動作のもとになりますが、クローン設定により返事を返しませんので、ライン上に同じIDのサーボを接続することができます。
また、高速で繰り返しサーボと通信する場合、クローン設定によりサーボからの返事を省くことで、半分の時間(理論値)で通信することができます。
クローン設定はエラーステータスも読むことができませんのでご注意ください。ただし、エラーステータスは返しませんが、サーボに設定された「入力電圧最小値設定」の機能をキャンセルするものではありません。各閾値を超えた場合は、設定した%値の出力に自動で変化します。
リバース
リバースとは、命令した回転方向と逆に回転する設定です。左回転の指示を出した場合は右に回転します。
※クローン、リバースはMemWRITEコマンドで設定変更後、SAVEコマンドでデータを保存し、Rebootコマンドで機器を再起動すると設定が反映され指定した動作になります。MemWRITEコマンドでデータを変更した場合はRAM領域を変更していますので、再起動するとデータが設定前に戻ります。SAVEコマンドを実行し、ROM領域に保存してから再起動してください。
クローン設定の解除方法
クローンは返事を返さない特徴があるため、クローンモードを解除する方法が特殊です。下記の手順に従ってコマンドを送信してください。
1)MemWRITEコマンドで「クローン・リバース設定」のBit0を0にしたデータを書き込みます。
例)リバース設定がONの場合は0x02、OFFの場合は0x00
2)MemWRITEコマンドで書き換えたデータを保存するためSAVEコマンドを実行します。※サーボを再起動してからクローンが解除されるため、この時点でもサーボからの返事はありません。
3)サーボの電源を入れ直してサーボを再起動してください。再起動後、クローンが解除されサーボからのパケットが返ってくるようになります。
「ダブルサーボ」への応用例
クローンとリバースを組み合わせることで、サーボを背中合わせに組み合わせた状態で「ダブルサーボ」として使用することができます。「ダブルサーボ」の場合、片方のサーボをクローン、リバースに設定します。これにより、コントローラ側は1つのIDに対しての命令で2つのサーボを同時に動作させることが可能になり、通常の1つのサーボを制御するように「ダブルサーボ」を制御することができます。
入力電圧最小値・最大値設定
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
入力電圧最小値設定 | 76 | 2 | Uint16 | mV | R/W |
入力電圧最小時の出力%値 | 78 | 2 | Uint16 | % | R/W |
入力電圧最大値設定 | 80 | 2 | Uint16 | mV | R/W |
入力電圧最大時の出力%値 | 82 | 2 | Uint16 | % | R/W |
サーボに給電される電源電圧が、指定した最小値、最大値の閾値を超えた場合に、サーボの出力が自動的に指定した%値に変化します。
この機能は、サーボが安定して動作するために電源電圧を監視する機能です。サーボに給電される電圧が低すぎる場合は、負荷による電圧降下が誤動作やリセットの原因になります。また、電圧が高すぎる場合はモータや基板に負荷がかかり破損の原因になります。
サーボに給電される電源電圧の最小値、最大値の閾値を予め設定しておくことで、電源電圧が適切でない場合にサーボが自動的に出力を落として危険を防ぎます。
「出力%値」は、最小値、最大値の閾値を超えた場合のサーボの出力を設定できます。%値が小さいほどサーボの出力トルクが弱くなります。
モータ消費電流最大値設定
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
電流最大値設定 | 84 | 2 | Uint16 | mA | R/W |
電流最大時の出力%値 | 86 | 2 | UInt16 | % | R/W |
モータの消費電流が指定した最大値の閾値を超えた場合に、サーボの出力が自動で指定した%値に変化します。
サーボに負荷がかかると消費電流が増加しますが、モータにかかる電流が大きいほど破損するリスクが高まります。この機能が実行されることで、消費電流が上がりすぎる前にサーボのトルクを落として破損を防ぐことができます。
「出力%値」は、最大値の閾値を超えた場合のサーボの出力を設定できます。%値が小さいほどサーボの出力トルクが弱くなります。
モータ・CPU温度最大値設定
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
モータ温度最大値設定 | 88 | 2 | Int16 | 1/10℃ | R/W |
モータ温度最大時の出力%値 | 90 | 2 | Uint16 | % | R/W |
CPU温度最大値設定 | 92 | 2 | Int16 | 1/10℃ | R/W |
CPU温度最大時の出力%値 | 94 | 2 | Uint16 | % | R/W |
サーボに内蔵されたサーミスタと、CPU内の温度センサにより、温度を検出することができます。この機能は、検出したモータ、CPUの温度が最大値を上回った場合にサーボの出力が自動で指定した%値に変化します。
サーボが連続して動作した場合や、過度な負荷がかかり続けると、モータやCPUの温度が上昇します。温度が上がりすぎると、パーツが破損してしまうリスクがありますので、一定の温度を超えた場合は電源をOFFにしてサーボを休ませることをお勧めします。
「出力%値」は、最大値の閾値を超えた場合のサーボの出力を設定できます。%値が小さいほどサーボの出力トルクが弱くなります。
位置制御時CW/CCW方向最大角値
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
位置制御時CW方向最大角値 | 96 | 2 | Uint16 | 1/100deg | R/W |
位置制御時CW方向最大角閾値外時の出力%値 | 98 | 2 | Int16 | % | R/W |
位置制御時CCW方向最大角値 | 100 | 2 | Uint16 | 1/100deg | R/W |
位置制御時CCW方向最大角閾値外時の出力%値 | 102 | 2 | Int16 | % | R/W |
位置制御で指令する最大動作角を設定できます。設定した最大動作角以上の角度を指令した場合、データエラーにより動作を実行しません。
サーボが位置制御時の最大角を指定することができます。この機能には下記の二つの機能があります。
①位置制御の指令値の最大値を設定できる
ここで指定した角度を位置制御の最大角として設定できます。これにより、位置制御の指令値が最大値以上の場合は動作を無視させることができます。アームロボットなど、ある程度の角度を超えるとフレームと干渉してしまう場合は、この最大角を設定しておくことで破損やロックを防ぎ、サーボの破損を防止することができます。
②予期せぬ角度にサーボに対して誤動作を防ぐことができる
電源投入時は、サーボがFree状態ですので出力軸がどの位置に向いているかわかりません。ロボットによっては、その位置から動作することでフレームやサーボを破損させてしまう場合があります。その際に、この最大角を設定しておくことで、設定値の外にある状態でのサーボの動作を防止することが可能です。例えば、最大角を120°に設定した場合、電源投入後、サーボが180°の位置にある場合は、動作命令を出しても動作を開始せず、出力が設定した出力%値に変化します。また、同時にステータスの「位置」をエラーとして返事が返ってきます。この場合は、サーボの角度を確認し、ロボットを適切な姿勢に戻してから再度電源を投入して動作指示を出してください。
「出力%値」は、最大値の閾値を超えた場合のサーボの出力を設定できます。%値が小さいほどサーボの出力トルクが弱くなります。
最大速度、電流、推定トルク指令値
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
最大速度指令値設定 | 104 | 2 | Int16 | 1/10deg/s | R/W |
最大電流指令値設定 | 106 | 2 | Int16 | mA | R/W |
最大トルク指令値設定 | 108 | 2 | Int16 | mN.m | R/W |
サーボの動作を指示する指令値の最大値を設定します。サーボに対して最大値を超えた指令値を送信した場合は、命令が実行されません。同時にステータスで「データエラー」が返ってきます。
モータ総出力割合%値
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
モータ総出力割合%値 | 110 | 2 | Uint16 | % | R/W |
サーボ全体のモータ出力を設定することができます。各閾値でエラーが発生した際に変化する出力%値は、下記の計算になります。
モータ出力 = 電流最大時の出力%値 × モータ総出力割合%値
ロック検知設定
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
ロック時間設定 | 112 | 2 | Uint16 | ms | R/W |
ロックと認識される出力割合 | 114 | 2 | Uint16 | 1/100% | R/W |
ロック時の出力%値 | 116 | 2 | UInt16 | % | R/W |
・位置制御を含む制御の場合
サーボが動作指示を受けモータに対して電気を流しているが、アームの引っ掛かりなどが原因により動作できない状態をロック状態とよびます。ロック状態は過剰な電流が流れ続けていますので、モータや基板が破損する可能性があります。このアドレスでは、サーボがロックと認識される出力割合と、出力を弱くするまでの時間と出力%値を設定できます。
「出力%値」は、最大値の閾値を超えた場合のサーボの出力を設定できます。%値が小さいほどサーボの出力トルクが弱くなります。これにより、サーボを保護することができます。
・速度、電流、トルク、PWM制御(無限回転動作)の場合
回転する指示を出しているが回転が停止した状態が「ロック時間設定」で設定した期間続くとロックと判断し「出力%値」に出力が落ちます。
パラメータ読み出し
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
現在位置 | 300 | 2 | Int16/Uint16 | 1/100deg | RO |
現在速度 | 302 | 2 | Int16 | 1/10deg/s | RO |
現在電流 | 304 | 2 | Int16 | mA | RO |
出力推定トルク | 306 | 2 | Int16 | mN.m | RO |
現在のPWM出力割合 | 308 | 2 | Int16 | 1/100% | RO |
モータ温度 | 310 | 2 | Int16 | 1/10℃ | RO |
CPU温度 | 312 | 2 | Int16 | 1/10℃ | RO |
入力電圧 | 314 | 2 | Uint16 | mV | RO |
現在の補間時間 | 316 | 2 | Uint16 | ms | RO |
エンコーダの現在値 | 318 | 2 | Uint16 | RO |
サーボの現在の状態をMemREADで読み出すことができます。
現在位置は、「制御モード」の設定により異なります。「制御モード」に位置制御を含めている場合は、動作角の範囲と同じ-32000~32000の現在位置が読み出されます。位置制御を含めていない場合は、0~35999となり1回転と同じ現在位置が読み出されます。
データ範囲の違いにより「型」が変化しますのでご注意ください。位置制御が含まれている場合はInt16(Signed)、含まれていない場合はUint16(Unsigned)になります。
トルクスイッチのFreeやTorqueONに関わらず、制御モード変更時に角度の設定が反映されます。特に他のモードから位置制御モードに変更した際に変換を間違えると意図しない値になってしまいますのでご注意ください。例えば、速度制御モードから位置制御モードに変更した場合、「現在位置」のデータはUint16(Unsigned)からInt16(Signed)に変わります。速度制御モードで動作し、停止した際に350°の位置で停止した場合、現在位置を読み出すと速度制御のUint16では35000(0x88B8)になりますが、位置制御のInt16では-30536になります。これは、指令値としてまったく異なる位置を示してしまいますので、速度制御、電流制御などUint16から位置制御のInt16への切り替えにご注意ください。位置制御に変更した後、改めて現在位置を読み出し、Int16として処理することをお勧めします。
エラーステータス
名称 | アド レス |
サイズ (Byte) |
型 | 属性 |
エラーステータス | 400 | 1 | Byte | RO |
システムエラー | 401 | 1 | Byte | RO |
モータエラー | 402 | 1 | Byte | RO |
RAMアクセスエラー時のアドレス | 404 | 2 | Uint16 | RO |
受信パケットの「ステータス」に関連するパラメータです。詳細は『5.エラー状態』のページをご参照ください。
トルクスイッチ
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
トルクスイッチ | 500 | 1 | Byte | 【0x01】TorqueON 【0x02】Free 【0x04】Brake 【0x08】Hold |
R/W |
サーボ出力のトルクスイッチのモードを指定することができます。サーボの出力は、電源投入直後、指示がない限りトルクが入っていない状態(Freeの状態)です。
・TorqueON
サーボにトルクが入った状態です。角度指示など動作指示によりサーボが動作できる状態になります。
・Free
「Free」はサーボのトルクがOFFの状態です。近藤科学の各マニュアルや解説では「脱力状態」ともよびます。思わぬ動作を防ぐために、一部のコマンドはFreeの状態でのみ書き換えることができます。また、サーボの電源投入直後は、必ずFreeの状態で起動します。
・Brake
サーボがトルクONになりますが、その場でブレーキがかかった状態になります。モータ制御のショート(短絡)ブレーキと同様です。ただし、過度な外乱や長時間の状態を維持すると発熱や過電流により故障する場合がありますのでご注意ください。
・Hold
サーボにトルクが入りますが、その場で保持している状態です。動作指示があっても動作しません。待機状態でトルクONにしたいときはこちらのモードがお勧めですが、長期間トルクONの状態ですとサーボが熱くなり、故障する原因になりますのでご注意ください。
※トルクスイッチのモードを組み合わせることはできません。
制御モード
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
制御モード | 501 | 1 | Byte | 下記参照 | R/W |
Byte | 項目 | 指定するデータサイズ |
Bit0 | 位置指示 | 2Byte |
Bit1 | 速度指示 | 2Byte |
Bit2 | 電流指示 | 2Byte |
Bit3 | トルク指示 | 2Byte |
Bit4 | モータ出力指示(PWM) | 2Byte |
Bit5 | 移動時間指示 | 2Byte |
Bit6 | 0(固定) | なし |
Bit7 | 0(固定) | なし |
各Bitを1にすることでサーボの制御方法を指定することができます。この「制御モード」はMotorWRITEコマンドと一緒に使用します。指定した制御方法の数によりMotorWRITEコマンドの「動作指令データ」のデータサイズが変わります。位置制御(00000001b)のみを指定した場合は、「位置」データ(2Byte)のみ「動作指令データ」として送信します。
また、組み合わせにより位置制御とトルク制御を指定した場合(00001001b)は、「位置」データと「トルク」データを合わせて4Byteのデータを「動作指令データ」として送信します。
制御方法を組み合わせることも可能です。組み合わせパターンは下記の通りです。
組み合わせ対応表
位置 | 速度 | 電流 | トルク | PWM | 移動時間 | |
パターン1 | ● | ● | ||||
パターン2 | ● | ● | ||||
パターン3 | ● | ● | ||||
パターン4 | ● | ● | ● | |||
パターン5 | ● | ● | ● |
パターン解説
パターン1:サーボが出力する電流を指定して位置制御ができます。サーボに負荷がかかり電流が増えた場合は、動作がその場で停止します。
パターン2:サーボが出力するトルクを指定して位置制御ができます。パターン2の電流制御との組み合わせと同じ動作をします。
パターン3:補間制御による位置制御を実行します。「移動時間」により現在地点から目標地点まで到達する時間を指定することができます。補間制御の種類は、メモリマップの「補間制御軌道生成タイプ指定」で指定することができます。
パターン4:補間制御による位置制御に、電流値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定した電流値の出力で動作します。
パターン5:補間制御による位置制御に、トルク値による出力の指定を加えることができます。指定した「移動時間」で動作しつつ、指定したトルクの出力で動作します。
※速度制御、PWM制御は組み合わせに対応していません。単独でのみ使用できます。
応答データ指定
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
応答データ指定 | 502 | 1 | Byte | 下記参照 | R/W |
Byte | 項目 | データサイズ |
Bit0 | 現在位置 | 2Byte |
Bit1 | 現在速度 | 2Byte |
Bit2 | 現在電流値 | 2Byte |
Bit3 | 現在推定トルク | 2Byte |
Bit4 | PWM出力割合 | 2Byte |
Bit5 | モータ温度 | 2Byte |
Bit6 | CPU温度 | 2Byte |
Bit7 | 入力電圧 | 2Byte |
MotorREADコマンドとMotorWRITEコマンドをサーボに送信した後、サーボからの受信パケットに含まれるデータを指定することができます。
各Bitを1にすることで、読み出すデータを指定することができます。例えば、位置(Bit0)と速度(Bit1)、電流値(Bit2)を読み出す場合は、0x07と指定します。
0x00を指定するとデータなしで返事を受け取ることができます。
補間制御軌道生成タイプ指定
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
補間制御軌道生成タイプ指定 | 503 | 1 | Byte | 【0x01】均等補間(ランプ) 【0x05】5次多項式補間 |
R/W |
制御モードで「時間指示」を指定した場合は、補間制御によりサーボが動作します。この「補間制御軌道生成タイプ指定」により、どの補間制御で動作するかを指定することができます。
ショートブレーキ指定
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
電流制御時のショートブレーキ指定 | 530 | 1 | Byte | 【0x01】ブレーキあり 【0x00】ブレーキなし |
R/W |
トルク制御時のショートブレーキ指定 | 531 | 1 | Byte | 【0x01】ブレーキあり 【0x00】ブレーキなし |
R/W |
PWM制御時のショートブレーキ指定 | 532 | 1 | Byte | 【0x01】ブレーキあり 【0x00】ブレーキなし |
R/W |
サーボ動作時のショートブレーキの有無を指定することができます。
※2024年1月現在 位置制御、速度制御のショートブレーキを変更することはできません。位置制御、速度制御は「ブレーキあり」で固定されています。
※この設定は、組み合わせ制御の「制御モード」の位置制御から順番に優先して反映されます。例えば、位置制御はブレーキあり、電流制御はブレーキなしに設定されている場合、位置制御が優先になりますのでブレーキありの状態で制御します。
※電流制御、トルク制御時に「ブレーキあり」に設定すると、ブレーキをかけながら動作するためサーボへの指令値と実際の出力に差が発生する場合があります。
LED点灯モード
名称 | アド レス |
サイズ (Byte) |
型 | 設定値 | 属性 |
LED点灯モード | 533 | 1 | Byte | 【0x00】標準モード 【0x01】消灯モード |
R/W |
サーボに実装されたステータスを表示字するLEDの点灯モードを設定できます。標準モードは仕様通りサーボの状態によって点灯パターンが変化します。消灯モードは、サーボがどのような状態でもLEDは消灯します。
目標指令値
名称 | アド レス |
サイズ (Byte) |
型 | 単位 | 属性 |
目標指令値1 | 700 | 2 | 型と単位は制御モードにより変わります。 | R/W | |
目標指令値2 | 702 | 2 | R/W | ||
目標指令値3 | 704 | 2 | R/W |
MemWRITEコマンドで目標指令値1~3にデータを書き込むことでサーボを制御することができます。指令値が書き込まれたタイミングでサーボが動作します。
目標指令値1だけの書き換えや、目標指令値2だけの書き換えにも対応しています。位置制御+電流制御モードの場合、電流指令に対応する目標指令値2だけを書き換えたとき、目標指令値1は以前に書き込まれた指令値から変わらず目標指令値2のみがサーボに反映されますので、その位置で電流指令値を変更することが可能です。また、目標指令値2の電流指令は変えず、目標指令値1の位置指令のみを書き換えて、同じで電流指令値で位置のみ変更しサーボを制御することもできます。
MemWRITEはTorqueONの状態の時は書き込みがキャンセルされますが、「オプション」を1に指定することでTorqueONでもMemWRITEを実行することができ、サーボを制御することができるようになります。こちらの目標指令値1~3に書き込む場合は「オプション」を1にすることを忘れないように注意してください。
・使用方法
目標指令値には、「制御モード」で指定した制御方法に合わせて指令値を書き込みます。
【制御モード一組】位置制御のみ、速度制御のみなど制御モードを1つだけ選択した場合
目標指令値1にのみ指令値を書き込みます。
【制御モード二組】位置制御+電流制御、位置制御+時間など2つのモードを選択した場合
目標指令値1+目標指令値2にそれぞれ指令値を書き込みます。指令値の順番は、「制御モード」のbit0から小さい順です。位置制御が含まれている場合は、必ず位置制御が先になります。
例)位置制御+電流制御の場合
目標指令値1=位置制御の指令値
目標指令値2=電流制御の指令値
【制御モード三組】位置制御+電流制御+時間など3つのモードを選択した場合
目標指令値1+目標指令値2+目標指令値3にそれぞれ指令値を書き込みます。指令値の順番は上記の二組の場合と同じです。
・初期値について
位置制御の場合とその他制御の場合で目標指令値の初期値が異なります。
位置制御の場合は、サーボに制御モードが書き込まれた時点、またはTorqueONに設定された時点の現在位置が初期値として目標指令値に書き込まれます。そのため、サーボを制御する場合は現在の位置から移動することができます。
速度制御など、位置制御以外の制御モードの場合は初期値は0が書き込まれます。そのため、複数制御の組み合わせの場合、電流制御やトルク制御の目標指令値が0になり、「0mA」で動作しますので位置制御の目標指令値だけを変えた場合は動きません。
・目標指令値の制限値について
目標指令値の上限下限は、MotorWRITEコマンドでの指令値と同じです。この制限値の範囲外の値を与えると、データエラーが返ってきます。サーボに値が反映されず動作しませんので注意が必要です。詳しくは「指令制限値」をご参照ください。
指令制限値
名称 | アド レス |
サイズ (Byte) |
型 | 属性 |
中央値オフセット 最小値 | 600 | 2 | Int16 | RO |
中央値オフセット 最大値 | 602 | 2 | Int16 | RO |
入力電圧最小制限値 最小値 | 604 | 2 | Uint16 | RO |
入力電圧最小制限値 最大値 | 606 | 2 | Uint16 | RO |
入力電圧最大制限値 最小値 | 608 | 2 | Uint16 | RO |
入力電圧最大制限値 最大値 | 610 | 2 | Uint16 | RO |
フェールセーフ電圧 最小値 | 612 | 2 | Uint16 | RO |
フェールセーフ電圧 最大値 | 614 | 2 | Uint16 | RO |
モータ消費電流設定値 最小値 | 616 | 2 | Uint16 | RO |
モータ消費電流設定値 最大値 | 618 | 2 | Uint16 | RO |
モータ温度設定値 最小値 | 620 | 2 | Int16 | RO |
モータ温度設定値 最大値 | 622 | 2 | Int16 | RO |
CPU温度設定値 最小値 | 624 | 2 | Int16 | RO |
CPU温度設定値 最大値 | 626 | 2 | Int16 | RO |
CW方向最大値 最小値 | 628 | 2 | Int16 | RO |
CW方向最大値 最大値 | 630 | 2 | Int16 | RO |
CCW方向最大値 最小値 | 632 | 2 | Int16 | RO |
CCW方向最大値 最大値 | 634 | 2 | Int16 | RO |
最大速度設定値 最小値 | 636 | 2 | Int16 | RO |
最大速度設定値 最大値 | 638 | 2 | Int16 | RO |
最大電流設定値 最小値 | 640 | 2 | Int16 | RO |
最大電流設定値 最大値 | 642 | 2 | Int16 | RO |
最大トルク設定値 最小値 | 644 | 2 | Int16 | RO |
最大トルク設定値 最大値 | 646 | 2 | Int16 | RO |
サーボの性能を超えて動作しないために機種固有の制限値が設定されています。この値は書き換えることはできません。
指令制限値はサーボの種類により異なります。サーボの制御を開始する前にこの「指令制限値」をMemREADコマンドで読み出してご確認ください。
MotorWRITEやMemWRITEで該当箇所を書き換える場合は、この制限値を超えてデータを送信しないようにご注意ください。制限値を超えた場合は、ステータスのデータエラーが返ってきます。
【ご注意ください】
※工場出荷状態(FactoryResetを実行した状態)がサーボが動作する最適な状態となっております。パラメータを自由に変更することができますが、変更により起こった動作不具合に対しましては弊社は保証いたしかねます。例えばPIDゲインの変更により、位置制御の動作が目的地を通り越したり、手前で停止する可能性がございます。
また組み込んだ機器により、サーボにかかる負荷や環境が異なりますので、組み込んだ状態での動作保証は致しかねます。瞬間最大トルクに対して、余裕を持った運用をお願いします。