PID制御とは? P・I・Dの意味と違いを動く回路でわかりやすく理解する

エアコンは設定温度のそばでピタッと落ち着き、車のクルーズコントロールは坂道でも速度を保ち、ドローンは風に押されても姿勢を立て直します。こうした「目標に合わせて、ズレたら静かに戻す」動きの裏で働いている定番の仕組みが PID制御です。

名前は、「一体なんの専門用語の頭文字だろう」と構えてしまいますが、中身は「単純な制御に、足りないところをひとつずつ足していったら、こうなった」というだけの、とても実用的な積み重ねです。この記事では、いちばん素朴な ON/OFF 制御から出発して、P → PI → PID とひとつずつ項を足しながら、その場で動かせる回路(動く回路)で応答の変化を見ていきます。

💡 Tip

図1図5 はすべてこのページ上で操作できる「動く回路」です。先に図で遊んでから本文に戻る読み方も歓迎です。スライダーを動かした瞬間からグラフが応えてくれます。

なお今回は、回路図そのものは主役ではありません。回路は「指令を与えると、一拍遅れてじわっと応える装置」の代役です。お湯を沸かすヒーター、モーターの回転、部屋の温度——世の中の多くの装置はこの「一拍遅れ」の性質を持っていて、だからこそ制御にコツが要ります。

1. まず「制御」のことばをそろえる

やりたいことは一つだけです。いま欲しい値(目標)に、実際の値を近づけて、保つ。そのために装置へ出す指令の決め方が「制御」です。この記事では、制御の世界の標準的な記号を使います。

まずは実際の動作を見て感覚を掴みたい方は読み飛ばしても構いません。→図1

記号正式名称意味
SPSet Point(目標値)「こうなってほしい」値。グラフの灰色の点線
PVProcess Value(測定値)いま実際に測れている値。ここではコンデンサの電圧。グラフの青い実線
MVManipulated Variable(操作量)装置へ押し込む指令。ここでは電圧 SoftMV。グラフの黄色い実線
e偏差目標とのズレ。\(e = SP-PV\)。制御器はこの e だけを見て MV を決めます。
SP 灰点線=目標 PV 青実線=実際 MV 黄実線=操作量 Dist 赤=外乱(図5)

そして、この記事のゴールである PID 制御は、次のたった 1 行です。偏差 e を「いまの大きさ(P)」「過去からの積み上げ(I)」「変化の勢い(D)」の 3 つの目で見て、足し合わせて操作量にします。

\[ MV = K_p\, e + K_i \int e\, dt + K_d \frac{de}{dt} \]

いきなり全部は覚えなくて大丈夫です。ここから、この式を左の項からひとつずつ育てていきます。まっさらな状態(ON/OFF)から始めて、不満が出るたびに項をひとつ足す——その繰り返しの終着点がこの式です。

実験に使う「装置」は、抵抗 100Ω とコンデンサ 47µF の回路です。指令電圧 MV を与えると、コンデンサ電圧 PV は時定数 \(\tau = RC = 100 \times 47 \times 10^{-6} \approx 4.7\,\mathrm{ms}\) でじわっと追いつきます(一次遅れ)。ステップ状に MV を与えたときの応答は次の形で、「急には変われない」性質が式にも表れています。

\[ PV(t) = MV \left( 1-e^{-t/\tau} \right) \]

ℹ️ 図の見かた

各図は上段グラフが SP(灰点線)と PV(青)、下段グラフが MV(黄)です。上段で「青が灰にどれだけ寄るか」、下段で「黄がどう頑張っているか」をセットで見るのがコツです。図の中心が画面外に出るとシミュレーションは自動で一時停止します(状態欄の sim=run/pause)。

2. 入れるか、切るか(図1・ON/OFF制御)

最初は道具を何も持たずに考えます。目標より低ければ全力で入れる、高ければ切る。誰もが最初に思いつく、いちばん素朴な制御です。こたつやアイロン、電気ケトルのサーモスタットは、いまでも基本このやり方で動いています。

ただし、そのまま実装すると目標のまわりで ON/OFF が高速に暴れてしまうので、実際にはヒステリシス(不感帯)という幅 h を持たせます。条件を式で書くと次のとおりです。

\[ MV = \begin{cases} MV_{\max} & \left( PV < SP - \dfrac{h}{2} \right) \\[0.4em] 0 & \left( PV > SP + \dfrac{h}{2} \right) \\[0.4em] \text{直前の値を保持} & \left( \text{それ以外} \right) \end{cases} \]

