• ベストアンサー

PIC16F819とLM60を使った温度計

PIC16F819と温度センサーLM60を使って7segに温度を表示させようとしています。 しかしA/D変換のやり方で困っています。 同じような温度センサーであるLM35DZなどで有れば温度係数が解りやすいので良いのですが。 今回は100℃以上を計測したいので、あえてLM60を選定しました。 しかし温度係数が6.25mV/℃でしかも氷点下までの計測を可能にするために 出力がオフセットしています。 これを直接PICのA/D変換回路へ入力してプログラムで対応するのか、 入力の段階でオペアンプ等で、増幅した方が簡単なのかが判りません。 どうしたら簡単にできるでしょうか? 宜しくお願いします。 参考 LM60データーシート http://akizukidenshi.com/pdf/ns/LM60.pdf

質問者が選んだベストアンサー

  • ベストアンサー
  • inara1
  • ベストアンサー率78% (652/834)
回答No.3

オペアンプを使って測定温度範囲を変える回路の一例を以下に紹介します。  2.7V~10V   Vout  オペアンプ   │┏━━━┓ ↓   │┃ LM60 ┃┌───┤+\   │┗┯┯┯┛│     |   >┬─ Vin ( AD入力 )   └─┤└ ) ─┤   ┌┤- / │       C  │  │   ├── R3 ┘   C = 0.1μF(積層セラミック)   GND ┴─┤  C   R1         │  │   ├─┬ R4 ── Vref         │  │   R2  C         └─┴──┴─┴───-- GND ( 0V ) 計算方法は省略しますが、LM60の出力電圧を Vout [V] としたとき、オペアンプの出力電圧(AD変換の入力電圧) Vin [V] は    Vin = [ { ( R1 + R3 )*( 1 + R4/R2 ) + R4 }*Vout - R3*Vref ]/{ R1 + R4*( 1 + R1/R2 ) } で表わされます。Vref は基準電圧で、これは外部から与える電圧です。Vout は、温度を t [℃] としたとき    Vout = 0.424 + 0.00625*t --- (1) です。 測定温度範囲が tmin ~ tmax のとき、Vin の範囲が 0V ~ Vref となるようにするには    R1 = { 0.00625*R3*( tmax - tmin ) - R2*( Vref - 0.00625*tmax - 0.424 ) }/{ Vref - 0.00625*( tmax - tmin ) }    R4 = R2*( Vref - 0.00625*tmax - 0.424 )/( 0.00625*tmin + 0.424 ) とします。例えば、tmin = -20℃、tmax = 82.3℃(温度分解能 = 0.1℃)とするには    Vref = 2.5V ならば R1 =3.352kΩ、R2 = 100Ω、R3 = 10kΩ、R4 = 522.3Ω    Vref = 5V ならば  R1 = 1.373kΩ、R2 = 100Ω、R3 = 10kΩ、R4 = 1.358kΩ とします。AD変換の一方の基準電圧 Vref+ を Vref に接続し、もう一方の基準電圧 Vref- をGNDに接続すれば、AD変換の電圧測定範囲は 0V ~ Vref になります。Vref は、できれば基準電圧発生用のIC(たとえば [1] )を使って安定化された電圧にしてください。PICのプログラムで、内部で Vref+ = Vdd、Vref- = Vss とすることも可能ですが、電源電圧安定していなかったりノイズが乗っていると測定値が安定しません。 R1 と R4 の値は中途半端になりますので、固定抵抗と半固定抵抗を組み合わせて所望の抵抗値を作ります(基板に実装する前にテスターで抵抗を測定しながら調整するといいでしょう)。その後、以下の手順で最終的な調整を行うのがいいでしょう。   (1) LM60を接続しないで、Vout の部分に、最低温度に相当する Vout の電圧を印加する(式(1)で計算)   (2) R4 を調整して、Vin が 0V ( <数mV)となるようにする   (3) Vout の部分に、最高温度に相当する Vout の電圧を印加する   (4) R1 を調整して、Vin の電圧が Vref に等しくなるようにする(Vin - Vref 間の電圧を測定して0 になるようにする)   (5) (1)~(4)を繰り返す なお、オペアンプの電源電圧と Vref が近い場合(どちらも5Vの場合など)、オペアンプによっては出力電圧が Vref まで出ない場合があります。オペアンプの電源電圧と Vref が近い場合は、出力電圧が電源電圧いっぱいに振れるレールトゥレール出力のオペアンプ(例えば [2] )を使ってください。オペアンプの入力電圧は最大1.2V程度なので入力側は問題ありません。 [1] 基準電圧IC LM336-2.5      価格  http://akizukidenshi.com/catalog/items2.php?q=%22I-00459%22&s=popularity&p=1&r=1&page=0&cl=1      データシート http://akizukidenshi.com/pdf/ns/LM336-2.5.pdf [2] レールトゥレール出力のオペアンプ(LMC662CN)      価格 http://akizukidenshi.com/catalog/items2.php?q=%22I-00067%22&s=score&p=1&r=1&page=      データシート http://akizukidenshi.com/pdf/ns/LMC662.pdf [3] PIC16F818/819データシート http://akizukidenshi.com/pdf/pic/pic16f818_819.pdf

