創るたのしみを応援

高機能DCモータコントローラ Pololu Jrk G2 21v3

ライブラリ

外部デバイスからPololu Jrkを使用するためのライブラリが用意されています。ライブラリはArduino版mbed版Raspberry Pi版の3種類が用意されています。

ライブラリの基本構造はどの外部デバイスでも変わりません。また、ライブラリのクラスは共通機能のBaseクラスをもとに、TTLシリアル通信用のSerialクラスとI2C通信用のI2Cクラスに分かれています。使用する通信方法によってライブラリのクラスを使い分ける必要があります。

ライブラリの初期設定

使用する外部デバイスによりインスタンスの生成方法などに違いがありますが、基本的には、ライブラリを読み込み、TTLシリアル通信とI2C通信の初期設定を行いいます。

Arduino版

#include <JrkG2.h>
JrkG2Serial jrk(Serial);
void setup()
{
  Serial.begin(9600);
}
#include <JrkG2.h>
#include <SoftwareSerial.h>
SoftwareSerial softSerial(2, 3);  //RX, TXピン指定
JrkG2Serial jrk(softSerial);
void setup()
{
  softSerial.begin(9600);
  Serial.begin(9600);
}
#include <JrkG2.h>
JrkG2I2C jrk;
void setup()
{
  Wire.begin();  // I2C
  Serial.begin(9600);  // Serial monitor
}

mbed版

#include "mbed.h"
#include "JrkG2.h"
int main()
{
    AsyncSerial myserial(p9, p10);
    JrkG2Serial jrk(&myserial);
    // ...
}
#include "mbed.h"
#include "JrkG2.h"
int main()
{
    I2C myi2c(p28, p27);
    JrkG2I2C jrk(&myi2c);
    // ...
}

Raspberry Pi版

import serial
from enum import IntEnum
import ctypes
from JrkG2modulePi import JrkG2

# you can run "jrk2cmd --cmd-port" to get the right name to use here.
# コマンド"jrk2cmd --cmd-port"を実行することでポート名を確認できます。
# Linux USB example:  "/dev/ttyACM0"
# macOS USB example:  "/dev/cu.usbmodem001234562"
# Windows example:    "COM6"
port_name = "/dev/ttyACM0"
baud_rate = 9600
device_number = None
port = serial.Serial(port_name, baud_rate, timeout=0.1, write_timeout=0.1)
jrk = JrkG2.JrkG2Serial(port, device_number)
from smbus2 import SMBus, i2c_msg
from enum import IntEnum
import ctypes
from JrkG2modulePi import JrkG2
# you can run "i2cdetect -l" to get the right number to use here.
bus = SMBus(1)
# and you can run "i2cdetect -y 1"
# you can find the right address to use here.
# Normaly, this address is 0x0B
address = 0x0B
jrk = JrkG2.JrkG2I2C(bus, address)

関数一覧

uint8_t getLastError()

最後に行った通信の成否を取得する関数です。0で成功、それ以外で失敗です。
引数:なし
戻り値:0、0以外

void setTarget(uint16_t target)

ターゲットを設定する関数です。
引数:uint16_t target
ターゲット(0~4095)
戻り値:なし

void setTargetLowResRev(uint8_t target)

ターゲットを低解像度で逆転側に設定する関数です。引数:targetの0~127が0~2047に変換されます。
引数:uint8_t target
ターゲット(0~127)
戻り値:なし

void setTargetLowResRFwd(uint8_t target)

ターゲットを低解像度で正転側に設定する関数です。引数:targetの0~127が0~2047に変換されます。
引数:uint8_t target
ターゲット(0~127)
戻り値:なし

void forceDutyCycleTarget(int16_t dutyCycle)

デューティサイクルターゲットを設定関数です。引数:dutyCycleが-600以下ならば-600に、600以上なら600になります。
引数:int16_t dutyCycle
デューティサイクル(-600~600)
戻り値:なし

void forceDutyCycle(int16_t dutyCycle)

デューティサイクルを設定する関数です。void forceDutyCycleTarget関数と違い、通常のアルゴリズムを無視し最大デューティサイクル以外のリミット及び入力無効、入力切断、フィードバック切断エラーを無視して実行します。引数:dutyCycleが-600以下ならば-600に、600以上なら600になります。
引数:int16_t dutyCycle
デューティサイクル(-600~600)
戻り値:なし

void stopMotor()

モータを減速させ停止した後、ブレーキまたはフリーにする関数です。
引数:なし
戻り値:なし

uint16_t getInput()

入力値を取得する関数です。シリアル入力モードでは、ターゲットと等しい値です。
引数:なし
戻り値:入力値

uint16_t getTarget()

設定されたターゲットを取得する関数です。
引数:なし
戻り値:ターゲット

uint16_t getFeedback()

各センサよりフィードバックされた値を取得する関数です。
引数:なし
戻り値:フィードバックされた値

uint16_t getScaledFeedback()

0~4095にマッピングされた各センサよりフィードバックされた値を取得する関数です。
引数:なし
戻り値:フィードバックされた値

int16_t getIntegral()

Pololu Jrkの内部変数:Integralを取得する関数です。Integralはターゲットとフェードバックの差(偏差)の積分です。PIDアルゴリズムにて使用されます。
引数:なし
戻り値:Integralの値

int16_t getDutyCycleTarget()

デューティサイクルターゲットの値を取得する関数です。
引数:なし
戻り値:デューティサイクルターゲットの値

int16_t getDutyCycle()

現在モータに出力されているデューティサイクルを取得する関数です。
引数:なし
戻り値:出力されているデューティサイクル

uint8_t getCurrentLowRes()

