創るたのしみを応援

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

ロータリーエンコーダによるフィードバック制御

Pololu Jrkは周波数入力をサポートしていて、1相のロータリーエンコーダによるフィードバック制御に対応しています。周波数入力は、速度制御のみサポートしています。

Jrk G2周波数フィードバック制御概要

ロータリーエンコーダーの接続

ロータリーエンコーダを次のように接続します。

  • FBA: パルス入力 (内部で100kΩにプルアップ済)
  • AUX: 5V出力
  • POT-/GND: GND

フィードバック制御モードの設定

Jrk G2 Configuration Utilityで「Feedback」タブを開き、「Feedback mode」を「Frequency」に設定し、「Reset to full range」をクリックします。

「Frequency feedback on FBT」内の「Measurement method」でモードを選択します。モードは次の2つがあり、エンコーダの出力する周波数によって選択します。

  • Pulse counting モード: 5kHzより周波数が高いエンコーダ信号で使用
  • Pulse timing モード: 5kHzより周波数が低いエンコーダ信号で使用

Pulse counting (高い周波数用のモード)

5 kHz以上のパルスでフィードバック制御を行う場合に効果的なモードです。Pulse countingモードでは設定する項目が「Pulse samples」と「Frequency divider」の2つがあります。

Pulse samplesは、パルス数を何サイクル分まで使用するかを指定します。Pololu Jrkは、計測したパルス数を10 ms(PIDサイクルを行う周期)ごとに加算しています。Pulse samplesを5に設定すると、過去5回の50 msの間にカウントしたパルス数を使用して周波数を算出します。周波数は、期間(Pulse samples×PIDサイクルを行う周期)の移動平均で求められます。

Frequency dividerは、算出した周波数を設定した値で除算して使用されます。パルス数が2047であふれるため、Pulse samplesで指定した期間内にパルス数が2047を超えるようならば1より大きい値を設定することで適切に周波数を設定できます。値を大きくすると低速時の性能が悪くなります。

Pulse timing (低い周波数用のモード)

Pulse timingモードでは、つぎの5つの項目を設定します。

  • Pulse timing clock (パルスタイミングクロック):パルスを測定する周波数です。
  • Pulse timing polarity:立ち上がり(Active high)か立ち下り(Active Low)のどちらを測定するか設定します。
  • Pulse timing timeout(ms):設定した時間内にパルス入力がない時に、最大幅パルス(パルスタイミングクロックの単位で65535)を記録します。この値は、モータが停止したときにPololu JrkのFeedback変数をリセットすることができます。
  • Pulse samples:周波数を計算する時に平均をとるパルス幅の数を指定します。
  • Frequency divider(周波数分周器):算出した周波数をこれで設定した値で除算します。

設定の詳細は、つぎの表や計算方法を参考に設定してください。

パルスタイミングクロック周波数分周器生パルス幅範囲フィードバック範囲(前方)周波数測定範囲
(50%のデューティ比を想定)
1.5 MHz158982 ~ 335543185 ~ 404812 Hz ~ 22 Hz
1.5 MHz258982 ~ 167772616 ~ 404812 Hz ~ 44 Hz
1.5 MHz458982 ~ 83882332 ~ 404812 Hz ~ 89 Hz
1.5 MHz858982 ~ 41942190 ~ 404812 Hz ~ 178 Hz
1.5 MHz1658982 ~ 20972119 ~ 404812 Hz ~ 357 Hz
1.5 MHz3241943 ~ 10482098 ~ 404817 Hz ~ 715 Hz
3 MHz3241943 ~ 10482098 ~ 404835 Hz ~ 1.43 kHz
6 MHz3241943 ~ 10482098 ~ 404871 Hz ~ 2.86 kHz
12 MHz3241943 ~ 10482098 ~ 4048143 Hz ~ 5.72 kHz
24 MHz3241943 ~ 10482098 ~ 4048286 Hz ~ 11.4 kHz
48 MHz3241943 ~ 10482098 ~ 4048572 Hz ~ 22.9 kHz
48 MHz6420971 ~ 5242098 ~ 40481.14 kHz ~ 45.8 kHz
48 MHz12810485 ~ 2622098 ~ 40482.29 kHz ~ 91.6 kHz
48 MHz2565242 ~ 1312098 ~ 40484.58 kHz ~ 183 kHz
48 MHz5122621 ~ 652098 ~ 40489.16 kHz ~ 369 kHz
48 MHz10241310 ~ 502098 ~ 335818.3 kHz ~ 480 kHz

エンコーダの出力信号とパルスタイミングクロックの関係はつぎの図のようになります。

さらに詳しく算出すると次のようになります。

パルスタイミングクロックの周波数\(f_{ptc}\) 、周期\(T_{ptc}\)

\(n\)回目のパルスタイミングクロックが切り替わったときにエンコーダのパルスが検出された時のエンコーダの周期\(T_E\)は $$T_E=2nT_{ptc}=\frac{2n}{f_{ptc}}$$

また、エンコーダの周波数\(f_E\)は $$f_E=\frac{1}{T_E}=\frac{f_{ptc}}{2n}$$

さらに、カウントしたパルスタイミングクロックの回数をFrequency divisorで除算するため、Frequency divisorを\(d\)として、\(n\)に再度\(n/d\)を代入して $$f_E=\frac{f_{ptc}}{2n/d}=\frac{f_{ptc}}{2n}d$$

つまり、Frequency divisor倍測定可能な周波数範囲は広がっていきます。

設定が完了したら、右下の「Apply settings」をクリックして設定を適用します。

フィードバックのテスト

「PID」タブを開き、「Propotional coefficient」を1に、他のパラメータは0にし、右下の「Apply settings」をクリックして設定を適用します。

「Manually set target」のスライドバーを動かします。青いスライダが操作しているバーで、赤い点がポジションメータからフィードバックされた値です。スライダを動かすと赤い点が追従しようとします。モータを止める場合は左下の「Stop motor」をクリックします。

青いスライダが目的速度を指定していて、操作するとモータを回転させエンコーダのパルス数をカウントしながら目的速度へ制御します。

ここで設定したPIDパラメータはP制御のみの簡単なテスト用です。パラメータを適切に設定すれば追従性はさらに良くなります。

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

SNSでフォローする