フィードバック制御は、出力を測定して目標値との偏差を修正する制御方式です。エアコンの温度調節、自動車のクルーズコントロール、ロケットの姿勢制御など、身の回りのあらゆるシステムに使われています。
本記事では、フィードバック制御の基本概念から、ブロック線図の読み方、Pythonでのシミュレーションまでを解説します。
本記事の内容
- 開ループ制御と閉ループ制御の違い
- フィードバック制御の基本構造
- ブロック線図と伝達関数の基礎
- Pythonによるステップ応答のシミュレーション
制御とは
制御工学における「制御」とは、あるシステム(プラント)の出力を望ましい状態に保つことです。制御の方法は大きく2つに分けられます。
開ループ制御(オープンループ制御)
開ループ制御は、出力を測定せずに入力だけで制御する方式です。
$$ u(t) = r(t) $$
ここで $r(t)$ は目標値(参照入力)、$u(t)$ は制御入力です。洗濯機のタイマーが典型例で、設定した時間だけ回転します。外乱に対して修正ができないという欠点があります。
閉ループ制御(フィードバック制御)
閉ループ制御は、出力 $y(t)$ を測定し、目標値 $r(t)$ との偏差 $e(t)$ に基づいて制御入力を決定する方式です。
$$ e(t) = r(t) – y(t) $$
$$ u(t) = C(s) \cdot e(t) $$
ここで $C(s)$ はコントローラ(制御器)です。偏差が大きければ大きな修正を行い、偏差が小さくなれば修正も小さくなります。
フィードバック制御の基本構造
フィードバック制御系の基本的なブロック線図は次のように構成されます。
r(t) -->[+]---> e(t) ---> [C(s)] ---> u(t) ---> [P(s)] ---> y(t) --->
^(-) |
| |
+------------------<----------------------------------+
各要素の意味は以下の通りです。
| 記号 | 名称 | 説明 |
|---|---|---|
| $r(t)$ | 目標値(参照入力) | システムに達成させたい値 |
| $e(t)$ | 偏差 | 目標値と出力の差 |
| $C(s)$ | コントローラ | 偏差から制御入力を生成 |
| $u(t)$ | 制御入力 | プラントへの入力 |
| $P(s)$ | プラント | 制御対象のシステム |
| $y(t)$ | 出力 | システムの実際の出力 |
閉ループ伝達関数
目標値 $R(s)$ から出力 $Y(s)$ までの閉ループ伝達関数を求めます。ラプラス変換を用いると、
$$ Y(s) = P(s) \cdot U(s) = P(s) \cdot C(s) \cdot E(s) $$
偏差は
$$ E(s) = R(s) – Y(s) $$
これを代入すると、
$$ Y(s) = P(s) C(s) \left[ R(s) – Y(s) \right] $$
$$ Y(s) + P(s) C(s) Y(s) = P(s) C(s) R(s) $$
$$ Y(s) \left[ 1 + P(s) C(s) \right] = P(s) C(s) R(s) $$
したがって、閉ループ伝達関数 $G(s)$ は
$$ \begin{equation} G(s) = \frac{Y(s)}{R(s)} = \frac{P(s) C(s)}{1 + P(s) C(s)} \end{equation} $$
この式は制御工学で最も重要な式の一つです。開ループ伝達関数 $L(s) = P(s) C(s)$ を用いると、
$$ G(s) = \frac{L(s)}{1 + L(s)} $$
と簡潔に書けます。
フィードバック制御の利点
フィードバック制御には以下の利点があります。
外乱の抑制: 外乱 $d(t)$ がプラントに加わっても、出力の変化を検知して修正できます。外乱からの伝達関数は
$$ \frac{Y(s)}{D(s)} = \frac{P(s)}{1 + P(s) C(s)} $$
$|P(s)C(s)| \gg 1$ のとき、外乱の影響は $\frac{1}{C(s)}$ に抑えられます。
パラメータ変動への頑健性: プラントの特性が変化しても、フィードバックにより性能を維持できます。
定常偏差の低減: 適切なコントローラ設計により、定常状態での偏差をゼロにできます。
具体例
1次遅れ系のプラント $P(s) = \frac{1}{s+1}$ に比例コントローラ $C(s) = K$ を適用する場合を考えます。
閉ループ伝達関数は
$$ G(s) = \frac{K \cdot \frac{1}{s+1}}{1 + K \cdot \frac{1}{s+1}} = \frac{K}{s + 1 + K} $$
ステップ入力 $R(s) = \frac{1}{s}$ に対する出力は
$$ Y(s) = \frac{K}{s(s + 1 + K)} $$
定常値は最終値の定理より
$$ y(\infty) = \lim_{s \to 0} s Y(s) = \frac{K}{1 + K} $$
$K = 1$ なら $y(\infty) = 0.5$、$K = 10$ なら $y(\infty) \approx 0.91$ です。比例制御だけでは定常偏差が残ることがわかります。
Pythonでの実装
python-controlライブラリを使って、フィードバック制御系のステップ応答をシミュレーションします。
import numpy as np
import matplotlib.pyplot as plt
import control as ctrl
# プラント: 1次遅れ系 P(s) = 1/(s+1)
P = ctrl.tf([1], [1, 1])
# 異なるゲインでのフィードバック制御
gains = [1, 5, 10, 50]
plt.figure(figsize=(10, 6))
for K in gains:
C = ctrl.tf([K], [1]) # 比例コントローラ C(s) = K
G = ctrl.feedback(P * C, 1) # 閉ループ伝達関数
t, y = ctrl.step_response(G, T=np.linspace(0, 5, 500))
steady_state = K / (1 + K)
plt.plot(t, y, label=f'K={K} (steady={steady_state:.3f})')
# 目標値
plt.axhline(y=1.0, color='k', linestyle='--', alpha=0.5, label='Target')
plt.xlabel('Time [s]')
plt.ylabel('Output y(t)')
plt.title('Feedback Control: Step Response with Different Gains')
plt.legend()
plt.grid(True, alpha=0.3)
plt.xlim([0, 5])
plt.ylim([0, 1.2])
plt.tight_layout()
plt.show()
ゲイン $K$ を大きくすると定常偏差は小さくなりますが、完全にゼロにはなりません。定常偏差をゼロにするためには、積分要素が必要です(PID制御で解説します)。
import numpy as np
import matplotlib.pyplot as plt
import control as ctrl
# 開ループ vs 閉ループの外乱応答比較
P = ctrl.tf([1], [1, 1])
K = 10
C = ctrl.tf([K], [1])
# 閉ループの外乱伝達関数: P/(1+PC)
G_dist_cl = ctrl.feedback(P, C)
# 開ループの外乱伝達関数: P
G_dist_ol = P
t = np.linspace(0, 5, 500)
t_ol, y_ol = ctrl.step_response(G_dist_ol, T=t)
t_cl, y_cl = ctrl.step_response(G_dist_cl, T=t)
plt.figure(figsize=(10, 5))
plt.plot(t_ol, y_ol, label='Open-loop', linewidth=2)
plt.plot(t_cl, y_cl, label=f'Closed-loop (K={K})', linewidth=2)
plt.xlabel('Time [s]')
plt.ylabel('Output (disturbance response)')
plt.title('Disturbance Rejection: Open-loop vs Closed-loop')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
閉ループ制御では外乱による出力の変動が大幅に抑制されていることがわかります。
まとめ
本記事では、フィードバック制御の基本概念について解説しました。
- 開ループ制御は出力を監視しないのに対し、閉ループ制御は出力と目標値の偏差を利用する
- 閉ループ伝達関数は $G(s) = \frac{P(s)C(s)}{1 + P(s)C(s)}$ で表される
- フィードバック制御により外乱抑制、パラメータ変動への頑健性、定常偏差の低減が得られる
- 比例制御だけでは定常偏差が残り、完全に除去するには積分要素が必要
次のステップとして、以下の記事も参考にしてください。