NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

サーミスタの使い方! その1( 基本編!)(103JT-050)

イメージ 1
サーミスタ(103JT-050)

 ペルチェ素子でロケットストーブを使った温度差発電をしたいです。
 その前にペルチェ素子の表と裏の温度差から、どの程度発電するか見てみようかと思います。
 ホームセンターに温度計を買いに行ったら1台¥3,000~7,000位で売られていました・・・。高い(´;ω;`)
 困った時は迷わず電子部品屋さん!と言う事で、温度センサーの定番サーミスタを一個¥140で買って来ました!安い!

1.サーミスタとは

 サーミスタ(英:Thermistor)とは、Thermally Sensitive Resistor(熱に敏感な抵抗体)の総称で、 負の温度係数を有するNTC※1サーミスタを一般にサーミスタと呼ばれています。
 NTCサーミスタは温度に対する抵抗値変化が大きいことから、温度センサとして広く使用されています。
 サーミスタは金属酸化物を主原料とし高温にて焼結して得られるセラミック半導体で、 その製造法や構造によって各種の形状・特性があり、温度測定や温度補償等の目的に応じたものが使用されています。

※以下補足です

※1:温度の上昇で抵抗が大きくなるものを PTC、減少するものを NTC、特定の温度で抵抗が急変するものをCTRと言う。


1.1 103JT-050とは
  今回使用するJTサーミスタの特徴として、最大の厚さが500μmと非常に薄型の温度センサです。
 電気絶縁性も優れており、電極に接触し易い場所にも使用可能です。
 今回の使用目的にピッタリな薄型なのでチョイスしました。

イメージ 2
図1:JTサーミスタ103JT-050」の外観および寸法

1.2 仕様
 サーミスタ103JT-050仕様を表1に、サーミスタの各温度における抵抗値を表2に示します
表1: JTサーミスタ103JT-050の仕様
イメージ 18

表2:JTサーミスタ103JT-050の各温度における抵抗値一覧
温度T(℃)抵抗値R1(kΩ)
-50367.7
-40204.7
-30118.5
-2071.02
-1043.67
27.70
1018.07
2012.11
2510.00
308.301
405.811
504.147
603.011
702.224
801.668
851.451
901.267
1000.9753
1100.759
1200.5981
1250.5331
103JT-050」のSDSより引用させて頂きました

1.3 回路
 サーミスタの抵抗値変化は非線形であり、種類も様々あります。
 この為、図2回路例のようにサーミスタ(R1)と調整用の固定抵抗器(R2)を直列に接続し、中間から出力電圧(Vout)を得て測りやすい電圧にリニアライズする方法(分圧回路)が一般的です。
イメージ 3
図2:サーミスタの直線化回路例

2. サーミスタ回路の出力電圧から温度に変換!

  図2回路のサーミスタで温度を測定する流れは以下の通りです。
 詳細は①~④に分けてまとめてみました!

:固定抵抗値(R2)を選定する
②:出力電圧(Vout)からサーミスタ抵抗値(R1)に換算
③:表1のB定数を最適化(おまけ)
④:サーミスタ抵抗値(R1)から温度(T)に換算

 ①.固定抵抗値R2の選定(リニアライズ) 
 表1より、サーミスタ103JT-050」の使用温度範囲は-50~125℃ですが、温度によるサーミスタの抵抗値変化は非線形(図3上)の為、全域で高精度に測ることが難しいです。
 使用温度範囲が0~100℃など決まっていれば、その範囲の測定に特化した固定抵抗値(R2)を選ぶことで測定精度を高める事が出来ます。

①-1 目的変数
 測定に最適な固定抵抗(R2)の値は、以下式1から求めます。

イメージ 12

①-2 説明変数
 式1の目的変数(R2)を求めるための説明変数は以下の通りです。
 私の想定している使用温度範囲は、ペルチェ素子の冷却部(実験ではマイナス数十℃を想定)~ロケットストーブの底(百℃以上?)迄なので目一杯の-50~125℃!・・・(;'∀')非線形をキレイに近似すればプログラムの方で何とかなるはず。
 と言う事で、使用温度範囲から以下3点の温度を求めます。

使用温度範囲下限より10%高い温度(℃)T10=-32.5≒-30
使用温度範囲下限より50%高い温度(℃)T50=37.5≒40
使用温度範囲下限より90%高い温度(℃)T90=107.5≒110

 上記3点の温度におけるサーミスタ抵抗値(R1)を表2から求めます

T10におけるサーミスタ抵抗値(𝑘Ω)𝑅110=118.5
T50におけるサーミスタ抵抗値(𝑘Ω)𝑅150=5.811
T90におけるサーミスタ抵抗値(𝑘Ω)𝑅190=0.759

①-3 計算
 式1に説明変数を代入し、実際に計算した結果を下記に示します。
 計算の結果、固定抵抗(R2)には4.7kΩを選定しました。

R2=(2*𝑅110*𝑅190-𝑅150*(𝑅110+𝑅150))/(2*𝑅150-𝑅110-𝑅150)
=(2*118.5*0.759-5.811*(118.5+5.811))/(2*5.811-118.5-5.811)=4.8kΩ
≒4.7kΩ(抵抗のE系列ラインナップから近いものを選定)

 ②. 出力電圧(Vout) → サーミスタ抵抗値(R1) 換算 
 ①で選定した固定抵抗値(R2)と図2回路の出力電圧(Vout)から、サーミスタ抵抗値(R1)を以下の通り求める事が出来ます。

②-1 目的変数
 図2回路における出力電圧(Vout)と、電源電圧(Vcc)・サーミスタ抵抗値(R1)・固定抵抗値(R2)の間には、以下式2に示す関係が有ることが分かっています。
 式2の目的変数は出力電圧(Vout)なので、これをサーミスタ抵抗値(R1)について変形すると式3になります。
イメージ 4

②-2 説明変数
 目的変数(R1)を求めるために必要な説明変数は以下の通りです。

①で求めた固定抵抗値(kΩ):R2=4.7
ArduinoUNOの動作電圧と同じ電源電圧(V)Vcc=5
図2回路で測定された出力電圧(V)Vout=0~5

②-3 計算(参考)
 電源電圧(Vcc)=5Vから、半分の出力電圧(Vout)=2.5Vが得られた場合、以下計算例の様にサーミスタ抵抗値(R1)は固定抵抗値(R2)=4.7kΩと同じ値になります
 
R1=(5*4.7)/2.5-4.7=4.7kΩ

 ③:B定数を最適化 
 温度(T)とサーミスタ抵抗値(R1)の間には下記に示す式4の関係が有る事が分かっています。
イメージ 5

 式4中では任意の温度(T)におけるサーミスタ抵抗値(R1)以外に、「T0」と「R10」があります。
 これは基準温度T0(表1より25℃)におけるサーミスタ固有の基準抵抗値R10(表1より10kΩ)として計算しました。
 他に定数「B」と言うサーミスタ固有の値(表1よりB=3435K)があります

③-1 定数B
 この定数Bの“定数”と言う言葉が曲者で、素直にこの定数B(K)=3435を式4に入れて計算すると図3(上)の様に結構ズレます。
 図3(下)に計算抵抗値と実測抵抗値とのズレ(%)をグラフ化したものを示します。
 図3(下)を見ると、25~85℃から離れるほど近似抵抗値が実測抵抗値からズレて行く事が分かります測定温度が25~85℃であればこの定数Bでも良さそうですね
イメージ 7
イメージ 8
図3:定数(B=3435K)で式4を計算(上:計算結果、下:実測抵抗値とのズレ)

 改めて仕様書を見てみると、定数B(3435K)は25℃、85℃におけるゼロ負荷抵抗値より算出」と小さく書いてありました(;'∀')
 と言う事は当然25~85℃の範囲から外れるほどズレてくと言う事ですね仕様書を良く見てませんでした
 因みにB定数を求める式を探した所、以下式5の様に表されるそうですなんだか定数と言うか変数ですね
イメージ 6

※参考に、25℃、85℃におけるゼロ負荷抵抗値」定数Bを表2の値を使って式5で計算すると、ちゃんと仕様書の3435Kとなります
 
B=(LOG(1.451,EXP(1))-LOG(10,EXP(1)))/(1/(85+273.15)-1/(25+273.15))
=3435.426≒3435K

③-2 変数B
 折角「定数B」の式5が有るので、全区間で計算し、それを元に関数化した「変数B」を作ってしまえば良さそうです。
 各温度T(℃)におけるサーミスタ抵抗値R1(kΩ)は表2から分かるので、式5に代入して定数B(K)を求めます。
 求めた定数B(K)と実測抵抗値R1(kΩ)で図4の通りグラフ化します。
 作ったグラフに対してEXCELで近似曲線(累乗)を求め数式化します。
 これで「定数B(K)」であったものが式6の「変数B(K)」成りました!

イメージ 9
図4:各温度T(℃)における定数B(K)

イメージ 13

 式6に示した変数B(K)は、測定可能なサーミスタ抵抗値R1(kΩ)だけから求める事が出来る所がポイントです。抵抗温度係数なるものも有るそうですが温度(T)が必要で精度も微妙です
 と言う事で、式6の変数B(K)を式4に代入して計算すると図5(上)の様になります。
 また図5(下)に計算抵抗値と実測抵抗値とのズレをグラフ化したものを示します。
 めでたくズレが解消できました計算負荷も低そうなので変数Bを使います!
イメージ 10
イメージ 11
図5:式4に式6変数B(K)を代入し計算(上:計算結果、下:実測抵抗値とのズレ)

 ④. サーミスタ抵抗値(R1) → 温度(T) 換算 
 ④-1 目的変数
 測定したサーミスタの抵抗値R1(kΩ)から温度T(℃)を求める式を作ります。
 探し方が下手なのかNETで探してもなかなか見つからなかったので、式4を温度T(℃)について変形した式7を作りました出来た。
イメージ 19

④-2 説明変数
 式7を使って温度T(℃)を求めるために必要な目的変数は以下の通りです。

 〇R1
 式3より、サーミスタ抵抗値(kΩ):R1=(Vcc*R2)/Vout-R2 (5*4.7)/Vout-4.7
※ArduinoUNOの動作電圧と同じ電源電圧(V)Vcc=5
※図2回路で測定された出力電圧(V)Vout=0~5
※式1より、固定抵抗値(kΩ):R2=4.7
 〇B
 式6より、変数B(K):B=3,452.9*R1^(-0.012329)

 〇R10
 表1より、基準温度におけるサーミスタ基準抵抗値(kΩ)R10=10

 〇T0
 表1より、基準温度(℃)T0=25

④-3 計算
 表2にサーミスタの温度T(表4,A列)と、抵抗R1(表4,B列)の実測値が有るので、図2回路における出力電圧Voutを式2で推定(表4,C列)し、これを元に温度換算を行います

 計算の流れとして、測定した出力電圧Voutからサーミスタ抵抗値R1に式3で換算(表4,D列)」→「変数Bを式6で求める(表4,E列)」→「サーミスタ温度Tに式7で換算(表4,F列)」します。

 計算には表4の様にEXCELを使用し、各セルには表3の内容及び計算式を入力しました

表3:表4セルの内容及び計算式
A4 = 表2「温度T(℃)」実測値を入力
B4 = 表2「抵抗値R1(kΩ)」実測値を入力
C4~C24セルにオートフィル = 5/(B4+4.7)*4.7
D4~D24セルにオートフィル = (5*4.7)/C4-4.7
E4~E24セルにオートフィル = 3452.9*D4^-0.012329
F4~F24セルにオートフィル = D4/LOG(E4*EXP(D4/(25+273.15))/10,EXP(1))-273.15
G4~G24セルにオートフィル = F4-A4

表4:「出力電圧」から「サーミスタ温度」に換算
イメージ 14

④-4:結果
 表4では、「変数B」を使って出力電圧(Vout)からサーミスタ温度(T)に換算しています。
 「変数B」「定数B」による温度換算値を図6に、換算値と実測値とのズレを図7に、比較結果をまとめたものを表5に示します。
 青色線は、実測値ですので、当然実測値との誤差はゼロとなっています。

 表5の結果より、通常使う「定数B」を「変数B」に変えることで、特に気になっていた-50℃における最大誤差が1/16.8と大幅に減少しました
 また-50~+125℃の全区間において±0.25℃未満の高精度測定が可能になりました理論上ですがオレンジの線がいい感じです!
イメージ 15
図6:出力電圧から「変数B」と「定数B」でサーミスタ温度に換算結果

イメージ 16
図7:出力電圧から「変数B」と「定数B」でサーミスタ温度への換算誤差

表5:図7より、「変数B」と「定数B」による換算誤差比較結果   単位:℃

3. まとめ

 サーミスタ・・・。
 最初見たときは、そのシンプルな回路構成と見た目から、ちょっと調べればサクッと使えるでしょアハハ!くらいに考えて買って来ましたが、結果はご覧の通りなかなか奥深い物でした
 折角なので、実験しやすいようにサーミスタとArduinoUNOのアナログ入力端子6個を使った、6chの温度(or電圧)測定シールドを作ります!

イメージ 1イメージ 3
励みになりますのでよければクリック下さい(^o^)/



この商品は、マルツオンライン が販売、発送します。