Arduino Uno R4のDAC出力を使って、アナログ信号を反転させたい。そんなシンプルな目的でLM358Pを使った反転増幅回路を組んだところ、思いがけない落とし穴にハマりました。この記事では、単電源オペアンプで反転増幅を構成する際の注意点と、実際に動作させるまでの試行錯誤をご紹介します。
おそらくこの記事を読んでくれているあなたは、初めてLM358を使って反転増幅回路を組もうとしているのではないでしょうか?きっと電源も一般的なDC5Vは用意できても、-5Vの両電源と呼ばれる電源は用意できないかもしれないです。この-5Vが今回ハマった原因です。
わたしは普段オペアンプは単体で使ったことがなく、完全素人の初心者であることをご承知おき下さい。今回の情報は、おそらくオペアンプの知識がある人からみると、そんなの当たり前じゃない?となるかもです。
単電源の場合、なぜLM358から信号が出ないか?
単電源でも信号を出す方法が理解できる。
本ブログはアフィリエイトを用いた広告を掲載している場合があります。
やりたかったこと【目的:ArduinoのDAC出力を反転させたい】
Arduino Uno R4にはDAC出力(A0)があり、2V±1Vの正弦波などを生成できます。この正弦波をA相とすると、このA相と完全に反転した −A 相を作り、差動信号を作る目的でオペアンプでできないかやり始めました。
Arduinoにも内蔵のオペアンプ[OPAMP]でも試しましたが、反転構成がうまくいかず、最終的に外付けの LM358P を使うことにしました。

上記のようなSinのアナログ電圧の出力を反転させようとしました。エンコーダや、高速通信で使用する差動信号を作るというイメージです。差動信号って何?と思ったとしてもいったんスルーで大丈夫です。とりあえずこの出力波形を反転した信号が必要でした。
Arduinoの内臓オペアンプは、反転はできなかったですが、非反転増幅はできていましたので、オペアンプの機能としては問題なかったようです。この内容は別の機会にご紹介する予定です。内臓オペアンプって使えたら便利ですからね。
オペアンプLM358を使った反転増幅回路の基本構成
まずはオペアンプの反転増幅回路の回路図をご覧ください。

反転増幅回路は、オペアンプの −入力に信号を入れ、出力から −入力へフィードバック抵抗を接続することで、入力信号を反転して出力します。ゲインは以下の式で決まります。
$$ V_{out} = \frac{-R_f}{R_{in}} \times V_{in}$$
今回はゲイン −1を目指し、Rin = Rf = 10kΩで構成しました。
【何が起きたか?】出力信号が出ない…出力が反転しない
一般的な反転増幅回路の回路図をご紹介しましたが、この回路図に沿って回路を組んでみました。
しかし、これから紹介する回路では、出力が反転せず、A0と同位相の波形が出てきました。しかも振幅は半分程度。さらに、出力が0V付近で潰れてしまう現象も発生。原因が分からず、抵抗値や配線を何度も見直しました。
でも配線や抵抗は先ほど紹介した内容とあっているんですよね…オペアンプをそんなに使ったことのないわたしや、あなたはおそらくここで数時間消費することになると思います。実際わたしは、この謎に気づくまでに3時間くらい調べたり試行錯誤しました。
家で一人でやっていたので、当然わかる人に聞くこともできず、調べながらの作業だったわけですが、配線やオペアンプの使い方を紹介しているネット情報など、どこを見ても間違っているようには見えないし…かなりタフな闘いになりました。
検証に使ったパルスを出すスケッチ
const int dacPin = A0; // DAC出力ピン(UNO R4ではA0固定)
void setup() {
analogWriteResolution(12);
}
void loop() {
analogWrite(dacPin,2048);
delayMicroseconds(100); // サンプル間隔
analogWrite(dacPin,1024);
delayMicroseconds(100); // サンプル間隔
}A0ピンにDACがつながっているため、素直にそこを使うことにしました。波形としては、100μsごとに反転する矩形波が出力されます。特にひねりもなく、永遠と矩形波を出すスケッチです。
LM358Pのピン配置と接続
さて、一般的な回路図を理解したところで、実体配線についてみていきましょう。今回は、LM358というオペアンプを使って、どのピンに何を接続すればいいのか見ていきましょう。


【おそらく普通につないだらこうなる】配線方法※注意※このままつないでも信号は出ません
今回使用したLM358は、DIP-8パッケージのTI社製のLM358Pです。切り欠きを左に置いたときのピン配置は以下の写真と表の通りです。この接続は、信号が出ない配線です。

| ピン番号 | 機能 | 接続 |
|---|---|---|
| 1 | 出力 | オシロスコープへ、Rfへ |
| 2 | −入力 | Rin ← DAC(A0)出力、Rf ← Pin 1 |
| 3 | +入力 | GND(仮想接地) |
| 4 | GND | ArduinoのGND |
| 8 | Vcc | Arduinoの5V |
実体配線はこのようになります。繰り返しになりますが、Arduinoはあくまで5V電源とSin波を出す役割で、Arduino内臓のオペアンプは今回は不使用です。
【対策後】信号が出る配線方法※この配線なら信号が出ます
それでは、ここからは正しく信号が出る配線をご紹介します。この配線にすると、0Vを中心とするのではなく、5Vの半分の2.5Vを中心として電圧が上下します。

