見出し画像

GF180で Bandgap Reference (BGR)

この記事で使用している回路は github からダウンロードできます.

https://github.com/atuchiya/openmpw-transistor-level-examples/tree/main/bgr


基準電圧を生成する BGR (BandGap Reference) 回路を設計します.さまざまな要因に対しても変動しない電圧・電流はアナログ回路では特に重要なものですが,PVTばらつきがあるため抵抗分圧も素子値が信用できません.抵抗値は気をつけて作れば比精度は高くできますが,そもそも電源電圧が信用できないので素子値の比精度が高いだけではダメです.というわけで,素子値も電源電圧も信用できない状況で常に一定の電圧を作る方法が必要で,それが BGR です.


0.参考文献

この記事の内容は以下の文献を参考にしています.

  1. 美齊津摂夫,Analog ABC (アナログ技術基礎講座) 第33回~第36回,EETimes Japan,2011年10月~2012年2月.https://eetimes.itmedia.co.jp/ee/articles/1110/11/news007.html

  2. A. Paul Brokaw, "How to make a bandgap voltage reference in one easy lesson", Integrated Device Technology, Inc. (現 ルネサスエレクトロニクス), 2011.https://www.renesas.com/us/en/document/whp/how-make-bandgap-voltage-reference-one-easy-lesson-paul-brokaw

  3. nuhogachi,「BGR回路(Bandgap Reference)の原理」,CMOSアナログ的な雑記,2020年.https://www.nuhogachi.com/cmos-analog/bgr-principle/

  4. Behzad Razavi, "Design of Analog CMOS Integrated Circuits"

1.BGRの原理

通常は信頼していいはずの電源電圧も信用ならないという状況でどうやって固定値の電圧を作るのか? 普通の回路では無理な気がしますが,物理定数によって決まる値を利用します.具体的には熱電圧 (thermal voltage) kT/q です.k はボルツマン定数 1.380649e-23 J/K,T は絶対温度,q は電気素量 1.602176634e-19 C.ボルツマン定数も電気素量も現在 (2019年~) の SI単位系では定義値,つまり他の物理定数の基準となる根幹をなす定数です.

1.1 pn接合の特性

熱電圧はどこにでてくるかというと,pn接合に順方向電圧をかけたときの式

$$
I = I_{s}\left(\mathrm{e}^{\frac{q}{kT}V}-1\right)
$$

です.つまり熱電圧を使うには,pn接合に流れる電流を使います.このため,BGR の基本となる素子はバイポーラトランジスタ (BJT: Bipolar Junction Transistor) もしくはダイオードです.MOSFET では kT/q がでてきませんので.

1.2 ダイオード特性

pn接合に流れる電流,ということでダイオードをベースに考えます.ダイオード素子を使ってもいいのですが,後々の発展も考えてパイポーラトランジスタのダイオード接続を使います.バイポーラトランジスタのベースとコレクタを短絡するのがダイオード接続で,その名の通りダイオードのように振る舞います.

npn BJT のダイオード接続 (npn-diode.sch)

BJT の回路に対して Vdd という名前もちょっと変な感じがしますが,まずは 電圧 Vdd を振ると下のようになります.ダイオードですね.
(注: バイポーラの回路では普通電源電圧は Vcc と書きます)

ダイオード特性 (npn-diode.sch)

次に温度も振っています (dc temp -50 125 25).-50℃ (223 K)から125℃ (398 K)まで温度を変化させると,室温 (25℃ = 198 K) から±10%以上電流値が変化していることが分かります.これが熱電圧 kT/q の変化によるものです.

温度特性 (Vdd=3.3 V) (npn-diode.sch)

1.3 抵抗の挿入

ダイオード単体では電流が温度と電圧に依存します.ここから基準電圧を作り出すには2種類の回路の差を取ります.下のような回路を作ります.

2つのダイオード+抵抗 (npn-diode-delta-1.sch)

