はじめての電気とIoT (11) SPI経由でアナログ電圧測定 その4 LM358で10倍増幅

アナログ信号はいろいろ‥対応する

 10ビットA-DコンバータMCP3008を使って、データをディジタル値に変換していますが、入力できる電圧は0~約2.5Vです。現実の世界では、この仕様では足りないことが多くあります。

  • センサの出力は0~5V
  • センサからの電圧はもっと微弱
  • センサからはマイナスの電圧も出てくる
  • センサの出力は電流
  • 計測場所から離れているので、雷対策が必要
  • 工場内なのでノイズが多い

高い電圧に対応したい

 電気の世界では高電圧というのは数千ボルトなどを指します。電子工作で扱う弱電の世界では48Vを超えた電圧は触れば感電する可能性も高く、高電圧といえます。

 ラズパイのGPIOは3.3Vまでの電圧を扱います。しかし5Vとか12Vの電圧を入力したいときがあります。ディジタル的に扱うには、レベル・シフト回路を入れて対応します。

 A-Dコンバータでは、入力部分に分圧回路を入れると高い電圧も扱えます。



 電圧計(DCV-METER)には電流が流れないとします。

 電源(BATTERY)が5Vとします。オームの法則から、抵抗に流れる電流は、

I(A) = E (V) / R (Ω)
  = 5V / ( R1+ R2 ) = 5V / 15kΩ
       = 0.33333mA

 したがって、5kΩの両端の電圧はオームの法則から、

E (V) = I (A) * R (Ω)
       = 0.00033333 * 5k
       = 1.667V

 入力端子に入る電圧を下げることができます。

 汎用的な式にします。

 出力電圧Vout = 入力電圧Vin * ( R2 / ( R1 + R2 ))

 入力電圧を5Vとすると、

 Vout = 5V * ( 5k / 5k + 10k ) = 5V * ( 5k / 15k )
          = 1.667V

 もし、何らかの理由で、高い電圧をA-Dコンバータの入力に与えた場合、ICが損傷します。そのため、保護回路を入れます。保護回路を入れることによって、正確にA-D変換ができなくなるのはまずいですが、扱う周波数が低いセンサ関係では、次の回路がよく使われます。



 二つのダイオードは小信号用と呼ばれるタイプで、型名1S1588(東芝)が古い回路図に出てきますが、すでに廃番ですから、相当品を使います。

 実際に、過大な信号を入力して、この回路の動作を確かめます。

入力が約±0.5V

 回路図にはありますが、マイナス側のダイオードは入れていません。しかし、マイナス側はある電圧でクリップ(それ以下にならない)しています。ICに何らかの保護回路が内蔵されているようです。データシートによれば、超えてはいけない規格である絶対入力範囲は-0.6VからVDD(今回は3.3V)+0.6Vです。したがって、約 -0.3Vは許容範囲です。

入力が約3.2V

 入力電圧を上げます。青色が発振器の出力の波形です。47kΩの抵抗を介してMCP3008の入力につなぎ、赤色がMCP3008の入力端子に入っている波形です。3.2V付近から入出力の波形がずれ始めました。

入力が約3.7V

 入力電圧を高くするとMCP3008の入力は、ダイオードに電流が流れ、クリップします。入力されているのは3.7Vなので、マックスが3.3+0.6=3.9Vなので、許容以下です。MCP3008の入力は保護されています。

入力が約10V

 さらに電圧を上げます。MCP3008の入力は十分保護されているのがわかります。

