温度計測

Osamu Tamura @ Recursion Co., Ltd.

1. 概要

 温度センサをつないで温度を計測しました。
 

2. 回路図

  温度計測はサーミスタで分圧するのが簡単ですが、得られた値の処理がちょっと煩わしいようです。入手容易で精度が得やすいことから、ここでは温度センサICの LM 35DZ を使いました。10mV/℃ の出力なので換算も簡単です。
 このICには4V以上の電源が必要です。電池2本では足りないので、パルス発生して倍電圧を生成し供給しました。ダイオードにはショットキーバリア型の適当なもの、コンデンサ(10〜33μF)にはできればタンタルを使ってください。
 コネクタ番号とプログラムは1号基板用です。2号では ADC5 の代わりに ADC0 などを使い、それに伴ってプログラムも変更してください。 なお、2号では AREF のコンデンサは実装済み。また、USBバスパワーなら倍電圧回路も不要です(つまり LM 35 をつけるだけ)。

図1. 温度計測の回路図

3. プログラム

 10mS 割り込みでポートB1を反転させます。温度計測は1秒ごとの割り込みで測定します。必要に応じて計測間隔を広げてください。LM 35 では計測出力が安定するまで最大3分ぐらいかかるようです。
 AD変換にはAVR 内蔵の基準電圧 1.1Vを用いました。このレンジで10bit 計測すると、分解能がほぼ1mVとなります。つまり計測値がそのまま 0.1℃単位の温度となります。10で割って間に小数点を入れ表示しました。

/*

	LM35DZ による温度計測

	ポートB1 にパルスを発生し、倍電圧整流して LM35DZ に供給
	LM35DZ の出力を ADC5 でAD変換して表示
*/
	0xff 0x24 =sfr		// ポートB1 を出力
	0xfd 0x25 =sfr		// 残りをプルアップ

	0 0x27 =sfr		// ポートC5 を入力
	0xdf 0x28 =sfr		// 残りをプルアップ
:ポートの初期化


	0x20 0x7e =sfr		// ADC5 を使用
	0xc5 0x7c =sfr		// ADC5 を選択
	0x87 0x7a =sfr		// ADC を起動
:ADC_初期化

	0xc7 0x7a =sfr
:ADC_開始

	0x78 sfr 0x79 sfr 8 << |
:ADC_読み

	0 0x7a =sfr
	0 0x7e =sfr
:ADC_終了


	0x25 sfr 2 ^ 0x25 =sfr	// ポートB1 を反転
:倍電圧発生


	ADC_読み
	10 div swap %d '.' %c %d "\r\n" %s
	ADC_開始
:温度計測


	ポートの初期化
	ADC_初期化

	{ 倍電圧発生 温度計測 } interrupt

	{
		@c? break	// キー入力で停止
	} do @c .

	ADC_終了
:お始め

リスト1.温度計測のプログラム

  AD変換をプログラムをするときは特に、データシートをよく読んでください。

21 Jun. 2006

<<