PIDコントローラーの不可欠な部分がわかりません


12

PIDコントローラーの不可欠な部分を理解できません。Wikipediaのこの擬似コードを想定してみましょう。

previous_error = 0
integral = 0 
start:
  error = setpoint - measured_value
  integral = integral + error*dt
  derivative = (error - previous_error)/dt
  output = Kp*error + Ki*integral + Kd*derivative
  previous_error = error
  wait(dt)
  goto start

積分は最初はゼロに設定されています。そしてループ内で、時間の経過とともにエラーを統合します。セットポイントに(正の)変更を加えると、エラーは正になり、積分は時間の経過とともに(最初から)値を「食べる」ことになります。しかし、私が理解していないことは、エラーがゼロに戻って安定したとき、積分部分はまだいくつかの値(時間の経過とともに統合されたエラー)を持ち、コントローラーの出力値に貢献しますが、そうではありません、エラーがゼロの場合、 PIDの出力もゼロになるはずですよね?

誰かがそれを説明してもらえますか?

回答:


16

積分項の主な目的は、定常状態誤差を排除することです。通常の場合、小さな定常状態の誤差があり、積分は主にこの誤差を排除するために使用されます。ただし、エラーが0になっても積分は正であり、オーバーシュートすることは事実です。その後、オーバーシュート後、積分は再び下降し始めます。これは、積分項の悪影響です。そのため、常にトレードオフがあり、PIDコントローラーを調整して、オーバーシュートができる限り小さくなり、定常状態エラーが最小化されるようにする必要があります。ここで、派生語が登場します。微分項は、システムのオーバーシュートを最小限に抑えるのに役立ちます。


8
定常状態エラーの良い例は、関節の摩擦です。PDコントローラーが目標の関節角度に近づきますが、摩擦のためにそこに到達できないとしましょう。「I」という用語はゆっくりと蓄積し、最終的に摩擦を克服するのに十分な大きさの入力を生成します。
ベン

2
別の例は、ステアリングの偏りです。ステアリング制御にわずかな偏りがあることが判明した場合、またはトレッドスタイルのロボットの場合、コントローラーが同じ値に設定しているにもかかわらず、一方のトレッドがもう一方よりもわずかに遅く回転する場合、偏りがあります。適切に設定された積分項はそれを修正します。
ViennaMike

8

自分の腕にPIDコントローラーをセットアップし、目の前でコーヒーを1杯保持できると想像してください。

  • 比例要素は、手の位置が高すぎたり低すぎたりするのに対して、腕の強さを制御します。
  • 派生要素は、すでに動いている速さに基づいてその強さを調整するため、ターゲットをオーバーシュートしないようになります。
  • 積分要素は重力の影響を補償します。それがなければ、比例力が重力と等しくなった場所でカップが静止します。

あなたが行き詰まっているコードの一部は、システムが何らかの方法でコーヒーの重量を測定しなければならないということのように聞こえます。ほとんどのPIDコントローラーには、積分要素のサイズの合理的な制限を指定する追加の用語があります。


2
+1。「エラーがゼロの場合、PIDの出力もゼロになるはずです」Ianが説明するように、コーヒーカップが完全な位置にあり、誤差がゼロの場合でも、PIDの出力には、そのカップを所定の位置に保持するために上向きの力が必要です。
デビッドケーリー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.