---
title: フィードバックと制御
url: https://doc.liz6.com/ja/theory/02-control-theory/01-feedback-and-control
locale: ja
area: theory
tags:
- 制御理論
- 基礎理論
date: 2026-09-10
modified: 2026-09-10
description: 室温20 °Cのとき、加熱器を40%の出力で動かすと40 °Cを維持できます。窓を開けて室温が10 °Cに下がった場合、同じ操作で目標を維持できるでしょうか。操作の効果は環境に依存するため、観測した結果に応じて操作を調整する必要があります。 本章は四則演算から始め、次章でエネルギー収支から時間変化を導きます。
---

# フィードバックと制御

室温20 °Cのとき、加熱器を40%の出力で動かすと40 °Cを維持できます。窓を開けて室温が10 °Cに下がった場合、同じ操作で目標を維持できるでしょうか。**操作の効果は環境に依存するため、観測した結果に応じて操作を調整する必要があります。** 本章は四則演算から始め、次章でエネルギー収支から時間変化を導きます。

## 目標、操作、結果を分ける

目標温度を$r$、実温度を$y$、センサの測定値を$y_m$、加熱のデューティ比を$u$とします。0は停止、1は最大出力です。偏差は$e=r-y_m$です。制御器は観測から操作を決め、制御対象はその操作を物理的な応答に変えます。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 380 430" width="380" height="430" role="img" aria-labelledby="control-loop" data-diagram-theme="native" style="max-width:100%;height:auto;display:block;margin:auto"><title id="control-loop">帰還ループの信号</title><defs><marker id="control-loop-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="currentColor"/></marker></defs><rect x="44" y="12" width="300" height="52" rx="8" fill="var(--reading-surface,#f3f5f9)" stroke="currentColor"/><text x="194" y="44" text-anchor="middle" font-size="16" fill="currentColor">目標 r</text><path d="M194 65v28" fill="none" stroke="currentColor" marker-end="url(#control-loop-arrow)"/><rect x="44" y="94" width="300" height="52" rx="8" fill="var(--reading-surface,#f3f5f9)" stroke="currentColor"/><text x="194" y="126" text-anchor="middle" font-size="16" fill="currentColor">偏差 e = r − yₘ</text><path d="M194 147v28" fill="none" stroke="currentColor" marker-end="url(#control-loop-arrow)"/><rect x="44" y="176" width="300" height="52" rx="8" fill="var(--reading-surface,#f3f5f9)" stroke="currentColor"/><text x="194" y="208" text-anchor="middle" font-size="16" fill="currentColor">制御器 → 操作 u</text><path d="M194 229v28" fill="none" stroke="currentColor" marker-end="url(#control-loop-arrow)"/><rect x="44" y="258" width="300" height="52" rx="8" fill="var(--reading-surface,#f3f5f9)" stroke="currentColor"/><text x="194" y="290" text-anchor="middle" font-size="16" fill="currentColor">対象 → 出力 y</text><path d="M194 311v28" fill="none" stroke="currentColor" marker-end="url(#control-loop-arrow)"/><rect x="44" y="340" width="300" height="52" rx="8" fill="var(--reading-surface,#f3f5f9)" stroke="currentColor"/><text x="194" y="372" text-anchor="middle" font-size="16" fill="currentColor">測定 yₘ = y + n</text><path d="M44 366H18V120H43" fill="none" stroke="currentColor" marker-end="url(#control-loop-arrow)"/></svg>

| 量・構成要素 | 温度制御での意味 | 区別すべきこと |
| --- | --- | --- |
| 目標値$r$ | 維持したい40 °C | 目標値は測定値ではない |
| 制御対象 | 加熱器、容器、熱の過程 | アルゴリズムだけが対象ではない |
| アクチュエータと$u$ | 実際の加熱デューティ比 | 120%を要求しても120%は出せない |
| 測定値$y_m$ | 温度センサの読み | バイアスや雑音を含みうる |
| 外乱 | 室温の低下、追加の熱負荷 | 制御器を経由せずに作用する場合もある |

開ループでは事前に決めた操作を行い、閉ループでは出力の測定を使って操作を修正します。タイマーによる加熱も、想定環境と許容誤差に合えば合理的です。フィードバックには測定、計算、操作が必要で、それぞれに故障の可能性もあります。

