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

19th Season


#19-4 BGR回路の温度補償

 前回作ったバンドギャップリファレンス(BGR)回路と言えば、「電源電圧に依存せず一定の電圧を出力する回路」ですが、もう一つ、「温度にも依存せずに一定の電圧を出力する」、温度補償があることでも知られています。

 BGR回路は周囲環境に依存せず、一定の電圧VREFを出力し続けることを期待して使用されるものです。
 通常、BGR回路の出力VREFを基準(神様)として降圧電源回路の出力電圧を調整したり、AD変換器などのアナログ入力を校正したりするのに使うので、周囲環境(温度や電源電圧変動)によって出力電圧VREFが変化してしまうと、天地がひっくり返ってしまうのです。

 そこでBGR回路は、温度変化に依存しないような回路の構成を取っています。

温度補償の理論的アプローチ

 本節では、前回示したWidlar回路に組み込まれていた温度補償について、理論的にアプローチしてみたいと思います。

  温度補償の考え方:

 以上より、温度補償を適応したWidlar回路の回路定数は、以下の通りとなります。

  R3=500Ω
  R2=10.1×R3≒5kΩ
  R1=R2/10=500Ω

※R2=10.1×R3=5,050Ωだが、手元の抵抗値で合成し易いように、R2=5kΩとした。この時のR2/R3=10と、理論的に導き出した値(10.1)に比べて誤差を生じた。所詮、定数として参照したVbeの温度依存性傾きSa≒−2mVにも値の幅があるので、ピタリ合わせることに意味はない。

 前回、何も説明せずに使用していたR1〜R3の回路定数は、上述考え方に従って決定されていました。という、タネ明かしです。
 もう一歩踏み込むと、前回示した回路には既に、理論的に考察した温度補償が適応されています。シミュレーションで確認しておきましょう(次節)。

LTspiceでWidlar回路の温度依存性を確認

 以下に示すシミュレーション用回路を使います。

a194_schem.png

 と言っても、回路そのものは、前回実験に使った回路と全く同じです。シミュレーションの挙動を制御するディレクティブが異なっています。

※ディレクティブ: LTspiceシミュレータへの指示です。回路図中、ピリオド(.)で始まる黒字テキストが有効です。青字テキストはコメントなので、シミュレーションに影響しません。LTspiceの回路図エディタで、ディレクティブ⇔コメントを切り替えられるので、所望のディレクティブを有効化してシミュレーションしてください。

 温度を変化した時の挙動をシミュレーションするためのディレクティブは以下となります。

  .step temp -25 75 5

 「温度(temp)を−25℃から75℃まで、5℃刻みで変えながら(21回)シミュレーションしなさい」と言う指示となっています。シミュレーション時間は×21倍に長くなります。

 シミュレーションしたら、いつもの波形表示ウインドウではなくて、「Viewメニュー ⇒ SPICE Error Log」を開きます。エラーログウインドウが表示されるので、そのウインドウで「右クリック ⇒ Plot .step'ed .meas data」を実行します。新たに波形表示ウインドウが開くので、「右クリック ⇒ Add Traces」で所望の信号をモニタしてください(下図)。

a194_temp.png

※モニタ可能な信号は、「.meas」ディレクティブで指定した数値だけですので、必要な信号を「.meas」で記述しておく必要があります。

 上図は、横軸に温度(−25〜75[℃])、縦軸に電圧を取って、VREF(緑)、Vbe3(青)、ΔVbe(赤)をプロットしたものです。

  考察:

 R2/R3=5,000Ω/500Ω=10の比は、理論的アプローチによって適用した定数です。理論上×10.1倍だったところ、手持ちの抵抗値で構成し易いように、×10倍で近似設定しました(前節)。

※尚、「.step temp」ディレクティブによるシミュレーションは、使用する素子のモデルに温度によるパラメータが含まれている場合にのみ有効です。温度パラメータを含まないモデルでは、温度依存性を確認することはできません。

シミュレーション結果からフィードバック

 ΔVREF≒12.1mV/100℃と言う事で、このままでも十分なのですが、もう少しちゃんと温度補償を実行して行きます。

 前節シミュレーション結果から読み取った、Vbeの温度依存性傾きSa=−174.7mV/100℃と、ΔVbeの温度依存性傾きSb=19.55mV/100℃を使うと、温度依存性を完全に打ち消すためには、ΔVbeの係数を−Sa/Sbとすれば良いことが解ります。係数はR2/R3なので、以下となります。

  R2/R3=−Sa/Sb≒8.94
  R3=500Ωを固定して、R2≒4,470Ω

 R3を変更してしまうと、トランジスタのキーパラメータであるベース電流値が変化してしまうため、R3は固定しておいて、R2の方を変更しなければなりません。この場合、R1=R2/10と決めてありましたので、R1もセットで変更する必要があります。

 抵抗R2=4,470Ω、R1=447Ωに変更してシミュレーションすると、以下図となりました。

a194_temp_vref2.png

 前節シミュレーション結果(R2=5,000Ω、ΔVREF≒12.1mV/100℃)と比べてΔVREF≒7.73mV/100℃と、温度依存性が低下しましたが、まだ残っていますね。
 −25〜75[℃] (100℃範囲)の「平均」傾きで計算したので、100℃範囲のどの点を取っても「平均的」に、温度依存性の低い回路定数となっています。

 シミュレーション結果からフィードバックして回路定数を決定したにもかかわらず、温度依存性がしつこく残ってしまったのは何故でしょうか?元々、VREF=Vbe3+R2/R3×ΔVbeの式を導き出した時、近似計算を実行したせいかもしれません。ちょっとしたことで温度依存性が残ってしまったようです。
 これが限界でしょうか?

 2つのプロットを見比べてみると:

