2014年10月3日金曜日

Arduinoを用いたテンパー炉、リフロー炉の温度制御装置(3) (PID制御)

前回K型熱電対アンプモジュールでの温度測定がうまくいきました。
ので、早速オーブントースターのヒーターを秋月のソリッド・ステート・リレー(SSR)キット 25A(20A)タイプでPID制御してみます。
秋月のSSRキットをはんだ付けして組み立ててから、適当なヒートシンクにつけます。
サーモスタットの片方を半田ごてで取り外してSSRの出力にはんだ付け、もう片方に銅線をはんだ付けして、サーモスタットの線を取ったところにはんだ付けします。
サーモスタットは必要ないのですが、どこか適当な温度になるところにつけて安全装置にする予定です。

SSRの入力は以下のサンプルスケッチにあるように6ピンにしました。
これも前回と同じく、やりやすいように0ピンにしましたがうまくいかず。
実はデジタル0,1ピンはシリアル通信用に使用してるとのことで、使えないことが判明。
素人ですね。

PID制御とは
P:Proportinal 比例、I:Integral 積分、D:Derivative 微分
の頭文字。
「フィードバック制御の一種であり、入力値の制御を出力値と目標値との偏差、その積分、および微分の3つの要素によって行う方法のことである」(wikipedia)
ということなんですが、前の会社にいるとき、理化工業の温調器で薬品槽の温度管理をしており、それがPID制御でしたので名前と簡単な原理は知っています。しかしどうゆう数式でやってるかとかは知らない。
最近は倒立振子やクアッドコプターのモータのPID制御が流行ってるっぽい。

PIDのスケッチは、まず、ArduinoのPID Libraryダウンロード
解凍したフォルダ内の \PID_v1 フォルダをArduinoのインストールフォルダー内のlibraries\以下のにフォルダごとコピー。
スケッチはPID RelayOutput ExampleのBasicをもとに、設定温度200度にしてやってみます。

測定温度を一秒置きにシリアル出力させた。
コンソールで受信したデータをエクセルにコピペしてグラフにしたのが以下


2分くらいで240度位までオーバーシュートしました。
が、3分くらいから200度で安定しました。
スケッチ内のPIDに設定値をいろいろいじるとあまりオーバーシュートせずうまくいくようです。
が、とりあえずわからないのでデフォ。
ライブラリのサンプルではPID Adaptive Tuning とか、 there is also now a PID Autotune Library that can help you determine tuning parameters.とかある、説明を見たがが、どうやるかわからん。AutoTune_Example.pdeがあったので何とかオートチューニングできそうだ。

ヒーターオンオフがSSRなので、PWM制御でもってヒーターの中途半端な加熱が可能です。
しかしハンダごて温度コントローラの製作より、
「秋月のSSRキットは、制御部にゼロクロスタイプのフォトトライアックを使っているので、出力波形は必ずゼロクロスのタイミングでON/OFFされ、従ってスイッチングノイズの発生がありません。
」ということ、60hzの分解能のPWMになるのだろうか。


PIDライブラリのサンプル RelayOutputにはリレー用のON,OFF制御のスケッチがありました。
やってみましたが、温度が上昇しすぎてうまくいきません。

PID設定値の加減でしょうが、わからないので、とりあえずPWMでやろうと思います。
 
次回はオーブントースターを組み立ててとりあえず納品しようと思います。ファンなんかはまたあとで。

今回ちょっとはまった、というか、間違え。
PID LibraryOlder Versions からダウンしてしまった。
以下のエラーがでてコンパイルできない。

libraries/PID_v1/PID_v1.cpp: In constructor 'PID::PID(double*, double*, double*, double, double, double, int)':
libraries/PID_v1/PID_v1.cpp:26: error: 'millis' was not declared in this scope
libraries/PID_v1/PID_v1.cpp: In member function 'void PID::Compute()':
libraries/PID_v1/PID_v1.cpp:43: error: 'millis' was not declared in this scope
調べてみると
http://forum.arduino.cc/index.php?topic=158261.0 より Latest version (now hosted on GitHub)からダウンせよとのこと。
そうするとコンパイルできた。


0 件のコメント:

コメントを投稿