その他の回答 (5)

  • inara1
  • ベストアンサー率78% (652/834)
回答No.6

Vref = 5V であれば、Vref を発生させるための基準電圧ICは、なるべく [4] のようなものを使ってください。出力電圧を正確に5Vに合わせるには、データシート2ページの右上のように、10kΩの半固定抵抗で調整します。この電圧精度がトータルの温度-電圧変換精度に影響するのですが、LM60の精度は最大±3℃とあまり良くないので、この電圧をあまり正確に合わせても意味がありません。4.99V~5.01V となるようにすれば充分です(もっと正確に合わせても構いません)。 抵抗に誤差があっても、ANo.3 の調整でトータルの変換誤差を非常に小さくすることができますが、周囲温度の変化によって抵抗値が変化すると誤差が増えます。そのため固定抵抗(R2, R3)には、なるべく温度係数の小さい金属皮膜抵抗 [5] を使ってください。半固定抵抗は温度係数が高いので、R1 と R4 の抵抗は、例えば以下のように、固定抵抗(金属皮膜)と半固定抵抗を組み合わせて、半固定抵抗で可変する範囲を小さくしてください(可変範囲が小さければ全体の温度係数は小さくなります)。以下の場合の調整範囲は、R1 が 900Ω~1000Ω、R4 が 8.7kΩ~9.2kΩ となります。半固定抵抗は [6] のような多回転型にすると調整しやすくなります。       金皮膜抵抗  半固定抵抗  R1 = ─┬ 1kΩ ┬─ 100Ω ┬─        └ 10kΩ┘   ↑  │                  └─┘       金皮膜抵抗  半固定抵抗  R4 = ─┬ 10kΩ ┬─ 500Ω ┬─        └ 68kΩ┘   ↑  │                  └─┘ [4] LM336-5.0     価格(若松) http://www.wakamatsu-net.com/cgibin/biz/psearch.cgi?page=0&word=LM336     データシート http://www.national.com/JPN/ds/LM/LM336-5.0.pdf [5] 金属皮膜抵抗(千石) http://www.sengoku.co.jp/modules/sgk_cart/search.php?toku=%C4%F1%B9%B3%B8%C7%C4%EA&cond8=and&dai=%B6%E2%C8%EF&chu=1%2F4&syo=F&cond9=&k3=&list=1&pflg=n&multi=&code=&st=30 [6] 多回転型半固定抵抗(秋月)     100Ω http://akizukidenshi.com/catalog/items2.php?q=%22P-00971%22&s=score&p=1&r=1&page=     500Ω http://akizukidenshi.com/catalog/items2.php?q=%22P-00972%22&s=score&p=1&r=1&page=

simba_tembo
質問者

お礼

大変詳しく説明して頂きありがとうございます。 教えて頂いたオペアンプ回路を使って、 精度補正をしやすい回路を作ってみる事にしました。 また解らないことが有りましたら質問したいと思います。 ありがとうございました。

  • inara1
  • ベストアンサー率78% (652/834)
回答No.5

>有るホームページでは、Vddは5VでVref+を1.024Vにすると書かれていました Vref が2.5V未満でも動作はしますが、変換精度が悪くなります。 Vref+ - Vref - = 2V だと 1LSB = 2V/1024 = 1.95mV ですが、PIC16F818 はその場合での±1/2LSB = ±0.98mV 以内の誤差を保障しています。この±0,98mV というのがPIC16F818 の絶対誤差の上限になります。Vref+ - Vref - = 1.024V とすると、1LSB = 1mV ですから、±0.98mV の誤差は±0.98LSB の誤差に相当します。これでは単調性(電圧が上昇しているとき必ず変換コードも大きくなる)が保障されなくなってしまいます。そういう誤差があってもいいのであれば Vref = 1.024V でも使えます。変換誤差を相対的に小さくするためには Vref をできるだけ大きくしたほうがいいです。Vref = 5V にすると、±0.98mV の誤差は ±0.2LSB の誤差になります。どうせオペアンプで信号を増幅するのですから、入力電圧範囲(Vref+ - Vref- )はできるだけ大きくしたほうが良いです。 >今回の回路ではVddを5Vとし、測定温度範囲は0℃~125℃までとしたいと思っています そうすると温度分解能は 0.122℃と中途半端になってしまいますが    R1 = 952Ω、R2 = 1kΩ、R3 = 10kΩ、R4 = 8.95kΩ とすれば、0℃のとき Vin = 0V、125℃のとき Vin = 5V となります。 なお、ANo.3 の(1)~(5)の調整によって、オペアンプのオフセット電圧や固定抵抗による誤差をゼロにすることができます。

  • inara1
  • ベストアンサー率78% (652/834)
