PID制御の原理
目標値へ狂いなく速く追従させる定番制御を原理から把握。比例・積分・微分が何を担い、定常偏差やオーバーシュートをどう調整するかが腑に落ちます。
- 1.PID は現在の偏差 e(t)=r-y に比例(P)、その積分(I)、微分(D)を重み付けして足し、操作量 u(t) を作るフィードバック制御。u = Kp·e + Ki·∫e dt + Kd·de/dt が基本式。
- 2.P だけでは定常偏差が残り、I 項が偏差の履歴を積分してこれをゼロに消す。D 項は偏差の変化率を先読みして制動をかけ、オーバーシュートと振動を抑える。
- 3.チューニングは応答速度と安定性のトレードオフ。Kp を上げると速いが振動しやすく、Ki は偏差を消すが行き過ぎと積分ワインドアップを招く。Ziegler–Nichols などが指針になる。
PID を「式」で開ける
PID 制御は、温度・モーター速度・ドローンの姿勢など「ある量を目標値に保つ」ほぼ全ての場面で使われるフィードバック制御の定番です。目標値(設定値)を r、制御対象の現在の出力を y、その差である偏差を e(t) = r - y(t) とします。PID コントローラは、この偏差 e(t) から操作量(制御入力)u(t) を次式で計算します。
u(t) = Kp * e(t) + Ki * ∫ e(τ) dτ + Kd * d e(t)/dt
├─ 比例 P ─┤ ├─── 積分 I ───┤ ├─── 微分 D ───┤
Kp, Ki, Kd はそれぞれ比例・積分・微分ゲイン(設計者が決める定数パラメータ)です。3つの項は、偏差の「今(P)・過去の蓄積(I)・変化の勢い(D)」に対応します。以下、各項が「なぜ・何を」担うのかを原理から開封します。
比例項 P:今の偏差に比例して押す
比例項 Kp * e(t) は、偏差が大きいほど強く、小さいほど弱く操作量を与えます。目標から遠ければ大きく、近づけば穏やかに——という直感どおりの制御です。Kp を大きくすると立ち上がりが速くなりますが、大きすぎると行き過ぎ(オーバーシュート)や振動を招きます。
比例だけの制御には原理的な弱点があります。多くの系では、偏差がゼロになると u = Kp * 0 = 0 となり操作量も消えます。しかし重力・摩擦・負荷などの定常外乱に抗い続けるには、偏差ゼロでもある程度の操作量を出し続けねばなりません。結果として P 制御は目標値の手前で釣り合ってしまい、消えない偏差が残ります。これが定常偏差(オフセット)です。
比例制御が定常状態で外乱に釣り合うには、u = Kp * e がその外乱を打ち消す大きさである必要があります。ゼロでない u を出すには e もゼロでない必要があるため、偏差は原理的に残ります。Kp を上げれば残る偏差は小さくなりますが、同時に振動しやすくなるため、Kp だけで偏差をゼロにはできません。
積分項 I:偏差の履歴を貯めて定常偏差を消す
積分項 Ki * ∫ e(τ) dτ は、過去の偏差を時間で積み上げます。小さな偏差でも残り続ける限り積分値は増え続け、操作量を押し上げます。偏差が完全にゼロになるまで積分は成長を止めないため、定常状態では積分項が外乱を打ち消すだけの操作量を保持し、定常偏差をゼロに追い込みます。これが I 項の本質的な役割です。
代償として、積分は応答を遅らせ、位相遅れを増やして系を振動的にします。さらに、アクチュエータが出力上限に張り付いている間も積分が延々と貯まり続ける積分ワインドアップ(integral windup)が起きると、上限を離れた後も過剰な操作量が残り、大きな行き過ぎと復帰の遅れを招きます。実装ではアンチワインドアップ(飽和時に積分を止める/クランプする)が必須です。
操作量が飽和(上下限に到達)している間は、積分の加算を停止する、または積分値を一定範囲にクランプします。加えて、実際に出力できた飽和後の操作量と計算上の操作量の差を積分にフィードバックする「バックカルキュレーション」も広く使われます。これを怠ると、起動直後や大きな設定変更のたびに派手なオーバーシュートが出ます。
微分項 D:変化率を先読みして制動する
微分項 Kd * d e(t)/dt は、偏差の変化率(傾き)に反応します。偏差が急速に縮まりつつあるときは「行き過ぎそうだ」と判断してブレーキをかけ、オーバーシュートと振動を抑え、整定を速めます。いわば未来を一次外挿する予測的なダンピングです。
弱点はノイズへの過敏さです。微分は高周波成分を増幅するため、測定ノイズがそのまま操作量を暴れさせます。実務では、(1) 微分に一次ローパスフィルタをかける、(2) 設定値 r の微分を無視し測定値 y のみを微分する(微分キック回避)といった対策を取ります。ノイズが大きい系では D 項を使わず PI 制御に留めることも珍しくありません。
各項の役割と副作用の一覧
3項の効果は独立ではなく、片方を強めると別の指標が悪化する綱引きの関係にあります。ゲインを1つ動かしたときの典型的な傾向を整理します。
| ゲイン | 主な役割 | 上げたときの利点 | 上げすぎの副作用 |
|---|---|---|---|
| Kp(比例) | 今の偏差に比例して操作 | 立ち上がりが速い/定常偏差が縮む | オーバーシュート増・振動・不安定化 |
| Ki(積分) | 偏差の履歴を積分し蓄積 | 定常偏差をゼロにする | 行き過ぎ増・整定遅延・ワインドアップ |
| Kd(微分) | 偏差の変化率で制動 | オーバーシュート抑制・整定短縮 | ノイズ増幅・高周波で操作量が暴れる |
一般的な指針として、P は速さと定常偏差、I は定常偏差の除去、D は減衰(振動の抑制)を担う、と覚えると設計の見通しが立ちます。
オーバーシュートと応答性のトレードオフ
制御性能は複数の指標で評価します。立ち上がり時間(目標に近づく速さ)、オーバーシュート(行き過ぎの大きさ)、整定時間(許容誤差内に収まるまで)、そして定常偏差です。これらは同時には最適化できません。速く立ち上げようと Kp・Ki を上げれば、系はより振動的になりオーバーシュートと整定時間が悪化します。逆に安定重視でゲインを下げれば、遅くもたつく応答になります。
減衰の度合いは減衰比(ダンピング)で語られます。振動せず最速で整定する境界が臨界制動、それより減衰が強いと過制動(遅いが行き過ぎなし)、弱いと不足制動(速いが振動)です。用途で最適点は変わります。エレベータや3Dプリンタのヘッドのように行き過ぎが許されない系はオーバーシュートを厳しく抑え、多少の振動より速度が欲しい系は不足制動側に振ります。「速さ・行き過ぎ・安定」の三者から2つを取ると1つを譲るのが PID チューニングの本質です。
チューニング:ゲインの決め方
ゲイン Kp, Ki, Kd の決定がチューニングです。代表的な手法を、原理と手順で押さえます。
- 手動(試行錯誤):
Ki=Kd=0から始め、Kpを振動が出始める直前まで上げる。次にKiを上げて定常偏差を消し、行き過ぎが出たらKdで抑える、という順で追い込む。直感的だが職人技になりやすい。 - Ziegler–Nichols 限界感度法:
I・Dを切り、Kpを上げて系が持続振動する臨界ゲインKuとその振動周期Tuを測る。この2値から表に従ってKp, Ki, Kdを算出する古典的手法。速いが行き過ぎが大きめに出やすく、実機では出発点として使い微調整する。 - モデルベース/自動整定:対象の伝達関数を同定し、極配置や最適制御で理論的にゲインを決める。多くの産業用コントローラはリレー応答などで自動整定(オートチューニング)機能を備える。
現場では、いきなり PID 全項を使うより PI 制御(Kd=0)から始めることが多いです。多くのプロセス系は D なしでも十分に制御でき、D はノイズ増幅という扱いにくい副作用を持つためです。整定時間やオーバーシュートに不満が残る場合に限って、フィルタ付きの D を慎重に足すのが堅実な順序です。
離散時間での実装(擬似コード)
デジタル制御では、一定周期 dt ごとに偏差をサンプリングし、積分は総和、微分は差分で近似します。飽和とアンチワインドアップを含めた最小の実装骨子は次のとおりです。
integral = 0.0
prev_meas = measure() # 前回の測定値(微分キック回避に y を使う)
while True:
meas = measure()
error = setpoint - meas
# P 項
P = Kp * error
# I 項(台形/矩形近似で積分を更新)
integral += error * dt
I = Ki * integral
# D 項:設定値でなく測定値の微分(符号に注意)
D = -Kd * (meas - prev_meas) / dt
u = P + I + D
# 出力飽和 + アンチワインドアップ(飽和分は積分に戻さない)
if u > u_max:
u = u_max
integral -= error * dt # ワインドアップ防止:今回の積分加算を取り消す
elif u < u_min:
u = u_min
integral -= error * dt
actuate(u)
prev_meas = meas
wait(dt)
ここで注意すべき実装上の要点は、(1) 微分を測定値 meas から取り設定値ステップによる微分キックを避けること、(2) 出力が上下限(u_max, u_min)に達したら積分の暴走を止めること、(3) サンプリング周期 dt を系の時定数に対し十分短く取ること、の3点です。dt が長すぎると離散化誤差で位相遅れが増し、安定余裕が削られます。
- 基本式:u = Kp·e + Ki·∫e dt + Kd·de/dt。P=今、I=過去の蓄積、D=変化の勢い。
- 定常偏差:P 制御では残る。除去するのは I 項(偏差ゼロまで積分が成長するため)。
- 各項の効果:Kp↑で速いが振動、Ki↑で偏差消えるが行き過ぎ、Kd↑で制動だがノイズ増幅。
- ワインドアップ:飽和中に積分が貯まり過剰応答。飽和時は積分を止める/クランプ。
- トレードオフ:立ち上がり・オーバーシュート・整定・定常偏差は同時最適化できない。
まとめ
PID 制御は魔法ではなく、偏差 e = r - y の「今・過去の積分・変化率」を重み付けして足すだけの線形フィードバックです。要点は、(1) P は今の偏差に比例して速く押すが定常偏差を残すこと、(2) I は偏差の履歴を積分してその定常偏差をゼロに消すが、位相遅れとワインドアップを招くこと、(3) D は変化率を先読みしてオーバーシュートと振動を抑えるが、ノイズを増幅すること、(4) チューニングは速さ・行き過ぎ・安定のトレードオフで、Ziegler–Nichols などを出発点に PI から実機で追い込むのが堅実なこと。この原理を押さえれば、温度調節から 電源 レギュレーションやモーター制御まで、あらゆる制御ループの挙動が式の裏付けつきで読めるようになります。
信号処理・制御 Article
PID制御の原理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
PID制御
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 5
導入後に効く点
P だけでは定常偏差が残り、I 項が偏差の履歴を積分してこれをゼロに消す。D 項は偏差の変化率を先読みして制動をかけ、オーバーシュートと振動を抑える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 5
判断チェックリスト
- 自社の用途が「PID制御 / フィードバック制御」に近いか確認する。
- 強みである「PID は現在の偏差 e(t)=r-y に比例(P)、その積分(I)、微分(D)を重み付けして足し、操作量 u(t) を作るフィードバック制御。u = Kp·e + Ki·∫e dt + Kd·de/dt が基本式。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。