TNJ-006:LDO不安定性を抵抗とコンデンサの並直列変換で考える

TNJ-006:LDO不安定性を抵抗とコンデンサの並直列変換で考える

著者の連絡先情報

石井 聡の写真

石井 聡

 2013年12月4日 公開

はじめに

アナログ・デバイセズの電源関連製品のご紹介のなかで「LDOの不安定性を検討するうえで、抵抗とコンデンサを並直列変換して考えてみると…??」という話題がありました。

このことをSPICEシミュレータ、NI Multisimで見ていきたいと思います。なお単にAC解析で解析するのではありません。NI Multisimに付属しているPost Processorという機能(この機能はかなり便利です!)を使って、解析していきたいと思います。

なおこの技術ノートはPost Processor機能を用いてみることが趣旨ですが、一部の計算式であればAC解析の中で直接、計算処理を指定できますので、そちらも活用いただければと思います。

 

LDO設計で注意が必要なこと

不安定領域のあるLDOを用いた電源回路設計では、バイパス・コンデンサにセラミック・コンデンサだけを用いた場合、不安定動作に注意が必要です。LDOが異常発振を引き起こしてしまうことがあるからです。

 

図1. ここで考えてみたい回路(負荷抵抗は表示していません)


自分の設計は並列に小容量のコンデンサを接続していた

自分のこれまでのLDOを用いた電源回路設計経験では、図1のように大きめの容量値の電源コンデンサC1には直列に抵抗R1を入れて、それと並列に小容量のコンデンサC2(100pF~1000pF)を複数つないで設計していました。これはアプリケーションが「動作周波数が高いシステム」であったために、このような小容量だったのでした…。

 

LDOによっては動作が不安定になることがある

LDOの種類にもよりけりですが、周波数が高い領域ではLDOの負荷となる容量により、位相回転が起きて、LDOが不安定になることがあります。そのため「大きめの容量値の電源コンデンサには直列に抵抗を入れて」、LDOの動作を安定化させる必要があります。LDOが不安定になると、異常発振を引き起こしてしまいます。

小容量のコンデンサには抵抗は入れていなかったが

小容量のコンデンサには、直列に抵抗を入れてはいませんでした。図1のように直列に挿入した抵抗R1(C1の容量が大きいので高い周波数ではC1はショートになる)と負荷回路の抵抗分、これとC2とでR//Cの並列回路になるので、その抵抗分をLDOのループが切れる周波数あたりで、R-Cの直列回路として並直列変換して考えてれば「まあ、大丈夫かなあ…」という感じで設計していました。このくらいの考察レベルでも、トラブルは発生なかったので、よかったなぁ…と、今では思っています。

図2. コンデンサと抵抗を並直列変換する
(C1/R1は同じ大きさにはなりません)

コンデンサと抵抗は並直列/直並列変換ができる

この「抵抗分とでR//Cの並列回路となるので……R-Cの直列回路として並直列変換して」というところですが、図2のように、抵抗とコンデンサの並列回路(図2左)は、その計算する周波数において、直列回路(図2右)に「計算式」により変換できます。逆に直列から並列に変換することもできます。

 

目的の周波数で成りたち、周波数が異なると結果も異なる

なお並直列(直並列)の計算では、計算する周波数が異なれば、直列に変換された(計算で得られる)RC定数も変わってきますので、注意してください。

あらためて図1に戻ります。これは「大きめの容量値の電源コンデンサには直列に抵抗を入れて」という、ここで考えてみたい回路に相当します(負荷抵抗は表示していません)。

C1が大きめのコンデンサ(たとえば10uF)、R1が安定化抵抗(たとえば1Ω)、C2が並列の小さいコンデンサ(たとえば100pF)です。

さきに示したように高域ではC1はショートになりますので、R1とC2(図2ではC1に相当)の並列接続と考えられるわけです。

 

並列から直列の変換をシミュレーションで計算してみる

図2ように、並列回路を直列回路とすると、周波数に応じてどのように変化していくかを、式計算でやるのも大変(簡易計算する方法もあるが)ですから、NI Multisimを使って見ていこうと思います(Post Processorという機能のご紹介でもあります)。

 

シミュレーションでやってみること

図1において、LDOが動作する周波数帯域(一番重要なのはLDOの内部ループが切れる周波数)で抵抗R1が支配的であればいいのですが、並列接続の小さいコンデンサC2(図2ではC1に相当)が支配的だと、LDOが不安定になってしまいます。そこで抵抗成分R1がこの帯域で支配的であるかを確認する、というのが目論見であります。

これをNI Multisimを用いて、LDOが動作する周波数帯域において、小さめのコンデンサC2を並列に入れた状態で抵抗R1がどのように見えてくるか、安定性が確保できるのかを(簡易計算もできますが…)シミュレーションで考えてみたいと思います。

 

図3. シミュレーションしてみる回路


シミュレーションしてみる回路図

