マイコン工作実験日記

Microcontroller を用いての工作、実験記録

温度センサと照度センサ

2008-09-20 18:33:44 | Weblog
DTMF信号を使ってNokia 5110 LCDに表示する題材を何にしようか考えていたのですが、どうせならいかにもマイコンらしくということでセンサで拾った温度と照度を表示してみようかと思います。そういうわけで、近頃秋月に並んだふたつのセンサを買ってきてつなげてみました。



LM60
Make Controllerの左に配置されている黒いやつです。LM35は10mV/℃で出力するため、電圧測れば温度がぴたりとわかるという直読可能な温度センサでしたが、動作に4V以上が必要でした。LM60は6.25mV/℃なので変換が必要となりますが、3.3Vで動くしマイナス温度も測れるので試しに買ってみました。SAM7X256のAD4に直結して使う事にします。

S9705
明るさを出力パルスの周波数に変換してくれる照度センサです。LCDの上部の空きスペースに置いてみました。フォトトランジスタと比べると値段はちょっと高いですが、マイコンに直結できるので配線作業がラクなのが嬉しいです。こちらはタイマのTIOC2につなぎ、タイマのキャプチャ・モードを使ってパルス幅を測ることにします。

これまでAT91SAM7のタイマはWAVEモードを使ったことはありましたが、キャプチャ・モードを使うのは初めてです。そこで、まずはキャプチャ・モードの動作の確認から始めました。S9705の出力は50%デューティなので、下図のT1またはT2の時間を計れば周波数に応じた明るさがわかることになります。


AT91SAM7のキャプチャ・モードにはRAとRBのふたつのキャプチャ・レジスタがあり、RBへのロードとともにカウンタのクロックを停止することで、タイマ動作を止めることができます。また、タイマ動作の開始条件としてTIOA入力を外部トリガとして指定することもできます。そこで、下図に示すように
  1. 立ち上がりを外部トリガとしてタイマを起動
  2. 立下りでカウンタ値をRAにロード
  3. 立ち上がりでカウンタ値をRBにロードするとともにクロック停止
という設定をしてやれば、T1とT2の時間を計った後にタイマが停止してくれるはずです。

この設定では自動的にカウントが始まって、T1とT2を計ると自動的にタイマが止まってくれますので、割り込み処理でタイマを止めたりする操作も無くなり助かります。ただし、外部トリガでの動作開始条件と動作停止条件が、どちらもTIOA2の立ち上がりになっているので、ちゃんと期待するような動作になるのかどうか疑問でした。停止条件とみなしてくれないと、再び外部トリガがかかったとして扱われ、カウンタが再スタートしてしまい、結果としていつまでも停止しないかもしれません。

実際に実験してみると、望んだように動作してくれました。カウンタが動作中の場合には、トリガ条件とみなさずに停止条件として扱ってくれるようです。助かるなぁ。実際に1秒間隔でRA, RBの値を読み出してから、タイマを設定する処理を実行してみると次のようになりました。



表示は
RB-RA (RA, RB)
という形式です。測定は日中、天気曇りの室内です。途中、RB-RAの値が185くらいから255位に増えている期間がありますが、この間はセンサを手の平でかざして少し陰にしてみています。試しに、懐中電灯で照らしてみるとRBの値は40位まで減ります。タイマのクロックは約24MHzですので、周波数は600KHz程度となりS9705の最大周波数(fmax)の300KHz~1000KHzの域に達しているのではないかと思われます。

一方、日が暮れてしまい、電灯もつけないでいると、16bitのカウンタはオーバフローしてしまいます。オーバフローの発生はフラグで検出できますので、タイマのクロックを下げていくように処理を組んでいます。

adc: 184 --> 59296 --> 270

という表示は、ADCで温度センサの値を読み出した結果です。184がADC 10bitでの直接の測定値ですが、これをVref 3.3Vで電圧に変換すると 592.96mV. さらに0℃でのオフセット424mVを引いて 6.25mV/℃で割ると 27.0℃となります。