無断転載および再配布を禁じる。
Copyright (c) 2012 All rights reserved.
温度センサ回路では、温度センサ「LM35」で温度を測定し、その出力(10mV/℃)をOPアンプ「LM358」で5倍に増幅して、PICのA/Dコンバータに50mV/℃の電圧を与えた。
そのため、温度TとOPアンプの出力電圧VTとは、次のような関係がある。
T(℃)=VT(mV)/50
一方、PICのA/Dコンバータは、電源電圧5000mVを基準とし、それを1023とする分解能で入力電圧を取り込んでいる。
したがって、OPアンプの出力VTとA/Dコンバータの変換値DTとは、次のような関係がある。
VT(mV)=DTx 5000(mV)/1023
以上のことから、温度TはA/Dコンバータの変換値DTと次のような関係になる。
T(℃)=DTx 5000(mV)/(1023x 50)
=DTx 100/1023
上記により、A/Dコンバータの変換値DTから温度Tを求めることができるが、液晶表示器などに表示するには、一般的に温度の位ごとの値を求める必要がある。
PicBasic Proには位を指定してその位の値を求める「DIG」関数があるので、上記の関係より、温度値を10倍して100の位、10の位、1の位を求めれば、それぞれ温度の10の位、1の位、少数第1位として使うことができるように思える。
それには、変換値DTを1000倍してから1023で割ればよいのだが、PicBasic Proの変数は65,535を越えられないという制限があるので、変換値DTが65(6.3℃)以下でしか、1000倍の演算ができない。
また、変換値DTを先に1023で割ると、今度は値がいったん1以下になって失われてしまう。
そのため、たとえば温度の10の位、1の位の値をそれぞれ求めるには、次の演算を行う。
10の位T10 :次の式の整数部分
DTx 10/1023
1の位T1 :上式の「余り」を10倍して1023で割った整数部分
(DTx 10/1023 − T10)x 10/1023
上記の演算をPicBasic Proのプログラムにより行うには、次のようにする。
ADCIN 2, B0 | '50mV/℃の電圧をA/D変換する。 |
PAUSEUS 60 | |
B0 = B0*10 | 'A/D変換値を10倍する |
B00 = B0/1023 | '1023で割った整数部分が10の位の値 |
B010 = B0//1023 | '1023で割った「余り」の値 |
B01 = B010*10/1023 | '上の行の値を10倍して1023で割った整数が1の位の値 |
さらに、同様のやり方で、小数の位も求めることができる。
ただし、この例の場合は、A/D変換値1あたり5mV弱なので、温度値の有効桁は、少数第1位までである。