「反転増幅回路」に続く、オペアンプを用いた基本的な回路をまとめます。両電源オペアンプを二つ内蔵した NJM4558 を利用します。以下の回路ではすべて、乾電池 9V 形二つをオペアンプの電源として利用しています。
非反転増幅回路
非反転入力端子 (+) への入力は 1.5V です。出力電圧の反転入力端子 (-) へのフィードバックによって仮想短絡した状態が発生するため、反転入力端子の電圧も 1.5V になります。GND に接地された 10kΩ 抵抗における電圧降下は 1.5V です。入力端子のインピーダンスは非常に高いため、電流はほぼ流れ込みません。そのため、33kΩ 抵抗における電圧降下は 3.3 倍の 4.95V です。したがって、出力電圧は 1.5 + 4.95 = 6.45 V
程度になります。非反転増幅回路の一般的な形式で記述すると、入力電圧が 1 + 33/10 = 4.3
倍になったことになります。10kΩ を 1.0kΩ に、33kΩ を 2.2kΩ に変更すると、出力電圧は 4.9V となりました。これは 1.5 [V] * (1 + 2.2/1.0) = 4.8 [V]
という計算式とほぼ一致します。反転増幅回路の場合と異なり 1 未満の増幅はできません。入力と出力の電圧は正負が反転せず、今回の場合、電流は出力端子から流れ出しています。
加算回路
GND に接地された非反転入力端子 (+) との仮想短絡によって、反転入力端子 (-) の電圧は 0V になります。入力端子には電流が流れ込みませんので、ON になったスイッチに接続された 10kΩ 抵抗を流れる電流がそのままオペアンプ側の 10kΩ 抵抗に流れて出力端子に流れ込むことになります。そのため、ON の状態にあるスイッチの個数分だけ入力 1.5V が加算されて正負が逆転したものが出力電圧になります。以下の回路では 0V, -1.5V, -3.0V, -4.5V のいずれかが出力になります。
減算回路
非反転入力端子 (+) 側の入力を Va (= 1.5V) とします。以下の回路では 10kΩ 抵抗による GND との分圧によって非反転入力端子 (+) の電圧は Va/2 となります。出力電圧の反転入力端子 (-) へのフィードバックによって仮想短絡した状態が発生するため、反転入力端子 (-) の電圧も Va/2 となります。反転入力端子 (-) 側の入力電圧を Vb (= 3.0V) とします。入力端子には電流が流れ込みませんので、オペアンプの出力端子の電圧は、入力 Vb から 10kΩ 抵抗二つにおいて同じ大きさの電圧降下 Vb - Va/2
が発生した結果となりますので Vb - (Vb - Va/2) - (Vb - Va/2) = Va - Vb
です。入力値二つを減算した結果となっています。具体的な数値としては 1.5 - 3.0 = -1.5 V
となります。
微分回路
GND に接地された非反転入力端子 (+) との仮想短絡によって、反転入力端子 (-) の電圧は 0V になります。入力を 1.5V 電源に接続すると 0.1μF コンデンサの充電が開始されます。定常状態ではコンデンサで 1.5V の電圧降下が発生し、33kΩ 抵抗には電流が流れないため出力電圧は 0V となります。このとき、トグルスイッチを 1.5V 電源から 1kΩ 抵抗に切り換えるとコンデンサの放電によって 33kΩ 抵抗に電流が流れます。放電が完了するまでの間、出力電圧は正の値となります。10kΩ 抵抗は、高周波の入力がなされてコンデンサのインピーダンスが小さくなった場合に無限大に増幅されることを避けるためのものです。
以下は、オシロスコープを用いて観測した出力電圧の波形です。SNGL モードで trig 設定を行いました。
1.5V から 1kΩ GND に切り換えたときの出力電圧の波形
ところで、波形を観測した CR 回路の抵抗の両端を出力とすると、オペアンプなしでも微分回路になっていますが、オペアンプを利用すると出力側の回路の影響を受けずに微分演算できるという利点があります。後述のバッファ回路のように入力と出力の分離ができます。
積分回路
GND に接地された非反転入力端子 (+) との仮想短絡によって、反転入力端子 (-) の電圧は 0V になります。入力を 1.5V 電源に接続すると 0.1μF コンデンサの充電が開始されます。定常状態ではコンデンサと並列に接続された33kΩ 抵抗における 1.5 [V] * 33/10 = 4.95 [V]
の電圧降下がコンデンサの両端で発生します。このとき、トグルスイッチを 1.5V 電源から 1kΩ 抵抗に切り換えるとコンデンサの放電が開始されます。放電が完了するまでの間、出力電圧は負の値となります。33kΩ 抵抗は、今回のように低周波の入力がなされてコンデンサのインピーダンスが大きくなった場合に無限大に増幅されることを避けるためのものです。コンデンサのみの場合 DC オフセットとよばれる電圧が出力に反映されてしまいます。
以下は、オシロスコープを用いて観測した出力電圧の波形です。SNGL モードで trig 設定を行いました。
GND から 1.5 に切り換えた時の出力電圧の波形
1.5V から GND に切り換えた時の出力電圧の波形
ところで、波形を観測した CR 回路のコンデンサの両端を出力とすると、オペアンプなしでも積分回路になっていますが、オペアンプを利用すると出力側の回路の影響を受けずに積分演算できるという利点があります。後述のバッファ回路のように入力と出力の分離ができます。
比較回路
オペアンプは入力端子の電圧を比較して結果を出力します。
非反転入力端子 (+) の電圧が反転入力端子 (-) の電圧よりも大きいと、出力端子の電圧は理想的には正の無限大となります。実際には、両電源オペアンプの場合、電源端子 V+ の電圧より 1V 程度小さい値になります。逆に、反転入力端子 (-) の電圧が非反転入力端子 (+) の電圧よりも大きいと、出力端子の電圧は理想的には負の無限大となります。実際には、両電源オペアンプの場合、電源端子 V- の電圧より 1V 程度大きい値になります。
そのため、オペアンプはフィードバック回路を組まずにそのまま比較回路として利用できます。フィードバックによる電圧値の制御を行いませんので、仮想短絡は発生しません。以下の回路では反転入力端子 (-) の電圧は 1.5V で一定です。非反転入力端子 (+) の電圧が 3.0V になると 8.0V 程度の出力になります。非反転入力端子 (+) の電圧が GND 0V になると -8.0V 程度の出力になります。入力端子二つの電圧値が近いとチャタリングが発生して出力が 8.0V と -8.0V を繰り返すように振動するため、用途によっては注意が必要です。
バッファ回路
非反転入力端子 (+) への入力は 1.5V です。出力電圧の反転入力端子 (-) へのフィードバックによって仮想短絡した状態が発生するため、反転入力端子 (-) の電圧も 1.5V になります。反転入力端子 (-) と出力端子は接続されていますので、出力電圧も 1.5V になります。オペアンプの入力端子のインピーダンスは非常に高く、逆に出力端子のインピーダンスは非常に低くなっています。そのため、バッファ回路は入力と同じ電圧を出力しつつ、バッファリングされているかのように大きな電流を取り出すことを可能にします。大きな電流を取り出せない回路から電圧だけを伝えたい場合に利用します。
関連記事
- 輪郭に関連した画像処理 (OpenCV3 C++)cv::Canny などで検出したエッジをもとに cv::findContours で輪郭を計算できます。輪郭に関連した処理の例を記載します。 輪郭の描画 #include <opencv2/opencv.hpp> #in
- Qt for Python (PySide2) の基本的な使い方QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?A: The nam...
- OpenGL を Python3 から利用するための環境設定および簡単なサンプルコード (Linux)コンピュータグラフィックスのレンダリングライブラリの一つである OpenGL を Python3 から利用するための Linux 環境を準備して、設定例およびサンプルコードを記載します。特にここでは Debian9 を利用します。 Getting Started [Language bindings / Python](ht
- 立方体を回転させるサンプル (OpenGL、Python)立方体を二つ配置して回転させてみます。ライブラリを用いずに OpenGL API を直接利用します。 wget https://gist.githubusercontent.com/harubot/df886254396a449038ee542ed317f7b3/raw/92216e02d0210b9d81770562ddf7741339f1b286/opengl-setup2.py DISPLA...
- Open Dynamics Engine によるロボットの自己位置の推定 (Python)ロボットアプリケーションを開発する際に、ロボットの自己位置を推定する必要がある場合を考えます。ここでは Open Dynamics Engine を Python から利用した場合について、自己位置推定のサンプルを記載します。自己位置推定と環境の地図作成を同時に行う場合を SLAM (Simultaneous Localization and Mapping) とよびます。 検証に用いる車輪型ロボ...