Pololu Jrkの内部変数:Currentの上位8ビットを取得する関数です。無印シリーズとの互換性のためにあるので、G2シリーズを使用する場合は使用しない関数です。
引数:なし
戻り値:Currentの上位8ビット

bool getPIDPeriodExceeded()

Pololu Jrkが最後に実行したPIDサイクルにおいて、設定された時間よりも長い時間を要していた時trueを返す関数です。
引数:なし
戻り値:true、false

uint16_t getPIDPeriodCount()

Pololu Jrkが実行したPIDサイクルの回数を取得する関数です。
引数:なし
戻り値:実行したPIDサイクルの回数

uint16_t getErrorFlagsHalting()

現在モータを停止させているエラーを取得する関数です。また、latched errorをクリアし、enableにします。
引数:なし
戻り値:エラー番号

uint16_t getErrorFlagsOccurred()

この関数が最後に呼び出された後に起こったエラーを取得する関数です。getErrorFlagsHalting関数とは異なりモータに影響は与えません。
引数:なし
戻り値:エラー番号

getForceMode()

デューティサイクルまたはデューティサイクルターゲットが強制的に上書きされているかどうかの値を取得する関数です。戻り値は以下の表を参照してください。
引数:なし
戻り値:0、1、2

戻り値上書きされたもの
0なし
1DutyCycleTarget
2DutyCycle

uint16_t getVinVoltage()

電圧VIN(mv)を取得する関数です。
引数:なし
戻り値:電圧WIN(mv)

uint16_t getCurrent()

モータの電流(mA)を取得する関数です。
引数:なし
戻り値;モータの電流(mA)

getDeviceReset()

Pololu Jrkのマイクロコントローラが最後にリセットしたエラー番号を取得する関数です。戻り値は以下の表を参照してください。
引数:なし
戻り値:エラー番号

戻り値原因
0PowerUp
1Brownout
2ResetLine
4Watchdog
8Software
16StackOverflow
32StackUnderflow

uint32_t getUpTime()

Pololu Jrkの起動から経過時間(ms)を取得する関数です。
引数:なし
戻り値:起動からの経過時間(ms)

uint16_t getRCPulseWidth()

Pololu Jrkにより測定されたRC入力のパルス幅(1/12μs)を取得する関数です。
引数;なし
戻り値:パルス幅(1/12μs)

uint16_t getFBTReading()

Pololu JrkのFBTで測定されたパルスレートまたはパルス幅を取得する関数です。パルスカウントモードでは、出力は最後のN(Pulse samples)回のPID周期で見られるFBTピンに入力されたパルスの数になります。パルスタイミングモードでは、出力はFBTピンのパルス幅の測定値になります。
引数:なし
戻り値:パルレートまたはパルス幅

uint16_t getAnalogReading(JrkG2Pin pin)

引数:pinで指定したピンからアナログ値を取得する関数です。取得値は左詰めであるため、0xFFFEはPololu Jrkの5Vピン(約4.8V)に等しい電圧を表します。 アナログ読み値が無効であるか、準備ができていないか、ピンが無効な場合は、JrkG2InputNull(0xFFFF)を返します。引数:pinは列挙JrkG2Pinで記述されています。列挙JrkG2Pinは以下の表を参照しください。
引数:JrkG2Pin pin
ピン名(SCL、SDA、TX、RX、RC、AUX、FBA、FBT)
戻り値:アナログ値

ピン名
SCL0
SDA1
TX2
RX3
RC4
AUX5
FBA6
FBT7

bool getDigitalReading(JrkG2Pin pin)

指定されたピンからデジタル値を取得する関数です。戻り値の0がLOW、1がHIGHです。ほとんどの場合、アナログ入力ピンはデジタル入力として読み取ることができないため、出力は0になります。引数:pinは列挙JrkG2Pinで記述されています。列挙JrkG2Pinは上の表を参照しください。
引数:JrkG2Pin pin
ピン名(SCL、SDA、TX、RX、RC、AUX、FBA、FBT)
戻り値:デジタル値(0、1)

uint16_t getRawCurrent()

モータ電流のPololu Jrkの生の測定値を取得する関数です。これは、Pololu Jrkの電流測定ピンから読み取ったアナログ電圧を出力します。 読み取り値の単位は、どのハード電流制限が使用されているかに依存します。
引数:なし
戻り値:測定値

uint16_t getEncodedHardCurrentLimit()

Pololu Jrkが現在使用しているハードウェアの電流制限を表す符号化された値を取得する関数です。
引数:なし
戻り値:符号化された値

int16_t getLastDutyCycle()

Pololu Jrkが最後のPIDサイクルに出力したデューティサイクルを取得する関数です。uint16_t getRawCurrent関数の出力をmAに変換するのに使用できます。
引数:なし
戻り値:デューティサイクル

uint8_t getCurrentChoppingConsecutiveCount()

ハード電流制限による現在のチョッピングがアクティブであった連続したPIDサイクルの数を取得する関数です。
引数:なし
戻り値:PIDサイクル数

uint8_t getCurrentChoppingOccurrenceCount()

変数:Current chopping occurrence count(ハード電流制限による現在のチョッピングがアクティブであったPIDサイクルの数)を取得し、クリアする関数です。
引数:なし
戻り値:Current chopping occurrence count

資料

  1. Pololu Jrkシリーズ概要
  2. 専用ソフトウェアのインストールとモータ制御
  3. ポジションメータによるフィードバック制御
  4. 1相ロータリーエンコーダによるフィードバック制御
  5. Arduinoでの制御
  6. mbedでの制御
  7. Raspberry Piでの制御
  8. ライブラリの使い方と関数一覧

SNSでフォローする