サーミスタのB定数
「温度測定:サーミスタで」の続き。
探していたら、5℃ピッチの抵抗値表が出てきました。
で、この表から2点間の温度データを使って「B定数」を計算します。
pdfからピックアップしたのがこれ。
左側が温度、右の数字が抵抗値。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# 502AT 温度-抵抗特性
#温度 抵抗値
#℃ Ω
-20 32440
-15 25660
-10 20480
-5 16430
0 13290
5 10800
10 8840
15 7267
20 6013
25 5000
30 4179
35 3508
40 2961
45 2509
50 2137
55 1826
60 1567
65 1350
70 1168
75 1014
80 883.5
85 772.2
90 677.1
95 596.1
100 526.5
105 465.4
110 412.8
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# 103AT 温度-抵抗特性
#温度 抵抗値
#℃ Ω
-20 67770
-15 53410
-10 42470
-5 33900
0 27280
5 22050
10 17960
15 14690
20 12090
25 10000
30 8313
35 6940
40 5827
45 4911
50 4160
55 3536
60 3020
65 2588
70 2228
75 1924
80 1668
85 1451
90 1266
95 1108
100 973.1
105 857.2
110 757.6
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
この数字をファイルにし、次の「awk」スクリプトにかけて、
B定数を計算します。
※注:このブログでは半角スペースが詰まってし
まうんで、スペース2つを全角スペースに変
えています。
##### サーミスタ抵抗値計算プログラム #####
# 下間憲行 jh3dbo@jarl.com
# 10℃ごとの温度,抵抗値テーブルから
# 各温度範囲のB定数を計算
# メモ awkのlogは自然対数
BEGIN{
# 定数指定
K_273 = 273.15 # ケルビン温度
# タイトル表示
print("* サーミスタB定数計算 (2015-06-10)\n") > "/dev/stderr"
nbr = 0 # 読み込みデータ数
}
# 「BEGIN」おわり (以下、ファイル読み出し処理)
##### 温度,抵抗値テーブルを読み出す #####
# 10℃ごとの温度と抵抗値を順に読む
{
if( $0 ~/^#/ ) next # 先頭文字が「#」ならコメント
# 数値入力
temp[nbr] = $1 # 温度
ohm[nbr] = $2 # 抵抗値
printf("// %2d %6d℃ %8.1fΩ\n", nbr , temp[nbr], ohm[nbr])
nbr++ # 配列 +1
}
# ファイル処理おわり (以下、END処理)
##### 10℃ごとのB定数計算 #####
# ※基準は25℃なので、20〜25〜30℃となっているので注意
END{
# B定数計算 10℃ごと
if(nbr < 2) break # データなし
print("// B定数")
print("// Ω, Bconst")
for(i = 0; i < (nbr - 1); i++){
t1 = temp[i]
t2 = temp[i+1]
r1 = ohm[i]
r2 = ohm[i+1]
B[i] = (log(r1 / r2)) / ((1 / (t1+K_273)) - (1 / (t2+K_273)))
printf(" {%8.1f,%8.1f }, // %4d℃\n",r1, B[i], t1)
}
}
処理されて出てきた数字を並べ替えたのがこれ。
温度と抵抗値(入力したのと同じ値)、そしてその温度と
次行の温度を使って求めたB定数です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# 502AT 温度-抵抗特性
#温度 抵抗値 B定数
-20 32440.0 3064.4
-15 25660.0 3063.5
-10 20480.0 3109.6
-5 16430.0 3107.0
0 13290.0 3152.5
5 10800.0 3154.4
10 8840.0 3197.4
15 7267.0 3200.1
20 6013.0 3224.9
25 5000.0 3242.4
30 4179.0 3270.0
35 3508.0 3271.6
40 2961.0 3300.6
45 2509.0 3299.8
50 2137.0 3335.5
55 1826.0 3344.5
60 1567.0 3358.4
65 1350.0 3360.7
70 1168.0 3378.3
75 1014.0 3387.7
80 883.5 3406.1
85 772.2 3418.7
90 677.1 3406.8
95 596.1 3411.2
100 526.5 3481.2
105 465.4 3475.4
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# 103AT 温度-抵抗特性
#温度 抵抗値 B定数
-20 67770.0 3112.3
-15 53410.0 3114.0
-10 42470.0 3180.8
-5 33900.0 3182.7
0 27280.0 3234.2
5 22050.0 3231.7
10 17960.0 3279.6
15 14690.0 3290.8
20 12090.0 3317.7
25 10000.0 3340.0
30 8313.0 3372.7
35 6940.0 3373.5
40 5827.0 3407.8
45 4911.0 3412.5
50 4160.0 3446.8
55 3536.0 3448.9
60 3020.0 3478.1
65 2588.0 3476.0
70 2228.0 3505.1
75 1924.0 3511.0
80 1668.0 3525.6
85 1451.0 3547.9
90 1266.0 3564.4
95 1108.0 3566.9
100 973.1 3578.9
105 857.2 3579.2
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
サーミスタのデータは502ATと103ATの二つ。
入力ミスは無いはずなんですが、計算したB定数の変化、
単調な右肩上がりの線にならず、でこぼこしてるんです。
数字では分かりにくいんで、グラフにしてみました。
●502AT (クリックで拡大↓)
●103AT (クリックで拡大↓)
502ATの80℃〜100℃、滑らかに右肩上がりじゃなく、
凹っています。
そして、502ATも103ATも、氷点下以下のところが
段々になっている感じです。
抵抗値の微妙な変化で、こんなことになるのかなぁ。
|
2015年6月11日 14時41分
|
記事へ |
コメント(2) |
トラックバック(0) |
|
・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/4150/
※ブログ管理者が承認するまで表示されません
リンクしておきまっす。
・1℃単位の測定なら8bit A/Dでもなんとか。
・でも、10bitのA/D(AVRやPICマイコン内蔵のA/D分解能)は欲しい。
・0.1℃となると12bitA/Dは必須。
・それでも、温度範囲は「人が居てれる」ところ。
・0.01℃となるの、サーミスタの精度だけじゃなく、
測定環境が。
・人がアウトな高温、低温の環境となると、やっぱ「白金」か。
・熱電対だと、冷接点補償の「信用度」が問題に。