« 風速計・風向計を作る - 1 | トップページ | PICでI2C - ADコンバーター・MCP3425の使い方 »

2014年9月 1日 (月)

PICで平方根 - 白金薄膜抵抗で温度を測る

今は温度測定に凝ってるわけですが、やる以上やっぱり“高み”を目指したいと思います。
温度計のヒエラルキーの頂点には17個の定義定点があります。「ヘリウムの蒸気圧点」からはじまって「銅の凝固点」まで私にはリアリティを感じられないものが並んでいます。唯一「水の三重点」だけはどうにかなりそうな気もするのですが、どうにかなるのかどうにもならないのかよくわかりません。まあ「体温で沸騰する水」くらいまでは実験していますのでこれはそのうち記事にしたいと思います。

さて「定義定点」の次の階層は何かというと(13.8083K~961.78deg,Cの範囲であれば)「白金低抗体」だそうです。そこで秋月で\350._で買ってきた「超小型白金薄膜温度センサ」で定義定点の次の精度を気分だけでも味わってみたいと思います。
(ほんとに“気分だけ”です。「白金抵抗温度計を用いた 精密温度測定 - J-Stage」を読むと白金抵抗温度計を使った温度測定の難しさがわかります。とは言いつつやっぱりやってはみたいわけで「(趣味の)白金抵抗温度計の製作 - 準備編」あたりからちょこっと始めています)
Imgp2522580px

