サーミスタについて
サーミスタは温度変化によってその抵抗値が変わる。
この現象を利用して温度センサとして利用されている。
サーミスタは特性によって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接続などの通信がある温度センサを購入したほうがよさそうだ。