「帯の下に出たら入れる、上に出たら切る、帯の中では何もしない」——これだけです。計算らしい計算はなく、比較が 2 つあるだけ。この単純さが ON/OFF 制御の最大の強みです。

この図の制御ルール

  • 目標より十分低い → 電圧(SoftMV)を全力で入れる
  • 目標より十分高い → 電圧(SoftMV)を切る

操作手順

1上段グラフで、青(PV)が灰(SP)の上下を行ったり来たりし続けるのを確認する
2「ヒステリシス」を 0.2 V くらいまで狭める。切り替えが速くなり、細かく忙しなく揺れる
3今度は 1.0 V まで広げる。切り替え回数は減るが、揺れの振幅が大きくなる
4SP のスライダーを動かして、帯ごと目標が移動するのを見る

見どころ

青は灰に「張り付く」のではなく、帯の中を行ったり来たりし続けます(ハンチング)。下段の黄(MV)は 0 と最大を往復する矩形波です。ヒステリシスを狭めれば揺れは小さくなりますが、そのぶん切り替えが頻繁になり、実機ではリレーやヒーターの寿命を削ります。「揺れ幅」と「切替回数」のどちらかを犠牲にするしかない——これが ON/OFF 制御の限界です。

シミュレータ読込中…

状態

3.00 V 安定したら動かしてみて!
0.60 V 不感帯の幅。
狭いと切替が忙しく、広いと揺れが大きい。

SP/PV

MV

使用: CircuitJS1 (Paul Falstad / Iain Sharp ほか・GPL)

3. 差に比例して押す(図2・P制御)

ON/OFF の揺れをなくしたい。そこで最初の道具を足します。全力か停止かの二択をやめて、ズレの大きさに比例した強さで押す。これが比例制御(P制御)で、PID の「P」です。

\[ MV = K_p\, e = K_p\,(SP-PV) \]

目標から遠いときは強く、近づくほど弱く。人がお風呂の蛇口を調整するときの手つきと同じです。比例ゲイン \(K_p\) は「ズレ 1 V あたり何 V 押すか」という感度を表します。

ところが、P だけには構造的な弱点があります。この回路は押すのをやめれば PV が下がってしまう装置なので、目標を保つには押し続ける力が必要です。しかし \(MV = K_p e\) は、e がゼロになると MV もゼロになる式。つまり「ズレがないと押せない」ので、少しズレた場所でつり合って止まるしかありません。これが定常偏差(オフセット)です。

この図の装置は落ち着いた状態で \(PV = MV\) となるので、つり合いの点は実際に計算できます。\(PV = K_p (SP-PV)\) を解くと、

\[ PV = \frac{K_p}{1 + K_p}\, SP, \qquad e_{\infty} = \frac{SP}{1 + K_p} \]

たとえば \(SP = 3\,\mathrm{V}\)・\(K_p = 5\) なら \(PV = 2.5\,\mathrm{V}\)、偏差は約 0.5 V 残る計算です。下の図で本当にそうなるか、ぜひ確かめてください。\(K_p\) を大きくすれば偏差は小さくなりますが(式の分母が大きくなる)、代わりに応答が過敏になり、行き過ぎや揺れの芽が出てきます。

この図の制御ルール

  • 目標から離れているほど、電圧(SoftMV)を強く上げる/下げる(Kp)

操作手順

1Kp=5 のまま、青(PV)が灰(SP)の少し下で止まるのを確認する(SP=3 V なら 2.5 V 付近)
2Kp を 1 に下げる。偏差がぐっと大きくなる(計算では SP の半分:1.5 V)
3Kp を 8 まで上げる。偏差は小さくなるが、SP を動かした直後に行き過ぎ気味になる
4SP をステップ状に動かして、青の追従と下段の黄(MV)の動きを見比べる

見どころ

揺れは消えました。しかし青は灰にあと一歩届かない。この「届かない差」がスライダーの Kp でどう変わるか、上の式 \(e_{\infty} = SP/(1+K_p)\) と突き合わせてみてください。下段の黄(MV)が偏差に比例してなめらかに動いているのも、ON/OFF の矩形波との大きな違いです。

シミュレータ読込中…

状態

3.00 V 安定したら動かしてみて!
5 目標への追いつきやすさ。
強すぎると行き過ぎや揺れが出やすい。

SP/PV

MV

使用: CircuitJS1 (Paul Falstad / Iain Sharp ほか・GPL)

4. 残ったズレを時間で消す(図3・PI制御)

P制御の弱点は「ズレがないと押せない」ことでした。ならば、ズレを時間方向に積み上げて、その分も押してしまえばいい。これが積分制御(I)で、P に足すと PI 制御になります。