これだけ小さいといつもならハンダ付けに気を使うのですが、これはヘーキです。
納得できるまで何度でもハンダ付けができます。なにしろ-200deg.Cから600deg.Cまで測れるものですから (^^;;
アルミパイプに封入して使います。もちろん氷水につけることを考えています。
絶縁はちゃんとやってますので安心してください。
-----

「白金低抗体」を使った温度計というのは最上位の「定義定点」での抵抗を測っておき、白金低抗体の抵抗から補間して温度を求めるという仕組みです。この補間式というのがけっこうすごくて理科年表に3ページにわたって説明があります。

秋月で買ったものはそんなたいそうなものではなくて(0deg.C以上の場合)温度と抵抗値の関係が二次式(0℃以下は四次式)で示されていますので、それから温度を求めることになります。

もっとも二次式と言っても温度に対する抵抗値が示してあるので抵抗値から温度を求めるときは二次方程式を解く必要があります。PICじゃ平方根なんてムリだろうと思ったのでこれまでこんなプログラムを書いていました。

定電圧源(Vin)に抵抗値がわかっている抵抗(Rin)と白金薄膜抵抗がつながれており白金薄膜抵抗の両端の電圧(fp)を16bitのADC(MCP3425)で測っています。

(“定電圧源”とか“抵抗値がわかっている”というのがちょっと問題です。このような測定になると抵抗値の温度変化もとうぜん問題になります。今のところ電圧源には基準電圧ICを使いできるだけ温度変化が小さい金属皮膜抵抗を使うということで対応しています。金属皮膜抵抗はふつう誤差1%ですが、探すと0.5%とか0.1%のものも入手できます。こういうものはふつう温度係数も小さいです。誤差0.005%で温度係数±2ppmというものがありますが、それなりのお値段がします。ちょっと衝動買いできるようなお値段じゃありませんでした。お金持ちじゃないと買えないという意味じゃなくて抵抗一本がこんなにするのか、というような意味でですが)
それから白金薄膜抵抗は抵抗値が小さいので途中の配線の抵抗にも注意する必要があります。他に自己発熱とか気をつけなければいけないことが多いので、ちょっと室温を測るのに使う、なんていうのはやめた方がいいです (^^;;

とは言えどうしても白金薄膜抵抗で温度計を作りたいという方のために記事を書き始めました。
  「(趣味の)白金抵抗温度計の製作 - 準備編
いろいろとたいへんです。


            fp = ip_MCP3425[1];   // ADCの下位バイト
            fp = (fp+ip_MCP3425[0]*256.0) * 62.5E-6; // ADCの上位バイト、分解能62.5μV
            fp /= 8.0; // ゲイン x8 で使っているので8で割ります。
            fp_c = fp * V_cmp; // ADCのゲインの誤差を補正します。V_cmp=1.002;
            R1=fp_c/(Vin-fp_c)*Rin; // 白金薄膜抵抗の抵抗値を求めます。
                     // Vin=4.094[V]; Rin=4.980E3[Ω];
                     // 白金薄膜抵抗の抵抗値は100[Ω]と小さいので
                     // 配線が長くなるときはその分も調べてここで引きます。
            T=(R1/R0-1)/C_a; // 抵抗値と温度の関係は1次関数と考え温度を求めます。
                     // R0: 100[Ω];
                     //     C_a= 0.0039083;
            R2=((T*C_b+C_a)*T+1)*R0; // 求めた温度に対する抵抗値を求めます。
                     //     C_b= -0.0000005775;
            T=(R1/R0-R2/R0)/C_a+T; // 上記をもとに外挿して温度を求めます。
            sprintf(buf,"%5.1fdeg",T);
            LCD_SetCursor(0,0);
            LCD_puts(buf);

ちょっと雑ですが二次の項の係数は小さいのでこれでもちゃんと温度が求まります。
計算は雑ですが抵抗とか電圧とかちゃんと有効数字4桁で求めて(調べて)います。けっこうたいへんでした。それだけの確度でといういう意味ではなくて四桁目まで考えても全体的に整合性がとれるという意味ですが。
(使っているADコンバータについてはPICでI2C - ADコンバーター・MCP3425の使い方」にあります)


----

でも使っているのは一応Cコンパイラーです。ひょっとしたら平方根の計算くらいできるのでは?と考えmath.hをインクルードしてみました。べつにエラーは置きません。
そこでこんなプログラムを書いてみました。

            sprintf(buf,"sqrt(%3.1f)=%8.6f",2.0,sqrt(2.0));
            LCD_SetCursor(0,0);
            LCD_Puts(buf);
            LCD_SetCursor(0,1);
            for(i=0;i<16;i++) LCD_Putc(' ');

結果はこうなりました。
Imgp2525580px

これでちゃんと二次方程式の解の公式を使えそうです (^^)

と書いたのですが、0℃以下のことまで考えるとけっきょく逐次近似(ニュートン法)になります。math.hをインクルードしなくて済むのもポイントじゃないでしょうか。

  「
測温抵抗体(Pt100、白金薄膜温度センサー)の抵抗値を温度に変換する(平方根を使わない)計算式

------


関連

  「測定対象別記事一覧(測定、電子工作、天文計算)
    温度、気圧をはじめいろんな物理量の測定方法について

  「過去記事の一覧(測定、電子工作、天文計算)

  「正確な温度を求めて (1)
  「氷点 - 摂氏0度の作り方
  「サーミスタや白金抵抗温度計の自己発熱の影響を補正する方法

  白金測温抵抗体温度計の製作

  準備編
    「(趣味の)白金抵抗温度計の製作 - 準備編

  理論編
    「(趣味の)白金薄膜抵抗温度計の作り方 - 誤差について

  回路編
    とても単純な回路です。
      「16bitADコンバータMCP3425とPICで作る白金抵抗温度計 - 1
    ちょっと複雑になりますが、使いやすい回路です。
      「サーミスタ/白金測温抵抗体/pn接合による温度測定のための定電流電源

  プログラム編

  その他
    「サーミスタや白金抵抗温度計の自己発熱の影響を補正する方法
    「白金測温抵抗体の自己発熱(熱放散係数)を測ってみた - 1
    「Pt100(白金測温抵抗体)の校正状況 - 氷点=0.0℃編
    「体温計と魔法瓶で校正する白金測温抵抗体 - 36.5度編
    「脇の下恒温槽と体温計で白金抵抗温度計を校正してみた


  「(趣味の)白金薄膜抵抗温度計の作り方 - 誤差について
  「自己発熱を測定してわかる白金測温抵抗体の扱いにくさ

  「炭素皮膜抵抗の温度係数を測定する話
  「サーミスタによる温度測定の精度
  「ミニ恒温槽の作成に向けて - 1
  「サーミスタ温度計の精度を調べる - 1
  「PICでI2C - 1 (温度計を作る)
  「PICでI2C - 液晶(LCD)ディスプレイ(ACM1602N1-FLW-FBW)に表示する
  「PICでI2C - LCD(液晶)ディスプレイによる違い
  「I2C大気圧センサーLPS331の驚くべき分解能
  「I2C大気圧温度センサーLPS331 - 海面更生気圧を気象庁とくらべてみた
  「I2Cデバイス・アドレス一覧
  「PICで平方根 - 白金薄膜抵抗で温度を測る
  「PICでI2C - ADコンバーター・MCP3425の使い方

参考

きむ茶工房ガレージハウス - PICの動かせ方入門はこちら - 16F1938覚書
きむ茶工房ガレージハウス - I2C通信の実験
きむ茶工房ガレージハウス - 気圧センサーで大気圧と標高を測定して見ます(MPL115A1)(MPL115A2)」

予習として拝見していたのですが、とても参考になります。
私の記事を読んでI2Cのセンサーを使って温度計とか気圧計とかそういうものを作りたくなった方も実際に作られるときはこちらを読まれた方がいいと思います。

電子工作の実験室 - PIC(8bit) - PIC16シリーズ -  I2Cモジュールの使い方

« 風速計・風向計を作る - 1 | トップページ | PICでI2C - ADコンバーター・MCP3425の使い方 »

趣味の電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1994983/57249094

この記事へのトラックバック一覧です: PICで平方根 - 白金薄膜抵抗で温度を測る:

« 風速計・風向計を作る - 1 | トップページ | PICでI2C - ADコンバーター・MCP3425の使い方 »

フォト

サイト内検索

  • 記事を探されるんでしたらこれがいちばん早くて確実です。私も使ってます (^^;; 検索窓が表示されるのにちょっと時間がかかるのはどうにかしてほしいです。

新着記事

リンク元別アクセス数

  • (アクセス元≒リンク元、原則PCのみ・ドメイン別、サイト内等除く)

人気記事ランキング

  • (原則PCのみ、直近2週間)
無料ブログはココログ