制御シミュレーション(1)

今回はこれから学ぶで制御工学について,情報処理の観点から扱う.
制御工学で学ぶのは線形系であるため,基本は解析解(=紙と鉛筆で解けるもの)を求めることが可能な状態を扱う.
しかしながら,昨今の制御系はディジタル制御のセンサやデバイスを多用するため, 連続量でなくセンサなどから得られる「離散量を基にした制御」を考えておく必要がある.

制御理論の超基礎

私たちの身の周りには,空調の温度設定や,自動車の自動速度設定など, 機器などの動作状態を指示通りにコントロール(=制御)したい場合が多く存在する.

何かの対象の状態を計測し,それを元に所望の設定通りに状態を制御する方法の基本は,フィードバック制御と呼ばれる方法である.
動作原理は至ってシンプルで,

を行うことで実現できる.
以下に基本的な制御構造の原理図を示す.



図1.フィードバック制御の基本構造.

図中の記号はそれぞれ,

である.よく出てくる単語なので覚えておこう.

操作に対して,対象が即座に反応して設定値に到達するならば,制御の必要はないが, 現実には操作と反応には時間差が生ずる.
例えば,大きな部屋の空調温度変化(熱容量)や,回転モーメントの大きな回転運動系(慣性)などの物理現象がこれにあたる.

例:モータ回転数の制御

制御対象として一般的に用いられる(電気)モータを考えよう.
電圧の変化に対して,モータの応答は慣性により「1次遅れ」と呼ばれる応答を示す.
以下に1次遅れの例を図示する.ステップ応答とも呼ばれる.



図2.1次遅れ応答の例.

これを数式で示すと, \begin{align} y(t) = K\left(1-\exp^{-\dfrac{t}{T}}\right) \end{align} となる.
ここで,$K$ はゲイン係数(定数),$T$ は時定数と呼ばれ,1次遅れの基本的な特性を示す.
時定数 $T$ は応答の遅れ具合と考えればよいく,$T$ が大きいほど遅れが大きい.

速度型ディジタル制御アルゴリズム

ディジタル制御を行うため,一定周期ごとに演算を繰り返して,上記のようなフィードバック制御を行う.
すなわち,設定値 SV および計測値 PV から,MVをどのように決定するかが問題となる.



図3.制御周期の概念.

「速度型制御アルゴリズム」では,制御周期 Δt を決め,その間に,計測,演算,操作量 MV の出力を繰り返して実行する.
以下の式で第 n 回目の操作量を決定することが可能である.
\begin{align} MV_n = MV_{n-1} + \Delta MV_n \end{align} この式は,前回の操作量 $MV_{n-1}$ に,今回の変化分 $\Delta MV_n$ だけ加える,という意味である.

比例制御(P制御)

「制御器」の仕組みを調整することで,システム全体の応答を様々に変化させることが可能である.
最も基本的な制御を,比例(Propotional)制御,または単にP制御と呼ぶ.
P制御では,偏差 $e$ ( = 入力SV - 計測値PV ) に比例ゲイン $K_p$ をかけて,操作量 MV を決定する.
P制御の他にも,PD(Proportional-Differential)制御,PID(Proportional Integral Differential)制御などがよく用いられる.

P制御では,操作量 MV は以下の通り表される. \begin{align} MV = K_p e = K_p(y(t) - SV) \end{align}

P制御においては,$\Delta MV_n$ は偏差の変化量と考えることができるので, \begin{align} \Delta MV_n = e_n - e_{n?1} \end{align} と計算することができる.
この操作は,現在の値と目標値が大きく異なれば変化分を大きくし,値が近くなれば微修正をする,と理解することができる.

1次遅れモデルの離散表現

アナログ値では 1 次遅れ系において $T$ は時定数で,目標値と操作量は以下の関係にある. \begin{align} \frac{d}{dt}PV + \frac{1}{T} PV = MV \end{align} 周期 $\Delta t$ ごとに制御するため,$n$ 周期後の応答は以下の式で示される. \begin{align} PV_n = ( T/ (T+\Delta t)) PV_{n-1} + ( \Delta t/ ( T+\Delta t)) MV_n \end{align} P 制御をかけているので,今与えるべき操作量は \begin{align} MV_n = K_p e_n = K_p(SV - PV_{n-1}) \end{align} となる.

シミュレーションプログラム作成にあたって

上記のように速度型制御アルゴリズムを扱っているため,以下のような変数を用意すれば制御できる.

を用意すればよい.
$n$ や $n-1$ など,各時刻の値は全周期分用意する必要はなく, 「現」制御周期と「前」制御周期に関するデータを一時的に記録しておけばよい. 途中経過を記録するには,計算ステップごとに fprintf を用いてファイルに書き出す.