|
/* グロ−バル変数 */
doubule t1,t2,t3,r1,r2,r3,a,b,c;
/* main関数 */
void main( void )
{
int m = 0;
doubule j = 0;
test_data() ;/* 基本データ設定 */
const_calc();/* ABC 3定数の計算
*/
while( 1 )
{
j = read_data( );/* サーミスタ抵抗値読み取り、ユーザーの任意関数 */
data_calc( j );/* 読み取ったサーミスタ抵抗値を温度に変換する */
read_stataus( m );/* プログラム終了、ユーザーの任意関数 */
if( m != 0 )
break;
}
}
/* 例としてYSIサーミスタ型番44033を使用した場合
基本データ設定(カタログに記載されている定格値を設定する)
0℃=7355Ω、40℃=1200Ω、70℃=394.5Ω */
void test_data( void )
{
t1 = 0;
t2 = 40;
t3 = 70;
r1 = 7355;
r2 = 1200;
r3 = 394.5;
}
/* ABC 3定数の計算 */
void const_calc( void )
{
doubul x1,x2,x3,s,u,v,w;
t1 += 273.15;
t2 += 273.15;
t3 += 273.15;
x1 = log( r1 );
x2 = log( r2 );
x3 = log( r3 );
s = ( x1 - x2 );
u = ( x1 - x3 );
v = ( 1/t1 - 1/t2 );
w = ( 1/t1 - 1/t3 );
c = ( v-s*w/u )/(( pow( x1,3 )-pow( x2,3
))-s*( pow( x1,3 )-pow( x3,3 ))/u );/* 定数C */
b = ( v-c*( pow( x1,3 )-pow( x2,3 )))/s;/*
定数B */
a = 1/t1-c*( pow( x1,3 ))-b*x1;/* 定数A */
}
/* 読み取ったサーミスタ抵抗値を温度に変換する */
void data_calc( doubule data )
{
doubule temp,alph,beta,rout;
temp = 1/( a+b*log( data )+c*pow( log(
data ),3 ));
alph = ( a-1/temp )/c;/*
αの計算 */
beta = sqrt( pow(b/( 3*c ),3 ) + (pow(
alph,2 ))/4 );/* βの計算
*/
rout = exp( pow(( beta-alph/2),1/3 ) - pow(( beta+alph/2 ),1/3 );/* 抵抗値の再計算 */
temp -= 273.15 ;/*
温度へ変換した最終結果
*/
}
|