電源回路についてちょっとだけしっかり考えてみる～発振編～

こちらの記事、[マイクロマウス Advent Calendar 2023](https://adventar.org/calendars/8811)ならびに[制御工学 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/system_control)へ参加しています。

前日の記事はSHIMOTORI,Harukiさんの[ロボトレコースを買った話とreRo杯を開催した話]()でした。

# はじめに
私自身は、([かなり複雑な電源系統を採用しがちであるにも関わらず](https://qiita.com/tanutanup/items/8cad22d386e8295a3e84))あまり電源に関するトラブルに当たったことが無い(自慢)ですが、周りでは結構トラブルになっているように思えます。
一応曲がりなりにも人に教える立場ではあるので、電源のトラブルについて掘り下げてみたいと思います。
ただ、電源のトラブルは多岐にわたるので、今回は特に面倒なトラブルにつながりやすい発振にフォーカスしました。

# 理論編
## ネガティブフィードバックと発振
### ブロック線図
電源回路を簡単なブロック回路として表現すると以下の図のようになります。
![FB_bsc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/2ed1c97d-b2af-a9bc-bd78-0b4dcfb9bb73.png)
まず出力電圧検出回路で、負荷にかかる電圧と目標の電圧を比較します。出力回路＋アンプは比べた結果（誤差）が減るように動作し、出力された電圧は負荷を通って出力電圧検出回路に戻ってきます。このように、入力の誤差が減るように出力を制御されるような動作を**ネガティブフィードバック**と呼びます。
ちなみに、ネガティブフィードバックではが逆位相(-180°)になるように動作する前提なので、**増幅せず位相を反転させるだけの理想アンプ**の部分を切り出しておくことがほとんどです。

#### 安定する電源の場合
以下の図は安定動作する電源において、各ポイントでの波形例を示しています。
なお、入力と出力が繋がったままだと同電位となり意味がないのでフィードバックの一部を切り離して評価しています。
![FB_OK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/ae19ca89-dfbc-deb8-938b-0844cc141e84.png)

Vfbinがアンプを通ると増幅し位相が遅れ(①)、その後負荷と出力電圧検出回路で減衰＆位相遅れが発生します(②~③)。最後に理想反転アンプで反転させると、**Vfbinを打ち消すようにVfboutが動いている**事がわかります。しかも**VfbinよりVfboutの方が大きい**ので、いずれ誤差が**収束**していきます。

![安定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/8ae55554-ea18-a07c-d5ec-4cdf8e1b0dba.png)


#### 不安定な電源の場合
一方、回路の遅れ(この例では負荷での遅れ）が大きい場合はどうなるでしょうか？
![FB_NG.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/8dda8659-d209-6e06-a3ce-fa59fc637373.png)
この場合、回路での遅れの合計が-180°近く、理想反転アンプでの位相を合計すると360°近く(≒位相が一致している)のでVfboutはVfbinの**誤差を打ち消すどころか増長**させています。しかもVfbinよりVfboutの方が大きいので、**誤差は大きくなる一方**となります。
![不安定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/ae4394b4-1eaf-a815-33fb-ef130636c14e.png)

### 周波数特性と発振
発振の原理について概念的に理解できたところで、もうちょっと**ちゃんと確認する方法**の一つとして最もよく用いられる手段である**ボード線図による位相余裕**の確認を紹介します。
ボード線図は、横軸を周波数。縦軸に$\frac{出力}{入力}$の倍率(dB)と入力に対する出力の位相差をプロットしたものになります。
電子回路は高周波になればなるほど増幅は難しくなり、回路の遅れの影響が無視できなくなりますので、電源回路のボード線図はこんな形になります。
![ボード線図(OK).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/e7168bc6-1ed2-02fd-ffb0-b28235a7d17b.png)
このボード線図では、緑線の周波数でゲインが0dBを迎えており、その後赤線の周波数で位相が-180°となっております。
これは、先程紹介した2つの発振条件を回避しているか確認していることになります。

逆に、この場合は位相-180°時点でゲインが1(dB)を超えているので発振してしまいます。
![ボード線図(NG).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/c13f511a-b49e-0b6d-27dd-9c45ea8da862.png)

先に触れたとおり、①位相遅れが-180°以上で、②ゲインが1倍(0dB)であれば発振はしないわけですが、理論上は発振しなくても外乱や部品パラメータのばらつきで発振する可能性がありますし、波形の収束が振動的な場合はノイズ発生源になるリスクもあります。そこで、赤丸-緑丸の位相差にマージンをもたせる位相余裕が必要とされます。
位相余裕に対する(時間軸での)応答は、経験則的に次のとおりです。
|  位相余裕[deg] | 応答                   | 安定判定 | 
| ------------- | ------------            | -------- | 
| 0°            | 振動      　        　  | ✕      | 
| ～30°         | 振動後に収束　           |  ✕～△  | 
| ～45°         | ほとんど振動なしに収束   |    ⭕     |
| ～60°         | 同上。推奨[^6] | ⭕ |
| それ以上      | 振動しないが応答が遅すぎるかも? | ⭕ |


## ここまでのまとめ
- 電源回路は出力電圧をネガティブフィードバックすることで安定させている
- ネガティブフィードバックでは元々位相が180度遅れている
- 実際の回路では有限の遅延時間があり動作する周波数と比べて無視できない（位相が遅れる）
- ①位相がさらに180度遅れる＋②その周波数でのゲインが1倍以上の二つの条件を満たすと安定しない
- 入力される信号の周波数を変化させて出力との振幅の比（ゲイン）と位相がどうなるかグラフ化したものをボード線図と呼ぶ
- ボード線図で先の発振条件を余裕を持って回避しているか確認することで発振安定性が確認できる

# 実践編
## シミュレーション編
ここでは、AnalogDevices社がフリーで公開している[LTspice](https://www.analog.com/jp/design-center/design-tools-and-calculators/ltspice-simulator.html)[^2]という回路シミュレータを使って電源回路のシミュレーションを行い、回路の安定性を検証してみます。

### (ちゃんとした)シミュレーション
LTspiceは周波数特性を解析できるAC Analysisモードがあります。フィードバックの評価方法はいくつかありますが、手っ取り早い方法として、フィードバックを切って信号源を入れてしまうやり方があります。このとき、直流的にはフィードバックが切れないように信号源に並列に小さい直列抵抗を入れておきます。ちなみにこの測り方は、FRA（Frequency Response Analyzer：周波数特性分析器）という計測器と同じだったりします[^4]。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/0a4ce27d-2eee-9f99-bc79-3b633fb17bc1.png)
V2が注入する信号源なので、振幅と初期位相を設定します。(ボード線図の位相を、-180°を0°としてスタートさせたいので、初期位相は180度です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/8b516b5b-a567-29c3-ac35-8a83ef1e3d85.png)
AC解析の設定は、次のとおりです(ACスイープをDecade(10刻み)、10刻みを更に100step。計測範囲を0.001Hz～10MHz)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/7130d81b-53cc-58ca-e76e-16fafe71d9a4.png)
シミュレーションが終わったら、$-V(Vfbout)/V(Vfbin)$をプロットします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/cbe70b42-9792-8536-a14b-aec437cf4502.png)

最後に、ボード線図が得られ、位相余裕を確認することができます。
($-V(Vfbout)/V(Vfbin)$と表示されている部分をクリックすると、カーソルが出ます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/63018960-6dd2-050b-85d8-e68db74bf4ce.png)
[AC解析のシミュレーションファイル](https://drive.google.com/file/d/1-N1LO0_hby_4cloQuVyFWxtoL7MWt1vz/view?usp=sharing)



### (ちゃんとしていない)シミュレーション
周波数解析が難しい回路(例：フィードバック端子が出ていないIC、DC-DCコンバータなど）は、ボード線図を得るのが大変だったりします。また、実回路を評価する場合でも、FRAを持っていないとかなり面倒だと思います。
そこで、簡易的な評価方法として、負荷をスイッチでON/OFFさせるなど、負荷電流を急変動させる方法があります。負荷をステップ状・インパルス状に変化させることで、フィードバック系に高い周波数成分を持った変動が注入され、不安定な電源では収束が悪かったりと、定常状態ではわからない挙動が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/dadea052-e156-b9d4-844a-6127a13dd358.png)
スイッチはMOS-FETでも良いですが、シミュレーションならではの理想スイッチにしておきます。まず、理想スイッチに名前を付けます(LOAD_SW)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/053b6098-bf8d-148e-ccdb-39e7f601eb31.png)
次に理想スイッチの設定を行います(ON抵抗を1mΩ、OFF抵抗を100Meg、SWのしきい値を0.5Vに設定)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/058d0d50-7b0d-4f2e-1038-4929d6831f41.png)
理想スイッチの信号源は、パルスとします。スイッチのしきい値が0.5Vなので、電圧は0V～1V。DC-DCコンバータの出力が安定してからテストするために25msスタートとします。負荷変動後の安定時間を確保するため、パルスは5ms周期のDuty20%とします(適当)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/785b00a8-8aad-e7db-6801-415bf2329336.png)

