---
title: PID制御
url: https://doc.liz6.com/ja/theory/02-control-theory/04-pid-control
locale: ja
area: theory
tags:
- 制御理論
- 基礎理論
date: 2026-09-10
modified: 2026-09-10
description: 比例動作は現在の偏差に反応し、積分動作は補償量を保持し、微分動作は変化に反応します。応答と安定性を前提に、まず飽和のない連続制御を分析します。
---

# PID制御

比例動作は現在の偏差に反応し、積分動作は補償量を保持し、微分動作は変化に反応します。[応答と安定性](03-response-and-stability.md)を前提に、まず飽和のない連続制御を分析します。

## P：現在の偏差から操作する

$u=u_b+K_pe$、$u_b=0.4$、$e=r-\theta$とすると、熱モデルの定常偏差は

$$e_\infty=\frac{k(r-\theta_a)-P_{\max}u_b-d}{k+P_{\max}K_p}.$$

目標40 °C、周囲10 °C、基準パラメータ、$d=0$、$K_p=0.04$では$200/60=3.33$ Kです。ゲインを増やすと偏差は減りますが、測定雑音による操作変動や飽和の可能性も増えます。

P制御で必ず偏差が残るわけではありません。積分特性を持つ対象なら、安定な比例閉ループでステップに偏差なく追従できる場合があります。対象、入力、基準操作、安定条件を指定します。

## I：補償量を状態として保存する

$z$を積分による操作への寄与として定義します。

$$u_c=u_b+K_pe+z,\qquad \dot z=K_ie.$$

$K_i$の単位は$\mathrm{K}^{-1}\mathrm{s}^{-1}$、$z$は無次元です。正の偏差で増え、偏差がゼロになると変化が止まります。値自体が消えるわけではありません。周囲10 °Cで40 °Cを保つには$u=0.6$が必要なので、$z=0.2$を保持します。安定性、実現可能性、偏りのない測定、持続的な飽和がないことが必要です。

PIで状態が一つ増え、特性多項式は

$$C_{\mathrm{th}}s^2+(k+P_{\max}K_p)s+P_{\max}K_i=0.$$

$K_p=0.04,K_i=0.001$なら$s^2+0.03s+0.0005$で、極は$-0.015\pm0.01658j$です。振動モードは積分状態から生じています。

**PID制御 · 実験**

目標40 °C、100 sで周囲20→10 °C、初期積分ゼロ。PIDは測定値微分、Kd=1 s/K、フィルタ5 sです。要求は制限せず、成分図に基準操作0.4は含めません。


目標を40 °Cに保ち、100 sで周囲温度を20から10 °Cへ下げます。P、PI、フィルタ付きPIDと各項の寄与を比較します。要求は制限せず、0–1の物理範囲内かを表示します。実際の飽和は[制約の章](08-constraints-and-robustness.md)で扱います。

## D：測定値の変化をフィルタ付きで使う

理想的な並列PIDは$u_c=u_b+K_pe+K_i\int e\,dt+K_d\dot e$です。目標のステップを微分すると微分キックが生じるため、測定値を微分する構成がよく使われます。

$$\tau_f\dot y_f=y_m-y_f,\qquad u_D=-K_d\frac{y_m-y_f}{\tau_f}.$$

測定から操作への伝達は$-K_ds/(\tau_fs+1)$で、高周波ゲインは有限です。偏差の微分と測定値の微分は異なり、後者では目標変化自体を微分しません。

$K_d=1$ s/K、$\tau_f=5$ s、$y_m=38$ °C、$y_f=37.5$ °Cなら$u_D=-0.1$です。温度が上昇しているため加熱を減らします。初回測定でフィルタを初期化するなど、起動時の不自然なスパイクを避けます。Dは観測した傾向を使うもので、未知の未来の外乱を予知しません。

## 一回の計算を追う

$e=2$ K、$z=0.15$、$u_D=-0.1$、$K_p=0.04$なら、要求は$0.4+0.08+0.15-0.1=0.53$です。1 sの前進積分では$z_{j+1}=0.15+0.001\times2\times1=0.152$です。ここでは現在の操作を計算してから状態を更新します。更新後の値を使う実装なら、その順序を一貫させます。

パラメータ形式にも注意します。$K_p[1+1/(T_is)+T_ds]$なら$K_i=K_p/T_i$、$K_d=K_pT_d$です。フィルタ形式は別途確認し、離散係数にはサンプリング周期を反映させます。

## 複数の条件で調整する

最初に帰還の向き、時定数、操作可能範囲を確認します。PまたはPIから始め、Dを追加する理由を明確にします。目標変更、負荷変更、雑音、初期偏差、飽和を試し、出力だけでなく要求、実際の操作、積分状態を記録します。経験的な調整則には対象と試験条件があり、普遍的保証ではありません。

## 理解を確かめる

偏差がゼロでもPIが基準より多く加熱するのはなぜですか。

<details><summary>考え方</summary>

積分が止まっても$z=0.2$は残り、新しい熱損失を補う200 Wを供給します。

</details>

測定雑音が多いならDを増やすべきですか。

<details><summary>考え方</summary>

必ずしもそうではありません。微分は速い測定変化を強調します。実際の動特性と雑音を区別し、フィルタ、帯域、操作コストを比較します。

</details>

## 発展資料

[python-controlのクルーズ制御例](https://python-control.readthedocs.io/en/stable/examples/cruise-control.html)では制限付きPIを扱います。[MathWorksの例](https://www.mathworks.com/help/simulink/slref/anti-windup-control-using-a-pid-controller.html)は、バック計算と条件付き積分を比較しています。