微弱な信号は増幅する

 センサの出力が0~100mVであれば、10倍の増幅器をA-Dコンバータの前に入れることで対応します。A-Dコンバータの能力を目いっぱい使うのであれば、25倍の増幅器があると10ビットを使いきれるので、ディジタルに変換した値の精度もよくなります。

 増幅器にはいろいろなタイプがあります。




 (a)は普通の増幅器です。10倍から100倍であればOPアンプが1個あれば実現できます。

 (b)は増幅器の前にフィルタを入れています。CR(コンデンサと抵抗)やLC(コイルとコンデンサ)によるフィルタはパッシブ・タイプと呼ばれます。OPアンプを使ったフィルタはアクティブ・タイプと呼ばれます。いずれも、A-Dコンバータに入ってほしくない高い周波数のノイズなどを除く働きをします。

 (c)はOPアンプと同じに見えますが、入力が二つあります。センサから増幅器に入る信号までの距離が長いとき、ノイズがその入力線に乗ります。差動入力の場合、両方にノイズが載ってもそれを除去できる能力がとても高いです。CMRRという記号で表します。計装増幅器とも呼ばれます。複数のOPアンプで構成できますが、専用のICもたくさん市販されています。

 (d)は入力と出力が電気的に分離されている絶縁増幅器です。センサから増幅器につながっている線に誘導落雷などのために高圧がかかった場合、信号を処理するコンピュータまで伝わって破壊されないようにします。コンピュータは高価ですから、絶縁アンプが破壊されれば交換するだけで復旧できるので、製造現場ではよく使われます。この絶縁部分はアナログなので、精度が高いものは高価です。

 (e)は、絶縁をディジタル信号に変換した後に行います。このほうが、システムを安価にでき場合があります。

 工業計測使われる絶縁タイプの増幅器です。増幅度、フィルタなどが設定できる汎用タイプです。

10倍の増幅器ならブレッドボードで実現できる

 100倍以上の増幅器は、経験がないと用途に合った増幅器が作れません。

 10倍なら、条件次第でだれでもチャレンジできます。

 業務用の機器でも、増幅器はOPアンプを使って設計します。OPアンプはオペアンプともいい、元は積分器などアナログ・コンピュータなどのために作られました。現在、数多くの種類が販売されています。アマゾンで購入できるLM358を使いましょう。少し世代が古いですが、+5Vの電源で動作します。多くのOPアンプは、プラスとマイナスの2電源が必要です。

 LM358は、ヘッドホン・アンプなどにも使われているのと同じ8ピンのDIPの形状をしています。中には二組のアンプが入っています。

非反転増幅回路を使う

 条件を決めましょう。

  • 入力電圧は0から300mV
  • 増幅率は10倍
  • 周波数帯域はDCから1kHz

 したがって、出力は0~3Vです。

  • 電源は5V
  • 回路は非反転回路

 電源が5Vなので、500mVが入力されたら出力は5Vになるはずです。けれども、3.xxVまでしか出力電圧は上がりません。古いタイプのOPアンプは電源電圧ぎりぎりまで信号を扱えません。最近のレール-ツー-レールと呼ばれるタイプは、電源ぎりぎりまで出力が出ます。

 OPアンプで使われる増幅回路は、反転回路と非反転回路の2種類があります。それぞれ特徴があって、OPアンプの性能が発展途上のときは、工夫をしながら使っていました。

 非反転回路は、入力がそのまま増幅されて出力にでます。直流(DC)も扱えます。

 LM358の内部の構成とピン接続を示します。ピン4番がGND(グラウンド)、ピン8番が電源につながります。電源は3~32Vが使えます。消費電流は500μAと少ないです。回路は二組あります。どちらを使っても動作は同じです。電源ピンは共通です。

 非反転回路の接続です。余っている回路は、ノイズなどの影響で不安定な動作になることがあり、対策をすべきですが、今回は何もしません。

 電源部分に0.1uFの積層セラミック・コンデンサを追加しています。5VとGND間につなぎます。デカップリング・コンデンサという呼び方をします。外部からのノイズをここで防ぐ役目と、回路自体からのノイズをほかの回路へ電源を通して出さない役目をします。

 この回路の増幅率Avは、

  Av = 1 + ( R2 /R1 )

です。10倍の増幅をするには、R1に1kΩを使うとR2は9kΩになります。9kΩがないので、10kΩを代わりに使っています。もちろん、増幅率が変わりますが、あとで対応します。

