topmenu

トップコンピュータカメラ雑記プロフィールこのページについて

2018/11/26

NTCサーミスタで温度を計測する

サーミスタについて

サーミスタは温度変化によってその抵抗値が変わる。
この現象を利用して温度センサとして利用されている。

サーミスタは特性によって3つに分類できる。
NTC (negative temperature coefficient)...温度に対してゆるやかに抵抗が減少する。
RTC (positive temperature coefficient)...温度に対して急激に抵抗が増大する。
CTR (critical temperature registor)...温度に対して急激に抵抗が減少する。

測定範囲
-50~150度

用途
NTC: 温度検出、温度補償など
PTC: ヒータなどの回路(電流制限やヒューズ代用)

NTCサーミスタの特性
温度 T0[K] のときのサーミスタ抵抗を R0[Ω] とすると、温度 T[K] のときのサーミスタ抵抗 R は
次式で表せる。

R = R0 exp{(B(1/T-1/To)} ・・・(A)

ここで B はサーミスタの B 抵抗と呼ばれ、サーミスタごとに異なる。

より高精度な NTC サーミスタの温度抵抗特性の近似式として Steinhart-Hart 式がある。
https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation


実際にサーミスタとして使うときには、抵抗を直列に接続し、分圧回路(Voltage dividing circuit) として間の電圧を
測定することで上式(A) から温度を計測することになる。

具体的には、組込みコンピュータで AD 変換器で電圧を測定し、
分圧抵抗回路式からサーミスタ抵抗を算出する。
次に上式を温度 T[deg.] を求めるために式変形し、その式に得られたサーミスタの抵抗値
を代入することで計測する。


分圧回路(https://ja.wikipedia.org/wiki/%E5%88%86%E5%9C%A7%E5%9B%9E%E8%B7%AF

分圧回路の式
Vi --|
    |R1|
      +---- Vo
    |R2|
      |
  GND

上のような分圧回路が構成されたとき、抵抗 R1 - R2 [Ω] 間の電圧 Vo[V] は以下の式で表せる。

Vo = ( R2 / (R1 + R2) ) * Vi    ・・・(1)

ここで、 R1, R2 を求める式に変形すると、

R1 = R2 * (Vi-Vo) / Vo  ・・・(2-a)
R2 = R1 * Vo / (Vi-Vo)  ・・・(2-b)

となる。
2つうち、一方は固定抵抗器、もう一方はサーミスタとなる。
ここでは、 R1 をサーミスタとし、 R2 は固定抵抗器とする。
Vo は AD変換器で測定し、サーミスタの抵抗値 R1 を得る。

次に、得られたサーミスタ抵抗値から現在の温度[deg]を求めたいので、
式(A)を変形する前に、温度の単位を [K] から [deg] にすると

R = R0 exp{(B(1/(Td+273.15)-1/(Tod+273.15))} ・・・(A')

T[K] -> Td [deg], To[K] -> Tod[deg]

式(A')を変形して、

Td = 1 / ( log(R/R0)/B + (1/Tod + 273.15) ) - 273.15 ・・・(B)

式(2-a) の R1 をサーミスタの抵抗とする場合、R は置き換えられ(R = R1)、

Td = 1 / ( log(R1/R0)/B + (1/Tod + 273.15) ) - 273.15 ・・・(C)

となる。
最後に、 AD 変換器で電圧 Vo を測定する場合、
AD 変換値 Dad[-] から電圧 Vo[V] への変換式は以下の式で与えられる。

Vo = Dad * Vad / (Bad^2-1) ・・・(3)

Vad は AD 変換器の電源電圧[V]、Bad は AD 変換器のビット数[bit] を示す。
例えば、AD 変換器の電源電圧が 5 V 、ビット数は 10 bit であるとき、

Vo = Dad * 5 / 1023 ・・・(4)

である。

以上より、まとめると

Vo = Dad * 5 / 1023 ・・・(4)
R1 = R2 * (Vi-Vo) / Vo ・・・(2-a)
Td = 1 / ( log(R1/R0)/B + (1/Tod + 273.15) ) - 273.15 ・・・(C)

を順々に計算すればよいことになる。
(添え字や式番号の振りがかなり適当,そのうち修正するかも・・・)
-------------------
Arduino Nano を使って温度を検出するつもりであるが、
組込みコンピュータで計算するときには、loge の計算が遅くなる?ので、式(C)はあらかじめ求めて近似式とするべきだと思われる。
が、まずは、そのままの式を使って計算させる予定である。(同様の理由で高精度の Steinhart-Hart 式は使わない。)
どこまで精度を求めるか、またその精度を確かめるかの術がない。

10-90度の範囲で小数点以下1桁くらいはあるといいかな?
知識がない。
より高精度を求めるには、可変抵抗器で合わせこんだり、アンプを構成したり、電源のスペックを上げたりするんだろうか?
もっと手っ取り早くは、それ単体で決まる SPI接続などの通信がある温度センサを購入したほうがよさそうだ。