5. 定常特性

※定常特性に関しては、27. 定常特性と内部モデル原理 を参照願います。

5-1. 定常位置偏差の計算

フィードバック制御系の開ループ伝達関数\(L(s)\)が式(1)で与えられているとき、目標値が大きさ\(5\)でステップ状に変化したときの定常位置偏差\(e(\infty)\)を求めよ。$$L(s) = \frac{40(s+5)}{s^3 + 7s^2 + 18s +24} \;\;\; \cdots (1)$$

図1 フィードバック制御系

解答例: 図1より、制御偏差\(E(s)\)は、\(E(s) = R(s) - H(s)Y(s)\)で、\(Y(s) = G(s)E(s)\)なので、目標値\(R(s)\)から制御偏差\(E(s)\)までの伝達関数は、$$E(s) = \frac{1}{1+G(s)H(s)}R(s)$$となる。ここで、開ループ伝達関数は\(L(s) = G(s)H(s)\)である。定常偏差\(e(\infty)\)は、最終値定理から$$e(\infty) = \lim_{s \to 0} sE(s)$$ステップ状の目標値の大きさが\(R\)とすると、目標値のラプラス変換は、$$R(s) = \frac{R}{s}$$となる。以上より、$$e(\infty) = \lim_{s \to 0} s \frac{1}{1+L(s)}R(s) = \lim_{s \to 0} \frac{1}{1+L(s)}= \frac{R}{1+K_p}$$である。ここで、$$K_p = \lim_{s \to 0} L(s)$$である。
式(1)より、$$K_p = \lim_{s \to 0} \frac{40(s+5)}{s^3 +7s^2 + 18s +24} = \frac{200}{24} = \frac{25}{3}$$よって、$$e(\infty) = \frac{R}{1 + K_p} = \frac{5}{1 + \frac{25}{3}} = \frac{15}{28} \simeq 0.54$$となる。

※Scilab で、ステップ応答と定常位置偏差を求めるスクリプトと実行結果を図2、3に示す。

// Scilabスクリプト
// ステップ応答と定常偏差を計算する関数
function analyze_response()
s = %s;

// 開ループ伝達関数
L = 40 * (s + 5) / (s^3 + 7 * s^2 + 18 * s + 24);
  // L = 40 * (s + 3) /(s*(s+2)*(s+4)*(s+5));

// 閉ループ伝達関数
T = L / (1 + L);
T_sys = syslin('c', T);

// 時間応答の計算
t = linspace(0, 10, 1000);
y_t = 5 * csim('step', t, T_sys); // ステップ応答を5倍スケーリング

// 応答プロット
scf();
plot(t, y_t);
xlabel("時間 [s]");
ylabel("出力応答 y(t)");
title("フィードバック制御系のステップ応答 (目標値 5)");
xgrid();

// 最終値定理で定常偏差を計算 (s=0代入)
T_s0 = horner(T, 0); // T(s) に s = 0 を代入
ess = 5 * (1 - T_s0); // 定常偏差の計算

// 結果を表示
disp("========================");
disp("定常偏差 (Steady-State Error): " + string(ess));
disp("========================");
endfunction

// 応答解析を実行
analyze_response();
図2 ステップ応答
図3 定常位置偏差の計算結果

5-2. 定常速度偏差の計算

開ループ伝達関数が5-1.と同じ式(1)のフィードバック制御系において、目標値が傾き2でランプ状に変化したときの定常速度偏差\(e(\infty)\)を求めよ。

解答例: ランプ状の目標値のラプラス変換は、$$R(s) = \frac{R}{s^2}$$である。このとき、定常偏差\(e(\infty)\)は、最終値定理から$$e(\infty) = \lim_{s \to 0} sE(s)$$従って、$$e(\infty) = \lim_{s \to 0} s \frac{1}{1+L(s)}R(s) =\lim_{s \to 0} \frac{R}{s+sL(s)} = \frac{R}{K_v}$$である。ここで、$$K_v = \lim_{s \to 0} sL(s)$$である。
式(1)より、$$K_v = \lim_{s \to 0} \frac{40s(s+5)}{s^3 +7s^2 + 18s +24}=0$$よって、定常速度偏差は、$$e(\infty) = \frac{R}{K_v} = \infty$$となる。

※Scilab で、ランプ応答を求めるスクリプトと実行結果を図4、5に示す。ただし、定常速度偏差の計算部分は改良が必要。

// Scilabスクリプト
// ランプ応答と定常偏差を計算する関数
function analyze_ramp_response()
s = %s;

// 開ループ伝達関数
L = 40 * (s + 5) / (s^3 + 7 * s^2 + 18 * s + 24);
// L = 40 * (s + 3) /(s*(s+2)*(s+4)*(s+5));

// 閉ループ伝達関数 (連続時間システムとして定義)
T = L / (1 + L);
T_sys = syslin('c', T);

// 時間応答の計算
t = linspace(0, 10, 1000);
ramp_response = csim(2 * t, t, T_sys); // ランプ応答を計算
ramp_input = 2 * t; // 理想ランプ入力

// 応答と入力をプロット
scf();
plot(t, ramp_response, 'b-', t, ramp_input, 'r--');
xlabel("時間 [s]");
ylabel("応答 y(t) / 目標値 r(t)");
title("フィードバック制御系のランプ応答と目標値");
legend("システム出力", "目標ランプ入力");
xgrid();

// 速度誤差係数 Kv を計算
Kv = horner(s * L, 0); // Kv = lim(s → 0) sL(s)

// 定常偏差の計算
if Kv == 0 then
ess = %inf; // Kv = 0 → 無限大偏差 (タイプ 0)
type = "タイプ 0 (無限大偏差)";
else
R = 2; // 目標値の傾き R (例: R = 2)
ess = R / Kv; // 定常偏差 = R / Kv
type = "タイプ 1 (有限偏差)";
end

// 結果を表示
disp("========================");
disp("システムタイプ: " + type);
disp("速度誤差係数 Kv = " + string(Kv));
disp("定常偏差 (Steady-State Error): " + string(ess));
disp("========================");
endfunction

// 応答解析を実行
analyze_ramp_response();
図4 ランプ応答
図5 定常速度偏差

5-3. 1形系の定常偏差の計算

フィードバック制御系の開ループ伝達関数\(L(s)\)が式(2)の1形系で与えられているとき、目標値が大きさ5のステップ信号の場合と傾き2のランプ信号の場合の定常偏差\(e(\infty)\)を求めよ。$$L(s) = \frac{40(s+3)}{s(s+2)(s+4)(s+5)}$$

5-1.、5-2. の方法で定常偏差を計算できる。Scilabスクリプトの開ループ伝達関数\(L\)を変えて計算した結果を示す。1形系では、ステップ応答での定常位置偏差は0となり、ランプ応答での定常速度偏差は一定値となる。

 ステップ応答
 定常位置偏差の計算結果
図8 ランプ応答
図9 定常速度偏差の計算結果