図3をご参照ください。さきほどはR1は(たとえば)1Ωの直列抵抗と説明しましたが、ここではR2として2.2Ωにしてあります。シミュレーションのデモなので、抵抗の大きさはいくつでもいいのですが…。並列のコンデンサC2は100pFだと面白いところが見えづらいことと、実際に自分が設計していた回路としては、100pF(100pFと小さい理由は動作周波数の関係です)が並列に複数接続されていましたから、それらを考慮して1nF(=1000pF)としてみました。

 

タンタル・コンデンサ使用時の注意点

過去の設計ではLDO出力にタンタル・コンデンサC1を大容量コンデンサとして使用していました。そのため寄生抵抗は低いものとし、2.2Ωを外部抵抗R1として挿入、というところでした。

ところでタンタル・コンデンサは、故障モードがショート・モードで生じますから(フューズがありオープンになるものもある)、電源回路に使用するには十分な注意が必要です。

電源インピーダンスが低いと、突入電流により故障の原因になりますし(ここではLDO出力なので、ある程度インピーダンスがあると想定もできるが)、定格電圧に近いところで使うと、これまた故障率が上昇します。私は定格の1/3程度で使用していました。そうすることでFIT表示での故障率が、ICなどと同じ程度まで低下します。

 

この技術ノートの流れ

この技術ノートの流れとしては以下の4点です。

1) アナログ・デバイセズのLDO「anyCAP(R)」以外の一般的LDOでは負荷容量に抵抗成分がないと不安定になる
2) そこで大容量コンデンサに抵抗を挿入したが、並列につながっている1000pFによりあらためて不安定にならないか?
3) これをNI Multsimを使って、並列⇒直列変換のイメージで計算して
4) これらのようすをPost Processorという機能で解析する

というところです。

 

回路のうごきを目利きしてみる

シミュレーションで精査する前に、この回路のうごきを「目利き」してみましょう。

図3のC1 10μFに対してRの抵抗2.2Ωが直列ですので、低い周波数領域では、すぐにこの2.2ΩのR1が支配的になってきます。

一方で、C2 1000pF(1nF)が2.2Ωになるのは72MHz、この1/10としてみても、7.2MHzですから、この条件であればLDOのループ帯域外でしょうから、「問題ないだろう」ということがわかります。

逆にC2に104(0.1uF)などのコンデンサを使う場合は、要注意ですね!このようすは後半で示してみます。

 

ゼロVの電圧源で電流量をモニタできる

SPICE使用時の技ですが、図3で電圧源V2をゼロVとして挿入してあります。こうするとネットを分離することもできますし、この電圧源V2を流れる電流量を(V2を電流センサとして)シミュレーション結果でモニタリングできます。

この図3ではV2はV1に対して直列ですから、単にV1を測定すればいいことなんですが、この説明をしたいがために、入れておきました(笑)。このような方法での電流量のモニタリングは、分岐電流計測などに便利です。

一つポイントは「電流の向きを考えてV2を挿入する向きを決める」ということです。

 

シミュレーションしてみる

まずはACシミュレーションを実施する

Post Processorで(3)端子から見たインピーダンスを測定したいので、前処理として、まずACシミュレーションを実施します。

図4のように、計算・表示するパラメータとしては、V(3)とI(v2)とします。それでACシミュレーションをかけてみると、図5のような答えが得られます。

図4. シミュレーション(AC解析)の設定

 

図5. シミュレーション結果

計算のところをPost Processorで!

こうすればZ = V(3)/I(v2)としてCR回路のインピーダンスが求められます。図6のようにメニューからPost Processorを選択します。

Post Processorは、ポストプロセス = 後処理のとおり、補助的(というより強力)な演算機能を提供してくれます。

なおACシミュレーションでも、計算式を設定すれば(この程度の計算なら)結果を得ることができます。

 

図6. Post Processorを起動する

Post Processorで用意されている関数群

用意されている関数群をまずご紹介しておきましょう。これはPost ProcessorのHelpで詳細を見ることができます。

ここでは詳細情報ではないため、十分な情報になっていないことをおことわりしておきます。「こんなに関数があるの!」と思っていただければと思います。

[Algebraic Functions]

+ ― plus
- ― minus
* ― times
/ ― divided by
^ ― to the power of
% ― modulus
, ― complex 3,4 = 3 + j (4)
abs(X) ― absolute value
sqrt(X) ― square root
[Trigonometric Functions]
sgn(X) ― 1(if x>0), 0(if x=0), -1(if x<0)
sin(X) ― trigonometric sine (argument in radians)
cos(X) ― trigonometric cosine (argument in radians)
tan(X) ― trigonometric tangent (argument in radians)
atan(X) ― trigonometric inverse tangent

[Relational Functions]

gt ― greater than
lt ― less than
ge ― greater than or equal to
le ― less than or equal to
ne ― not equal to
eq ― equal to

[Logical Functions]

and ― and
or ― or
not ― not

[Exponential Functions]

db(X) ― decibels 20 log10(mag(X))
log(X) ― logarithm (base 10)
ln(X) ― natural logarithm (base e)
exp(X) ― exponential e to the vector power

[Complex Functions]

