寒くなってきました。寒さ計(笑)を作ってみました。
IC温度計
LM35Dを温度センサーにした温度計
2つ並んだTO-92パッケージのうち左がLM35DZ、右がμPC1093J
ブレッドボード上で組んでいるのでmVオーダーの信頼性は低いと思う
PICツールボックスに組み込んだ秋月のPIC-ADCデータロガーキット(通販番号 K-00108:現在は販売終了)に付属していた温度センサーLM35DZですが使う機会がなかなか無く、ちゃんとした組み込みをしていなかったので、温度計としての本望を果たしていただこうと回路組みしました。
回路は非常に単純です(回路図)。0℃〜150℃までの範囲を計る事の出来る摂氏直読式センサーであるLM35DZは温度出力を10mV/℃で出力します。しかし、このままでは電圧が小さいためPICの内蔵A/Dの10bitレンジでは精度が悪く実用に堪えられないため、実用範囲いっぱいまでに出力電圧範囲を広げるためにオペアンプで増幅するします。
LM358を使用して5倍に増幅し、50mV/℃として測定します。
0bit-ADCを利用して測定した電圧を測定し、温度へ変換します。変換する際にレンジ最大値のVREF+を安定して供給させるためにVDDの+5Vでも良いのですが、ここはTL431互換のμPC1093J(TO-92)を使用してVREFの基準値として参照させます。μPC1093JはKとREF端子をショートさせて正電源に、AをGNDに接続することで無調整で非常に高精度の基準電圧として利用できる電圧を発生させます。データシートによると標準値は2.495Vを得ることができますのでこれをVREFとしPICのRA3に入力します。
測定ルーチンではA/D変換した値を32回測定しそれを平均化した値を利用する事で、ノイズを押さえ込みます。その分精度がある程度犠牲になりますが、元々LM35Dも0.5℃程度の確度ですので気にしなくても大丈夫でしょう。
計算ルーチンは整数演算で工夫することなく、楽をしてCCS-C(PICC)の浮動小数点演算を利用してしまいました。これは使用しているPICがPIC16F88とROM容量に余裕があることで、プログラムメモリにあまり気にせずに浮動小数点演算ライブラリを組みこめたからです。16F818などで実現するには工夫して整数演算をして表示までさせる必要がありますが、今回は楽をさせてもらいました。
VREFの電圧値2.495Vが(2^10)-1、すなわち1023に相当しますので、計算式としてmVを得るには
V(mV) = ADC * 2495.0 (mV) / 1023.0
と、なります。さらに温度の値はセンサー出力が50mV/℃になっていることから
TEMP(℃) = V(mV) / 50.0(mV/℃)
と、求めることができます。この得られた数値(浮動小数点値)をprintf()関数で書式を指定して出力します。
測定温度の表示
秋月のデジタル温度計(通販番号M-01063:現在は商品番号100263に代替 )と比べると約0.5℃の差
次はダラスセミコンダクターのDS1820を使ったものに挑戦したいですね。デジタルでダイレクトに温度情報が出てきますので、途中のアナログ回路による揺籃がありませんので、より確度の高い測定が出来ます。
もっとも50℃までなら秋月電子からLR44一個で動作する完成品があるので、今回参照用として使用したそれを使えば苦労しなくて済むのですが、そこはそれ、苦労するのが楽しいなっと(笑)
今後は外付けEEPROMでデータを保存させてシリアルで吸い出しが出来るようにしたいものです。え?それは秋月のデータロガーと同じかもって?それは言わないで〜。