このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
熱交換器内の温度制御
この例では、フィードバック補償器およびフィードフォワード補償器を設計し、熱交換器により化学反応器の温度を調整する方法を示します。
熱交換器のプロセス
以下に、「攪拌タンク」と呼ばれる化学反応器を示しています。上部の入口からは、水槽内で混合する液体が送られます。水槽の液体は、制御バルブを経由して熱交換器 (下部のパイプ) に供給される流量を調節することで、一定の温度を維持しなければなりません。入口の流れの温度の変動は、このプロセスの外乱の主な原因となります。
図 1: 熱交換器を含む攪拌反応器
測定データを使用した熱交換器ダイナミクスのモデル化
むだ時間を付加した 1 次モデルを熱交換器の特性から導出するには、バルブ電圧 V
にステップ外乱を加え、水槽の温度 T
に対する影響を時間経過に沿って記録します。以下に、測定した応答を正規化された単位で示します。
heatex_plotdata
title('Measured response to step change in steam valve voltage');
値 t1 および t2 は、応答が最終値の 28.3% および 63.2% に到達した時間です。これらの値を使用すると、熱交換器の時定数 tau
とむだ時間 theta
を推定できます。
t1 = 21.8; t2 = 36.0; tau = 3/2 * ( t2 - t1 ) theta = t2 - tau
tau = 21.3000 theta = 14.7000
むだ時間を付加した 1 次応答を測定した応答と比較して、これらの計算を検証します。
s = tf('s');
Gp = exp(-theta*s)/(1+tau*s)
Gp = 1 exp(-14.7*s) * ---------- 21.3 s + 1 Continuous-time transfer function.
hold on, step(Gp), hold off title('Experimental vs. simulated response to step change');
モデル応答と実験データは非常によく一致しています。流入温度のステップ外乱に対する 1 次応答を推定するには、似たようなバンプ テスト実験を実施できます。熱交換器と流入外乱に対するモデルを用意したので、これで制御アルゴリズムを設計する準備が整いました。
フィードバック制御
次のブロック線図は、開ループ プロセスを示しています。
図 2: 開ループ プロセス
次の伝達関数
は、蒸気バルブを開く電圧 V
の変化が水槽の温度 T
にどのように影響を及ぼすかをモデル化したもので、次の伝達関数
は、流入温度の変化 d
が T
に及ぼす影響をモデル化したものです。与えられた設定点 Tsp
付近の水槽の温度 T
を調節するには、次のフィードバック アーキテクチャを使用してバルブの開口 (電圧 V
) を制御できます。
図 3: フィードバック制御
この設定では、比例積分 (PI) コントローラー
が、望ましい温度と測定温度間のギャップ Tsp-T
に基づいて電圧 V
を計算します。コントローラーのパラメーターに適した値を選択するには、ITAE 式を使用できます。
Kc = 0.859 * (theta / tau)^(-0.977) tauc = ( tau / 0.674 ) * ( theta / tau )^0.680 C = Kc * (1 + 1/(tauc*s));
Kc = 1.2341 tauc = 24.5582
ITAE コントローラーの動作を確認するには、フィードバック ループを閉じ、設定点の変化に対する応答をシミュレートします。
Tfb = feedback(ss(Gp*C),1); step(Tfb), grid on title('Response to step change in temperature setpoint T_{sp}') ylabel('Tank temperature')
応答は比較的速く、一部にオーバーシュートが見られます。安定余裕を見てみると、ゲイン余裕が弱いことがわかります。
margin(Gp*C), grid
比例ゲイン Kc
を減らすと性能は低下しますが、安定性は強化されます。
C1 = 0.9 * (1 + 1/(tauc*s)); % reduce Kc from 1.23 to 0.9
margin(Gp*C1), grid
step(Tfb,'b', feedback(ss(Gp*C1),1),'r') legend('Kc = 1.23','Kc = 0.9')
フィードフォワード制御
流入温度の変化は水槽内の温度が変動する主な原因であることを思い出してください。このような外乱を避けるために、フィードバック制御に代わるものとして、以下に示すフィードフォワード アーキテクチャがあります。
図 4: フィードフォワード制御
この構成では、フィードフォワード コントローラー F
は流入温度の測定値を使用して蒸気バルブの開口 (電圧 V
) を調整します。したがって、フィードフォワード制御では流入温度の変化の影響を予期し、事前に回避します。
簡単な計算により、温度の外乱 d
は水槽の温度 T
に次のように総合的に伝達されることが示されます。
完全に外乱を抑制するには以下が必要です。
実際には、モデル化が不正確であると外乱を正確に抑制できなくなりますが、フィードフォワード制御を行うと、流入外乱による温度の変動を最小限に抑えることができます。フィードフォワード方法がどのように機能するかを詳しく理解するには、理想的なフィードフォワードの遅れを 5 秒増加し、流入温度のステップ変化に対する応答をシミュレートします。
Gd = exp(-35*s)/(25*s+1); F = -(21.3*s+1)/(25*s+1) * exp(-25*s); Tff = Gp * ss(F) + Gd; % d->T transfer with feedforward control step(Tff), grid title('Effect of a step disturbance in inflow temperature') ylabel('Tank temperature')
フィードフォワード/フィードバック結合型制御
フィードバック制御は一般的に設定点の追従に適しています。一方、フィードフォワード制御は測定された外乱の抑制に役立ちます。次に、両方の方法を組み合わせることの利点を見ていきます。対応する制御アーキテクチャを以下に示します。
図 5: フィードフォワード/フィードバック制御
connect
を使用して、Tsp,d
から T
への対応する閉ループ モデルを作成します。まず、各ブロックの入力チャネルと出力チャネルに名前を付け、次に connect
によってブロック線図の線を自動的につなぎます。
Gd.u = 'd'; Gd.y = 'Td'; Gp.u = 'V'; Gp.y = 'Tp'; F.u = 'd'; F.y = 'Vf'; C.u = 'e'; C.y = 'Vc'; Sum1 = sumblk('e = Tsp - T'); Sum2 = sumblk('V = Vf + Vc'); Sum3 = sumblk('T = Tp + Td'); Tffb = connect(Gp,Gd,C,F,Sum1,Sum2,Sum3,{'Tsp','d'},'T');
フィードフォワード制御を使用した閉ループ応答と使用しない閉ループ応答を比較するために、フィードバックのみの設定に対し、対応する閉ループ伝達関数を計算します。
C.u = 'e'; C.y = 'V'; Tfb = connect(Gp,Gd,C,Sum1,Sum3,{'Tsp','d'},'T');
次に、2 つの設計を比較します。
step(Tfb,'b',Tffb,'r--'), grid title('Closed-loop response to setpoint and disturbance step change') ylabel('Tank temperature') legend('Feedback only','Feedforward + feedback')
設定点の追従性能はどちらの設計でも同じですが、フィードフォワード制御を使用した場合の外乱の抑制は明らかに向上しています。これは、閉ループ ボード線図を見ても明確です。
bodemag(Tfb,'b',Tffb,'r--',{1e-3,1e1}) legend('Feedback only','Feedforward + feedback','Location','SouthEast')
対話型シミュレーション
さらに詳細を理解し、フィードフォワード ゲインとフィードバック ゲインを対話形式で調整するには、付属 GUI および Simulink® モデルを使用します。次のリンクをクリックして GUI を起動します。
heatex