公開日:2019/06/29
title.png

6th Season


#6-4 オペアンプを使って増幅回路を作る

 いよいよ、オペアンプLM358を使って、アナログ信号の増幅回路を作ってみます。過去2回の準備について、おさらいしてから先に進んでください。

  「#6-1 オペアンプ、の、前に香辛料
  「#6-2 オペアンプにspice

オペアンプの特性確認

 まず、「#6-2 オペアンプにspice」で取り上げた、ボルテージフォロアのシミュレーションにおいて、入力信号の振幅を少し大きくとってみます。ボルテージフォロアのシミュレーション回路図が以下でした。

ar62_schem2.png

 上回路図では2.5V±1Vとなっている、電圧信号源V2の振幅を2.5V±2Vに変更します。変更後のシミュレーション結果が以下です。

ar64_vfolow.png

 オペアンプに供給した電源が5V単電源ですので、出力が5V以上に上がらないのは予想の範囲内ですが、電源電圧手前の4V付近で頭打ちとなってしまうのは、解せません。
 念のため、LM358のシミュレーションモデルを、他社のモデルに変更しても、状況は変わりませんでした。それどころか、モデル次第ではもっと低い電圧で頭打ちとなります。

 回路シミュレーションの結果って、少なくとも、TYP条件ならそんなに外れないイメージなので、実回路でもそうなのでしょう。確かめてみます。
 「#5-10 電源電圧を計測する」と同様にして、昇圧電源モジュールと抵抗分圧回路を使って、所望の電圧を作り、ボルテージフォロアのVb点に入力します。この時の出力VoをArduinoのアナログ端子で電圧測定すると、Vb-Vo特性をプロットすることができます。

※今回は、5Vまで入力するため、抵抗分圧比を5kΩ:1kΩとしました。昇圧電源モジュールから30Vを出力すると、5kΩ:1kΩで分圧されて、5V(=30V/6)を印加できます。

 Arduinoでは、「#5-10 電源電圧を計測する」の時に作成したプログラム(meas_vcc.ino)を実行しておきます。

  実験サンプル:【 】内はシリアルモニタからの送信データ
  【vref,0】 …… 測定する電圧が0〜5[V]のレンジなので、Vref=AVcc(=Vcc=5V)を選択
  OK: Vref=5000[mV] DEFAULT (AVcc)

  【rdiv,0,1000】 …… 抵抗分圧比を設定
  OK: rdiv 0:1000 [ohm]

  【meas,-1】 …… 測定開始
  Vcc=820[mV] (168=820[mV]), Vref=5000[mV]
  Vcc=820[mV] (168=820[mV]), Vref=5000[mV]
    :

※今回は、アナログ端子A0の電圧を直接測定(直読み)したいので、ここで設定する抵抗分圧比は、0:1,000に偽装しています。実際に分圧に使った5kΩ:1kΩを設定しません。

 下図が、その測定結果です。

ar64_vbvo.png

 横軸にVbへ印可した電圧値、縦軸にVoの測定電圧値をプロットしています。シミュレーション結果と同様に、約3.9V辺りで頭打ちになっていることがわかりました。

※リファレンス電圧Vref=AVcc=Vccなので、測定値はVcc、すなわちPCから給電されるUSBの電圧値からの相対値です。たぶん、Vcc=5.000V、という訳には行かないはずなので、上図(グラフ)の測定値にも、その分の測定誤差が含まれていることに留意してください。本来なら、校正されたマルチメータやテスタなどで測定すべきです。

 どうやら、LM358と言う素子は、こういう素子(電源電圧−1V程度までしか出力できない)なのですね。違う型番のオペアンプだと、出力降下分がまた違った値となるのかも知れませんが……。
 こんな事も、シミュレーションで動作を確認できたから、「シミュレーション通りだったね」で、済みますが、何も知らない状態で、いきなり実回路を使ってデバッグしていたら、「出力が4Vより上に上がらないぞぉ〜!」と、あたふたしていたに違いありません。
 これが回路シミュレータ(LTspice)を導入した最大の利点です。

※後で調べたところ、供給電源電圧範囲の入出力信号を扱うことのできる増幅回路のことを、Rail-To-Railと言うのだそう。LM358は、Rail-To-Railアンプではないみたいですね。それらしきスペックをデータシートで漁っても、中々それらしきスペックが見当たりません。ON Semiconductor社のLM358データシートに「Voh=3.3V (MIN) @Vcc=5V」がありました。実力では3.9V辺りまで上がっていますが、スペックでは3.3Vまでしか上がらないということでしょうか??

サウンドセンサ再び

 ここで、サウンドセンサに再び(いや、三度目か?)登場してもらいます。

