PIC内蔵温度センサを使う

F1シリーズなどの比較的新しいPICには内部温度インジケータと呼ばれる温度センサが内蔵されているのをデータシートで知っていたのだが、この度、温度計測の教材を作るにあたって使い物になるかどうか調べてみた。通常、温度計測にはそれなりの温度センサICなどを使うのだが、超有名なLM35はマイナスの温度を測るのが面倒で、秋月で激安のMCP9700は校正なしだと±4℃というとんでもない精度だし、1-wireのDS18B20は結構イイ線の性能だし制御も私にとっては簡単なんだけど、高価だし教材としては教えるのが難しく(1-wireを取り上げるのはしんどい)、手軽にほいほいというのがなかった。まぁ、その中でもLM35はマイナス温度を扱わなければ比較的使いやすいし、値段も手頃なのでよく使われてるんだなと思われる。

と、前置きはよしとして、肝心のPIC内蔵の温度センサが使えれば価格もタダだしマイナスも測れるからラッキーということで資料を調べてみた。

今回はF1シリーズのメジャー格PIC16F1827でやってみることにする。で、データシートを眺めると。。。なんと1ページしか情報がない!!なんということだ、情報が足らない。温度を計算するための式もない。レジスタの情報もない(これはエラッタに載っているが)。とりあえず、AN1333を見ろと書いてあるので見てみた。

どうやら、温度センサはダイオード4個で構成されていてVddに接続されているらしい。Vddが安定していることが条件とな。。。うーむ困った。USBから電源をとっているのでかなりやばい。折角FVRを内蔵しているのに何故使わない?しかたがないので、ADCにFVRの4.096Vを内部接続してVddを計算することにした。

Vdd=1023*4.096/ADCref   ・・・ (1)

となる。

AN1333によると温度T(℃)は、温度センサをADCに内部接続したときの値をADCtpとすると

T=(0.659-(Vdd/mode)(1-ADCtp/1023))/0.00132-40   ・・・ (2)

らしい。(1)を(2)に代入して、ダイオード4本使うのでmode=4とすると

T=459.24-775.76*(1023-ADCtp)/ADCref   ・・・ (3)

となる。私の実測でADCref=879,ADCtp=460で約37.5℃となる。そんなに暑いところにはいないので校正しないと役に立たないのはこの値を見ても明らかだ。

と、ふとここで分解能はどれくらいなんだろうと式をもう一度眺めてみることにする。

式(2)において、ADCtpが1カウントあたり何℃なのか見てみると、

Δ=Vdd/(1.35*mode)   ・・・ (4)

となり、この式(4)に、たとえばVdd=5Vでmode=4だとΔ=0.926、センサダイオードの関係で本来はやってはいけないVdd=3V,mode=4でもΔ=0.556となり、分解能は0.6℃~0.9℃程度しかないことがわかる。

大体の温度を測るのであれば、校正すれば使えなくもないが・・・・

結論:使えない

以上

折角実験までしたのに・・・計算の段階で気づけばよかった・・・。

どうしてもこれを使いたい人のための耳よりな情報

内蔵温度センサをADCに接続したときのアクイジションタイムは400μs程度必要です。PIC16F1827のデータシートのどこにも書いていません。他のF1シリーズ、たとえばPIC12F1822/16F1823のデータシート(DS41413C p139)には以下の記述があります。私の実測では200μsでは足りませんでした300μsでも足りませんでした。かなり注意が必要です。

15.3.1 ADC AQUISITION TIME
To ensure accurate temperature measurements, the user must wait at least 200 usec after the ADC input multiplexer is connected to the temperature indicator output before the conversion is performed. In addition, the user must wait 200 usec between sequential conversions of the temperature indicator output.

ということで、次はMCP9700でやってみよう。でも校正が必要な気配が・・・

    • nobcha
    • 2012年 12月 26日

    こんにちは。
    私も322の時にやってみましたが、あんな精度では使い物になりません。おっしゃる通りです。
    PIC研究会席上で後閑先生がこれは温度センサーではないよな・・といっていた意味が分かりました。

    • まぁ使い物にはなりませんが、温度異常を検出するくらいならできると思うので使い方次第だと思います。絶対値の校正はしないと使い物にはなりませんが、幸い傾きに関しては結構粒が揃っているので絶対値測定のための1点校正でそのまま使っても問題ないと思います。

  1. PICの内蔵温度は、寒暖計並の精度なら使えますよ。
    VDD測定と温度測定して1点補正を掛ければ 0~35℃ぐらいなら±1℃ぐらいで表示出来ています。

    1点の温度異常を検出するなら、検出位置近くで補正を掛ければ使えると思います。(さすがに2点以上は使えません。)

    実験は
    http://www3.airnet.ne.jp/saka/hardware/pic-rtc/pic-rtc001.html
    とか
    http://www3.airnet.ne.jp/saka/hardware/pic-lcd/pic-lcd01.html
    でしています。

    • 実際に使用されているみたいでスゴいですね。執念を感じます。±1℃ならそこそこ使えそうですね。こういった問題を工夫しながら解決していくのはおもしろいですね。

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。