回答No.4

ANo.3の補足です。 抵抗 R1 ~ R4 の計算は、R2 と R3 を固定抵抗として計算しますが、R2 + R4 は1kΩ未満にならないようにしたほうがいいです(Vref の負荷が大きくなるので)。ANo.3 では    Vref = 2.5V ならば R1 =3.352kΩ、R2 = 100Ω、R3 = 10kΩ、R4 = 522.3Ω としましたが、R2 + R4 が 622Ω なのでちょっと低すぎます。R2 をもっと大きくして    Vref = 2.5V ならば R1 =2.597kΩ、R2 = 1kΩ、R3 = 10kΩ、R4 = 5.223kΩ としたほうが良いと思います。 また、AN.3 の回路での温度 t と Vin の関係は    t = tmin + ( Vin/Vref )*( tmax - tmin ) になります。AD変換されたコードが N (N = 0~1023)のとき    N = 1024*Vin/Vref なので    t = tmin + N*( tmax - tmin )/1024 となります。

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.2

LM60の出力は 6.25mV/ ℃ の感度があります。 PIC16F819のADは10ビットなのでADのVrefを3.2Vにすれば1デジットあたりの感度が3.2V/1024=3.125mV (0.5℃)になります。 LM60の出力とAD出力の関係は 0度   424mV  136 100度 1049mV  336 125度 1205mV  386 となるので AD出力を2で割って68を引けば温度を表わす数値になります。 この場合、AD変換の能力の1/3程度しか利用しないことになります。 オペアンプで2倍に増幅すれば2/3を利用でき0.25℃の分解能になるのですが オフセット電圧が誤差の原因になるのでオフセット電圧の小さいアンプを使用するか誤差分をキャンセルするなどの手段が必要となります。 なお、10ビットのADで10ビットの精度を出すにはそれなりの工夫が必要です。 10ビットの精度を出す自信があるのであればアンプは要らないでしょう。 直流を精度良く増幅できる自信があればアンプを使用するのがいいでしょう。

simba_tembo
質問者

お礼

早速のご回答ありがとうございます。 今回の温度計測はあまり精度にはこだわっていませんので Vref+を3.2Vにする事で比較的簡単に計測ができそうですね。 参考にさせて頂きたいと思います。 ありがとうございました。

  • inara1
  • ベストアンサー率78% (652/834)
回答No.1

LM60の出力電圧を Vout [V] としたとき、温度 t [℃] は    t = 160*Vout - 67.84 で表わされます。PIC16F819のADコンバータで直接 Vout を測定して、上式で温度を計算するのが最も簡単ですが、 Vref+ には下限がある( Vref+ ≧ Vdd - 2.5V ) ので、 Vdd = 5V の場合、測定できる最高温度は 332℃ より下げられません。また、Vref+ - Vref- には下限がある( 2V ) ので、測定温度範囲(最高温度-最低温度)は 320℃ より小さくできません。さらに、ADコンバータの分解能は10bit なので、温度分解能は0.31℃より悪くなります。このような性能でいいのであればADコンバータで直接 Vout を測定する方法で構いませんが、温度範囲をもっと狭めて温度分解能を良くしたいときは、オペアンプで LM60の出力電圧を変える必要があります。 測定したい最高温度と最低温度、電源電圧 Vdd を教えて頂ければ適切な回路を紹介します。ただし、ADコンバータの分解能は10bit なので、温度分解能は( 最高温度 - 最低温度 )/1024 になります。

simba_tembo
質問者

お礼

早速の回答ありがとうございます。 まず温度の計算式ありがとうございます。 参考になりました。 またVref+に下限が有るとは知りませんでした。 データシートを確認した所、確かに定格表に表記されていました。 Reference Voltage High min AVDD – 2.5V しかし有るホームページでは、Vddは5VでVref+を1.024Vにすると書かれていました。 これはどうしてなのでしょうか? 定格表上では使えない事になっているのに動作するのでしょうか? このHPで使用していたのはPIC16F88でしたがデータシートではPIC16F819 とVref+の定格は同じでした。 今回の回路ではVddを5Vとし、測定温度範囲は0℃~125℃までとしたいと思っています。