恒温槽 - 温度を一定に保つアルゴリズム - 1
実験用のミニ恒温槽を作るんだ、と書いてからはや8ヶ月も経ってしまいました (^^;;
設定した温度より高くなったらヒータを止め、低くなったらヒーターを入れる、というやり方は温度が厳密には一定になりそうにないので他の方法を考える、と書きました。容器内の温度変化を検出してヒータの出力を調整するのではなく室温の温度変化から容器内の温度変化を予測して事前に手を打つというやり方です。
定常状態(気温一定)であれば前記事「温度を一定に保つ方法 - ミニ恒温槽の作成に向けて(3)」に書いたように簡単なのですが、もちろんそんなことはないから恒温槽が必要なわけです。
気温(室温)が変化するときどういう戦略をとれば一定になるかを検討します。
まず恒温槽内の温度がどういう変化の仕方をするかを考えます。
今後
「恒温槽 - 温度を一定に保つアルゴリズム - 2」 (具体的な計算方法等)
「PICでヒータを制御するプログラム」 (たぶんPWMを使用)
「ミニ恒温槽とヒータの作成」
「検証」
と続く予定です。
なお温度制御に一般的に用いられるのは“PID制御”と言われるもので、ここで考えている方法はそれとはアプローチが違います。PID制御についてはいろいろ資料があるのですが一つ紹介しておきます。
「アズビル - やさしい自動制御のお話 - 第四章 PID制御について」
====
金属皮膜抵抗器の温度係数を測ったとき抵抗器を断熱容器の中に入れヒータで温めるという方法をとりました。そのときの容器内の温度を調べてみます。
前半が加熱したときでほぼ一定の割合で温度が上昇して行くのですが徐々に温度の上がり方がにぶってきます。後半はヒートを止めたあとで、ほぼ一定の割合で温度が下降していくのですがこちらもだんだん下がり方がにぶってきます。
きわめて常識的な変化の仕方なのですが、これはなぜかを考えてみます。
後半のヒータを止めた後なのですが容器内と外気の間には温度差があります。だから容器内の熱が外部に逃げて温度が下がっていくのですが、外部に逃げる熱は温度差を熱抵抗で割ったものになるはずです。
これはコンデンサの電荷を抵抗を介して放電させるときに似ています。だからコンデンサと同じような微分方程式になり解も同じようなものになるはずです。
T(t) = (T0 - Te ) exp( - kt ) + Te T0:最初の温度、Te:室温、t:経過時間、k:定数
上のグラフと一致するような定数kを求めてグラフを作ってみました。
(少なくとも最初のうちは)とてもよく一致しています。最後の方で計算値と実測値が一致しなくなりますがこれは(上の式では一定と考えている)室温が下がっているためでしょう。
次にヒータが投入されているときですが、この場合も容器内から逃げていく熱は上と同じです。ただ逃げていく以上の熱が供給されているので温度は上がって行きます。温度が上がれば逃げる熱は増えていき、逃げる熱と供給される熱が一致したところで一定の温度になります。
T(t) = (T0 - Tm ) exp( - kt ) + Tm
T0:最初の温度、Tm:到達温度、t:経過時間、k:定数
この場合は定数kだけでなく最終的な到達温度Tmも求める必要があります。
と書きましたが実際はたくさんデータがあるのでこれらのグラフを作るときはT0、Tm/Te、kのすべてを最小二乗法で決定しています。
今回のケースでは到達温度30.2℃としたとき実測値によく一致する結果が得られることがわかりました。
多少の不一致は残りますが、これも室温が一定していないせいでしょう。
------
上に書いた式は室温が一定であるという条件のものですが、室温はそうそう大きな変化をするものではありませんからある時刻の室温と容器内の温度がわかればそれから数秒後に室温の影響でどのように容器内温度が変化するかは予想できるはずです。
またもとの微分方程式は線形なので二つの解の和も解になるはずです。だから別にヒータ(正確にはヒータ+測定対象物の発熱)の影響による温度変化を計算して室温の影響による温度変化にプラスするだけでトータルでの温度変化も求まることになります。
<=== 前半は間違っているわけではありませんが、後半が勇み足でした。
-----以上から次のような方法をとれば温度を一定にできそうです。
室温と容器内温度の差から温度変化を予想する。
室温の変化にともなう容器内温度変化を打ち消すようなヒータの出力を求める
これを数秒に一回くらいやっていれば容器内の温度も一定に保たれるように思えます。
温度の変化率は -k ( T0 - Te ) と簡単な式で表されますのでPICでも問題なくできそうです。
計算には定数kや到達温度Tmが必要ですが、これは上にあるようにヒータに電源を入れて温度を上昇させ、そのあとヒータを切って温度が下降するときの温度変化を調べておけば求めることができます。室温と一定時間での容器内温度の変化を調べるだけなので場合によってはkやTeを求めるところもプログラムの中で行うことができそうです。
(もっと本格的(?)にやるなら常に温度が一定に保たれているか監視しもしそうでないなら自動的に定数kや到達温度Tmを補正して温度維持の精度を上げるなんてこともできそうです。kやTmは恒温槽、測定対象の設置状態や測定対象の発熱で変化するので)
温度(分布)の話になると熱伝導の方程式(フーリエの方程式)を解かなければならないのですが偏微分方程式になるのでなかなかたいへんです。単純なモデルにしないと解析的に解を求めることができませんし、仮に解析解が求められるとしても私の学力(?)じゃ難しそうです。
恒温槽の測定対象物のある点の温度の変化を知るということであれば上のような考え方でも特に問題ないような気がします。熱伝導の方程式の解析解の例を見たら座標を固定したときの温度変化は実際上のような式になっていました。
「恒温槽 - 温度を一定に保つアルゴリズム - 2」に続く。
ヒータの準備も進んでいます。
「データシートを読んで考えたPIC/PWMの使い方 - 恒温槽のヒータを作る」
---------
関連
「記事一覧(測定、電子工作、天文計算)」
趣味の実験
趣味の気象観測
趣味の電子工作
PIC
「恒温槽 - 温度を一定に保つアルゴリズム - 1」 (この記事)
「恒温槽 - 温度を一定に保つアルゴリズム - 2」
「正確な温度を求めて (1)」
「氷点 - 摂氏0度の作り方」
「ミニ恒温槽の作成に向けて - 1」
「ミニ恒温槽の作成に向けて - 魔法瓶の活用」
「温度を一定に保つ方法 - ミニ恒温槽の作成に向けて(3)」
「サーミスタによる温度測定の精度」
「サーミスタ温度計の精度を調べる - 1」
「PICで作るお手軽サーミスタ温度計」
「PICで作るお手軽サーミスタ温度計 (2) - ソース付き」
「サーミスタの自己発熱・熱放散係数を測ってみた」
「(アルミ管入り)サーミスタの自己発熱・熱放散係数を測ってみた」
「(水中の)サーミスタの自己発熱・熱放散係数を測ってみた」
「サーミスタで正確な温度を測るコツ - 基準抵抗(R0)、B定数、熱拡散係数、...」
「続・サーミスタで正確な温度を測るコツ - 基準抵抗(R0)、B定数、熱拡散係数、...」
「(趣味の)白金抵抗温度計の製作 - 準備編」
「16bitADコンバータMCP3425とPICで作る白金抵抗温度計 - 1」
「(趣味の)白金薄膜抵抗温度計の作り方 - 誤差について」
「温度センサー3種の精度比較(摂氏0度~40度編)」
参考
「アズビル - やさしい自動制御のお話 - 第四章 PID制御について」
« (水中の)サーミスタの自己発熱・熱放散係数を測ってみた | トップページ | リブロに売っている、ジュンク堂で買った - アラビア語は難しいけれど、日本語もむずかしいのかも »
「趣味の実験」カテゴリの記事
- 100Ω抵抗器の端子間で発生した火花放電(沿面放電)(2018.07.18)
- Amazonで買った「400000V高電圧発生モジュール」の出力極性(2018.07.15)
- 高電圧モジュールの放電開始電圧 - 針状電極間の放電(2018.07.11)
- 高電圧モジュールの放電開始電圧 - 円筒電極と針状電極(2018.07.09)
- 放電開始電圧をパッシェンの法則から知る(2018.07.07)
この記事へのコメントは終了しました。
« (水中の)サーミスタの自己発熱・熱放散係数を測ってみた | トップページ | リブロに売っている、ジュンク堂で買った - アラビア語は難しいけれど、日本語もむずかしいのかも »
コメント