====== ダイオード温度計 ======
===== 概要 =====
温度計を自作する場合、一般的には、次のような高精度IC温度センサを利用します。
* LM35DZ(0~100℃、10.0mV/℃ )
* S8100B(:-40~+100℃、-8.0mV/℃ )
今回は、シリコンダイオードの温度特性を利用した温度計を作成してみました。
===== 動作原理 =====
シリコンダイオードの順方向電圧は、接合部の温度が変化すると-2mV/℃の割合で変化します。
通常20℃の順方向電圧は、約600mVです。
測定可能な温度範囲は、ダイオードの種類にもよりますが、約-20℃から150℃まで可能です。
但し、温度変化の割合は必ずしも直線的ではないので、誤差がでますので、厳密な計測には向きません。
今回の温度計では、この電圧の変化を計測し、温度として表示しています。
ダイオードを5個直列に接続することにより、温度の変化による、電圧の変化量を-10mV/℃としました。
<シリコンダイオードの特性>
* シリコン半導体の接合電圧(順方向電圧)は、通常0.5~0.9Vの範囲で使用される。
* その接合電圧の温度係数は、負の値を持っており、約-1.7~-2.2mV/℃の値が示されることが多い。
* また接合電圧の温度係数は、接合電圧に大きく依存し、接合電圧が大きくなると温度係数は小さくなる。
* ダイオードに流す電流に応じて接合電圧が変化する。
* 高電流密度になれば負の温度係数の絶対値は小さくなる。
* 接合電圧が、0.65Vで温度係数は、約-2mV/℃になる。
* 電流が小さければ温度係数の絶対値はもっと大きくなる。
===== 回路図 =====
{{:imgpaste:202004:htmikan-20200429-183047.png}}
===== ソースコード =====
//**********************************************************************
/*
『温度計(シリコンダイオード使用)』
*/
//**********************************************************************
unsigned int measurement()
{
unsigned int ad, cnt;
//
ad = 0;
for (cnt = 0; cnt < 60; cnt++) {
ad += Adc_Read(1);
}
return (ad / 60);
}
//**********************************************************************
void main()
{
static unsigned char buf[6], cnt;
static unsigned int ad;
//
OSCCON = 0b01110000; // クロックは8Mhz
CMCON = 0b00000111; // コンパレータは使用しない。
// A/D変換を使用する。
ANSEL = 0b00000010;
// ポートを初期化する。
TRISA = 0b00111010;
TRISB = 0b00001111;
// 入力割り込みの設定
INTCON.INTE = 1;
INTCON.INTF = 0;
OPTION_REG.INTEDG = 1;
// LCDを初期化する。
Lcd_Custom_Config(&PORTB,4,5,6,7,&PORTA,0,7,6);
Lcd_Custom_Cmd(LCD_CURSOR_OFF);
Lcd_Custom_Cmd(LCD_CLEAR);
Lcd_Custom_Out(1, 1, "ThermoMeter3");
Delay_ms(500);
Lcd_Custom_Cmd(LCD_CLEAR);
//
INTCON.PEIE = 1; // これ以降の処理で割り込みを許可する。
INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。
//
while (1) {
ad = measurement();
ad = (double)ad * 4.8828125;
WordToStr(ad, buf);
Lcd_Custom_Out(2, 1, buf);
Lcd_Custom_Out(2, 6, "mV");
//
WordToStr(100.0 - (((double)ad - 1380.0) / 10.0), buf);
Lcd_Custom_Out(1, 1, buf);
Lcd_Custom_Out(1, 6, "゚C");
}
}
//**********************************************************************
===== 動作確認 =====
いつものブレッドボードで確認しました。
上の白い温度計は市販のものです。
{{:imgpaste:202004:htmikan-20200429-183208.png?500}}
シリコンダイオードを5個直列にした、温度センサー部分です。
市販の温度計よりも、温度変化に敏感に反応します。
{{:imgpaste:202004:htmikan-20200429-183222.png?500}}
上:温度を表示
下:5個のダイオードの両端電圧です。
{{:imgpaste:202004:htmikan-20200429-183238.png?500}}
===== 調整 =====
ダイオードに流す電流によって、温度係数の絶対値が変わってきますので、使用するダイオードに応じて、バイアス用の抵抗、回路図では、100kを調整し、プログラム上の100℃のときの電圧や1℃あたりの温度計数(10mV)の単位を調整することにより、更に精度を高めることが可能となります。
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]