## 操作を固定すると、なぜ目標から外れるのか

最大加熱電力を1000 W、熱損失係数を20 W/Kとします。平衡では加熱電力と放熱が等しくなります。

$$1000u=20(y-y_a),\qquad y=y_a+50u.$$

周囲温度$y_a=20$なら$u=0.4$で40 °Cですが、$y_a=10$なら30 °Cです。これは最終的な平衡であり、窓を開けた瞬間に温度が30 °Cへ飛ぶわけではありません。

基準操作$u_b=0.4$を残して、比例フィードバックを加えます。

$$u=u_b+K_p(r-y_m).$$

測定が正確で、飽和せず、$K_p=0.04\ \mathrm{K}^{-1}$なら、新しい平衡は$y=10+50[0.4+0.04(40-y)]$を満たします。したがって$y=36.67$ °C、$u=0.5333$です。改善しても3.33 Kの偏差が残ります。比例動作では、追加の加熱を維持するために偏差が必要です。[PID制御](04-pid-control.md)では、その補償量を積分状態に保持する方法を扱います。

**フィードバックと制御 · 実験**

全方式が40 °Cから開始し、100 sで周囲温度が変化します。固定操作、P帰還、モデル一致のフィードフォワードを比較します。熱容量2000 J/K、熱損失20 W/K、最大1000 Wです。


周囲温度を変える前に、三つの方式の最終温度を予測してください。温度と操作量の時間軸を比較します。モデルの熱容量は2000 J/K、測定雑音はなく、100 sで周囲温度が変化します。いずれも40 °Cから開始します。

## フィードフォワードとの組み合わせ

周囲温度が測定でき、平衡モデルが正しければ、必要な操作を先に計算できます。

$$u_{\mathrm{ff}}=\frac{20(r-y_a)}{1000}.$$

周囲温度が20から10 °Cに下がると、出力誤差を待たずに操作を0.4から0.6へ変更します。ただし、正しい測定、パラメータ、十分な加熱能力が必要です。実際の熱損失係数が25 W/Kなら、20で計算した操作では不足します。

$u=u_{\mathrm{ff}}+u_{\mathrm{fb}}$という構成なら、既知の変化をフィードフォワードで補い、残った偏差をフィードバックで修正できます。測れない外乱やセンサの偏りまで自動的に解消できるわけではありません。実験で完全に相殺できるのは、制御対象と計算に同じモデルを使っているためです。

## 負帰還だけでは安定性は保証されない

加熱では、測定温度が低い → 加熱を増やす → 温度が上がる、という作用が元の偏差を打ち消します。操作が冷却出力なら、制御器の符号も変える必要があります。一つの減算記号だけでなく、作用の連鎖全体を確認します。

時間も重要です。古い測定値や操作の遅れによって、すでに変化した偏差を修正し続けることがあります。遅れのない一次熱モデルに正の比例ゲインで負帰還をかける場合、ゲインを大きくしただけでは振動しません。振動を説明するには、追加の動特性やむだ時間を明示する必要があります。

**目標追従**と**外乱抑制**も区別します。目標を40から45 °Cへ変えるのが追従試験です。目標を40 °Cに保ったまま室温を下げるのが外乱試験です。信号が入る経路が異なるため、一度の目標値ステップだけで全体の性能は判断できません。

## 理解を確かめる

センサが常に実温度より2 °C高く表示します。測定値が40 °Cに収束したとき、実温度はいくつですか。

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

38 °Cです。測定偏差がゼロでも、目標とセンサ表示が一致しただけです。ゲインを上げてもバイアスは特定できず、校正や独立した観測が必要です。

</details>

周囲温度10 °C、最大1000 W、熱損失係数20 W/Kで、より強力な制御器を使えば70 °Cを達成できますか。

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

必要電力は$20(70-10)=1200$ Wです。最大出力での平衡は60 °Cなので達成できません。誤差の収束を論じる前に、目標が実現可能か確認します。

</details>

## 発展資料

[python-controlのクルーズ制御例](https://python-control.readthedocs.io/en/stable/examples/cruise-control.html)では、対象、負荷、フィードバック、操作量制限を組み合わせています。本章の熱モデルと数値例は独自に構成しています。
