Transistor Gijutsu, October 2014, Special Features Chapter 8,Software of the thermistor thermometer of 0.001 ° resolution, トランジスタ技術2014年10月号 特集第8章のソフトウェア 0.001℃分解能で気配もキャッチ「超敏感肌温度計」

Dependencies:   USBDevice mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Thermistor.cpp Source File

Thermistor.cpp

00001 #include "Thermistor.h"
00002 #include "math.h"
00003 
00004 //#define ABSTMP (273.0)    ///< 絶対温度と0℃との差
00005 
00006 /// コンストラクタ
00007 /// @param B B定数
00008 /// @param T0 抵抗値がR0Ωとなる摂氏温度
00009 /// @param Rs0 T0℃でのサーミスタ抵抗値[Ω]、+入力端子とGNDとの間に設置
00010 Thermistor::Thermistor(double B, double T0, double Rs0)
00011 {
00012     b = B; t0 = T0+ABSTMP;
00013     rs0 = Rs0;
00014     // 温度補正パラメタを「補正なし」に初期化
00015     a2 = 0.0;
00016     a1 = 1.0;
00017     a0 = 0.0;
00018 };
00019 
00020 
00021 /// AD変換結果から温度を算出する
00022 /// @param adVal AD変換結果
00023 /// @return 摂氏温度
00024 double Thermistor::toTempValue(double rs)
00025 {
00026     // サーミスタ抵抗値から温度を算出
00027     t = b * t0 / (b + t0 * log(rs/rs0));
00028     // 2次式による補正
00029     t = a2 * t * t + a1 * t + a0 - ABSTMP;
00030     return t;
00031 }
00032 
00033 /// 3点を指定し2次式で補正する温度校正
00034 /// @param t1  補正点1の測定値
00035 /// @param t1r 補正点1の正しい温度
00036 /// @param t2  補正点2の測定値
00037 /// @param t2r 補正点2の正しい温度
00038 /// @param t3  補正点3の測定値
00039 /// @param t3r 補正点3の正しい温度
00040 void Thermistor::adjust(double t1, double t1r, double t2, double t2r, double t3, double t3r)
00041 {
00042     t1  += ABSTMP;
00043     t1r += ABSTMP;
00044     t2  += ABSTMP;
00045     t2r += ABSTMP;
00046     t3  += ABSTMP;
00047     t3r += ABSTMP;
00048     // 2次式の係数を求める
00049     a2 = (t1r*(t2 - t3) + t2r*t3 - t2*t3r + t1*(-t2r + t3r))/((t1 - t2)*(t1 - t3)*(t2 - t3));
00050     a1 = (-(t2r*t3*t3) + t1r*(-t2*t2 + t3*t3) + t1*t1*(t2r - t3r) + t2*t2*t3r)/((t1 - t2)*(t1 - t3)*(t2 - t3));
00051     a0 = (t1r*t2*(t2 - t3)*t3 + t1*(-(t1*t2r*t3) + t2r*t3*t3 + t1*t2*t3r - t2*t2*t3r))/((t1 - t2)*(t1 - t3)*(t2 - t3));
00052 }
00053 
00054 /// 2点を指定し1次式で補正
00055 /// @param t1  補正点1の測定値
00056 /// @param t1r 補正点1の正しい温度
00057 /// @param t2  補正点2の測定値
00058 /// @param t2r 補正点2の正しい温度
00059 void Thermistor::adjust(double t1, double t1r, double t2, double t2r)
00060 {
00061     t1  += ABSTMP;
00062     t1r += ABSTMP;
00063     t2  += ABSTMP;
00064     t2r += ABSTMP;
00065     // 1次式の係数を求める
00066     a2 = 0.0;
00067     a1 = (t1r - t2r)/(t1 - t2);
00068     a0 = (-(t1r*t2) + t1*t2r)/(t1 - t2);
00069 }
00070