softdev:tempmeter1
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
softdev:tempmeter1 [2012/02/05 10:14] – [計算] king | softdev:tempmeter1 [2012/02/07 22:48] – [LM35] king | ||
---|---|---|---|
行 6: | 行 6: | ||
PIC12F675で入門コースみたいなので、温度計みたいなのをLM35で作った事があるが、氷点下は測定できなかった。バイクに付けていつもの温度を測りたいと思っていて、許せばバッテリ電圧なども表示したら面白いかと。 | PIC12F675で入門コースみたいなので、温度計みたいなのをLM35で作った事があるが、氷点下は測定できなかった。バイクに付けていつもの温度を測りたいと思っていて、許せばバッテリ電圧なども表示したら面白いかと。 | ||
- | 今回。LM60というのが入手できたので、やってみたんだが、、まだうまく出来てない。 | + | LM35はナショセミの温度センサで、10mV/ |
+ | |||
+ | {{: | ||
+ | |||
+ | * Calibrated directly in ° Celsius (Centigrade) | ||
+ | * Linear + 10.0 mV/°C scale factor | ||
+ | * 0.5°C accuracy guaranteeable (at +25°C) | ||
+ | * Rated for full -55° to +150°C range | ||
+ | * Operates from 4 to 30 volts | ||
+ | * Less than 60 µA current drain | ||
+ | |||
+ | 精度もいいし、リニアリティ、計算も良いのだが、0℃以下が負電圧となってしまうと言うことがある。後で思う事だが、負電圧を作って且つ差動で増幅しても結局はLM60で計測するのと誤差と手間は同じだったように思う。 | ||
+ | |||
+ | ==== PICのADで読む ==== | ||
+ | ADで読む方法では、分解能が4.8mVであるので、センサー出力を増幅しなければいけない。作成時は10倍にした。PIC12F675を使用したので内蔵ROMは1Kワードである。計算式は、Temp=AD*50/1024である。 | ||
+ | < | ||
+ | GO_DONE = 1; | ||
+ | while(GO_DONE); | ||
+ | lm35_out = (ADRESH<< | ||
+ | lm35_temp = lm35_out * 50/1024; | ||
+ | </ | ||
+ | |||
+ | |||
+ | lm35_temp = lm35_out * 25 / 8; | ||
+ | lm35_temp = lm35_temp * 5 / 32; | ||
+ | |||
+ | |||
+ | |||
+ | |||
===== LM60 ===== | ===== LM60 ===== | ||
行 16: | 行 45: | ||
で、回路。使っているICとか部品名が違うけど気にしないで(Eagleのライブラリに無かったから適当) | で、回路。使っているICとか部品名が違うけど気にしないで(Eagleのライブラリに無かったから適当) | ||
- | {{:: | ||
オフセットを固定で切ってやると、後で調整するときに面倒だしそれに、電源電圧がいつも5Vと限らないでしょう。なので、ADを二つ使って誤差を埋めてやれば、演算だけで出来そうじゃ無いですか?。回路図のLM358はLM2904を使用、GND側は入出力ともRail動作。 | オフセットを固定で切ってやると、後で調整するときに面倒だしそれに、電源電圧がいつも5Vと限らないでしょう。なので、ADを二つ使って誤差を埋めてやれば、演算だけで出来そうじゃ無いですか?。回路図のLM358はLM2904を使用、GND側は入出力ともRail動作。 | ||
+ | {{: | ||
==== 計算 ==== | ==== 計算 ==== | ||
+ | 上の回路だと、非反転増幅のGND部分にオフセッットが入るから、-, | ||
+ | |||
+ | {{:: | ||
+ | |||
+ | Vin=(Vout-Voffset)x10/ | ||
+ | よって、Vout=(Vin-Voffset)x101/ | ||
+ | なんで、このような面倒な計算なの?って、そりゃ、間違えて回路作っちゃたからでしょ。ちょっと勘違いして配線して、結果を見たら違うって言うよくある話で。 | ||
+ | |||
+ | 以下の計算式は、差動増幅で、オフセットのみ捕れた場合の算出方法で、結論から言うと、今回の計算は下記になるですな。 | ||
+ | |||
+ | > | ||
+ | |||
+ | |||
+ | まず前提 | ||
* センサAmpの倍率=10.1。ぴったりの抵抗が無いのよ、面倒。 | * センサAmpの倍率=10.1。ぴったりの抵抗が無いのよ、面倒。 | ||
* オフセット調整範囲=0.543V〜0V 実際にはもっと範囲狭くなる。 | * オフセット調整範囲=0.543V〜0V 実際にはもっと範囲狭くなる。 | ||
行 31: | 行 74: | ||
んで、以下の式になる。 | んで、以下の式になる。 | ||
- | > | + | > |
> | > | ||
となる。一方、実温度は、0℃=424mVであることと、ΔT=6.25mV/ | となる。一方、実温度は、0℃=424mVであることと、ΔT=6.25mV/ | ||
- | T=(V< | + | >T=(V< |
である。 | である。 | ||
また、AD値と電圧の関係は、\\ | また、AD値と電圧の関係は、\\ | ||
- | V< | + | >V< |
- | V< | + | >V< |
よって最初の式から\\ | よって最初の式から\\ | ||
- | V< | + | >V< |
2番めの式と、上式から温度は\\ | 2番めの式と、上式から温度は\\ | ||
- | Temp=(1/ | + | >Temp=(1/ |
数字同士の部分を計算すると、下式になる。\\ | 数字同士の部分を計算すると、下式になる。\\ | ||
- | Temp=(1/ | + | >Temp=(1/ |
上式の最後の項は定数である(AD値に左右されない)。\\ | 上式の最後の項は定数である(AD値に左右されない)。\\ | ||
ここで、大きな問題がある。これは実数計算であり、double型でこの計算すると、LCDも表示制御があるので、2Kワードでは無理である。困った。 | ここで、大きな問題がある。これは実数計算であり、double型でこの計算すると、LCDも表示制御があるので、2Kワードでは無理である。困った。 | ||
+ | ==== 演算 ==== | ||
+ | Temp=(1/ | ||
+ | |||
+ | このままだど、double演算になるので、整数に直さないといけない。そこで分母分子で同倍する。AD値を100倍にして、分母も100倍。すると、下記\\ | ||
+ | Temp=(AD1×100/ | ||
+ | 最後の67は、67.84を切り捨てで算出。整数演算は切り捨てになるからというのと、エクセルで計算させると切り捨てのの方が真値に近かった。アンプゲイン10.1は、10倍でも誤差は変わらなかった。 | ||
softdev/tempmeter1.txt · 最終更新: 2013/07/15 20:25 by 127.0.0.1