家の暖房をタイマーで制御する場合と、サーモスタットで制御する場合を考えてみましょう。タイマー制御(開ループ制御)は、あらかじめ決めた時間だけ暖房を稼働させますが、外気温の変化や窓の開閉には対応できません。一方、サーモスタット制御(フィードバック制御)は、室温を測定して目標温度との差を計算し、暖房を自動調整します。外乱があっても適応的に対応できるのがフィードバック制御の強みです。
フィードバック制御(feedback control)は、出力を測定して入力にフィードバック(帰還)することで、望ましい出力を実現する制御方式です。制御工学の中核をなす概念であり、その応用は温度制御から宇宙機の姿勢制御まで、あらゆる工学分野に及びます。
フィードバック制御の原理を理解すると、以下のような応用が開けます。
- 外乱の抑制: モデルの不確実性や外部の乱れに対してロバストな系を構築できる
- 定常精度の改善: 目標値への追従性を向上させ、定常偏差を低減できる
- 不安定系の安定化: 開ループで不安定なシステムをフィードバックにより安定化できる
- 感度の低減: プラントのパラメータ変動に対する出力の感度を低減できる
本記事の内容
- 開ループ制御とフィードバック制御の比較
- 閉ループ系の基本伝達関数(相補感度関数、感度関数)
- 定常偏差と型次数の理論
- 外乱抑制と感度低減の原理
- Pythonでの検証
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
- 伝達関数の定義と基本性質 — 伝達関数の基礎
- ブロック線図の等価変換 — 等価変換
フィードバック制御とは — 「測って直す」の数学
開ループ制御 vs フィードバック制御
開ループ制御: 出力を測定せず、入力だけに基づいて制御する方式です。洗濯機のタイマー制御や、電子レンジの加熱時間設定がこれに当たります。プラントの正確なモデルが必要であり、外乱やモデル誤差に弱いです。
フィードバック制御: 出力を測定し、目標値との偏差に基づいて入力を調整する方式です。エアコンのサーモスタット制御や、自動車のクルーズコントロールがこれに当たります。外乱やモデル誤差に対してロバストですが、安定性の問題が生じる可能性があります。
両者の違いを日常の料理で考えてみましょう。開ループ制御は「レシピどおりに180度で30分焼く」方式です。オーブンの温度誤差や食材の状態を考慮せず、決まった手順を実行するだけです。一方、フィードバック制御は「焼き色を見ながら温度と時間を調整する」方式です。期待通りの結果(焼き色)が出ていなければ修正を加えます。
フィードバック制御の本質は「測って、比べて、直す」の3ステップです。(1) 出力を測定し、(2) 目標値と比較して偏差を計算し、(3) 偏差を小さくするように入力を調整します。この閉じた信号の流れが「ループ」を形成するため、フィードバック制御系は閉ループ系(closed-loop system)とも呼ばれます。
| 項目 | 開ループ制御 | フィードバック制御 |
|---|---|---|
| 構造 | 入力 → プラント → 出力 | 入力 → 比較 → 制御器 → プラント → 出力 → 比較(帰還) |
| 外乱への対応 | 対応不可 | 自動的に修正 |
| モデル精度 | 高精度が必要 | 中精度でも動作 |
| 安定性の問題 | なし(安定系なら) | 不安定化の可能性あり |
| コスト | 低(センサ不要) | 高(センサ・制御器が必要) |
| 代表例 | 洗濯機、トースター | エアコン、自動運転車 |
閉ループ系の基本構成
単位フィードバック系の基本構成を数学的に記述します。
- $R(s)$: 目標値(reference)
- $E(s) = R(s) – Y(s)$: 偏差(error)
- $C(s)$: 制御器(controller)
- $G(s)$: プラント(plant)
- $D(s)$: 外乱(disturbance)
- $Y(s)$: 出力(output)
開ループ伝達関数: $L(s) = C(s)G(s)$
閉ループ伝達関数(目標値から出力): $$ \begin{equation} T(s) = \frac{L(s)}{1 + L(s)} = \frac{C(s)G(s)}{1 + C(s)G(s)} \end{equation} $$
これを相補感度関数(complementary sensitivity function)と呼びます。
感度関数(sensitivity function): $$ \begin{equation} S(s) = \frac{1}{1 + L(s)} \end{equation} $$
$T(s)$ と $S(s)$ は相補関係 $S(s) + T(s) = 1$ を満たします。これは容易に確認できます。
$$ S(s) + T(s) = \frac{1}{1 + L(s)} + \frac{L(s)}{1 + L(s)} = \frac{1 + L(s)}{1 + L(s)} = 1 $$
この相補関係は、フィードバック制御の本質的なトレードオフを表しています。$|S(j\omega)|$ を小さくしようとすると $|T(j\omega)|$ が大きくなり、その逆もまた然りです。低周波域では $|S| \ll 1$(外乱を抑制)かつ $|T| \approx 1$(目標値に追従)とし、高周波域では $|S| \approx 1$(外乱はそのまま通過)かつ $|T| \ll 1$(高周波ノイズを減衰)とするのが理想的な設計です。
閉ループ伝達関数の導出
閉ループ伝達関数 $T(s)$ を信号の流れから導出しましょう。
偏差信号 $E(s) = R(s) – Y(s)$(目標値と出力の差)が制御器に入力されます。制御器の出力は $U(s) = C(s)E(s)$、プラントの出力は $Y(s) = G(s)U(s)$ です。これらを組み合わせると
$$ Y(s) = G(s)C(s)E(s) = G(s)C(s)[R(s) – Y(s)] = L(s)[R(s) – Y(s)] $$
$Y$ について解くと
$$ Y(s) + L(s)Y(s) = L(s)R(s) \quad \Rightarrow \quad Y(s)[1 + L(s)] = L(s)R(s) $$
$$ \therefore \quad T(s) = \frac{Y(s)}{R(s)} = \frac{L(s)}{1 + L(s)} $$
分母の $1 + L(s) = 0$ の根が閉ループ系の特性方程式の根(閉ループ極)であり、これが全て左半平面にあれば系は安定です。
数値例 — 1次系の閉ループ
プラント $G(s) = 1/(s + 1)$ に比例ゲイン $K$ をフィードバックする場合を考えましょう。$C(s) = K$, $L(s) = K/(s+1)$ なので
$$ T(s) = \frac{K/(s+1)}{1 + K/(s+1)} = \frac{K}{s + 1 + K} $$
開ループ系の時定数は $\tau = 1$ s、DCゲインは $K$ です。閉ループ系の時定数は $\tau_{\text{cl}} = 1/(1+K)$ s、DCゲインは $K/(1+K)$ です。
たとえば $K = 9$ の場合、開ループ系の時定数は1秒、閉ループ系の時定数は $1/10 = 0.1$ 秒で、応答が10倍速くなります。一方、DCゲインは $9/10 = 0.9$ となり、定常偏差が $1 – 0.9 = 0.1$(10%)残ります。ゲインを上げれば定常偏差は減りますが、$K \to \infty$ としても偏差をゼロにすることはできません。これが0型系(積分器なし)の本質的な限界であり、定常偏差をゼロにするには積分器を追加する(型次数を上げる)必要があります。
閉ループ系の各伝達関数
| 入力 → 出力 | 伝達関数 |
|---|---|
| 目標値 $R \to Y$ | $T(s) = L/(1+L)$(相補感度関数) |
| 目標値 $R \to E$ | $S(s) = 1/(1+L)$(感度関数) |
| 出力外乱 $D \to Y$ | $S(s) = 1/(1+L)$(感度関数) |
| 入力外乱 $D_i \to Y$ | $G/(1+L)$ |
| 目標値 $R \to U$ | $C/(1+L)$ |
感度関数 $S(s)$ は偏差応答と出力外乱の抑制の両方に関わる、非常に重要な伝達関数です。
各伝達関数の物理的意味
表の各伝達関数がどのような意味を持つか、もう少し詳しく見ましょう。
相補感度関数 $T(s)$ は目標値追従性を表します。理想的には全周波数で $T(j\omega) = 1$(完全追従)ですが、帯域外(高周波域)では $|T| \to 0$ に減衰させなければセンサノイズが増幅されてしまいます。$T(s)$ の帯域幅($|T| = 0.707$ となる周波数)は制御系の応答速度に対応します。
感度関数 $S(s)$ は外乱抑制と目標値への偏差を同時に表します。低周波域で $|S|$ を小さくすることで、ゆっくり変化する外乱(温度ドリフト、バイアスなど)を効果的に抑制できます。また感度関数は、プラントのパラメータが微小変化したとき出力がどれだけ変化するかを表す「感度」の指標でもあります。プラントのゲインが $\Delta G$ だけ変動すると、閉ループ出力の相対変化は
$$ \frac{\Delta Y}{Y} \approx S \cdot \frac{\Delta G}{G} $$
と近似されます。$|S| < 1$ の帯域ではパラメータ変動の影響が縮小され、ロバスト性が高まります。
制御入力伝達関数 $C/(1+L)$ は、目標値の変化に対してどれだけの制御入力が必要かを表します。高周波域で $|T|$ を急峻に減衰させようとすると、$C/(1+L)$ が大きくなり、制御入力が過大(アクチュエータの飽和)になるリスクがあります。
フィードバック制御の基本構成を理解したところで、次にその最も重要な機能である定常偏差の改善について見ていきましょう。
定常偏差と型次数
最終値の定理
安定な閉ループ系の定常偏差は、最終値の定理を使って計算できます。
$$ e_{\text{ss}} = \lim_{t \to \infty} e(t) = \lim_{s \to 0} sE(s) = \lim_{s \to 0} s \cdot S(s) \cdot R(s) $$
最終値の定理は $sF(s)$ が右半平面に極を持たない($f(t)$ が収束する)場合にのみ適用できます。不安定な系に適用すると誤った結果を与えるので注意が必要です。
偏差の伝達関数 $E(s) = S(s) R(s)$ は、感度関数 $S(s) = 1/(1 + L(s))$ と入力 $R(s)$ の積です。したがって、感度関数の低周波特性が定常偏差を決定します。$|S(j\omega)|$ が $\omega \to 0$ で小さいほど、定常偏差は小さくなります。
型次数と誤差定数
開ループ伝達関数 $L(s)$ が原点に $N$ 個の極を持つとき、システムの型次数(type number)は $N$ です。
$$ L(s) = \frac{K_{\text{gain}} \prod(s – z_i)}{s^N \prod(s – p_j)} \quad (p_j \neq 0) $$
型次数に応じて、各種入力に対する定常偏差が決まります。
ステップ入力 $R(s) = 1/s$ に対する定常偏差:
最終値の定理を適用すると
$$ e_{\text{ss}} = \lim_{s \to 0} s \cdot \frac{1}{1 + L(s)} \cdot \frac{1}{s} = \lim_{s \to 0} \frac{1}{1 + L(s)} = \frac{1}{1 + K_p} $$
ここで $K_p = \lim_{s \to 0} L(s)$ を位置定数(position error constant)と呼びます。
- 0型系: $L(s)$ に積分器がないため $K_p = L(0)$ は有限 → 定常偏差 $= 1/(1+K_p)$
- 1型以上: $L(s)$ に $1/s$ の因子があるため $K_p = \lim_{s \to 0} L(s) = \infty$ → 定常偏差 $= 0$
ランプ入力 $R(s) = 1/s^2$($r(t) = t$、一定速度で増加する目標値)に対する定常偏差:
$$ e_{\text{ss}} = \lim_{s \to 0} s \cdot \frac{1}{1 + L(s)} \cdot \frac{1}{s^2} = \lim_{s \to 0} \frac{1}{s + sL(s)} = \frac{1}{K_v} $$
ここで $K_v = \lim_{s \to 0} sL(s)$ を速度定数(velocity error constant)と呼びます。
- 0型系: $sL(s) \to 0$ なので $K_v = 0$ → 定常偏差 $= \infty$(目標値に追従できずに偏差が発散)
- 1型系: $sL(s) \to$ 有限値 なので $K_v$ は有限 → 定常偏差 $= 1/K_v$(一定の遅れで追従)
- 2型以上: $sL(s) \to \infty$ なので $K_v = \infty$ → 定常偏差 $= 0$(完全追従)
放物線入力 $R(s) = 1/s^3$($r(t) = t^2/2$、加速度的に増加する目標値)に対する定常偏差:
$$ e_{\text{ss}} = \frac{1}{K_a}, \quad K_a = \lim_{s \to 0} s^2 L(s) \quad \text{(加速度定数)} $$
| 系の型 | ステップ | ランプ | 放物線 |
|---|---|---|---|
| 0型 | $1/(1+K_p)$ | $\infty$ | $\infty$ |
| 1型 | $0$ | $1/K_v$ | $\infty$ |
| 2型 | $0$ | $0$ | $1/K_a$ |
型次数を上げれば定常精度は改善されますが、積分器の追加は位相を $-90^\circ$ 遅らせるため安定性が悪化します。これもフィードバック制御の本質的なトレードオフです。
具体的な数値計算例
プラント $G(s) = 1/(s+2)$ に対して、3種類の制御器を考えます。
例1: 比例制御(0型系) — $C(s) = 10$
$$ L(s) = \frac{10}{s+2}, \quad K_p = \lim_{s \to 0} L(s) = \frac{10}{2} = 5 $$
ステップ入力に対する定常偏差: $e_{\text{ss}} = \frac{1}{1+5} = \frac{1}{6} \approx 0.167$
出力の定常値は $1 – 0.167 = 0.833$ です。目標値の約83%にしか到達しません。
例2: PI制御(1型系) — $C(s) = 10 + 5/s = (10s + 5)/s$
$$ L(s) = \frac{10s + 5}{s(s+2)}, \quad K_p = \lim_{s \to 0} L(s) = \infty $$
ステップ入力に対する定常偏差: $e_{\text{ss}} = 0$
積分器 $1/s$ を含むため、ステップ入力には完全に追従します。
$$ K_v = \lim_{s \to 0} sL(s) = \lim_{s \to 0} \frac{10s + 5}{s + 2} = \frac{5}{2} = 2.5 $$
ランプ入力に対する定常偏差: $e_{\text{ss}} = 1/K_v = 0.4$
例3: PID制御 + 積分器2つ(2型系) — $C(s) = (10s^2 + 5s + 1)/s^2$
$$ L(s) = \frac{10s^2 + 5s + 1}{s^2(s+2)}, \quad K_a = \lim_{s \to 0} s^2 L(s) = \frac{1}{2} = 0.5 $$
ランプ入力に対する定常偏差はゼロ、放物線入力に対する定常偏差は $1/K_a = 2$ です。
この例からわかるように、型次数を上げるたびに1段階上の入力信号に対して追従できるようになります。
外乱抑制の定量的理解
フィードバック制御のもう一つの重要な機能は外乱抑制です。プラントの出力に加法的外乱 $D(s)$ が入る場合、出力は
$$ Y(s) = T(s)R(s) + S(s)D(s) $$
となります。感度関数 $S(s)$ が小さい周波数帯域では外乱の影響が抑制されます。開ループゲイン $|L(j\omega)| \gg 1$ の帯域では $|S(j\omega)| = 1/|1 + L(j\omega)| \approx 1/|L(j\omega)| \ll 1$ となるため、大きな開ループゲインは外乱抑制に有効です。
逆に $|L(j\omega)| \ll 1$ の帯域(高周波域)では $|S(j\omega)| \approx 1$ となり、外乱はほぼ減衰されずに出力に現れます。フィードバック制御の外乱抑制効果は開ループゲインが大きい周波数帯域に限定されることに注意してください。
フィードバック制御の根本的なトレードオフ — ボード感度積分
感度関数にはボードの感度積分定理(Bode sensitivity integral)という根本的な制約があります。開ループ系が安定で、$L(s)$ の相対次数が2以上のとき
$$ \int_0^{\infty} \ln|S(j\omega)|\, d\omega = \pi \sum_{k} \text{Re}(p_k) $$
ここで $p_k$ は $L(s)$ の右半平面の極です。安定な開ループ系($\text{Re}(p_k) = 0$)では右辺はゼロになります。
これは「風船の原理」と呼ばれます。風船を押すと一方が凹みますが、別の場所が膨らみます — 空気の総量は変わりません。同様に、ある周波数帯域で $|S|$ を小さくする(外乱を抑制する)と、必ず別の帯域で $|S|$ が大きくなります(外乱の影響が増大する)。感度を全周波数で同時に小さくすることは不可能なのです。
この制約はフィードバック制御の設計に深い意味を持ちます。制御系設計とは、「どの周波数帯域で感度を小さくし、どの帯域で感度を大きくするか」というトレードオフを最適に配分する作業なのです。
フィードバック制御による不安定系の安定化
フィードバック制御のもう一つの重要な能力は、開ループでは不安定なシステムを安定化できることです。
たとえば、倒立振子(逆さに立てた棒)はフィードバックなしでは直ちに倒れますが、傾きを検出して適切に台車を動かすフィードバック制御により安定に直立させることができます。ロケットの姿勢制御も同様で、空力的に不安定な機体を推力偏向(TVC)のフィードバック制御で安定化しています。
数学的には、開ループ系 $G(s)$ が右半平面に極を持つ(不安定)場合でも、適切な制御器 $C(s)$ を設計して閉ループの特性方程式 $1 + C(s)G(s) = 0$ の根を全て左半平面に配置できれば、系は安定化されます。
簡単な例として、不安定なプラント $G(s) = 1/(s – 1)$(極が $s = 1$ で右半平面)に比例ゲイン $K$ をフィードバックすると
$$ T(s) = \frac{K/(s-1)}{1 + K/(s-1)} = \frac{K}{s – 1 + K} = \frac{K}{s + (K-1)} $$
閉ループ極は $s = -(K-1) = 1 – K$ です。$K > 1$ であれば閉ループ極が左半平面に入り、系が安定化されます。$K = 1$ では臨界安定(極が原点)、$K < 1$ では依然不安定です。
ただし、フィードバックで安定化可能な不安定系には制約があります。右半平面の極と零点の配置によっては、いかなるフィードバック制御器を用いても安定化できないことが知られています。
定常偏差と外乱抑制の理論的な理解が深まったところで、Pythonで実際に検証してみましょう。
Pythonでの実装と検証
フィードバック制御の効果
import numpy as np
import matplotlib.pyplot as plt
import control as ctrl
# プラント: G(s) = 1/(s+1)
plant = ctrl.TransferFunction([1], [1, 1])
# 制御器: C(s) = K (比例制御)
K = 10
controller = ctrl.TransferFunction([K], [1])
# 開ループ制御
G_ol = controller * plant # 開ループ系
# フィードバック制御
G_cl = ctrl.feedback(controller * plant)
# 感度関数
S = ctrl.feedback(1, controller * plant)
T = ctrl.feedback(controller * plant)
t = np.linspace(0, 5, 500)
fig, axes = plt.subplots(2, 2, figsize=(14, 9))
# (a) ステップ応答(目標値追従)
ax = axes[0, 0]
t1, y1 = ctrl.step_response(G_ol, T=t) # 開ループ(ゲインK*G)
t2, y2 = ctrl.step_response(G_cl, T=t) # 閉ループ
ax.plot(t1, y1, linewidth=2, color="orange", label="Open-loop (KG)")
ax.plot(t2, y2, linewidth=2, color="steelblue", label="Closed-loop")
ax.axhline(1, color="black", linestyle="--", alpha=0.4)
ax.set_xlabel("Time [s]", fontsize=11)
ax.set_ylabel("Output", fontsize=11)
ax.set_title("Step Response (Reference Tracking)", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (b) 外乱応答
ax = axes[0, 1]
# 外乱伝達関数: d→y = G/(1+CG) = S*G
S_G = S * plant
t3, y3_ol = ctrl.step_response(plant, T=t) # 開ループ(外乱がそのまま通る場合)
t4, y4_cl = ctrl.step_response(S_G, T=t) # 閉ループ
ax.plot(t3, y3_ol, linewidth=2, color="orange", label="Without feedback")
ax.plot(t4, y4_cl, linewidth=2, color="steelblue", label="With feedback")
ax.axhline(0, color="black", linestyle="--", alpha=0.4)
ax.set_xlabel("Time [s]", fontsize=11)
ax.set_ylabel("Output deviation", fontsize=11)
ax.set_title("Disturbance Rejection", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (c) 感度関数のボード線図
ax = axes[1, 0]
omega = np.logspace(-2, 2, 500)
mag_S, _, w_S = ctrl.frequency_response(S, omega)
mag_T, _, w_T = ctrl.frequency_response(T, omega)
ax.semilogx(w_S, 20*np.log10(np.abs(mag_S)), linewidth=2,
color="red", label="$|S(j\\omega)|$")
ax.semilogx(w_T, 20*np.log10(np.abs(mag_T)), linewidth=2,
color="steelblue", label="$|T(j\\omega)|$")
ax.axhline(0, color="black", linestyle="--", alpha=0.4)
ax.set_xlabel(r"$\omega$ [rad/s]", fontsize=11)
ax.set_ylabel("Magnitude [dB]", fontsize=11)
ax.set_title("Sensitivity & Complementary Sensitivity", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, which="both", alpha=0.3)
# (d) 型次数と定常偏差
ax = axes[1, 1]
# 0型系
C0 = ctrl.TransferFunction([5], [1])
G_cl0 = ctrl.feedback(C0 * plant)
# 1型系
C1 = ctrl.TransferFunction([5], [1, 0])
G_cl1 = ctrl.feedback(C1 * plant)
t_long = np.linspace(0, 10, 500)
t_r, y_r0 = ctrl.step_response(G_cl0, T=t_long)
t_r, y_r1 = ctrl.step_response(G_cl1, T=t_long)
ax.plot(t_r, y_r0, linewidth=2, color="orange",
label=f"Type 0: $e_{{ss}}$ = {1/(1+5):.3f}")
ax.plot(t_r, y_r1, linewidth=2, color="steelblue",
label="Type 1: $e_{ss}$ = 0")
ax.axhline(1, color="black", linestyle="--", alpha=0.4)
ax.set_xlabel("Time [s]", fontsize=11)
ax.set_ylabel("Output", fontsize=11)
ax.set_title("Steady-state Error: Type 0 vs Type 1", fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("feedback_control.png", dpi=150, bbox_inches="tight")
plt.show()
この結果から、フィードバック制御の効果が包括的に理解できます。
-
目標値追従(左上): 開ループ系(オレンジ)はゲインが $K = 10$ であるため、ステップ入力 $1$ に対して出力が $10 \times 1/(1+1\cdot\text{時定数}) \approx 10$ の最終値に向かいます。目標値 $1$ を大きく超過しており、フィードバックなしではゲイン誤差がそのまま出力誤差になります。一方、フィードバック制御(青)では閉ループの DCゲインが $K/(1+K) = 10/11 \approx 0.91$ となり、出力は目標値 $1$ に近い値に収束しています。フィードバックが開ループゲインの不確実性を抑制する効果が明瞭です
-
外乱抑制(右上): フィードバックなしでは外乱のステップが時定数 $1/(1) = 1$ 秒でそのまま出力に現れ、定常偏差として残り続けます。フィードバックありでは外乱の影響が $1/(1+K) = 1/11$ に抑制されています。これは感度関数 $|S(0)| = 1/(1+K)$ が低周波域で小さいことの直接的な帰結です。外乱が加わった直後は一時的に出力が変動しますが、フィードバック制御がすぐに修正して定常値をほぼゼロに戻しています
-
感度・相補感度関数(左下): 低周波域では $|S| \ll 1$(外乱抑制・目標値追従が良好)で $|T| \approx 1$(出力が目標値に等しい)。高周波域では $|S| \approx 1$(外乱がそのまま通過)で $|T| \ll 1$(高周波のノイズは減衰)。$S + T = 1$ のトレードオフが周波数帯域ごとに見えています
-
型次数と定常偏差(右下): 0型系(比例制御、オレンジ)では定常偏差 $1/(1+5) = 0.167$ が残り、出力は $0.833$ で定常値に達します。一方、1型系(積分制御を含む、青)では出力が正確に $1.0$ に収束しています。ただし1型系はオーバーシュートがやや大きくなっており、積分器の追加による安定性の低下が垣間見えます。積分ゲインの調整(制御器パラメータのチューニング)により、定常偏差ゼロを維持しつつオーバーシュートを抑制することが実際の設計では重要です
全体を通して、フィードバック制御が「開ループゲインが大きい帯域(低周波域)では優れた追従性と外乱抑制を提供するが、全ての周波数で万能ではない」という基本原理が確認できます。この理解は、制御系設計で何を優先し何を妥協するかを判断する際の基盤となります
まとめ
本記事では、フィードバック制御の基本原理から閉ループ特性の定量的な理解まで、体系的に解説しました。
- フィードバック制御の本質は「測って、比べて、直す」の3ステップであり、開ループ制御と比べて外乱抑制、定常精度の改善、モデル誤差への頑健性を実現する
- 閉ループ伝達関数 $T(s) = L/(1+L)$ は信号の流れから代数的に導出でき、特性方程式 $1 + L(s) = 0$ の根が安定性を決定する
- 閉ループ系は感度関数 $S(s)$ と相補感度関数 $T(s)$ で特徴づけられ、$S + T = 1$ のトレードオフがある。低周波域で $|S| \ll 1$(外乱抑制)、高周波域で $|T| \ll 1$(ノイズ減衰)とするのが理想的設計
- 型次数が定常偏差を決定する: 0型系はステップ入力に有限偏差、1型系はステップ入力に追従(偏差ゼロ)、2型系はランプ入力に追従。ただし型次数を上げると位相が遅れて安定性が悪化する
- 外乱抑制は開ループゲイン $|L(j\omega)|$ が大きい帯域でのみ有効であり、全帯域で感度を小さくすることはボードの感度積分定理により不可能(風船の原理)
- 根本的なトレードオフ: フィードバック制御の設計は、性能(追従性、外乱抑制)と安定性(安定余裕)、さらに感度の周波数配分を最適化する作業である
フィードバック制御の古典的な理論を学んだ次のステップとして、状態空間モデルに基づく現代制御理論を学ぶことで、多入力多出力システムの設計が可能になります。
次のステップとして、以下の記事も参考にしてください。
- 状態空間モデルの定義と構成 — 現代制御の基礎
- PID制御の理論とチューニング手法 — 最も基本的な制御器
- ゲイン余裕と位相余裕の意味と設計 — 安定余裕の設計