j(X) ― complex i (sqrt(-1)) times X
real(X) ― complex real component of X
imag(X) ― complex imaginary part of X
vi(X) ― complex vi(X) = image (v(X))
vr(X) ― complex vr(X) = real (v(X))

[Vector Functions]

avg(X) ― running average of the vector X where
avgx(X, d) ― running average of the vector X over d where
deriv(X) ― vector derivative of X
envmax(X, n) ― upper envelope of the vector X
envmin(X, n) ― lower envelope of the vector X
grpdelay(X) ― group delay of vector X in seconds
integral(X) ― running integral of vector X
mag(X) ― vector magnitude
ph(X) ― vector phase
norm(X) ― vector X normalized to 1
rms(X) ― running RMS average of vector X where
rnd(X) ― vector random
mean(X) ― vector results in a scalar
Vector(n) ― vector results in a vector
length(X) ― vector length of vector X
max(X) ― vector maximum value from X
min(X) ― vector minimum value from X
vm(X) ― vector vm(x) = mag(v(X))
vp(X) ― vector vp(x) = ph(v(X))

[Constant Functions]

yes ― yes
true ― true
no ― no
false ― false
pi ― pi
e ― natural logarithm base
c ― speed of light in vacuum
i ― square root of -1
kelvin ― absolute zero in Celsius
echarge ― fundamental charge
boltz ― Boltzman’s constant
planck ― Planck’s constant

 

実際にPost Processorで計算してみる

AC Simulationは電圧量と電流量を求めることが基本です(計算機能もありますが)。

ここで最初にやりたかったこととしては、RC回路を並列直変換と考えて、R-C並列回路をR-C直列回路として表し、その回路の抵抗分、リアクタンス分がどれだけになるか?というところです。

そこでAC Simulationの結果を、Post ProcessorでZ = V/Iとして計算させ、その実数部(real)と虚数部(imag)をとります。実数部が抵抗成分、虚数部がリアクタンス成分に相当し、直列回路のそれぞれの成分が計算できることになります。

 

Frequencyという変数もある

なおVariableではAC Simulationで求めたV3とI(v2)だけではなく、Frequencyという変数も利用できます。いろいろ活用できそうです。

Post Processorの計算設定のスナップショットをつけてみました。図7をご覧ください。

 

図7. Post Processor計算設定画面

 

Graphタブに切り替えると数式が見える

つづいてExpressionタブからGraphタブに切り替えます。切り替えたようすが図8です。

左下の「Expressions available」にさきほど示した数式が表示されていますので、希望するものをクリックしてハイライトさせ、「>」矢印を押します。そうすると、それらの数式が右側の「Expressions selected」に移動してきます(これが図8の状態)。

これで左下のCalculateボタンを押すと計算してくれます!

 

図8. Post Processor計算設定画面

 

Post Processorで計算

Post Processorで計算して、図9のように抵抗成分(real)、リアクタンス成分(imag)をそれぞれ表示してみました。何が言いたいかというと、「こんなに簡単に計算できるんです!」ということです。

図9を見ていただいて分かるように(赤の四角で囲んで、ハイライトさせてみた)、72MHz程度で抵抗成分が2.2Ωから半分の1.1Ω程度に低下してきます。

72MHzがLDOの内部ループ周波数帯域であるはずもありませんので、この電源回路設計はほぼ問題ない(安定に動作する)だろうと想定できます。

 

図9. Post Processorでの計算結果

 

コンデンサを替えてシミュレーションしてみる

つづいてC2を0.1uFにしてシミュレーションをしてみましょう。低周波回路ですとありがちな(というか間違いなくある)定数でしょう。

回路図を図10に示します。これでまずAC解析を行います。

 

図10. コンデンサを0.1uFに変更してみる

2回目の解析情報活用には儀式が必要

この2回目のAC解析結果を、Post Processorで活用させるためには、ちょっと儀式が必要です。図11の画面のように、Select simulation resultsの部分を開いて、AC Analysis (ac02)をクリックし、さらにSet Defaultのボタンを押します。

そうすると、Post Processorでの計算に用いられる数値データが、この2回目のシミュレーション結果になるというわけです。

 


図11. 2回目の解析情報活用には儀式が必要

 

0.1uFを用いてPost Processorで計算

この条件でAC解析をして、さらにPost Processorで計算させて表示した結果を示します。

2.2MHz程度で抵抗成分が1/10(0.22Ω程度)になっていますね。十分にLDO内部ループ周波数帯域に入り込んでいる(動作が不安定になる)可能性があるということもわかります。

 

図12. 0.1uFのコンデンサでPost Processorで計算

最後に

SPICEシミュレーションをうまく活用することで、このようにいろいろな解析ができます。SPICEシミュレータは自分の知識とアイディアを具現化してくれる「スーパー電卓」なわけですね。

 

※ NI Multisim Analog Devices Editionの提供は終了しております。この資料ではNI Multisimを用いていますが、本内容はADIsimPEなど他のSPICEシミュレータでも同様にご活用いただけます。

ttl_weblabo