パラメータ設定
リセット
プロセス: K_p=2、T_p=5 s。t=0 で目標値ステップ r=1、t=15 s で外乱ステップ d を印加。τ_F=0 は1自由度と同等。
出力 y(t) と制御入力 u(t)
上段=出力 y(t)(赤=1自由度、青=2自由度、灰破線=目標 r)/下段=制御入力 u(t)/縦点線=t=15 s 外乱印加
理論・主要公式
2自由度制御は、目標値応答と外乱応答を別々の伝達関数で設計できる構造です。プロセス $G_p(s) = K_p/(T_p s + 1)$ に対し、PI コントローラ $C(s) = K_c(1 + 1/(T_i s))$ と前置フィルタ $F(s)$ を別個に設計します。
目標値応答(r から y への伝達):
$$T(s) = \frac{F(s)\,C(s)\,G_p(s)}{1 + C(s)\,G_p(s)}$$
外乱応答(d から y への伝達):
$$S_d(s) = \frac{G_p(s)}{1 + C(s)\,G_p(s)}$$
本シミュレーターでは前置フィルタを1次遅れで簡略化:
$$F(s) = \frac{1}{\tau_F\,s + 1}$$
$F$ は外乱応答 $S_d$ には現れないため、$\tau_F$ で目標値応答だけを整形できます。これが2自由度の本質です。1自由度($F=1$)では $C$ を強くすると外乱抑圧は良くなる代わりに目標値追従にオーバーシュートが出ます。
2自由度制御シミュレーターとは
🙋
PI制御で目標値に追従させようとすると、ゲインを上げないと外乱に弱い、でもゲインを上げるとオーバーシュートが大きくなる——いつも板挟みなんです。これって解決できないんですか?
🎓
そのジレンマこそが「1自由度制御」の根本的な限界なんだ。フィードバックゲイン C を強くすると、外乱応答 $G_p/(1+CG_p)$ は確かに小さくなる。でも目標値応答 $CG_p/(1+CG_p)$ も同じ分母を共有しているから、極が速くなりすぎてオーバーシュートする。1つのコントローラ C で両方を同時に最適化することはできない。上のシミュレーターで τ_F=0 にして K_c を上げてみて——赤い線(1自由度)が大きく跳ね上がるだろう。
🙋
それで「2自由度」が出てくるんですね。何が違うんですか?
🎓
ざっくり言うと、目標値の前に「整形フィルタ」F を1段挟むだけだ。フィードバックループはそのまま——だから外乱応答 $G_p/(1+CG_p)$ は変わらない。でも目標値応答は $F\cdot CG_p/(1+CG_p)$ になるから、F を1次遅れにして立ち上がりを緩めれば、オーバーシュートだけを潰せる。シミュレーターで τ_F=2 のとき、青い線(2自由度)が滑らかに目標値に到達するのが見えるはずだ。
🙋
あ、本当だ。でも外乱が入ったあと(t=15s)の応答は、赤も青も同じ形になってますね。
🎓
そう、それが2自由度の最大のメリット。外乱応答は C だけで決まるので、F をいくらいじっても変わらない。だから「外乱抑圧は C で攻めて、目標値追従は F で整える」と分業できる。実機では、温度制御で setpoint を変える瞬間の派手なオーバーシュートを抑えつつ、外気温が変動したときの追従性は保つ——みたいな使い方が定番だよ。
🙋
τ_F を大きくすると、立ち上がりがどんどん遅くなりますよね。やりすぎは良くないんですか?
🎓
その通り。τ_F を無限大にすれば理論的にはオーバーシュート0%だけど、立ち上がりに何分もかかるシステムになってしまう。実用では、プロセス時定数 T_p の0.5〜2倍くらいから始めて、許容できるオーバーシュートと立ち上がり時間のトレードオフで決める。「整定時間」のカードを見ながら τ_F を動かしてみるといい——30%くらいまでは τ_F を増やしてもあまり整定時間は伸びないけど、ある点を越えると急に遅くなるのが分かる。
よくある質問
2自由度制御は実機の PID コントローラで実装できますか?
はい、現代の市販 PID コントローラの多くが「2自由度 PID」モードを備えています。比例項を設定値ステップに対する重み β、微分項を γ で減衰させる「重み付き PID」が代表的な実装です。β=γ=1 のときが古典的な1自由度 PID で、β=γ=0 にすると微分・比例キックを完全に消せます。Yokogawa、Honeywell、ABB の DCS にも標準機能として搭載されています。
前置フィルタ F とフィードフォワード補償の違いは?
前置フィルタ F は目標値信号 r を整形するもので、出力 u には間接的に C 経由で影響します。一方フィードフォワード補償は、測定可能な外乱 d_meas を直接 u に加算する構造で、外乱が発生する前にプリエンプティブに対応します。両者は補完関係にあり、目標値に対しては F、既知の外乱に対してはフィードフォワード、未知外乱に対しては C のフィードバックという3層構成が現代制御の定番です。
むだ時間がある系でも2自由度制御は使えますか?
使えますが、Smith 補償器やモデル予測制御 (MPC) との組み合わせが効果的です。むだ時間 L が大きい場合、PI フィードバック単独では不安定領域に入りやすく K_c を強くできません。Smith 予測器でむだ時間を補償し、その上で2自由度構造を組むと、目標値応答と外乱応答の独立設計が可能になります。化学プラントの組成制御では標準的な構成です。
F=1/(τ_F·s+1) より良いフィルタ設計はありますか?
所望の閉ループ伝達関数 T_des(s) を直接指定する設計法が知られています。$F = T_\text{des}(1+CG_p)/(CG_p)$ で逆算すれば、二項分布形(Bessel)やバターワース形など、好みの応答整形が可能です。ただし F の次数が高くなりやすく、零点がプロセスの不安定零点を打ち消そうとして問題が生じることもあります。実装簡便さと整形精度のトレードオフで、本シミュレーターは1次遅れの簡略形を採用しています。
実世界での応用
プロセス産業の温度・流量制御: 化学プラントや製鉄所の連続運転設備では、設定値を頻繁に変更する一方、外乱(原料温度の変動、外気温の影響)も常に存在します。2自由度 PID により、グレード変更時の派手なオーバーシュート(製品仕様外の発生)を抑えつつ、外乱抑圧の応答性は維持できます。Yokogawa CENTUM などの DCS では「I-PD」「PI-D」型として標準装備されています。
サーボモータ位置決め制御: 工作機械、半導体露光装置、ロボットアームなどの精密位置決めでは、目標位置への高速到達と、加工反力などの外乱抑圧を両立する必要があります。フィードフォワードに加速度・速度プロファイルを与え、フィードバックで残差と外乱を抑える「2自由度サーボ」が標準的な実装です。残差ジャークを抑えるための高次フィルタ整形も組み合わされます。
自動車のクルーズコントロールと ADAS: 速度設定変更時の乗員快適性(緩やかな加速)と、勾配変化への即応性を両立するために2自由度構造が用いられます。前置フィルタが目標速度の変化率を制限し、PI フィードバックが勾配・路面抵抗による速度偏差を抑えます。先行車追従型 (ACC) ではさらにレーダー測距に基づくフィードフォワードを加えた3層構造になります。
HVAC(空調)と建物制御: 大規模空調設備のチラー出口温度や VAV 流量制御では、運転モード切替時のオーバーシュートが快適性とエネルギー消費に直結します。2自由度 PID でセットポイント変更を緩やかに追従させ、外気温・負荷変動にはフィードバックで対応する設計が、省エネと快適性の両立に貢献しています。
よくある誤解と注意点
最も多い誤解は、「2自由度にすればフィードバックゲインを無限に上げても大丈夫」と思い込む ことです。前置フィルタ F は目標値応答だけを整形するので、確かに目標値追従のオーバーシュートは消せます。しかし安定性そのものを決めるのは閉ループ特性方程式 $1+CG_p=0$ であり、これは F とは無関係です。K_c を上げすぎると、目標値応答は綺麗でも、外乱応答や雑音応答で振動が出たり、最悪不安定化します。シミュレーターで K_c=10 にしてみると、外乱応答(t>15s)に振動が現れることが確認できます。F は安定性問題の解決策ではなく、あくまで応答整形の道具です。
次に多いのが、F の次数を上げすぎて実装が複雑化する ケースです。理論的には任意の所望応答 T_des を F で実現できますが、高次フィルタは離散化誤差や計算遅延の影響を受けやすく、サンプリング周期の選定もシビアになります。実用上は1次〜2次の遅れで十分なことが多く、本シミュレーターも1次遅れに絞っています。「シンプルなフィルタで70%の効果を取り、残りはチューニング」というのが現場の実用解です。
最後に、F の時定数を「目標値変更の頻度」と切り離して考える と運用上の問題が出ます。τ_F を T_p の3倍に設定すれば理想的な滑らかさが得られますが、もし目標値が30秒ごとに変更されるなら、フィルタ出力が定常値に到達する前に次の目標値が来てしまい、いつまでも追従できません。実機では「目標値変更の最小間隔」と「フィルタの整定時間」が両立するように τ_F を選びます。シミュレーターで τ_F を10秒にした状態で目標値変更を想像してみると、立ち上がりが遅すぎて使い物にならないことが体感できます。設計は常に運転条件とセットで考えてください。