コントローラ(ペルチェ制御用ボード)モニタ用のパソコン側アプリとコントローラ側のプログラムです。
パソコン側の処理
測定値(PV)のモニタ、PIDパラメータの設定を行います。また収集したトレンドデータを保存し、履歴データとして読み出します。
画面
操作
・モニタ画面の操作
「Serial Port」ボタンにより通信ポートをオープンします。
「Start」ボタンによりモニタコマンドを2秒毎に送信します。
「Para」ボタンによりパラメータ用の設定ウィンドウが開きます。
「Stop/Run」,「Auto/Manual」ボタンにより動作モードを変更します。
「MV Write」ボタンにより操作量(MV)を変更します。(RUN-Manualモードで有効です。)
「Save」ボタンにより収集したデータをファイルに保存します。(CSV形式)
「Clear」ボタンにより収集データを一度クリアします。(データの収集は現時刻から開始しメモリ上に保持します。)
「History」ボタンにより「履歴画面」に移ります。
・パラメータ設定ウィドウの操作
「Write」ボタンにより、選択したパラメータ(SV等)の値をコントローラ側へ書き込みます。(パラメータはRAM上に書き込まれます。コントローラの電源OFFで0にクリアされます。)
・履歴画面の操作
「Open」ボタンにより保存済みのファイルを読み出します。
「Monitor」ボタンにより「モニタ画面」に移ります。
プログラム
画面はTabItemとしています。画面移動用のボタンでTabItem名を選択し、画面遷移を行います。
https://github.com/vABCWork/WPF-PID
マイコン側の処理
制御演算は200[msec]毎に行い出力を更新します。
動作モード
STOP/RUN、Auto/Manualモードがあります。
STOPモードでは、出力(操作量 MV)は0%となります。
RUNモードでManualの場合、制御演算せずに通信等で設定した値が出力されます。
RUNモードでAutoの場合、P(比例帯)≠0でPID演算を行います。
P(比例帯)=0の場合はON/OFF制御となります。
加熱制御と冷却制御
加熱制御は高い温度の目標値(SV)に近づくと、操作量(MV)は減少します。「逆動作」と呼ばれています。
冷却制御は低い温度の目標値(SV)に近づくと、操作量(MV)は減少します。「正動作」と呼ばれています。
ON/OFF動作
出力は測定値(PV)が目標値(SV)に到達するまでONで、目標値(SV)に到達するとOFFとなります。測定値が目標値の近辺で変動するとON/OFFが頻繁に発生するため、これを避けるためにヒステリシス(不感帯)を設けています。
・加熱制御(逆動作)の例
測定値(PV)=18℃、目標値(SV)=20℃、 ヒステリシス(Hys)=1℃の場合、
18℃から20℃に向かって、出力はON(100%出力) ---①
20℃に到達すると、出力はOFF(0%出力)。 ---②
出力OFFで温度低下。
20℃ですぐにONせずに、ヒステリシス分下がってから19℃で出力ON。 ---③
・冷却制御(正動作)の例
測定値(PV)=10℃、目標値(SV)=8℃、 ヒステリシス(Hys)=1℃の場合、
10℃から、8℃に向かって、出力はON(100%出力) ---①
8℃に到達すると、出力はOFF(0%出力)。 ---②
出力OFFで温度上昇。
8℃ですぐにONせず、ヒステリシス分上がってから9℃で出力ON。 ---③
PID演算
PIDの計算法には位置型と速度型があります。(資料1*1より)
位置型(Position type)は全値出力型(whole value output type)とも呼ばれ制御周期毎に全体の出力を計算します。例えばP動作の場合、MVn= Kp x en となります。
速度型(Velocity type)はインクリメンタル型(Incremental type)とも呼ばれ制御周期毎に変化分(差分)を計算します。例えばP動作は、Kp x (en - en1 )と計算します。
速度型で計算した後、出力を出す際に1制御周期前の出力(MVn1)を加算します。
MVn = Kp(en – en1 ) + MVn1
このコントローラでは位置型で演算しています。
このため、ManualモードからAutoモードに変更した場合、Manualモードで設定した操作量(MV)が、AutoモードでのPID演算に引き継がれません。例えばManualモードで80[%]の出力を出し、PVがSPの近くまで到達した状態で、Autoモードにすると、操作量(MV)はほぼ0[%]となります。 (P動作、Mr量=0の場合)。出力の「バンプレス切り替え」にはなりません。
全体フロー
出力
加熱側の出力(HEAT_MV)と冷却側の出力(COOL_MV)は、モータドライバIC (BD6211F)により行います。FIN=Low,RIN=Highで、電流はOUT2からOUT1へ流れペルチェモジュールを付けた容器は加熱されます。FIN=High,RIN=Lowで、電流はOUT1からOUT2へ流れ、容器は冷却されます。
操作量MV(0~100%)は資料2 *2の「22. マルチファンクションタイマパルスユニット2 (MTU2a)」「22.3.5 PWM モード」 により行います。1周期を200msecとし、周期内のON時間とOFF時間を変化させて、操作量MV(0~100%)とします。
MV=50%ならば、100msec ON, 100msec OFFとなります。
マルチファンクションタイマパルスユニット2 (MTU2a)のMTU3を冷却側出力用に、MTU4を加熱側出力用に使用しています。
・動作
カウント用クロックでTCNTの値がインクリメントされます。
TCNT=TGRBで出力をHigh。TCNT=TGRAで出力をLowとして、TCNTをクリアします。
コマンド
パソコンから送信されたコマンドにより、マイコンはコマンドに対応した処理を行い、レスポンスを返します。
ファイル一覧
・GitHubへの登録
https://github.com/vABCWork/pid
(登録ファイル: test1n.c, sci.c, sci.h, pid.c, pid.h, mtu.c, mtu.h)