a194_temp_vref2.pnga194_temp_vref1.png

 R2=4,470Ωの上左図と、R2=5,000Ωの上右図では、VREFの傾きが正負逆転しています。一方は右肩下がり、他方は右肩上がりです。これって、R2=4,470〜5,000[Ω]の間に、もっと水平になる丁度良いパラメータが存在しそうですよね?

抵抗値R2を総当たりして、最適値を探求

 前節考察の様に、シミュレーション結果からのフィードバックでは最適解に到達できないようです。ならばR2を総当たりして、最適値を求めてしまいましょう。

 温度を変化させたシミュレーションを実行した時に使った「.step」ディレクティブを使うと、回路定数を変化させることもできます(↓)。

  .step param R2 4000 5000 100

 回路図中、500とか5,000とか、数値で指定する代わりに、括弧{ }で括って「{R2}」等と指定した値は、パラメータ(変数)となっています。上のディレクティブでは、「パラメータR2を4,000から5,000まで100刻みで変化させながらシミュレーションせよ」と、LTspiceに指示しています。

 温度変化の「.step」も活きているので、二次元のマトリクスになります。それだけシミュレーション時間が長くかかる、と言う事です。

  温度が100℃範囲を5℃刻みなので×21倍
  抵抗R2が4,000〜5,000[Ω]を100Ω刻みなので×11倍
  その組み合わせで×231倍(=21×11)のシミュレーション時間がかかる

 特に、気の短い方はご注意ください(1^^;)。

 以下にシミュレーション結果を示します。

a194_temp_r2.png

 横軸に温度、縦軸に電圧を取って、VREFをプロットした図です。カラフルなプロットは、抵抗R2を4,000 → 5,000[Ω]まで、100Ω刻みで変化させた時の各VREF値です。

 VREFに温度依存性が無くなると、そのプロットは水平線になります。カラフルなプロット達の中で、一番水平線に近い物を探してみると、暗い青色プロット(上から4番目)が一番水平に見えます。この時のR2=4,600〜4,700[Ω]付近だと解りました。
 これで100の位が確定したので、この調子で10の位、1の位、と詳細に絞り込んで決めて行きます。

  .step param R2 4000 5000 100
    ↓
  .step param R2 4650 4750 10
    ↓
  .step param R2 4665 4675 1

 一番水平線に近くなる周辺のR2で、更に、一番使用頻度の高い25〜35[℃]で温度依存性が低下する、R2=4,668Ωが最適であると判断しました。
 決定したR2=4,668Ωに設定してシミュレーションしたところ、以下図となりました。

a194_temp_vref3.png

 横軸に温度、縦軸にVREF電圧値を取ったプロットです。
 「全然水平じゃないじゃん」って思うかもしれませんが、縦軸に注目〜!ΔVREF≒460μV÷100℃しかありません。ほぼ水平です(1^ー^)v。しかも、室温付近の平坦度が特に高くなっているので、通常使用状態が一番温度依存性の少ないパラメータです。

※ただ単に、ΔVREFを小さくしたいのであれば、もう少しR2を大きくとると、おわん型プロットの底の部分が低温側にシフトして、ΔVREF→小となります。この場合、室温付近の温度依存性(傾き)が増加するので、それを嫌って上のパラメータ(R2=4,668Ω)に決定しました。

 ここまで来たら、実際の回路(実物)で温度を変えながら出力電圧の評価をしてみたいところではありますが、如何せん、個人の趣味レベルでは温度を変化させた実験を行えるような環境(装置、サーモストリーマ等)がありませんので、「シミュレーションで確認した」所で以上、終了とします。

実物ではそう上手くは行かない

 本ページの議論は、ある意味、温度補償回路設計の楽しい部分だけをつまみ食いしたような形です。最終的に実物で回路を作成し、評価するとなると、ここから先が大変なのです。

  上の記事は、あくまでシミュレーション上の、話。

 使用したトランジスタモデルの温度係数が正しく実物を反映している場合に限り、実物でも同じ結果となります。万一、モデルが実物を反映していなかったら、上のシミュレーションは全く無意味です。…… 勿論、「そんなことは無い」と信じて実施しております(1^o^;)/。

 実物(ディスクリート)で回路を作る場合、「同じ特性」であるべき3つのトランジスタにも個体差(特性バラツキ)があるし、抵抗にも公差があります。既成抵抗等の影響もあるし、シミュレーション通りに行くはずがないのです。

 1つのチップ上に回路を構成する場合も同じです。特に、半導体プロセスの抵抗値は「でき合い」によってばらつくので、設計通りに作り込んだとしても、何万個も製造している間には大きく目標値を逸脱するチップも製造されてしまいます。
 よって、市販のBGR素子の場合、完成後にトリミングを実施して出力電圧値を校正してから出荷しているものが多い様です。


 肝心な、実物での温度補償評価はできませんでしたが、温度補償まで含めたBGR回路を一貫して設計することが出来て、理解が深まりました。


btn_arduino.png

btn_prev.png btn_next.png

home