Raspberry PiとTWE-Liteで室温・気圧を測ってみた (2)

2015/03/11Raspberry Pi, TWE-Lite, 電子工作

ラズパイマガジン 2015年春号の「温度センサーを読んでみよう」「無線センサーネットで扉の開閉や室温をつぶやく」を参考に室温や気圧を測る話(Raspberry PiとTWE-Liteで室温・気圧を測ってみた (1) | ず@沖縄)の続き。

今回は温度センサLM61の読み取りについて。


グラフがギザギザ

測定した気圧・気温のグラフを再掲します。
Raspberry Piに繋いだBMP085とTWE-Liteに繋いだLM61を比較すると、後者の分解能が悪いように見える。
絶対値がずれるのは後で補正すればいいんだけど、分解能が悪いのはちょっと気になる。
(後者のグラフには移動平均線も表示しています)

20150311-temperature-0

BMP085のデータシートによると温度は0.1度単位で出力されるとのこと。グラフ上もそう見える。

LM61で測定された温度はアナログ電圧として出力され、それをTWE-Liteの10bit ADCで読み取った後に下記の計算式で温度に変換しています。

20150304-LM61

TWE-LiteのADCの精度について既に先達が調査した結果があります。うちの計測結果グラフでも最下位bitは0.2-0.25度(2-2.5mV)ぐらいに見えます。

・AD変換の分解能はAD変換値が0x7Fまでなので補正値2Bitとあわせて9Bit ?
 9Bitなら1LSB=2.4mV となるし、10Bitを内部で変換して9Bit表現としているの でしょうか・・

JN5164のADC

TWE-LiteのCPUであるJN5164のデータシートを見てみます。

20150308-JN51640ADC

Data Sheet: JN516x P.55(PDF)

0-1.2Vまたは0-2.4Vの範囲を10bitデジタル値に変換できます。基準電圧は実際には1.235Vまたは2.47Vのようです。

基準電圧2.47Vとして計算すると 1LSBは 2.47/210≒0.00241V=2.41mV になります。これを温度に変換した0.241度が分解能。
ADCから読み取った値をmVに変換する処理はTWE-Lite内で行われていて、整数除算(切り捨て)されているので、そこでも精度が落ちます。

今回の構成では、TWE-LiteからはADC結果の生データを返して Raspberry Pi側で電圧・温度に変換した方が良さそうです。

基準電圧を下げてみる

基準電圧を1.235Vにすれば、分解能を1.235/210≒0.00121=1.21mVまで高められそうです。
この場合読める最大電圧は1.2Vまでになりますが、LM61の出力が1.2Vになるのは気温60度なので我が家の室温を測るには充分です。室温がもっと高い家庭は元のままが良いでしょう。

TWESDKの Samp_Monitor/EndDevice_Input/Source/EndDevice_Input.c の vInitADC() 関数の中で “基準電圧=VREF” にしたいADCのbitを立てます。

ToCoStickから制御できるといいけど、面倒臭いのでソース直書き。macbookでクロスコンパイルしてTWE-Lite Rトワイ・ライターで書き込んで動作確認しました。

--- EndDevice_Input.c   2014-07-17 13:18:26.000000000 +0900
+++ EndDevice_Input.c	2015-03-08 13:07:56.000000000 +0900
@@ -499,6 +499,8 @@
 	sAppData.sObjADC.u8SourceMask =
 			TEH_ADC_SRC_VOLT | TEH_ADC_SRC_ADC_1 | TEH_ADC_SRC_ADC_2;
 #endif
+	sAppData.sObjADC.u8InputRangeMask = 
+		(TEH_ADC_SRC_ADC_1|TEH_ADC_SRC_ADC_2|TEH_ADC_SRC_ADC_3|TEH_ADC_SRC_ADC_4);
 }
 
 /**

精度向上後の温度グラフ

上からBMP085,LM61(精度向上後)、LM61(精度向上前)です。刻み幅が小さくなっているのがわかります。
(センサごとのばらつきにより上下にずれています)

20150311-temperature-1

精度を上げるためにオペアンプ入れて頑張るのも考えたけど、I2C温度センサ買ったほうが楽なのでLM61の読み取りについてはこれで終わりにします。

追記

LM61のデータシートを参考にして+Vs〜GND間に0.01μFのコンデンサを追加したところ、同一温度でも測定値がふらつく問題は少し改善されました。TWE-Liteの電源部分にも大き目のコンデンサ入れたほうがいいかもしれない。

特にノイズの多い環境下では、ノイズの介入を最小限に抑えるために何らかのフィルタリングを施す必要があります。 Figure 5 に示すように 0.1μF のコンデンサを VS
とGND 端子との間に用い、電源電圧のバイパスを行なうことを推奨します。また、ノイズの多い環境下では出力端子とGND 端子の間にコンデンサを挿入する必要があります。

20150312-pascon-1


記事リンク

参考リンク