温度制御プログラムの実践結果と課題
4 日 ,5 日 ,6日とアルバイトに行ってきました
内容は自作のラズパイを使った加熱コントロールシステムの試験運転&実践
温度上昇テスト
4日と5日はものが入ってない状態での温度上昇テスト
概要は、大きな庫内に蒸気を吹き込み、段階的に一定の温度になるように制御するというもの
自宅での実験環境は電気ケトルとDS18B20温度計でしたが、職場では蒸気と熱電対を使います
多少不安がありましたが、テスト結果は良好。かなり良い精度で温度をコントロールすることが出来ました
見つかった課題としては、温度が細かく脈動していると温度予測が効かなくなるということ
水温と違い、蒸気の場合はONとOFFのときの温度差が波として出てしまいます
プログラムでは瞬間的な温度変化から30秒後の温度を予測するようにしているので、細かい脈動から温度が極端に低く予測されたり、高く予測されたりと、出力にムラが出てしまいました
(例: 5秒間で0.2℃下がった → 30秒後には1.2℃下がると予測 → それを相殺するために出力を30%上げなければいけない → PV値がSV値を超えているにも関わらず保温以上の加熱 → 温度が上がりすぎたから出力遮断 → 急激に温度が下がる → 繰り返す → +0.2℃でやや高止まり)
蒸気の温度ムラと熱電対の反応性の高さが原因ですね
これは対策が必要そうです
本番1回目
6日は、モノが入った状態での運転
庫内に置かれた対象物を、蒸気で温めます
あまり詳しい内容は書けませんが、蒸気を使って室温を上げ、ファンで吸い上げることで対象物を加熱します
温度センサーは対象物の入り口と中心の二箇所
工程を開始すると、いきなり問題発生
対象の中心温度で出力を制御していたため、温度がなかなか上がらず出力がずっと100%状態で維持されてしまいました
すぐさま入り口温度に切り替えると安定
ファンで吸い上げてるとはいえ、対象物の中心部に熱が伝わるまで10~30分程度の遅延があるようです(入り口部分との熱交換で空気が冷やされるため、浸透するように熱が伝わる)
制御すべきは対象物の温度ではなく入り口温度(室温)ですね
次に見つかった問題点は、制御する温度計をフェーズごとに切り替える必要があること
加熱対象物は約8箇所あり、温度計は16本設置されています
熱源や密閉状態などにより、温まりやすい場所・温まりにくい場所とムラがあります
最も高い入り口温度で室温を制御すると、全体的に温度が上がりきらず、逆に低い温度を基準にしてしまうと対象物が加熱されすぎて熱ダメージを受けてしまう可能性があります。
初期の温度上昇フェーズは、最も低い入口温度で制御し、高温時の維持フェーズは最も高い入り口温度で制御、安定してきたら中心温度で制御(乱高下を防ぐため)というのが今のところ良さそうです
フェーズごとに使用する温度計を切り替える仕組みを作らないといけないですね
ただ、どの温度計が低く出るかは、そのときのセッティング次第なのが(うむむ・・・)
プログラムの汎用性を無くしてしまえばどうにでもなるんですけどね
熱の伝わり方
実際に試験してみると、熱の伝わり方がイメージしてたものと全然違って驚きます
蒸気が排出されると、空気とは綺麗に混ざり合わず、温度ムラを持ったまま庫内を循環します
その循環した空気は加熱対象物の入り口から吸われ、対象物の入り口部分を温めます
対象物が温められるのと引き換えに空気は冷やされ、中心部には常温程度に冷やされた空気が届きます
結果として浸透するような形で熱が伝わります
中心部の温度が上昇しないからといって、加熱を強めると、入り口付近が過加熱になってしまいます
庫内の温度上昇も出力に比例するわけではなく、対象物から吐き出される冷たい空気によって庫内が冷却されるため、対象物と庫内の温度差も出力を決める条件になってきます
(対象物が温まってくると必要な出力も下がってくる)
温度変化が表れる遅延も、温度帯で変わることが分かりました
・・・よくよく考えてみるとフライパンと同じですね
結局は、室温と目標温度を一致させて、温度が上がってくるまで”待つ”だけですね
ダミー温度計の改良
PCでテストするときにはダミーの温度計プログラムを使っています
30秒前の出力を元に、現在の温度に数値を加算して返すという単純なものです。外気温度との差による冷却減算も入っています。
今回のような測定位置による温度ムラを表現できるように改良を行いました。
内容としては
まず、温度を持ったオブジェクトを定義(辞書型変数[名前: 温度])
空気・蒸気・対象物下部・対象物中心部・外気など
次に作成したオブジェクト同士を伝熱係数を設定したパイプでつなぎます(リスト:[名前1, 名前2, 伝熱係数])
伝熱係数は計算済みの定数とする
常に蒸気は100℃に固定、外気は25℃に固定
経過秒数に比例した熱移動を行う
といったもの
実行結果はこんな感じ
温度の遅延具合がうまく表現できてますね
空気温度・入り口温度・中心温度と3層になってます
(実際は入り口温度=空気温度ですが)
熱源から遠くなるほどグラフが滑らかになっているのが面白いですね(こういうのがフィルタ処理とかに使われてるのかな?)
乱高下を抑えるために、温度計の遅延・予測を10秒にしてみると、中々良い結果が出ました。(予測が10秒先だから大きくブレない)
・・・が、これは遅延0秒のダミー温度計だったので、実際はうまくいかないと思います
試行錯誤
今やるべきことは、フェーズごとの温度計切り替えの実装と、脈動時の正常な温度予測方法を考えることですね
11日に2回目の実践があるので、それまでに完成させるぞー(楽しい)
最近のコメント