公開日:2022/01/08
title.png

19th Season


#19-3 バンドギャップ基準電圧

 バンドギャップ基準電圧(以下、バンドギャップリファレンス→BGR)回路を、ディスクリートでブレッドボード上に組み、ちゃんと一定の電圧が出力できるかどうか?確かめてみようと思います。

 BGR回路と言えば、1)電源電圧に依存せず、2)温度にも依存しない、一定の電圧を出力する回路、ですが、手元の環境では、実験装置を所望の温度に設定する装置(サーモストリーマ)等が無い為、温度依存性の実機評価はできません。

 ゴールは、1)ブレッドボードに組んだBGR回路が電源電圧に依存せず、一定の電圧を出力するかどうか確かめる、2)LTspiceを用いたシミュレーションで温度特性を確かめる、ことに置きます。
 正直、数μAとか数mVで動作する回路をブレッドボードに組んで、ちゃんと動くかどうかわかりませんが、ダメならダメで、「あ〜、ダメだったね〜」で、済ませるつもりですm(1^−^;)m。

バンドギャップ電圧は何V?

 色々と調べて行く中で、「そもそも、バンドギャップ電圧とは、何Vなの?」と言う疑問が浮かびました。調べてみても、その値はまちまちだし一向に要領を得ません。

 「シリコン(Si)のバンドギャップで決まる電圧」という意味だとすると、Siの禁制帯幅を指しているのでしょうか?だとすると、単位は「エネルギ」なので、SI単位系ならジュール[J]、あるいは禁制帯幅に使われる単位は電子ボルト[eV]等です。
 エネルギをどうやって電圧に変換しているのでしょう?

 Siの禁制帯幅はおよそ1.11eVです。

 以下の単位換算式があります。

  ジュール[J]=クーロン[C]×ボルト[V]
  電子ボルト[eV]=q[J]
  ここで、
  電気素量q=1.602 176 634×10-19[C]

 この換算式を駆使すると、エネルギから電圧[V]への変換はできないことはありませんが、何かおかしい。

 諸々調べた挙句、行き着いた解釈は、以下の通りです。

  「バンドギャップ電圧」の解釈:

 調べる先々で異なる「バンドギャップ電圧」値が記されていたのも、回路定数によって出力電圧がまちまち変わるから、と考えると、上の解釈で矛盾しません。
 上の解釈自体は、以下に解説するBGR回路の解説とは無関係ですので、「ん?」って、思っても、無視して先に進んでください。本節はただ単に、筆者が遠回りした足跡です。

バンドギャップリファレンス(BGR)回路

 本題です。

  BGR回路とは:

 すごく簡単にまとめてみました。上に示した式や定数が、以後の解説に登場するので、頭に入れておいて下さい。次節以降、具体的な回路を使って解説を続けます。

Brokawセル

 「バンドギャップリファレンス回路」などで検索すると、まずBrokawセルがヒットします。以下にBrokawセルの原理回路図を示します。

a193_brokaw.png

LTspiceの回路図となっています。また、回路図中、ΔVbeをDVbeと記してあります。

  Brokawセル動作原理:

 Ic1=Ic2となる様にフィードバック制御するのは、オペアンプを使った回路となります。

 ただ、この回路はディスクリートでは作り難い!

 上示原理回路図の様に、ディスクリートで作ろうとすると8個の同型トランジスタを連結する必要があります。合計9個の同型トランジスタが必要でかつ、それらをブレッドボードに構築しようとすると、相当難儀な話となります。
 基本的には、1つのダイ(チップ)上に形成することを前提とした回路ですね。

※恐らく半導体プロセスでは、電流比(Ic1/Ic2)を実現するため抵抗値を制御するより、エミッタサイズを制御した方が精度良く製造できるのだと思います。

Widlarの回路

 今回使う回路です。
 Brokawセルの前(1971年)にWidlarによって提案された、初期のBGR回路です。以下が原理回路図となります。

a193_widlar.png

  Widlar回路の動作原理:

 電流比Ic1/Ic2>>1を作り出すため、エミッタサイズを変化した2個のトランジスタ1A:8Aを使ったBrokawセルと異なり、こちらのWidlar回路は抵抗値R1:R2を使っています。
 こちらのWidlar回路も、3つのトランジスタ特性がすべて等しいことが前提なので、ディスクリートで作るのは厳しいのですが、素子数が少ない為、Brokawセルよりは実現し易いです。

トランジスタの選定

 3個のNPNトランジスタは全て同じ特性であることが必要なので、最悪でも「同じ型番」、可能であれば、「同じメーカ」 → 「同じロット」 → 「同じウェハ」 → 「ウェハ上の距離が近い」 → 「1チップに3個(以上)のトランジスタが集積されている素子」 → ……、が求められる条件です。
 個人の趣味レベルで入手できるトランジスタには限度があるので、精々「同じメーカ」止まりかと思われます。

 本ページでは、手持ちのデータシートでVbe(ON)等、今回のアプリケーションで必要となるスペック値が規定されていた、S9013を使う事にしました。以降、LTspiceでのシミュレーションが基本なので、LTspiceへ適用可能なシミュレーションモデルが存在していることも重要な条件です。

 入手したS9013のデータシートには、Vbe(ON)=0.67V(TYP)が規定されていたので、この値を使うと、VREF≒1.265Vです。

 トランジスタが変わればシミュレーションモデルが変わるため、以下、シミュレーションは皆様が選定したトランジスタのモデルで実施してください。

※データシートやシミュレーションモデルは各自探してください。

電流Iccの制御

 前節で示したWidlar回路をLTspiceでシミュレーションしてみましょう。

