LM35DZ の出力を NJU7032D で増幅してAD変換

2013/4/7 の試行錯誤の記録。

Mbed NXP LPC1769 の ADC は 12bit とのことなので、2 を 12 乗して 4096 段階の電圧が識別できるはず。 アナログ入力として可能な 0.0V から 3.3V(3300mV) までの範囲を 4096 で割った 0.8mv が分解能ということでいいかしら。

温度センサー LM35DZ の出力が 10mV/1 ℃ だそうなので、0.08 ℃の分解能という考え方でいいのかな?

LM35DZは 2℃から100℃までが計測範囲。

  • 0~2℃付近を計るには、データシートの Typical Application の Figure 2 のように負電源を用意して Vout にバイアスをかける必要があるそうです。

室温を測ることを想定しているので、たぶん私が使う範囲は高くても50℃。(2012年で群馬県で 39.2℃が最高だったそうな) 最低は2℃としておこう。電圧と℃が比例するので計算が簡単で都合が良い。 マイナスの温度が必要な場合はそもそも LM35DZ ではなくほかの部品が必要なので、別途考えることにする。

ここから先は 2 から 50 ℃ の範囲を計るということで考えてみよう。

2 から 50 ℃ の範囲を計る場合、 LM35DZ の出力電圧をそのまま使うと 0.02V から 0.5V の間になる。 計測可能な電圧範囲の 6.6 分の 1 しか使っていないということは、ADC は 4096 を 6.6 で割った 621 段階で充分ということになる。 2 を底とした場合の 621 の対数を計算すると、 log 621 / log 2 = 9.3 。 なので、ADC の 12bit のうち上位 2bit が完全に無駄になっている。 もったいない。きっちり使おうじゃないか。

50 ℃の時にアナログ入力として可能な最大の 3.3V にするには、 3300mV / 50℃ = 66mV/1 ℃ にすればいいね。 LM35DZ の出力電圧が 10mV/1℃ なので、 6.6 倍に増幅してあげればよい。

mbed/ARM 活用事例(CQ出版)の P51-54 の「前置アンプを追加する」を参考にして考えよう。 非反転増幅回路の抵抗を、接地とマイナス入力の間が R1、マイナス入力と出力の間が R2 とすると、 倍率は (R1+R2)/R1 だそうだ。倍率を 6.6 にするので、 R1:R2 が 1:5.6 になるように選べばいいのかな。

手持ちの抵抗で近いのは 5.1KΩ と 30KΩ の組み合わせ(倍率は 35.1kΩ / 5.1kΩ = 6.88倍)。 アンプの出力電圧が 3.3V になる場合の温度は3300mA / 68.8mA = 47.9℃、2つの抵抗を通じて流れる電流は 3.3V / 35.1KΩ = 94μA。 NJU7032D というアンプの出力電圧と出力電流の特性グラフを見ると、100μA(0.1mA)を越えるあたりから悪化して 1.0mA だとダメだめっぽいのでもっと余裕がほしいな。

5.1kΩ を手持ちの 10kΩ に変えよう。倍率が 40kΩ / 10kΩ = 4.0倍に下がるので、オペアンプの出力電圧が 3.3V になる場合の温度は3300mA / 40mA = 82.5℃、2つの抵抗を通じて流れる電流は 3.3V / 40KΩ = 83μA。 でも 82.5℃まで使うことはないので、50℃の場合で考えてみる。 その温度のときのオペアンプの出力電圧は 2.0Vなので2つの抵抗を通じて流れる電流は 2.0V / 40KΩ = 50μA(0.05mA)。これなら余裕そうだね。

ちなみにアナログ入力で扱える 3.3V の電圧範囲のうち、2.0V を使うので、4096 / 3.3 * 2.0 = 2482 段階。 2 を底とした場合の 2482 の対数を計算すると、 log 2482 / log 2 = 11.3 。LM35DZ の出力電圧をそのまま使うときよりも 2bit 分有効活用出来た。 アナログ入力で扱う電圧範囲が4倍に広がったことが反映されている。 もし残りの 0.7bit 部分も有効活用したくなったら、56kΩ の抵抗を入手して 30kΩの 抵抗部分と入れ替えることにしよう。 人生ではじめてのオペアンプ利用にバンザイ!

/media/uploads/strysd/opamp_test.jpg

4/8 追記

某所で6時間連続稼動してみました。ちなみにその場所の今日の最高温度は29℃。 今日の稼動中の電流は測りませんでしたが、指先で NJU7032D を触るとほとんど熱をもってないっぽい。 96MHz から 48MHz にクロックダウンしていた NXP LPC1769 はほんのり温かみがある状態。 ちなみに昨日自宅で NJU7032D のVcc に流れる電流を計った値は約 0.5mA 。IN+への入力電圧は約 0.2V

帰宅後 R1 = 10kΩのカーボン抵抗(誤差5%)、 R2 = 30kΩのカーボン抵抗(誤差5%)

R1 = 30kΩの金属被膜抵抗(誤差1%)、 R2 = 150kΩの金属被膜抵抗(誤差1%)

に変えてみました。贅沢!

/media/uploads/strysd/ieee1888new.jpg

倍率は 180kΩ / 30kΩ = 6.0 倍に上昇。今室温が 20℃なので、LM35DZ の出力電圧は 0.2Vなんですが、 オペアンプの出力をテスターで計ると確かに 1.2Vになってますね。 オペアンプの出力電圧が 3.3V になる場合の温度は3300mA / 60mA = 55℃、2つの抵抗を通じて流れる電流は 3.3V / 180KΩ = 18μA。50℃の時は 3.0V になるはずなので、 3.0V / 180KΩ = 16.7μA。

Celsius degreeVout from LM35DZOutput of op-amp
50500mV3000mV
40400mV2400mV
30300mV1800mV
20200mV1200mV
10100mV600mV
220mV120mV
  • This op-amp needs RailToRail feature.

アナログ入力で扱える 3.3V の電圧範囲のうち、3.0V を使うので、4096 / 3.3 * 3.0 = 3723 段階。 2 を底とした場合の 3723 の対数を計算すると、 log 3723 / log 2 = 11.8 。12bit をほとんど活用できていると判断してもいいだろう。

分解能は 50℃ / 3723 段階 = 0.013℃ ということでよいかしら。しばらくこれで動かして様子を見てみよう。 bsch3v で回路図を書いてみましたので添付。

/media/uploads/strysd/lm35_nju7032d.png

温度グラフ。 ちなみに時々温度が急に下がっているのは、おおよそ一定間隔で測定場所の換気扇を回して空気を入れ替えているからです。

/media/uploads/strysd/ondo_nju7032d.png

4月27日追記

NJM2732D というオペアンプだと、入出力フルスイング (RailToRail) 特性だと知った。 LM35DZ の出力は 2℃のとき 20mV になるはずなので、入力側もフルスイングが必要そうだね。 NJU7032D から NJM2732D に交換して試してみよう。


Please log in to post comments.