Va の方は先程と同じトランジスタですが,コレクタに10 Ωの抵抗を挿入しています.これに対して Vb の方はトランジスタを16個並列 (m=16),コレクタの抵抗は Va側の16倍の160 Ωにしています(トランジスタの並列数と抵抗の倍率が同じ16になっていますが,これはたまたまです).今度は流す電流をスイープします.そうすると Va と Vb の電圧は下のようにある電流で交差します.

電流対 Va,Vb (npn-diode-delta-1.sch)

分かりやすいように Va と Vb の差を取ると,0.5 mA 付近で0 V になります.

電流対 Va-Vb (npn-diode-delta-1.sch)

この,Va と Vb が等しくなる電流はどうやって決まっているかを解いてみましょう.まず Va 側のトランジスタ Q1 について,

$$
I_0 = I_s\left(\mathrm{e}^{V_{\mathrm{CE}}/V_{\mathrm{T}}}-1\right)
$$

です.$${I_{\mathrm{s}}}$$ は逆方向飽和電流 (定数),$${V_{\mathrm{CE}}}$$ はコレクタ-エミッタ間電圧 (ダイオードの端子間電圧に相当),$${V_{\mathrm{T}}}$$ は熱電圧 kT/q です.両辺対数を取ってちょっと変形すると,

$$
V_{\mathrm{CE}}=V_{\mathrm{T}}\ln\left(I_0/I_{\mathrm{s}}-1\right)
$$

$${V_{\mathrm{CE}}}$$ は $${V_a - R_aI_0}$$ なので,

$$
V_a=V_{\mathrm{T}}\ln\left(I_0/I_{\mathrm{s}}-1\right) + R_aI_0
$$

となります.同じことを Vb側についても計算すると

$$
V_b=V_{\mathrm{T}}\ln\left(\frac{I_0}{mI_{\mathrm{s}}}-1\right) + nR_aI_0
$$

ここで,トランジスタの並列数を $${m}$$,$${R_b = n R_a}$$ としています.$${V_a = V_b}$$ になるとき,

$$
V_{\mathrm{T}}\ln\left(I_0/I_{\mathrm{s}}-1\right) + R_aI_0 = V_{\mathrm{T}}\ln\left(\frac{I_0}{mI_{\mathrm{s}}}-1\right) + nR_aI_0
$$

$${I_0\gg I_{\mathrm{s}}}$$ より対数の中の $${-1}$$ を無視できるとすると,

$$
V_{\mathrm{T}}\ln\left(I_0/I_{\mathrm{s}}\right) + R_aI_0 = V_{\mathrm{T}}\ln\left(\frac{I_0}{mI_{\mathrm{s}}}\right) + nR_aI_0
$$

で,整理すると

$$
I_0 = \frac{V_{\mathrm{T}}}{(n-1)R_a}\ln(m)
$$

となり,電源電圧 Vdd に全く関係なく $${I_0}$$ が決まります.つまり,$${V_a = V_b}$$ になるように何らか制御してやれば電源電圧に依存しない電流が得られるということです.その電流を抵抗に流せば定電圧が得られるはず.

1.4 電流源 → 抵抗

1.3の例では理想電流源ががっちりと電流を固定していました.これをもうちょっと現実的にし,かつ定電流から定電圧を得るために電流源を抵抗に置き換えます.

電流源を抵抗に変更 (npn-diode-delta-2.sch)

抵抗 Rc と Rd が電流源の代わりで,そこに流れる電流によってBGRの出力 Vout を作ります.とは言ってもこれでは $${V_a = V_b}$$ にする強制力は何もはたらきませんので,まだ BGR としては動きません.電源電圧を振ってみると,

電源電圧-出力電圧特性 (npn-diode-delta-2.sch)

Vout は思いっきり変化しています.$${V_a = V_b}$$ にするためには,$${V_a - V_b}$$ に応じて何らかのはたらきをする素子があればよい気がします.例えばオペアンプとか.ひとまず理想素子である電圧制御電流源でやってみます.電圧制御電流源の利得はある程度大きければ適当でよいです.

