昔、パソコン内の各部の温度を測る3チャネル温度計を製作してずっと使ってきました。これは、高精度サーミスタを使用して無調整で±0.5℃の測温精度を実現したものでした。
最近のプロセッサは、ダイ温度を直接モニタできるように、ダイオードを内蔵したものが多くを占めるようになっています。今回は、これに対応すべく温度センサにダイオードを使用した温度計を製作してみました。右のIMGがケースのフロントパネルに組み込んだ様子です。表示デバイスの関係で、時分割(1秒毎)で順に温度を表示するようにしています。
....なんか、前回からケースが変わっていないような気が。実はメインマシンのケース、買ったのは 486プロセッサが流行り始めた頃なので、そろそろ 10年選手だったりします(^^;。電源をATXに変えたりしてなんとかしのいできましたけど、最近になって市場からATマザーが消えたので、次こそはケース買い換えですね。(ターボスイッチやクロック表示窓なんてもう死語だろうなぁ(^^;
ダイオードの順方向特性は温度によって大きく変化することが知られていて、温度センサとしてよく使用されます。
PN接合シリコンダイオードに一定の順方向電流を流した場合、その電圧降下は常温で約0.6Vとなり、-2.0〜-2.5mV/℃(電流や個々の素子によって異なる)の温度特性を示します。したがって、ダイオードに一定電流を流しておいて順方向電圧を測定すれば温度の変化を検出することができます。参考までに右の図に1SS193(東芝)の順方向特性を示します。
このほか、それぞれ異なる2または3通りの電流を切り替えて、それに対する順方向電圧の変化から温度を算出する検出方法もあります。この方法はダイオードの特性のバラツキの影響を受けにくい(つまりセンサを交換する毎に校正しなおす必要がない)という利点がありますが、回路が複雑になるので今回は見送りました。
温度センサのフロントエンドは、定電流回路とアンプから成ります。約63μAの定電流をセンサ(ダイオード)に流し、ダイオードの電圧降下を3倍に増幅して A/Dコンバータ(10bit, 3.3V/fs)に入力します。このブロックでのドリフトは測定誤差の主原因になるので、構成部品は温度ドリフトのなるべく少ないものを選定する必要があります。
アナログ的な調整箇所は一切ありません。校正パラメータをEEPROMにストアしておいてそれで温度を算出するようにしたからです。校正作業にはドライバーの代わりにパソコンなど適当な端末装置が必要となります。例によって、ISPケーブル経由(N81,38.4kbps)で接続して電源を入れると校正モードに入るようにしてあります。
| コントローラ | AT90S2333 (ATMEL), 10bit ADC内蔵 |
| チャネル数 | 3チャネル (A/Dコンバータのチャネル数まで拡張可能) |
| 表示範囲 | -9℃〜+99℃ (表示分解能1℃) |
| 確度 | 常温において誤差±1℃ |
| 表示器 | 7セグメントLED 2桁(各チャネルを時分割表示) |
| センサー | シリコンダイオード |
| 電 源 | +5V, 100mA(適当なところから取ります) |
| 製作費 | 部品代 \1,500程度 |
サーミスタ温度計(マイコンでリニアライズされたもの)と違い、ダイオード温度計は校正という面倒な作業が必要になります。これが温度計製作の敷居を高くする原因となっていて、残念ながらこの製作も例外ではありません。
校正作業の準備として、まず恒温槽を用意してください(汗)。恒温槽を使えない場合は、氷点を出せる冷蔵庫と適当な保温器でもOKです。恒温槽の温度表示はあまりアテにならない場合があるので、水銀温度計など高確度の温度計で直近の温度を確認しましょう。冷蔵庫などは温度表示がないので言うまでもありません。3チャネルをまとめて校正しますが、1チャネルはMPUになると思います。MPUのヒートシンクに残る2チャネルのセンサを貼り付けて、それぞれを熱結合しておくと良いです。
まず、原点(オフセット)校正のために温度を下げます。温度が0℃に安定したら、それぞれのチャネル(0, 1, 2)に対してAコマンドでA/D値を読み出して、その値を原点としてパラメータ0, 2, 4に書き込みます。これで原点校正は完了です。
a <ch> 各チャネル(0..2)のA/D値と出力値(×10℃)の表示 w <par> <val> 各パラメータ(0..5)の書き込み
次に、ゲイン校正です。温度を60℃程度に上げて、計算値がその温度と一致するように各チャネルのゲイン(パラメータ1, 3, 5)を調整します。これで校正作業は完了です。温度を適当に変えて、正しい値を示すかチェックしておきましょう。各ゲイン校正値は、大体18000〜20000程度になると思います。
とにかく氷点をしっかり出さないと全体に渡って誤差となるので、正確に出せるようにいろいろ工夫してみましょう。どうしても氷点を安定に維持できない場合は、なるべく離れた安定した2つの温度でA/D値を測って氷点のA/D値を推定します(右図)。