過渡応答の設定ですが、シミュレーション時間は50msぐらいにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/90083042-2402-a6f0-5b72-312c16e44450.png)

[出力のステップ応答シミュレーションファイル](https://drive.google.com/file/d/1-FgDXiCoKG6gOPZ7B-qJC2dFZHCjbACq/view?usp=sharing)


#### 事例：リニアレギュレータの出力のコンデンサ特性を変化させる
負荷のコンデンサのESR(等価抵抗)や容量を変化させてみました。

まずは安定なパラメータです(1000μF・10mΩ)。ボード線図からは、80°の位相余裕があることが分かります。(ちょっと余裕もたせすぎて応答が遅すぎかも?)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/f0bcce16-14de-19a0-b6b6-fe0c1d4df520.png)
また、負荷の電流を0.1Aから約1Aまで急変させた電圧がこちらです。負荷が急変したところで電圧が変動しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/a65c55d1-2d86-c0c9-c39f-7a40b703d473.png)
電流が急変した箇所を拡大すると、振動なしに変動が収まっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/44c880e7-2540-5c75-d48a-84aeb2739ff9.png)

まずは次に、少し不安定なパラメータです(10μF・5Ω)。ボード線図によると17°の位相余裕しかありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/62aaf374-8202-d934-e04e-e984c5c18ea9.png)
ステップ状の電流変化では、一見変動が少ないように見えますが、拡大すると振動が見られます。今回の条件では発振しなくても、実際の回路では発振するリスクがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/0bdcbc61-1923-dfa5-4085-41033c4943da.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/b643e43d-37a3-3547-e0a3-d25ce8ede923.png)