ar37_sound.jpg

 「#4-4 デジタルオシロスコープ」で実験した通り、サウンドセンサのアナログ出力AOは、マイクが拾った音声信号が2.5Vセンタで出力されています。「#4-4 デジタルオシロスコープ」では、その出力をAD変換して取り込み、WAVファイルに加工して、実際に音声を確認しました。
 ただし、マイクが拾った音声信号は非常に小さく、マイクのそばで相当大きな音(手拍子を叩くなど)を出さないと、聞き取れないような小さな信号でした。このため、WAVファイル生成時には、AD変換後のデジタル値を増幅して、WAVファイルを生成していました。
 このようなデジタル値の増幅では、そもそも、1LSB(ATmega328の10ビットAD変換器@5Vでは、1LSB=5V/1,024≒4.9mV)を下回る信号は増幅できません。

 そこで今回は、マイクのアナログ出力を、オペアンプで作った反転増幅回路に通し、アナログ信号の状態で増幅してみたいと思います。
 マイクの出力は、2.5Vセンタの直流波形でした(「#4-4 デジタルオシロスコープ」)ので、「#6-2 オペアンプにspice」でシミュレーションして、動作確認済みの反転増幅回路を使います。「#4-4 デジタルオシロスコープ」では、WAVファイルに出力して、確認しましたが、帯域が狭まる上に、極短時間しか記録できないので、今回は、増幅した信号をそのまま、イヤホンに出力して直接聞いてみることにします。
 もちろん、増幅後のアナログ信号をArduinoに入力してAD変換してもOKです。WAVファイルに保存するときは、「#4-4 デジタルオシロスコープ」と同じスクリプト(osc2wav.olv)が使用できるはずです。

 以下の様な回路図になります。

ar64_schem.png

Arduinoは使わない

 この実験には、Arduinoは使いません。増幅した信号をDCカットだけして、そのままイヤホンに出力すれば良いだけです。勿論、この先の応用としては、「#4-4 デジタルオシロスコープ」でやったのと同じ方法で、増幅後の信号をアナログ端子に接続し、キャプチャするなり処理するなりと言うことが考えられます。

ar64_expr.jpg

 結局Arduinoが映り込んでますネ……。えっと、5Vの電源電圧をもらうのに使いました。5Vの電源さえ確保できるなら、Arduinoを使わなくても、全然OKです。
 170穴ミニブレッドボードを2個使い、一方に反転増幅回路(写真左)、他方にイヤホンへの出力回路(写真右)を構築しています。イヤホン出力ボードの方には、「#5-8 MMLで音楽を奏でる」等で使う、音階演奏回路が載っているので、今回の実験に必要ない回路が見えていますが、無視してください(載っているだけで、接続されていません)。
 ちょっと進化したのは、ジャンクから取り外したミニジャックコネクタを使って、イヤホンのミニジャックとコンタクトしているところです。

 実際にイヤホンとサウンドセンサ(コンデンサマイク)を使って、音を聞いてみました。以下雑感です。

 こんなにノイズが乗るものなんだ。やっぱしアナログ回路を舐め過ぎてたなぁ……。オペアンプを使うと、もっと「簡単に増幅回路等を作れる」と、思ってた。大いに反省m(1__)m。

 やっぱりデジタル、好き❤

反転増幅回路で良いの?

 そもそも、反転増幅回路で良いの?と、言う疑問が浮かびませんか?反転して増幅されるので、音声波形が上下逆さまになって増幅されてしまいます。もし、論理信号(真理値等)だったら、反転すると意味が変わってしまいますが……?

 結論から先に言うと、音声波形なら、上下逆さまになっても、問題ありません。

 以下の波形をご覧ください。

ar64_sin440.png

 2つの正弦波(sin_a、sin_b)が見えていますが、それぞれ、上下が反転している波形に見えます。しかし、いずれも440Hzの正弦波ですので、それぞれを別々に音として聞いた場合、どちらの波形も、調律などに使われる「ラ」の音に聞こえます。
 上図の様に見てしまうと、「上下が反転している」と、見えてしまいますが、横軸が時間軸であることを考えると、「鳴り始めの時間が、周期1/440Hzの1/2ずれていた」だけのことで、音としての440Hzラ音に変わりはありません。

 ミキシング(音声信号の加算、重ね合わせ)などに於いては、正に上図の様に、同じ周波数の音が1/2波長ずれて同時に存在すると、山と谷、谷と山が重なることで打ち消し合って、音が消えてしまうことが起こり得ます。このような状態が起きると、特定の周波数帯が消えてしまうことによって、音が薄っぺらく聞こえてしまうそうです。
 同じ周波数の音が打ち消し合って消えてしまうことを防ぐため、ミキサという装置には、敢えて位相を反転する機能が備わっています。打ち消し合っていた音も、位相を反転してミキシングすることで、今度は逆に、山と山、谷と谷が重なることで互いに強め合い、力強い音になるのだそうです。

 ミキシングする場合には、位相が反転するかどうか?は重要なファクタとなりますが、今回の様に単体の音声信号を増幅する場合においては、位相が反転しても、つまり、反転増幅回路を使っても、問題ないことをご理解いただけたでしょうか?


 漸く、オペアンプを使って、アナログ信号の増幅回路を作成することができました。アナログ回路であることを過小評価して、「オペアンプなら簡単に使える」と、高をくくっていたのがいけないのですが、回路シミュレーション(LTspice)を駆使することによって、何とかスタート地点に立つことができた様です。


btn_arduino.png

btn_prev.png btn_next.png

home