オペアンプを使うと手軽に電圧で制御できる定電流回路を作ることができます。原理は簡単ですが、使い方によっては大きな突入電流により素子が破壊されたり回路が不安定になることがあります。この記事ではどんな場合に突入電流が流れるかを見て、その対策を考えてみます。
オペアンプを使ったLED電流制御―ラダー抵抗型D/A変換の結果でLED電流を制御する by uchan | elchika では DAC の出力電圧に比例する電流を LED に流す回路を紹介していますが、電流制御の部分はオペアンプと電流検出抵抗だけでできており非常にシンプルです。
本記事では上図の回路を前提として突入電流の議論を進めます。これは筆者が今作っているニッケル水素蓄電池(Ni-MH)の充電回路から中核をなす定電流回路を抜き出した図です。J1 に充電池を接続すると、MOSFET を経由して充電されます。充電電流を R1 で検出し、オペアンプで一定になるように制御します。R1 は 1Ω なので、CTRL に X(V) を加えると充電電流は X(A) となります。
オペアンプは + 端子と − 端子の電位差を増幅する素子です。CTRL の電圧より R1 の電圧が小さい場合、− 端子の電位が + 端子より低くなります。その結果、オペアンプの出力電圧が高くなり、MOSFET のドレイン電流が増えます。CTRL の電圧より R1 の電圧が大きい場合は逆の作用となります。結果的に CTRL の電圧と R1 の電圧が等しくなったところで安定します。
突入電流が発生するのはオペアンプ出力が最大に振り切れ、MOSFET が最大限に導通している場合です。J1 が開放のまま CTRL に微妙に電圧が出てしまっていたり、入力オフセット電圧が正だったりするとそうなります。
先の回路で電池を J1 に接続しない場合、いくらオペアンプの出力電圧が上がっても MOSFET のドレイン電流はまったく流れません。このとき R1 の電圧は 0V ですから、CTRL を 0V とすれば理想的にはオペアンプの出力も 0V になるはずです。
ただ、現実には CTRL をきっちり 0V にするのが難しかったり、仮にきっちり 0V にできたとしてもオペアンプの入力オフセット電圧の影響で +/− 端子間に電位差が発生します。そのため、現実にはオペアンプ出力が最小か最大の電圧に振り切れた状態になります。PIC16F1786 内蔵のオペアンプの場合、最小は 0V、最大は VDD 付近になります。
このとき J1 に電池を繋ぐか、単に J1 をショートさせると一気に電流が流れます。これを本記事では突入電流と呼んでいます。
図はオペアンプ出力の変化をオシロスコープで観察したものです。チャンネルはそれぞれ次の通りです。
チャンネル | 測定点 |
---|---|
Ch 1 | 電源電圧 VDD |
Ch 2 | オペアンプ出力 |
Ch 3 | R1 |
Ch3 のグラフを見ると J1 をショートした時点がよく分かります。左端から 2 目盛りを過ぎたあたりで電圧が急上昇している時点です。電圧は 2V を少し超えたところで安定しており、電流は約 2A だと分かります。
R1 に電圧が発生することでオペアンプの − 端子の電位が上昇します。ほぼ 0V に設定されている CTRL の電位より高くなるため、オペアンプ出力は下降を始めます。先の図を見ると、ショートの約 2μs 後にオペアンプ出力(Ch2)が下降を始め、約 3μs 後に下がりきる様子が分かります。オペアンプが最大に振り切れたところから MOSFET が遮断するところまで下がる間、2A もの大きな電流が流れ続けます。
オペアンプ出力が MOSFET が遮断するまで下がるのにかかる時間は、オペアンプ出力がどのくらい速く変化できるかに依存します。通常、それはスルーレートと呼ばれるパラメータで表されます。スルーレートはデータシートに書いてあり、PIC16F1786 内蔵のオペアンプでは約 3(V/μs) です。先の図ではオペアンプ出力が下降し始めてから 0.7μs で約 3V 下がっており、かねデータシート通りです。
ただし、ショートしてから下降を始めるまでに 2μs 程度かかっており、スルーレートだけでは語れないことも分かります。出力が振り切れてしまっていると回復までに時間がかかるということかもしれません。
2A もの電流がいきなり流れることで次のような影響が出ます。
先のオシロスコープ画面をよく見ると、J1 のショート直後に電源電圧(Ch1)が揺れているのが分かると思います。実はこれでも電源ラインに 1000μF の電解コンデンサを挿入していて、かなりマシになっているのです。電解コンデンサを付けない場合の観測結果を示します。
実験するたびに波形が変わるので、これは単なる一例ですが、こんな感じでとても乱れます。実際の回路は CTRL 電圧を PIC16F1786 の DAC により生成しているのですが、電源電圧が変動しすぎてほぼ 100% の確率で PIC が落ち、再起動してしまうレベルです。再起動というより、ショートしてる間はずっと停止しているようにもみえます。しかも、その間「ジー」というような異音が聞こえるくらいにはマズい状態になっています。
※登場する対策は uchan の独自の見解ですので、より良い対策があるかもしれません。もしご存じであれば是非教えてください!(コメント欄や Twitter メンションなどでお願いします!)
原因はオペアンプの働きにより、J1 が解放されているときに MOSFET が全開になっていることです。今回利用しているオペアンプは PIC 内蔵のオペアンプなので、ソフトウェアから有効・無効を設定できます。無効化したときにオペアンプ出力が 0V になり、有効化したら 0V から徐々に上がるのであれば、J1 がショートしていても CTRL で設定した電流以上は流れません。
ということで実験してみました(上図)。PIC 内蔵オペアンプを無効にした状態で J1 をショートさせ、ショートしている間にオペアンプを有効にしました。CTRL 電圧は 0V 付近にしてあります。するとオペアンプ出力は 0V から上昇し始め、1.9V 付近で安定しました。これなら突入電流は全く流れません。
普段はオペアンプを無効にしておき、電池の接続を検出するために一瞬だけ有効にする、という処理にすれば、高い確率でショートによる突入電流を防げます。運悪く、一瞬の有効期間中にショート し始めた 場合は突入電流が発生してしまいますが。ランダムに J1 のショート・開放を続けるとして、オペアンプを有効にする期間を 1s あたり 1ms とすれば、突入電流が発生する確率は 0.1% になります。実際には 1ms より短くても検出できるでしょうから、より確率を下げられます。
上でちらっと書きましたが、ハードウェアによる対策としてはある程度の容量の電解コンデンサを電源ラインに取り付けるのが有効です。実験では 10μF では再起動が収まりませんでしたが、100μF や 1000μF なら PIC がかなり安定するようになりました。
コンデンサの取り付け実験では 5cm くらいの導線 2 本でコンデンサを取り付けたので、導線によるインピーダンスが少しあると思います。本来はできるだけ MOSFET の近い位置に取り付けられるよう、基板のパターンを設計すべきです。そうすればより波形が安定すると思います。
今回の実験では電源として 1.5m のケーブルの AC アダプタ GF24-US0540 を使いました。【平行往復導線の自己インダクタンス】『公式』と『導出方法』について! を参考にしてケーブルのインダクタンスを求めると約 1.5μH です。充電回路をケーブルと R1 だけからなる単純な LR 直列回路として考えたとき、時定数は $\tau=L/R=1.5\mathrm{\,\mu s}$ です。したがって、ショート後 1.5μs(あるいはもっと長い間)は電源から電流がほとんど供給されないと考えられます。その間を電解コンデンサに貯まった電気で食いつなぐ必要があります。突入電流 2A が 3μs 続くとすると電荷は Q=6μC です1。コンデンサの容量を C とすると電圧と電荷の関係は Q=CV ですから、10μF のコンデンサであれば 6μC を失うと電圧が 0.6V 下がる計算です。実際には発振するので、単純計算で求めた以上に大容量のコンデンサを付けないと安定しないと思います。
電解コンデンサを取り付けない場合の電源電圧の変化を見てみました。
電源電圧(Ch1)が突入電流(Ch3)に呼応して激しく揺れていることが分かります。電源電圧が大きく下がるたびに、少し時間をおいてオペアンプ出力(Ch2)が 0V になっていることが分かります。そして、またしばらくするとオペアンプ出力が高い電圧となり、突入電流が流れ出す、というのを繰り返します。電源電圧が下がったときに PIC が再起動されるのに関連して引き起こされているような気がしますが、詳しくは分かりません。
オペアンプを使った電流制御回路は、電流路が開放状態にあるときにオペアンプ出力が最大となり、MOSFET が全開となることがあります。その状態で電流路をいきなり導通させることで突入電流が流れます。その対策として、普段はオペアンプの電源を落としておいたり、電源ラインに大きめの電解コンデンサを取り付けておくなどの方法を紹介しました。