最後に完全に不安定なパラメータです(1000μF・0.1mΩ)。位相余裕はほぼゼロです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/043ede0b-b218-f868-eaee-06f8cec50db1.png)
実際、負荷電流を変化させると、拡大するまでもなく、もう無茶苦茶です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/982d3f48-dc36-b5e0-30ec-06590a1f8766.png)

コンデンサ容量こそ安定なケースから変えていないですが、ESRを10mΩ→0.1mΩへ減らして、理想コンデンサに近づけたにも関わらずかえって不安定になりました。実際の回路でも、**安直に電解コンデンサから積層セラミックコンデンサに置き換えるとこのようなトラブルに見舞われたりします。**

|               | 理想コンデンサ |  電解コンデンサ |　積層セラミックコンデンサー <br>(MLCC) | 
| ------------- | ------------- | -------------- | ------------------------------ | 
| 極性          |  なし         |  あり          |     なし                        | 
| 耐圧          | ∞             |  数V～400V程度 |   (一般に)数V～数10V            |
| ESR <br>(等価抵抗) | 0Ω            | やや大きい<br>(数10mΩ～数100mΩ)            |   小さい(1mΩ～10mΩ)              | 
| 周波数帯域    | 0 ～ ∞Hz      | 0 ～ 100kHz      | 0 ～ 数MHz                                 | 
| 漏れ電流      |  0            |   [やや大きい](https://www.chemi-con.co.jp/faq/detail.php?id=alElectricalCh)   |   [小さい](https://www.murata.com/ja-jp/support/faqs/capacitor/ceramiccapacitor/char/0039) |  
| 寿命          | ∞            |  有限(温度に依存) | ほぼ∞(?) |
| その他注意事項 | -            |  オープン故障する <br>温度で容量が変わりやすい   | ショート故障する <br>[かかる直流電圧で容量が大きく変化する](https://article.murata.com/ja-jp/article/voltage-characteristics-of-electrostatic-capacitance) |

**なので、素子のマニュアルを確認し、使って良いコンデンサのスペックや型番について確認することをオススメします[^5]**。

#### 事例②：スイッチングレギュレータの場合。
スイッチングレギュレータ(DC-DCコンバータ)の場合、Dutyに変換する部分で非線形な挙動が発生します[^3]ので、ボード線図を求めるのは中々骨が折れます。そこで、本記事では負荷の急変試験だけにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/40ec0f67-d0a7-ef6b-0695-aabf908d9af1.png)
[DC-DCコンバータのシミュレーションファイル](https://drive.google.com/file/d/1-D5RITwlI8KgsJ8OfXoJp5675qaLIY0B/view?usp=sharing)

コンデンサCoを1000uF(ESRo=100mΩ)にしたところ、挙動は安定しているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/4c07253d-7211-b820-3056-47e4bb46da86.png)

コンデンサCoが1000uF(ESRo=1mΩ)では、少し発振気味に見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/d40b75f9-622f-c118-cc44-5d7621fc2f9b.png)