| ピン番号 | 機能 | 接続 |
|---|---|---|
| 1 | 出力 | オシロスコープへ、Rfへ |
| 2 | −入力 | Rin ← DAC(A0)出力、Rf ← Pin 1 |
| 3 | +入力 | 分圧してつくった+2.5V |
| 4 | GND | ArduinoのGND |
| 8 | Vcc | Arduinoの5V |
【原因解明】それでも反転しない…原因はバイアスだった
最大の落とし穴は3番ピンの接続先でした。3番ピン(+入力)をGNDに接続していたことが原因で、反転出力が0Vより下に行けず、波形が潰れていたのです。

データシートや、ほかの情報を見るとGNDにつなぐと書いてあったので、疑いもなくArduinoのGNDとつないでました。これが間違いでした。具体的には、LM358の3番pinも4番pinもArduinoのGNDにつなぐと今回のように出力が0Vで何も出ていない状態になります。
今回の使い方では、LM358Pは単電源(0V〜5V)で動作させようとしていました。0V~5Vの中で入力も出力も収まるようにしようとすると、そもそも反転させると出力できないのです。このことに気づくのが遅かった…
もし単電源の0V~5Vで反転増幅させるときに、3番pinの+をGNDにつないだ場合、出力の理想的な形は-5V~0Vになります。ただ、そんな電圧は回路上にないので、0Vで信号が出ていないように見えたというわけです。もし理想的な-5Vが手に入るなら、4番pinのGNDにつなげてあげれば正しく動作します。
【解決策1】+入力にバイアスをかける
理論は分かったところで、そうは言っても-5Vが手元にない状態でも、反転信号が欲しいですよね?厳密に反転させるなら、+5V入力なら-5V、+12Vなら-12Vと両電源を用意するのが間違いないのですが、今回はとりあえず単電源で反転した信号を出力することに集中します。
いきなり解決方法ですが、3番ピン(+入力)をArduinoのGNDではなく2.5Vにつなぎました。具体的には、+5Vに10kΩの抵抗を2つ繋げて分圧ししました。分圧してできた2.5Vを3番ピンにつなぎました。これにより、オペアンプの仮想接地が2.5Vになり、反転出力が2.5Vを中心に上下に振れるようになったのです。上下に電圧が振れるようになったことが重要なポイントです。

言葉だけだと難しいので図にするとこのような感じです。もともと0Vを中心として、-5V~0V~5Vの領域を使おうとしていたところを、2.5Vを中心とするようにオフセットして0~5Vに収めています。

今回使用した分圧の仕組みについてあまりピンと来ていない人は分圧の記事も確認してみてください。詳しく解説しています。
結果まとめ
- DAC出力:2.5V ± 1V(1.5V〜3.5V)
- LM358出力:2.5V ∓ 1V(3.5V〜1.5V)
とりあえず、0Vを中心とした波形ではないものの、完全な反転波形が得られました。
【解決策2】両電源を使用する。※今回はご紹介のみ
オペアンプでマイナスの電圧を出したいなら、当然それに合った電源を用意する必要があります。具体的には、プラスだけではなく、GNDを挟んだマイナスの電圧が出せる電源です。例えば、3つ端子があって、+5V、GND、-5Vのように電圧が出せるものです。
ACDCコンバータの±電源がついているものを使用する場合
まずは、ACDCコンバータで、プラスもマイナスもどちらも取り出せる製品があります。例えばTDK LamdaのJWTシリーズは±5Vを出力できます。具体的な型式としては、JWT100-525/Aですね。

DC5Vを入れて±5Vの電源を取り出すICを使う場合
ACDCコンバータは何となくイメージがつくかと思いますが、実はDC5Vだけ入れることで±5V出力してくれる便利なICもあります。それがmurataから出ているNMA0505DCというモジュールです。

こちらのモジュールは、DC5Vの入力で、±5Vの出力が可能です。まさに今回のような場面には最適なモジュールですね。電流も±100mA流せる仕様ですので、ちょっとした電子工作であれば十分すぎる性能です。
【まとめ】単電源で反転増幅を使うときの鉄則
今回の実験は、単なる反転増幅の構成にとどまらず、アナログ回路の本質的な制約と工夫の必要性を体感する機会になりました。教科書には載っていないけれど、現場では絶対に必要な知識です。
この気づきは、ArduinoやLM358を使ってアナログ信号処理を始める人にとって、非常に有益な情報になるはずです。検索してもこの内容を詳しく解説している記事はほとんど見当たりません。だからこそ、この記事が誰かの「なるほど!」につながれば嬉しいです。
- 単電源オペアンプでは、出力がGNDより下に行けない。
- +入力(非反転端子)をGNDにすると、反転出力が潰れる。
- +入力にバイアス電圧(例:2.5V)を与えることで、出力の中心電圧を持ち上げられる。
- 中心電圧を持ち上げた状態であれば、単電源でも反転波形が飽和せずに出力できる。
特に勘違いしやすいのが、+入力のピンに条件反射的にGNDをつながないように、ということでしょうか。





