温度制御

ヒータをON-OFFさせて対象物体の温度を制御します。

ソースコードやプロジェクトファイルのダウンロードはこちら →thermo.zip

(1)シミュレーション用のプログラムです。
ブロック図
プログラム
var temp=20;	// 初期温度
Ta=20;		// 外気温度
proc
{
    Tcmd = w_sqr( 80, -0.125, Ton/2 ) + Ton/2;    // 温度指令
    err = Tcmd - temp;                            // 誤差
    Qc = hysteresis( Kp*err, -1, 1, H );          // ヒステリシス

    dT = Qc - D * ( temp - Ta );                  // 数学モデル
    temp = integral( dT, temp, Cp, 100, 0 );
} 
説明

ヒータ電源をON-OFFして物体の温度を指令値に一致させます。
物体は外気から冷やされるモデルになっているので、ヒータOFFで温度が下がります。

以下の関数、信号、パラメータを使っています。

関数
(予約語)
 w_sqr 矩形の周期関数を発生します。
初期値0とするためにオフセットを加算しています。
 hysteresis ヒステリシス要素です。
 integral 出力リミット付き積分器です。
信号  temp初期値20℃として計算した温度です。
実運転ではセンサで計測した信号になります。
 Tcmd温度指令信号です。0とTonとを交互に繰り返します。
 err誤差信号です。
 Qcヒータの発生熱量です。値は0またはHになります。
 dT単位時間あたりの熱の移動量です。
制御
パラメータ
 Ton温度指令の設定値です。
 Kp制御ゲインです。
 Hヒータの発生熱量です。
数学モデル
パラメータ
 Ta外気温度です。20℃と宣言しています。
 Cp対象物体の熱容量です。
 D対象物体と外気との間の熱伝達係数です。

設定例
記録例


(2)実運転用のプログラムです。
ブロック図
プログラム
青字は変更点
Ta=20;	// 外気温度
proc
{
    Tcmd = w_sqr( 80, -0.125, Ton/2 ) + Ton/2;// 温度指令
    temp = Ain( 0, 0, 10 );                   // 温度センサ入力
    err = Tcmd - temp;                        // 誤差
    qc = hysteresis( Kp*err, -1, 1, 1 );      // ヒステリシス
    Dout( 0, 0.5, qc );                       // デジタル出力
} 
説明

以下の関数を追加しています。

 Ain 温度センサのアナログ電圧を数値化します。
 Dout デジタル信号を出力します。
qcは0または1の信号なので、しきい値を0.5にしています。
フォトMOS式リレーなどを駆動してヒータをON/OFFさせます。

実際に使用する機材と数学モデルのパラメータを一致させる必要があります。
シミュレーションを行って制御パラメータを決定し、運転しながら微調整を行います。