電圧制御電流源を追加 (npn-diode-vccs.sch)

この回路の動作は慣れていないと少し分かりにくいかも知れませんが,電圧制御電流源 G1 は $${V_a - V_b}$$ が 0 でない場合にそれを補正する電流を流すことで $${V_a = V_b}$$ を維持しようとします.その結果,出力電圧は

出力電圧 (npn-diode-vccs.sch)

のように,電源電圧に対してほとんど変化せず,約1.3 Vを維持します.電源電圧が 0 V でも Vout が 1.3 V?と思えますが,これは G1がそうなるように電流を流しているからです.

G1 の流す電流 (npn-diode-vccs.sch)

これによって $${V_a - V_b}$$ はほぼ 0 に保たれます.

Va - Vb (npn-diode-vccs.sch)

電圧制御電圧源でやると下図のようになります.結果は省略.

電圧制御電圧源を追加 (npn-diode-vcvs.sch)

1.5 PTAT,CTAT

ここまでは電源電圧の変動について考えましたが,最初に説明したように BGR は熱電圧によって決まる電流を使います.熱電圧は絶対温度に比例するので,pn接合に流れる電流は温度に依存します.これを打ち消すために,温度に比例して増加するもの (Proportional To Absolute Temperature : PTAT) と温度に比例して減少するもの (Complementary To Absolute Temperature : CTAT) を使います.PTAT と CTAT を足せば常に一定になるだろう,ということです.

温度依存性のある電流が作る出力電圧を評価するために,下のような回路を作ります.ベース電圧の固定された pnpトランジスタが電流源で,それをダイオード接続の npnトランジスタで受ける形です.

温度依存性の影響評価回路 (npn-diode-ctat.sch)

温度を上げていくと,電流は増加し出力電圧 Vout は低下していきます.

流れる電流の温度特性 (npn-diode-ctat.sch)
出力電圧の温度特性 (npn-diode-ctat.sch)

電流は増え,出力電圧は下がる.ならば,電流が増えると電圧が増える素子を挿入してやれば電圧の低下を補償できるはず.電流が増えると電圧が増える素子は抵抗ですね.ということで抵抗を挿入します.

抵抗で温度補償 (npn-diode-tcomp.sch)

npnトランジスタのコレクタ-エミッタ電圧は温度の上昇に伴なって下がろうとします (CTAT) が,電流の上昇によって Ra の端子間電圧は増加します (PTAT).うまく Ra の値を調整すればちょうど変化が打ち消しあって Vout は一定値になるはず.上の回路図の25 Ωはそのように調整してあるので,電圧は以下のようになります.

温度補償結果 (npn-diode-tcomp.sch)

温度に比例して下がる Vb と 温度の比例して上がる Vout - Vb の傾きがだいたい同じになるように Ra を設定することで,出力電圧 Vout は全温度域でほぼ一定となっています.

温度補償したVout (npn-diode-tcomp.sch)

電圧の変動幅は約 7 mV,変動率は約 0.7 % に抑えられています.

温度補償のやり方は回路によって異なりますが,基本的にトランジスタの端子間電圧の変化と抵抗の電圧降下の変化をぶつけることで変化を打ち消します.

2.ダイオード + オペアンプ

これは npn-diode-vcvs.sch ですでに作っているので省略.ただし,温度スイープすると ngspice の結果がおかしくなるため温度補償を追い込んでいません.設計を追い込むには元の記事を参照してください.

3.ダイオード + カレントミラー

ここまでの説明では2つのノードの電位差をオペアンプに入力することで2つのダイオード (ダイオード接続したトランジスタ) の電流を等しくしていました.2つの電流を等しくする方法としてはカレントミラーを使うという方法もあります.こちらで解説されている回路です.

3.1 セルフバイアスカレントミラー

