PMX ArduinoLib MotorREAD()
『PMX Library for Arduino』のMotorREAD()関数について解説します。
【解説】
MotorREADコマンドは、モータの動作に関連するデータを読み出すコマンドです。一つの送信パケットで現在位置や速度、電流値など制御に必要な情報を読み出すことができます。「応答データ指定」で読み出すデータを指定することができます。
・使用手順
①制御モードを設定する
②応答データ指定を設定する
③MotorREAD()関数を実行する
・応答データ指定の内容
Byte | 項目 | データサイズ |
Bit0 | 現在位置 | 2Byte |
Bit1 | 現在速度 | 2Byte |
Bit2 | 現在電流値 | 2Byte |
Bit3 | 現在推定トルク | 2Byte |
Bit4 | PWM出力割合 | 2Byte |
Bit5 | モータ温度 | 2Byte |
Bit6 | CPU温度 | 2Byte |
Bit7 | 入力電圧 | 2Byte |
【構文】
status = MotorREAD(ID, receiveMode, readMotorData[8], controlMode, &torqueSw);
【例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
byte controlMode = PMX::ControlMode::Position; // 位置制御モード値 flag = pmx.setControlMode(ServoID, controlMode, 1); byte receiveMode = PMX::ReceiveDataOption::Full; // すべて返す flag = pmx.setMotorReceive(ServoID, receiveMode, 1); # MotorREADで現在の状態を確認 long receiveData[8]; byte torqueSw; lag = pmx.MotorREAD(ServoID, receiveMode, receiveData, controlMode, &torqueSw); Serial.print("MotorREAD"); Serial.println(flag, HEX); Serial.print("TorqueSwitch="); Serial.println(torqueSw); Serial.print("NowPosition="); Serial.println(receiveData[0]); Serial.print("NowSpeed="); Serial.println(receiveData[1]); Serial.print("NowCurrent="); Serial.println(receiveData[2]); Serial.print("NowTorque="); Serial.println(receiveData[3]); Serial.print("NowPWM="); Serial.println(receiveData[4]); Serial.print("NowMotorTemp="); Serial.println(receiveData[5]); Serial.print("NowCpuTemp="); Serial.println(receiveData[6]); Serial.print("NowVoltage="); Serial.println(receiveData[7]); |
【パラメータ】
引数1:ID(byte型)
第一引数の「ID」はサーボIDです。「ID」は、命令の対象になるサーボを指定しています。「ID」を0に指定すると、ID0のサーボを指定することができます。
引数2:receiveMode(byte型)
第二引数の「receiveMode」は「応答データ指定」の設定値を渡します。
引数3:readMotorData[8](long配列型)
第三引数の「readMotorData[8]」は読み出したデータを格納するための配列です。応答モードが設定されていない項目でも"None"を返しますのでデータ数に関係なく、必ず8個の配列を用意してください。
引数4:controlMode(byte型)
第四引数の「controlMode」は「制御モード」の設定値を渡します。制御モードは読み出しに関係ない項目ですが、PMXサーボは位置制御モードを含む場合と、速度制御のみなど無限回転する動作の場合で現在位置の値が異なります。そのため、「制御モード」を渡すことで読み出した現在位置を正しいデータに変換して返してもらいます。
位置制御モードを含む場合=-320度~320度の範囲で検出
無限回転動作の場合=0度~359度の範囲で検出
詳しくは「パラメータ読み出し」をご参照ください。
引数5:torqueSw(byte型)
第五引数の「torqueSw」はトルクスイッチの状態を受け取るための変数のポインタを渡します。
【戻り値】
戻り値1:status(unsigned short型)
戻り値は、サーボとの通信状態とサーボの状態が正常かどうかのステータスを足したものが返ってきます。データが0であれば問題ありません。0以外の場合は、なんらかの問題が発生していますので、ステータス部がエラーの場合はオンラインマニュアルの『5.エラー状態』、または『PmxStatusErrorList』を、通信部がエラーの場合は『ComError』を参照してください。
status = PMXからの返信のステータス(PMX::PmxStatusErrorList) + 送受信の状態(PMX::ComError)