a193_widlar_vbe.png

 横軸に定電流源の電流値Icc、縦軸に電圧値を取って、VREF(緑)、Vbe1(青)、Vbe3(赤)、ΔVbe(水色)、でプロットしています。
 でも、なんだかおかしい。

  考察:

 何だかダメダメですね。何がいけないのだろう?

 やはり、鍵となっているのは、動作原理で前提とした、Vbe1=Vbe3の条件でしょう。
 Vbe1,Vbe3に注目し、改めてシミュレーション結果を眺めて見ると、Vbe1とVbe3は等しくはないけれど、クロスする点があります。つまり、クロスする1点だけはVbe1=Vbe3となっているのです。
 Widlarの回路は、この点で動作させないとならないのではないか?と考えました。

 Vbe1,Vbe3がクロスしてVbe1=Vbe3となるのは、Icc≒2.7mA付近です。

  Icc<約2.7mAでは、Vbe1>Vbe3
  Icc>約2.7mAでは、Vbe1<Vbe3

 つまり、Vbe3−Vbe1を負帰還して、その値に従った電流を注入できるような電流源を追加すると、この回路をVbe1=Vbe3の条件下で動作させることが出来ます。これを実現したのが以下回路図となります。

a193_schem.png

  電流源回路の動作説明:

 シミュレーションしてみると、以下図の様な結果となりました。

a193_widlar_vref.png

 横軸に電源電圧Vcc、縦軸に出力電圧を取り、VREF(緑)、Vbe1(青)、Vbe3(赤)をプロットしました。
 電源電圧Vccが、1.5Vを少し超えた辺りから出力VREFが安定しています。この時のVREF≒1.288Vでした。トランジスタにS9013を使った場合、データシートから読み取った定数(Vbe(ON)=0.67V(TYP))を使って理論的に求めた値VREF≒1.265Vと大きな乖離はありません。
 Vbe1=Vbe3で制御されており、かつ、電源電圧(横軸)に依存しない、一定の電圧出力VREFを得ることが出来ています。

 こうじゃないと、BGR回路じゃありませんよね!

ブレッドボードに組んで実験

 完成した回路をブレッドボードに組み上げて実験してみましょう。
 実験にはArduino UNOにLogiscopeを書き込んで使います。
 Widlar回路とUNOを以下接続表の通りに接続してください。

Arduino UNO 接続 Widlar回路
5Vまたは3.3V Vcc
GND GND
A0 VREF

 以下、実験中の様子です。

a193_expr.jpg


 では、実験してみましょう。まずは、電源電圧に依存せずに一定の電圧を出力しているかどうかを確かめるため、UNOからWidlar回路へVcc=3.3Vを供給した場合と、Vcc=5Vを供給した場合で出力電圧VREFを確認してみましょう。

  実験サンプル:【 】内はLogiscopeからの送信データ
  【ina,0】 …… Widlar回路にVcc=5Vを供給
  OK: analogRead(0)=256, 1.250V

  【ina,0】 …… Widlar回路にVcc=3.3Vを供給
  OK: analogRead(0)=256, 1.250V

 アナログ入力A0端子に接続したVREF出力を読み出しました。電源電圧Vcc=3.3/5[V]によらず、VREF=1.250Vが読み出せました。理論的に計算したVREF=1.265V、シミュレーションで観測したVREF=1.288Vと比べて、齟齬は無いと言って良いでしょう。
 そもそも、UNOの電源電圧Vcc=5.00Vであることが前提で、AD変換器の出力を信じるしかないのだけど、UNOの電源電圧がVcc=4.95Vではなくて、本当にVcc=5.00Vだということを確認する術が手元にありません。UNOのAD変換器だって、どれだけ正確にアナログ電圧値をデジタル値に変換しているの?という、変換精度の問題も絡んできます(スペックでは絶対精度±2LSB(TYP)なので、±0.01V≒2LSB/1,024LSB×5Vの誤差がある)。結局、どの値を神様としますか?ってことです。
 BGR回路の出力電圧は、「基準電圧」として使うことを目的とされているのだから、観測したVREFを神様として、UNOの電源電圧を推定してしまっても良いくらいです(↓)。

 校正されたテスタなどをお持ちの方は、もっと厳密に測定して見てくださいm(1^_^;)m。


 オペアンプでフィードバック制御しているので、念のため発振していないことを確認しておきましょう。

  【osc,0,0,4,0】

a193_widlar_expr.png

 VREFに時間変動はなく、一定の電圧を出力し続けていました。

 ただ、この回路はすごくナーバスな回路でした。
 オペアンプでフィードバックして電源電流値を制御しているので、発振してしまうことがありました。発振したまま放置すると、トランジスタが発熱します。そのまま放置すると自己発熱で壊れてしまったり、発煙したりする場合があるので、注意して実験してみてください。
 回路図に戻って、C1,C2は発振防止用に挿入した位相調整用コンデンサであって、回路の動作原理上は不要です。回路定数が変わったり、接触抵抗などの既成成分が変わったりしても発振する場合があるので、各自調整して見てください。
 発振さえ抑え込めたら、上の実験結果の様にピタリ一定のバンドギャップ電圧がVREFから出力されますよ。


 一定電圧を出力する素子として、ツェナーダイオードを使ったことがありますが、ツェナーダイオードの場合、決まった電流(しかも結構大きい)を流さないと決まった電圧が出力されないし、ノイズが大きいなどの問題もありました。次回、BGR回路の温度補償について、もう少しこだわってみたいと思います。


btn_arduino.png

btn_prev.png btn_next.png

home