カレントミラーは基本的に参照電流をトランジスタのサイズ比に従ってコピーする回路です.参照電流によってトランジスタのバイアス状態が決定されます.BGR はその参照電流 (もしくは参照電圧) を作るための回路なので,参照電流が使えるはずがありません.そこで,参照電流に頼ることなく自分自身でバイアス状態を決める組み方がセルフバイアスと呼ばれる方法です.回路図は下のようなもの.

セルフバイアスカレントミラー

pMOS は XM2 が参照側でそれを XM4 にコピー.XM4 の電流は nMOS カレントミラーの XM3 の参照電流となり,XM1 にコピーされ,その電流は XM2 の参照電流となり… ということで2つの電流がそれぞれ参照しあう形でコピーされます.

これに評価用の回路をつけたものが下図です.チャネル長 L を変えた2つを作っています.

セルフバイアスカレントミラー (self-bias-currentmirror.sch)

負荷の抵抗が同じであれば,電流は電源電圧に関わらず完璧にコピーされます.

負荷が等しい場合の電流値 (self-bias-currentmirror.sch, Rl=1000)

カレントミラーですので,出力抵抗は高く保ちたいところです.ということでチャネル長 L は大きくしましょう.GF180 では最小の L を使うと出力抵抗が低くなります.出力抵抗の差は,負荷がアンバランスになったときに現れます..param で片方の負荷を 1500 Ωに変えてみると,電流がずれます.

負荷が異なる場合の電流値 (self-bias-currentmirror.sch, Rl=1500)

このズレを L最小の場合と,Lを2倍 (W/L を一定にするため W も2倍) にした場合で比較すると,

負荷が異なる場合の電流値の差 (self-bias-currentmirror.sch, Rl=1500)

Lを2倍にした方 (青い線) の方が電流のズレが小さく抑えられていることが分かります.出力抵抗を上げるにはカスコードカレントミラーなどもありますが,さすがにこの回路でカスコード接続するとトランジスタが4段縦積みになって動作可能な電圧範囲がなくなってしまいます.

3.2 ダイオード + カレントミラー

BGR の基本構成は 1.3 で説明した通り,「ダイオードのサイズ比と抵抗の比によって電源電圧に依存しない電流を作る」ことが基本となります.セルフバイアスのカレントミラーとダイオード接続のトランジスタのペアを組み合わせると,下のようになります.

セルフバイアスカレントミラー + ダイオード (bgr-diode-currentmirror.sch)

特性を見てみます.1.3 で評価したように,Va = Vb = 800 mV で Q1,Q2 に電流 0.5 mA 流れる,というのがポイントでした.Va と Vb は一致しているかどうか確認すると

Va と Vb (bgr-diode-current-mirror.sch)

だいたい 800 mV近辺で一致しています.電源電圧 2 Vぐらいまではカレントミラーが動作しないため望む特性になっていませんが,いくら何でも電源電圧が 2 V以下まで下がることはないでしょうからこれは問題ありません.次に電流を見てみると

電流特性 (bgr-diode-current-mirror.sch)

Q1,Q2 の電流はほぼ一致しており,値も0.5 mA近辺ですが,電源電圧依存性が残っています.これはカレントミラーの出力抵抗が小さいことが原因です.チャネル長 L は最小値の4倍まで大きくしていますが,それでも出力抵抗が不十分です.

3.3 BGR

ちょっとカレントミラーの性能に不満はありますが,1.5 で説明した温度補償を追加して BGR として完成させます.

ダイオード + カレントミラー型BGR (bgr-diode-currentmirror-tcomp.sch)

抵抗 Rtcomp は温度依存性が小さくなるように調整してあります.温度依存性は

温度依存性 (bgr-diode-currentmirror-tcomp.sch)

出力電圧の変動幅は約 5.5 mV,変動率は約 0.5 % と安定した出力になっています.電源電圧依存性は

電源電圧依存性 (bgr-diode-currentmirror-tcomp.sch)