\[ MV = K_p\, e + K_i \int e\, dt \]

第 2 項がポイントです。偏差 e が残っているあいだ、積分 \(\int e\, dt\) は時間とともに増え続けます。つまり「わずかでもズレが残っている限り、押す力がじわじわ強くなり続ける」。この仕組みでは、e = 0 以外の場所ではつり合いが存在できません。P制御で残った定常偏差が原理的に消えるのは、このためです。

落ち着いたあとを見ると、面白いことが起きています。偏差はゼロなので P の項もゼロ。それでも PV が保たれているのは、過去の偏差を溜め込んだ積分項が、押し続ける力をひとりで肩代わりしているからです。積分は「ズレの記憶係」だと言えます。

ただし代償もあります。積分は過去を引きずるので、目標に着いた瞬間も溜まった力が残っていて、いったん行き過ぎ(オーバーシュート)てから戻る動きが出やすくなります。\(K_i\) を上げすぎると、行き過ぎと戻りを繰り返してふらつきます。

この図の制御ルール

  • 目標から離れているほど、電圧を強く上げる/下げる(Kp)
  • 残ったズレを時間で積み上げて、じわじわ埋める(Ki)

操作手順

1Kp=5・Ki=50 のまま、青(PV)が灰(SP)にぴったり重なるのを確認する(図2との最大の違い)
2Ki を 0 にする。図2と同じ「あと一歩届かない」状態に戻る
3Ki を 100 以上に上げ、SP を動かす。行き過ぎてから戻る「ふらつき」が見えてくる
4落ち着いた状態の下段を見る。偏差ゼロでも黄(MV)が一定の高さを保っている=積分項の仕事

見どころ

青が灰に張り付くようになりました。これが積分の力です。一方で、SP を動かした直後に青が灰を一度追い越す(オーバーシュート)のも見えるはず。「ズレを確実に消す」と「行き過ぎない」はトレードオフの関係にあり、Kp と Ki のバランス取り=チューニングが必要になってきます。

シミュレータ読込中…

状態

3.00 V 安定したら動かしてみて!
5 目標への追いつきやすさ。
強すぎると行き過ぎや揺れが出やすい。
50 残るズレの消しやすさ。
強すぎると行き過ぎや揺れが増えやすい。

SP/PV

MV

使用: CircuitJS1 (Paul Falstad / Iain Sharp ほか・GPL)

5. 急な変化に先回りする(図4・PID制御)

PI で目標には張り付けるようになりました。残る不満は「行き過ぎ」です。目標に向かって勢いよく近づいているとき、PI は偏差が残っている限り押し続けるので、到着ぎりぎりまでアクセルを踏み続けてしまう。車の運転なら、目標地点の手前で誰でもブレーキを踏み始めますよね。その「先読みのブレーキ」を式にしたのが微分制御(D)です。

\[ MV = K_p\, e + K_i \int e\, dt + K_d \frac{de}{dt} \]

これで冒頭の式、PID 制御の完成形です。第 3 項の \(de/dt\) は偏差の変化速度。目標に急接近しているとき、e は急速に縮んでいるので \(de/dt\) は大きな負の値になり、第 3 項は押す力を弱める向き(ブレーキ)に働きます。逆に外乱などで急にズレ始めた瞬間は、ズレが「大きくなる速さ」に反応して、誰よりも早く押し返し始めます。

3 つの項の役割分担を一言でまとめると、こうなります。

  • P(現在)— いまのズレに比例して押す。主役。
  • I(過去)— ズレの履歴を溜めて、最後のひと押しを肩代わり。定常偏差を消す。
  • D(未来)— ズレの変化から先を読み、行き過ぎの前にブレーキ。

この図の制御ルール

  • 目標から離れているほど、電圧を強く上げる/下げる(Kp)
  • 残ったズレを時間で積み上げて、じわじわ埋める(Ki)
  • ズレが急に変わるほど、行き過ぎを抑える向きに電圧を動かす(Kd)

操作手順

1Kp=4・Ki=50・Kd=0.02 のまま SP を大きく動かし、ステップ直後の青のピーク(行き過ぎ)の高さを覚えておく
2Kd を 0 にして同じ操作をする。行き過ぎが大きくなる=ブレーキ役の不在
3Kd を 0.05 まで上げてみる。黄(MV)が神経質に動き出す。実機ならセンサーノイズで暴れるところ
4SP ステップの瞬間の下段に注目。黄が一瞬鋭く立つのが D の仕事

見どころ

