PID制御
PID制御(ピーアイディーせいぎょ、Proportional-Integral-Derivative Controller、PID Controller)は、制御工学におけるフィードバック制御の一種であり、入力値の制御を出力値と目標値との偏差、その積分、および微分の3つの要素によって行う方法のことである[1]。制御理論の一分野をなす古典制御論の枠組みで体系化されたもので長い歴史を持っている。フィードバック制御の基礎ともなっており、様々な制御手法が開発・提案され続けている今に至っても、過去の実績や技術者の経験則の蓄積により調整を行いやすいため、産業界では主力の制御手法であると言われている。
P制御
基本的なフィードバック制御として比例制御(P制御)がある[2]。これは操作量を制御量と目標値の偏差の一次関数として制御するものである。
ここで、ある制御対象の制御する量を制御量、出力などと呼び[3]、制御量に追従させたい希望の値を目標値[4]と呼び、目標値を得るため制御対象を操作する量あるいは制御対象に入力する量を操作量、入力などと呼ぶ[3]。
ある時刻tでの操作量をu(t)、出力値をy(t)、目標値をr(t)とすると、
- <math>u(t) = K_p (y(t) - r(t))</math>
となる。目標値と現状の制御量との差を、制御偏差、偏差などと呼ぶ。e(t) = y(t) - r(t)とおくと、
- <math> u(t) = K_p e(t)</math>
と表される[5]。
さらに、ラプラス変換にもとづく伝達関数で上記の式を表現すると、
- <math>U(s) = K_p (Y(s) - R(s)) = K_p E(s)</math>
となる[5]。ここで、sは複素数である。 よって、P制御を行う調節器の伝達関数C(s)とすれば、以下のようになる[6]。
- <math>G(s) = K_p </math>
PID制御では、この偏差に比例して操作量を変化させる動作を、比例動作あるいはP動作(PはProportionalの略)という。定数Kpは比例ゲイン、Pゲインと呼ばれる[5]。
問題点
比例制御においてはKpを変えない限り、出力値に対して入力値は常に決まっている。 しかし、実際に制御を行う場合には同じ出力値に対しても周囲の環境などによって入力値を変えなければならないことがある。 例えばある装置の温度を60℃に保ちたいときにその外気温が10℃のときと30℃のときでは加熱に必要な熱量を変えなければならない。 このような状況下で外気温が10℃の時に、外気温が30℃の時に60℃に到達するKpの値を使用して比例制御を行うと、熱量が足りず目標値に到達することができない。 このようにして生じる出力値と目標値との偏差を定常偏差またはオフセットという[7]。
PI制御
残留偏差をなくすために周囲の環境が変わるたびに最適のKpを決定しなおすのは難しい。 そこで
- <math>u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau)\, d\tau</math>
と2つ目の項を付け加える。 この項は残留偏差が存在する場合、その偏差の時間積分に比例して入力値を変化させる動作をする[8]。 つまり偏差のある状態が長い時間続けばそれだけ入力値の変化を大きくして目標値に近づけようとする役目を果たす。定数Kiは積分ゲイン、Iゲインと呼ばれる[8]。
また、積分ゲインをKi = Kp / Tiで表し、上式に代入すると、
- <math>u(t) = K_p \left( e(t) + {1 \over T_i} \int_{0}^{t} e(\tau)\, d\tau \right)</math>
このTiは積分時間と呼ばれる。 積分時間の物理的意味は、ある一定の大きさのオフセットが継続した(つまりe(t)が一定)のときにP動作とI動作の項が同じになるのに要する時間である。
P制御と同じく、PI制御を伝達関数で表現すれば、
- <math>U(s) = \left( K_p + \frac{K_i}{s} \right) E(s) = K_p \left( 1 + \frac{1}{T_i s} \right) E(s)</math>
となる[5]。PI制御の伝達関数C(s)は以下のようになる[6]。
- <math>C(s) = K_p + \frac{K_i}{s} = K_p \left( 1 + \frac{1}{T_I s} \right) </math>
この偏差の積分に比例して入力値を変化させる動作を積分動作あるいはI動作(IはIntegralの略)という。上記のように比例動作と積分動作を組み合わせた制御方法はPI制御という[5]。
問題点
積分時間が小さいほどI動作の寄与が大きくなり残留偏差の矯正が迅速に行われるが、小さすぎると目標値を行き過ぎたり(オーバーシュート)、目標値の前後を出力値が振動したり(ハンチング)する現象を起こすことがある。
一方、周囲の環境が変化したり制御対象に撹乱が加わったりすることで出力値が急に変動することがある。 このような場合にもPI制御は出力値を目標値に常に近づけようとする。 しかし、I動作はある程度時間が経過しないと働かないため、どうしても出力値を目標値に戻すために時間がかかる。
PID制御
上記のようなPI制御の問題点を解決するために、
- <math>u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau)\, d\tau + K_d {{d} e(t) \over dt}</math>
と3つ目の項を付け加える。 この項は急激な出力値の変化が起こった場合、その変化の大きさに比例した入力を行うことで、その変化に抗しようとする役目を果たす。定数Kdは微分ゲイン、Dゲインと呼ばれる[9]。
また、微分ゲインをKd = Kp・Tdで表し、上式に代入すると、
- <math>\Delta x(t) = K_p (\Delta y(t) + {1 \over T_i} \int_{0}^{t} \Delta y(\tau)\, d\tau + T_d {{d \Delta y(t)} \over dt})</math>
このTdは微分時間と呼ばれる。 微分時間の物理的意味は、ある一定の変化率の出力値の変動が継続した(つまりde(t)/dtが一定)のときにP動作とD動作の項が同じになるのに要する時間である。 微分時間が大きいほどD動作の寄与が大きくなり変動へ対処が迅速に行われるが、大きすぎると今度は逆方向へ変動したりすることになり制御が不安定になる。
PID制御を伝達関数で表現すれば、
- <math>U(s) = \left( K_p + \frac{K_i}{s} + K_D s \right) E(s) = K_p \left( 1 + \frac{1}{T_i s} + T_d s \right) E(s)</math>
となる[9]。PID制御の伝達関数C(s)は以下のようになる[10]。
- <math>C(s) = K_p + \frac{K_i}{s} + K_D s = K_p \left( 1 + \frac{1}{T_i s} + T_d s \right) </math>
この偏差の微分に比例して入力値を変化させる動作を微分動作あるいはD動作(DはDerivativeまたはDifferentialの略)という。 上記のように比例動作、積分動作、微分動作を組み合わせた制御方法をPID制御という[9]。操作量Uが比例項、積分項、微分項の3つの和となることから、3項制御とも呼ぶ[11]。
PID制御において適切な比例ゲイン、積分ゲイン(または積分時間)、微分ゲイン(または微分時間)を決定するには制御対象の入力に対する応答を調べておく必要がある。 このためには入力値を階段状に変動させた時に出力値が応答しはじめるまでに要する時間(無駄時間)、応答しはじめてからの変化の速度(時定数)、入力値の変化量と出力値の変化量の比(プロセスゲイン)などを測定し、その値から設定する方法がある。 無駄時間が長く時定数が小さい(応答開始に時間がかかるが、応答がはじまると急激に変化する)制御対象にはPID制御は不向きである。
パラメータ調整
PID制御の各パラメータの値(Kp、Ki、Kd)あるいは(Kp、Ti、Td)は設計値なので、制御対象とは独立に自由に与えることができ、要求を満たす最適な値を決定する必要がある。しかし、一般的な制御対象に対して、最適なゲイン値を与える代数的な方法は存在せず、実際の調整は、数値シミュレーションを行ったり、実際の対象物に調整器を繋いで試行錯誤的に最適値を得ている[12]。
パラメータ調整の経験則として、1942年にジョン・ジーグラ(John G. Ziegler)とナサニエル・ニコルス(Nathaniel B. Nichols)らによりに提案された [13] 2つの調整法が知られている。彼らの調整法にはジーグラ・ニコルスの限界感度法(Ziegler-Nichols' Ultimate Gain method, Ziegler-Nichols’Closed-Loop Method)とジーグラ・ニコルスのステップ応答法(過渡応答法)(Ziegler-Nichols' Process Reaction Curve method, Ziegler-Nichols’Open-Loop Method)がある [14] [15]。
ジーグラ・ニコルスの限界感度法では以下のような手順でゲイン値を決定する[16][14]。 まず、Ti→∞(あるいは最大)、Td→0として、調節器がP動作だけを行うようにする。次に、比例ゲインKPを0から徐々に大きくしていき、制御量が安定限界に達して一定振幅振動を持続するようになったところでKPの増加を止める。このときの比例ゲインをKu(限界感度)、振動周期をPu として、これらの値から調節器の各パラメータを下の表のように決める。
<math>K_p</math> | <math>T_i</math> | <math>T_d</math> | |
---|---|---|---|
P制御 | <math>0.50{K_u}</math> | <math>\infty</math> | <math>0</math> |
PI制御 | <math>0.45{K_u}</math> | <math>0.83P_u</math> | <math>0</math> |
PID制御 | <math>0.60{K_u}</math> | <math>0.50P_u</math> | <math>0.125P_u</math> |
ジーグラ・ニコルスのステップ応答法では以下のような手順でゲイン値を決定する[14]。 まず、調整器を介さずに制御対象単体にステップ入力を加える。これにより得られたステップ応答曲線から、曲線の勾配が最も急なところに接線を引き、その勾配をRとする。この接線が横軸(時間軸)と交わる時刻と入力を加えた時刻との差を取り、この時間をLとする。これらの値から調節器の各パラメータを下の表のように決める。
<math>K_p</math> | <math>T_i</math> | <math>T_d</math> | |
---|---|---|---|
P制御 | <math>1/RL</math> | <math>\infty</math> | <math>0</math> |
PI制御 | <math>0.9/RL</math> | <math>3.3L</math> | <math>0</math> |
PID制御 | <math>1.2/RL</math> | <math>2L</math> | <math>0.5L</math> |
歴史
制御技術と理論の起源は、蒸気機関の調速機から始まった[17]。PID制御は、その後、特に船の自動操舵の開発の中で発達していった。1911年、エルマー・アンブローズ・スペリー(en:Elmer Ambrose Sperry)が、PID制御器の構成を成した船の自動操舵機構を開発した[18]。1922年には、ニコラス・マイノースキー(Nicolas Minorsky)が船の自動操舵に関して数式化された制御理論の発表を行い[19]、これがPID制御の最初の着想とされている[11][17]。
その後1936年、テイラー社(Taylor Instruments)のカレンダー(Callender)らにより、空気式PID調整器の原型が製作された[20]。しかしPIDパラメータの調整の仕方が不明であったため、この調整器の売れ行きは不調に終わった[20]。これを受けて、1942年、同テイラー社のジョン・ジーグラ(John G. Ziegler)とナサニエル・ニコルス(Nathaniel B. Nichols)らにより、実用的なPIDパラメータの調整則が考案された[20]。さらに、この調整則は同テイラー社のジェラルディン・クーン(Geraldine Coon)により広められていった[21]。
脚注
参考文献
関連項目
<ref>
タグです。
「.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_177
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_113
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_8
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_96
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_114
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_178
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E9.A0.88.E7.94.B01995_770
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_115
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_118
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_179
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E9.A0.88.E7.94.B01995_769
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E3.81.AF.E3.81.98.E3.82.81.E3.81.A6.E3.81.AE.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_120
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「.E5.88.B6.E5.BE.A1.E5.B7.A5.E5.AD.A6_180
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「PID.E5.88.B6.E5.BE.A1.E3.81.AE.E3.81.8A.E8.A9.B1_.E7.AC.AC2.E5.9B.9E_2
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「Bennett1996_18
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「Bennett1996_19
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「PID.E5.88.B6.E5.BE.A1.E3.81.AE.E3.81.8A.E8.A9.B1_.E7.AC.AC2.E5.9B.9E_3
」という名前の引用句に対するテキストが指定されていません<ref>
タグです。
「Bennett1996_20
」という名前の引用句に対するテキストが指定されていません