抵抗にも誤差がある

 増幅度を決める二つの抵抗は、表記の値に対して金属皮膜では1%の誤差があります。カーボン抵抗なら5%の誤差があります。この誤差は、10ビットA-DコンバータMCP3008にとって少なからず影響があります。12ビット以上のA-Dコンバータなら、無視できないでしょう。

 テスタで測りましょう。99.4kΩと10.02kΩでした。DMMの4wireで測ると、99.21kΩと10.0224kΩでした。

  • 表示の値で計算 1+10k/1k=11.0倍
  • テスタの値で計算 1+99.4k/10.02k=10.920倍
  • DMMの値で計算 1+99.521k/10.0224k=10.9299倍

 抵抗100本を購入して、二つの抵抗の比率から11.0倍になるような組み合わせをセレクト(選別)する方法があります。

 金属皮膜抵抗には0.1%誤差の製品もあります。高価ですが、選別しなくてもよいかもしれません。

 いずれも量産の場合に必要なことで、一つしか作らないのであれば、このままの抵抗を使って、「10.92倍」という増幅率を計算式に入れればOKです。

OPアンプの増幅率にも誤差がある

(1) R1=1.0024kΩ、R2=9.9921kΩ 計算上の増幅度10.968倍

 このときの測定電圧。入力154.1mV、出力1.680V 実測した増幅度10.902倍

(2) R1=99.131kΩ、R2=994.6kΩ 計算上の増幅度11.033倍

 このときの測定電圧。入力154.3mV、出力1.672V 実測した増幅度10.836倍

 利用する抵抗が2桁違う組み合わせです。OPアンプは理想的な増幅器を目指していますが、入力に電流が流れ込む原因などによって誤差がでます。最近のOPアンプは、そのような誤差はけた違いに少なくなっています。

増幅時の波形と周波数帯域

 発振器を使って1kHzの正弦波をこの増幅器に入れたときの波形です。青色が入力、赤色が出力です。

 オシロスコープPicoScopeを使って周波数特性を測りました。入出力にコンデンサを入れていないので、低域はDCから増幅しますが、測定に時間がかかるので、10Hzからスタートしています。縦軸は増幅率です。単位はdB(デシベル)が使われます。周波数が高くなるとだんだん増幅できなくなるのが普通です。

 低い周波数領域では増幅率はほぼ一定ですが、高域は約1kHzが-3dB下がっています。最新のOPアンプは、もっと高い周波数まで帯域が伸びています。-3dBの周波数をもって、増幅器の能力の限界とするのが一般的です。

実際に使う

 LM35DZという温度センサがあります。出力はアナログで温度と出力は比例関係にあります。20℃のとき200mVの電圧が出力されます。

 小信号用トランジスタと同じ外形をしていて、文字の面を上にして、左からV+、Vout、GNDです。V+の電源は4~20Vなので、ラズパイの5Vをつなぎました。VoutはOPアンプ3番につなぎます。

 functionノードの内容は次のとおりです。

msg.payload = (msg.payload/1024)*2.49513
msg.payload = msg.payload/10.9
msg.payload = ("室温="+Math.round(msg.payload*100000)/1000+"℃");
return msg;

 Deployし、timestampのボタンをクリックして実行します。debugエリアに実行結果が出力されています。

 27℃は、LM35の出力が270mV、10倍増幅しているので基準電圧を超えてしまっています。

 対策は、増幅率を下げることです。R2を約半分の686kΩに変更しました。増幅率は7.92になります。変換式を修正します。

msg.payload = (msg.payload/1024)*2.49513
msg.payload = msg.payload/7.92
msg.payload = ("室温="+Math.round(msg.payload*100000)/1000+"℃");
return msg;

バックグラウンド

DMMの4wire;テスタのリード線は2本ありますが、リード線自体の抵抗、テスタ本体とはバナナ・プラグで接続しているので、接触抵抗があります。これらの誤差となる要因を4本のリード線で取り除いて測れるのが、据え置き型DMMの多くに搭載されている4wireです。