適度な Kd を入れると、青が灰を大きく突き抜けにくくなります。下段の黄が目標到着の手前で先回りして弱まる(ブレーキを踏む)動きを探してください。一方で Kd の上げすぎは禁物です。微分は変化に敏感=ノイズにも敏感で、実機では D を弱くするか、そもそも使わない(PI で済ませる)判断も多い——この感覚も、図をいじると身につきます。

シミュレータ読込中…

状態

3.00 V 安定したら動かしてみて!
4 目標への追いつきやすさ。
強すぎると行き過ぎや揺れが出やすい。
50 残るズレの消しやすさ。
強すぎると行き過ぎや揺れが増えやすい。
0.02 行き過ぎを抑える強さ。
強すぎると敏感になり暴れやすい。

SP/PV

MV

使用: CircuitJS1 (Paul Falstad / Iain Sharp ほか・GPL)

6. 外乱が来ても目標へ戻す(図5・外乱応答)

ここまでは「目標を変えたとき」の追従を見てきました。しかし実際の現場で制御が本領を発揮するのは、こちらの都合と関係なく外から邪魔が入ったときです。窓を開けたら部屋が冷えた、車が坂にさしかかった、ドローンに横風が吹いた——こうした予定外のズレを外乱と呼びます。

PID 制御の見事なところは、外乱のために特別な仕掛けを足す必要がないことです。使う式は図4とまったく同じ。

\[ MV = K_p\, e + K_i \int e\, dt + K_d \frac{de}{dt} \]

制御器は「なぜズレたか」を知りません。ただ偏差 e が生まれたという事実だけに反応します。原因が目標変更でも外乱でも、e が出れば押し返す——この「原因を問わない」性質こそ、フィードバック制御の強さです。

この図の制御ルール(図4と同じPID)

  • P・I・D の三役はそのまま
  • 「外乱パルス」ボタンで、回路に横から電圧を注入して PV を強制的にずらせる

操作手順

1Kp=6・Ki=60・Kd=0.02 のまま、青(PV)が灰(SP)に落ち着くのを待つ
2「外乱パルス」を押す。下段に赤(Dist)が立ち、青が突き上げられる
3青が自動で灰に戻っていく過程と、そのときの黄(MV)の踏ん張りを観察する
4Kd を 0 にして同じ操作をし、復帰の形(初動の速さ・揺れ)の違いを見比べる

見どころ

外乱で青が跳ね上がった直後、まず D が急変に反応して黄が動き、P が押し返し、最後に残ったズレを I が拭き取る——三役の連携プレーが 1 回のパルスの中に全部詰まっています。エアコンの部屋で窓を開けても、しばらくすると元の温度に戻る。あの日常の裏で起きているのは、まさにこの動きです。

シミュレータ読込中…

状態

3.00 V 安定したら動かしてみて!
6 目標への追いつきやすさ。
強すぎると行き過ぎや揺れが出やすい。
60 残るズレの消しやすさ。
強すぎると行き過ぎや揺れが増えやすい。
0.02 行き過ぎを抑える強さ。
強すぎると敏感になり暴れやすい。

SP/PV

MV/Dist

使用: CircuitJS1 (Paul Falstad / Iain Sharp ほか・GPL)

7. PID制御は身近に隠れている

ここまでに組み上げた「P+I+D」は、特別な工場だけのものではありません。むしろ、気づかれないほど身近にあります。

  • エアコン・給湯器 — 設定温度のそばでピタッと安定し、ドアの開閉(外乱)があっても戻ってくる。インバーター機の温度制御は PID 系が定番です。
  • 車のクルーズコントロール — 坂道(外乱)でも速度を保つ。アクセル開度が MV、車速が PV。
  • ドローン — 姿勢角を毎秒数百回 PID で補正。風に押されても水平に戻るのは図5そのものです。
  • 3Dプリンタのノズル温度 — 200 ℃前後を ±1 ℃で維持。ファームウェアには Kp・Ki・Kd の設定項目がそのまま並んでいます。
  • 炊飯器・オーブンの温度プロファイル — 高級機ほどきめ細かい追従制御が入ります。
  • PLC と温度調節計 — 工場の温度・圧力・流量制御の標準機能。「オートチューニング」ボタンの中身は Kp・Ki・Kd の自動決定です。

一方で、こたつやアイロン、電気ケトルは今も ON/OFF 制御(図1)が現役です。帯の中を多少行き来しても困らない用途なら、単純さこそ正義。「必要な精度に対して、必要なだけ項を足す」——この記事で歩いた ON/OFF → P → PI → PID の順番は、そのまま実務の設計判断の順番でもあります。