遠目に見ても一定にはなっておらず,ちょっと残念.2.3 V~3.3 V の間で30 mV以上変動しています.Rtcomp を小さくすれば電源電圧依存性は下がりますが,今度は温度依存性が上がってしまいます.

ダイオード + カレントミラー型はオペアンプ不要で構成できるため回路図はシンプルになりますが,カレントミラーの性能がネックになります.GF180 はもともと出力抵抗の低いプロセスなので,チャネル長 L を大きくするだけではいまひとつ.カレントミラーの性能を上げる方法はいろいろありますが,カレントミラーが複雑化するならオペアンプを使った方が楽かも知れません.

4. BJTカレントミラー + オペアンプ

"How to make a bandgap voltage reference in one easy lesson" で解説されている回路です.ここまで紹介してきたダイオード接続ではなく,BJTトランジスタのベースを共通とするカレントミラーのような形です.とは言え,動作原理は同じです.

4.1 動作原理の確認

原理は同じですが,回路の形が変わっているので動作を確認しておきます.基本構成は下図の通り,「大きさの違うBJTのペア (Q1, Q2)」「抵抗 (R3) によって電流-電圧特性の傾きを変え,交点で動かす」というところは同じ.抵抗 R3 がコレクタではなくエミッタ側についています.R1 と R2 は電流源に相当します.同じ電流を流すので,当然抵抗値は同じ.電圧制御電圧源 E1 がオペアンプの代わりです.電圧の差を取って,Q1・Q2 のベース端子を制御します.

BJTカレントミラー + オペアンプ型の動作原理 (bjt-ptat.sch)

結局のところ,トランジスタのバイアス (主にベース-エミッタ間電圧) が適切に設定されればよいので,ベース端子を調整するという方法は理にかなっています.電源電圧依存性を見ると,

電源電圧-電流特性 (bjt-ptat.sch)
電源電圧-出力電圧特性 (bjt-ptat.sch)

電流も電圧も 1.0 V近辺から電源電圧に依存しない値になっていることが分かります.ただこの回路はまだ温度補償をかけていないので,温度依存性は残っています.

温度-電流特性 (bjt-ptat.sch)
温度-電圧特性 (bjt-ptat.sch)

温度依存性は残っていますが,「電流が温度上昇に伴って増える」「出力電圧は温度上昇に伴なって増える」というのは 1.5 と同じ.ということは,抵抗で補償が効きます.

4.2 BGR

温度補償のための抵抗を入れて温度依存性がなくなれば BGR として使えそうです.では抵抗をどこに入れるかというと,下図の通り.

BJT + オペアンプ型BGR (bgr-bjt-tcomp.sch)

グラウンドにつながった R4 が温度補償用の抵抗です.これによって出力電圧 (=ベース電圧) が下がるのを補償します.ベース電位が下がろうとするのを,エミッタ電位を上げることでベース電位を変化させずにベース-エミッタ間電圧を下げる,とも言えます.温度特性を見てみると,

温度特性 (bgr-bjt-tcomp.sch)

Q1のベース-エミッタ間電圧が下がるのを丁度打ち消すように R4 での電圧降下 (ve1) が上がり,結果として Vout は一定に保たれます.R4 の抵抗値を変えると ve1 の傾きが変わるので,ちょうどいい傾きになる値を探しましょう.出力電圧だけを拡大すると

出力電圧の温度特性 (bgr-bjt-tcomp.sch)

電圧の変動幅は 2.8 mV,変動率は 0.3 %以下に抑えられています.

5.まとめ

とりあえず電源電圧依存性と温度依存性に対応した BGR の動作を紹介しました.ですが,抵抗に温度特性のない理想抵抗を使っているという点でまだ実用回路としては不十分です.また,プロセスばらつきについて考えていませんし,電流が0の状態 (第2安定点) で動かなくなってしまうことを防ぐスタートアップ回路なども必要です.それらの話題については冒頭の参考文献を読みましょう.

この記事が気に入ったらサポートをしてみませんか?