先に上げたリニアレギュレータの場合と同じく、コンデンサの容量が同じでも、ESRが違うと結果が変わることが分かりました。実は、DC-DCコンバータは**PWM周期分の無駄時間が位相遅れに繋がるので、余計発振しやすい**ので、**メーカー推奨の容量や型番指定は守ったほうが無難です**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/8602b376-ef11-c7ea-03b2-9f81b0e9b48b.png)
＜TPS564242の例＞

# まとめ
今回の記事では、制御工学における発振現象の理論的な説明からはじまり、電源回路のシミュレーションで安定性の検証を行いました。ポイントは以下のとおりです。
- 電源回路は典型的なネガティブフィードバックシステムである
- ネガティブフィードバック系では入出力のボード線図を作成し位相余裕を確認すると安定度が評価できる
    - 回路シミュレータのLTSpiceでは周波数領域のシミュレーションを行いボード線図を確認できる<br>（ただし回路に一部加工が必要)
- ボード線図が作成できない場合は負荷電流を急激に変化させると安定度がある程度評価できる
    - スイッチングコンバータや電源レギュレータで有効
- 電源回路の出力につけるコンデンサの容量やESRが大きくても小さくても発振のリスクがある


翌日の記事はトコロさんの「学生大会とか今年の機体について」という記事になる予定です。

# そのうちやるかも？
- LTSpiceを使いこなす
- 電源についてちょっとだけしっかり考えてみる(ネタ未定)

[^6]:[LDO の発振原理と発振耐性向上について](https://toshiba.semicon-storage.com/info/application_note_ja_20210326_AKX00159.pdf?did=66057)の4.2章より
[^2]:なぜLTspiceなのかというと、元々はリニアテクノロジー社が公開していたspice(回路シミュレータ)だからです。リニアテクノロジーは2016年、アナログ・デバイセズに買収されました。LTspiceはフリーで使えるので非常に助かります。~~ただ、ICはアナデバの素子ばかりで、他の会社のICは公開されているモデルをインポートしなければならないのが中々面倒です。アナデバの素子なら、データシートや回路例もワンクリックで表示できるの、なんとなくステマ臭いですよね～。大体、なんなのあのAC解析したときのテキスト。グラフ表示ではそんな事無いのに、テキストで吐き出すと無駄に±180°以内に変換されているから、プロットすると途中で位相がぶっ飛ぶし、タブ区切りとカッコ区切りとカンマ区切りがまぜこぜだし、dBとか後ろに付いているし。嫌がらせでしょうが！~~

[^3]:PWMはキャリア周波数より速く出力を変化させることができないので、無駄時間を持つ非線形動作となる。また、キャリア周波数は基本的に一定なのにたいし、AC解析で注入される周波数は逐一変化するので、必ずしもキャリア周期分常に遅れるわけでもないです。実際、「電源回路設計の安定化の評価と電子回路の事前検証[^4]」にも記載がある通りLTspice公式も、スイッチングコンバータのモデルは不完全なようです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269597/448e1aa0-dd09-b761-8e82-22271260b279.png)


[^4]:[電源回路設計の安定化の評価と電子回路の事前検証](https://www.analog.com/jp/technical-articles/stabilization-of-power-circuit-design.html)

[^5]:[BAxxCC0 シリーズの
出力セラミックコンデンサを使用した回路](https://fscdn.rohm.com/jp/products/databook/applinote/ic/power/linear_regulator/baxxcc0_output_mlcc_an-j.pdf)