8. 実機で気をつけること

最後に、図のなかでは穏やかに見えて、実機で必ず顔を出す論点を 3 つだけ。実はこのページの制御コードにも、それぞれの対策がひっそり入っています。

  • 飽和 — 操作量には物理的な上限・下限があります(ヒーターは 100% までしか焚けない)。MV が端に張り付いている間は、式のとおりに効きません。
  • 積分ワインドアップ — 飽和中も積分が偏差を溜め続けると、復帰後に大きな行き過ぎとなって爆発します。対策は「飽和中は積分を溜めない」(このページのコードも、飽和した瞬間の積分を取り消す方式です)。
  • 微分とノイズ — D は変化に反応する項なので、センサーノイズを増幅します。実機ではローパスフィルタを添えるか、D を弱く・あるいは使わない(PI 制御)判断がよく採られます。

なお、マイコンや PLC の中では、積分は「足し算の積み上げ」、微分は「前回との差分」で計算します。このページの JavaScript も同じで、実装している式はこうです。

\[ MV_n = K_p\, e_n + K_i \sum_{k} e_k\, \Delta t + K_d\, \frac{e_n-e_{n-1}}{\Delta t} \]

連続の式(積分・微分)と離散の式(総和・差分)は見た目が違うだけで、意味は同じです。「教科書の式は、コードにするとただの足し算と引き算」——ここが腑に落ちると、PID は一気に道具になります。

まとめ

  • 制御とは「目標(SP)に実際(PV)を近づけ、保つ」ための操作量(MV)の決め方。
  • ON/OFF 制御(図1)は単純で丈夫。ただし帯の中を揺れ続ける。
  • P制御(図2)で揺れは消えるが、「ズレがないと押せない」ため定常偏差が残る(この装置では \(e_{\infty}=SP/(1+K_p)\))。
  • I を足した PI 制御(図3)は、ズレを時間で積み上げて偏差を原理的に消す。代償はオーバーシュート。
  • D を足した PID 制御(図4)は、変化の勢いに先回りして行き過ぎを抑える。ただしノイズに敏感。
  • 完成した PID は、目標変更にも外乱(図5)にも同じ式のまま対応する。
  • エアコンからドローンまで、PID は身近な機器の標準部品。逆に ON/OFF で足りる場面では今も ON/OFF が使われる。
制御足した項見えること
図1ON/OFFハンチング(帯の中の往復)
図2P比例揺れは消えるが定常偏差が残る
図3PI+積分偏差が消える。オーバーシュートの芽
図4PID+微分行き過ぎへの先回りブレーキ
図5PID+外乱同じ式のまま外乱から復帰

FAQ

Q1. この回路は温度制御そのものですか?

A. いいえ。抵抗とコンデンサによる「一次遅れ」の代役です。ヒーターと室温、モーターと回転数など、指令に一拍遅れて応える装置の性質を、ブラウザ内で速く安全に再現するために使っています。時定数 τ≈4.7 ms と高速なので、グラフの 0.05 秒窓に応答が収まります。

Q2. Kp・Ki・Kd はどうやって決めるのですか?

A. この調整を「チューニング」と呼びます。古典的には限界感度法(ジーグラ・ニコルス法)などの手順があり、実務の調節計やドローンのファームウェアには自動で決めるオートチューニング機能が載っています。手で追い込む場合の定石は「まず P だけで応答を作り、I で偏差を消し、必要なら D を少しだけ」——この記事の章立てそのままです。

Q3. なぜ制御計算を回路ではなく JavaScript でやっているのですか?

A. CircuitJS1 に PID 制御器の部品がないことに加え、スライダー・グラフ・回路を 1 つのページで連動させるためです。ページ側の JS が回路から PV を読み、PID を計算して電圧源 SoftMV に書き戻しています。マイコンで PID を組むときの「センサーを読む → 計算する → 出力する」ループと同じ構図です。

Q4. PLC や温度調節計の PID と同じものですか?

A. 式の骨格は同じですが、製品の実装には微分先行型(PV微分)、微分フィルタ、ワインドアップ対策、バンプレス切替など多くの工夫が加わっています。この記事は骨格を体感するための学習用近似と考えてください。

Q5. D(微分)は実務では使わないと聞きましたが本当ですか?

A. 「使わないことも多い」が正確です。ノイズの多いプロセスや応答のゆっくりした温度制御では、PI 制御で十分なことが多く、D はノイズ増幅のリスクと引き換えになります。図4で Kd を上げたときの黄線の神経質さが、そのリスクの縮図です。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です