MastHead

ブートストラップの魔法


ブートストラップ回路は、なれるととても有用な使い方のできる回路です。

一般的には、あるノードのインピーダンスを高くしたり、(同じことですが)浮遊のキャパシタンス分を小さくさせたりすることを目的としています。  やり方としては、そのノードと同じ交流の位相を持ち、同じかやや小さい振幅で、かつインピーダンスの低い別のノードを用意してやります。  そこから最初のノードに対して十分大きいキャパシタでつないでやります。


図1は、当時の松下通信工業が測定器を作っていた頃の製品の初段で、交流電圧を測定するための、高入力インピーダンス回路です。
D1、D2は入力端子に誤って大きな電圧をかけたときにJFETを保護するためのバイパスダイオードです。  ところが、これを入れるとその寄生容量のため入力容量が増えてしまい、高周波でのレスポンスが低下します。
そこで、K13 のソースフォロアで下がったインピーダンスを利用し、同じ位相でやや小さい電圧になるノードから 2200p でダイオードの下に注入してやります。  D1の両端は交流的に同じ信号になりますから、その接合容量を通して流れる電流はなくなります。 

設計者の頭の中では、思考の順はきっと図2のようになっているのではないでしょうか。


図3 は私もよく使うブートストラップ回路で、普遍的に見られます。
これは、Q1の負荷を軽くするための手段です。
C1 が無ければ Q1 の負荷は R1+R2 に Q2 の入力インピーダンスが並列になったものですが、Q2でインピーダンスを下げておき、その出力を使って R1 の上側のノードを振ってやります。
Q1 のコレクタから見ると、例えば電圧が少し上昇したとしますと、R1 の向こう側の電圧は同じ変分だけ上昇し逃げていきますので、R1に流れる電流は変化しません。 Q2 のベース電流を無視すれば、 Q1のコレクタ電流が変化しないということです。 電流が変化しないので、コレクタから外を見た交流インピーダンス ∂V/∂I は ∂I がゼロですからとても大きな値になります。
必然的に Q1 の増幅率は大きな値になります。

Q1 の入力につながっている信号源が低いインピーダンスの時は、Q1 の hie が非直線ですから(Ib/Vbe はダイオード特性)、歪みが導入されます。 ところが、Icが変動しなくなると Ib もあまり変化しない範囲で使用されることになり、非直線性による歪みの効果が低減されることになります。 

この回路で注意するべきことは、R1の上側の電位が Vcc と超えてさらに上まで行くことです。 そうすると Q2 のベース・コレクタの接合が順方向になり完全な飽和状態になります。 飽和に近いところで高周波のレスポンスが悪くなり、位相の回りが発生します。  寄生振動を起こすことがよくありますので注意してください。  筆者が購入した、ン十万円もする超高級パワーアンプにその問題があり、回路を修正しました。  そのアンプはその他にも設計上の問題が散見されましたので、後日回路を一から設計し直して作り替えました。


図4は私が設計したことのある回路です。
Q1,Q2は差動増幅ですが、Q1のベースにある 12k は通常直接接地されています。 その状態で回路を考えてみますと次のジレンマがあります。
12k はこの回路の入力インピーダンスを決定します。 あまりにも低すぎる、というユーザがいるかも知れません。
Q1のベース電流とQ2のベース電流は必ずしも同じではありません。 トランジスタのHFEは3倍ぐらいの個体差があるのが普通です。 片方が 20uA で、もう片方が60uA だとしましょう。 入力インピーダンスを 100kΩ とするために両側の 12k の抵抗を 120k に取り替えたとします。 ベース電位は -2.4V と -7.2V になります。 NF がかかっていますから、これは補正され、差分は出力のオフセット電圧となります。 まずいですね。

12k にもどしてやるとオフセットは 1/10 になりますし、あとQ1とQ2を比較的 HFE を高いもので、違いを 1.5倍以内程度にしてやれば、オフセットの問題は解決します。 さらに、図4の様にQ1にある 12k の下側を、インピーダンスが低くて同じ位相・電圧である 33u の下につないでやると、入力インピーダンスが低いという問題も解決します。

ここで次の問題が発生します。 
もし入力の 10u が小さくなると、このNFループの安定性がどうなるかという計算をしておかねばなりません。  面倒な式は省略しますが、ループ伝達関数を計算し、角周波数ωを媒介変数としてナイキスト線図を書くと、図5の(b)1の様になります。 (a) は素直にグラウンドに落としている場合です。
10u を小さくして 1u 位にしていくと、円弧がややふくらんで(b)2の様に j 軸に近づきます。  図には示しませんがこの周波数で、入出力伝達関数に若干(1dBほど)の上昇がみられます。  ループ伝達関数は 90 度まで回りませんので、発振の心配はありません。
10uにしてやれば全く問題はありません。

なお、上の図3、4はブートストラップの説明のために書いたもので、位相補正など他の詳細を省略しています。


次に、とても高いレジスタンスを実現するケースです。
図6はエレクトレットコンデンサマイクの入力回路の設計をしている途中です。  素子の容量と、FETのゲートまでの浮遊容量の合計が 25pF であるとします。 
ゲートは浮いたままではいけないので、抵抗で適当なバイアス点につなぎます。 この例ではグラウンドになっています。 この抵抗値はいくらであるべきでしょうか?

マイクは音楽用の高級機で、低域のレスポンス(-3dB)が仮に 5Hz まで求められたとすると、

         X = 1/(2 * π * 5 * 25e-12)    (Ω)

ですから 1.3GΩ になります。 こんな大きな抵抗はちょっと入手できません。

図7はソニーの回路です。 前述の 25pF はこの回路から私が勝手に逆算した値です。
図中の X MΩ は取り外して測ってみると 1GΩ でした。
これで、この回路のようにブートストラップがかけられると、いくらぐらいの値に見えるでしょうか。
2SK30A は Id が 0.8mA ほどに設定されていますから、gm は 1.6mS 程度です。 そうすると、ソースの出力インピーダンスは 620Ω ほどになります。 出力トランスの巻線比は 4.3:1 ほどのようです。 出力ラインの負荷を 1kΩとしますと、トランス入力側のインピーダンスは 18.5k Ωとなり、問題の抵抗の下側までの増幅率は 0.84 ほどになります。 入力に対して 0.84倍で同相に動きますので、そこを流れる電流は 0.16 倍になります。 ですからみかけの抵抗は大きくなって
   1e9 * 1/0.16 = 6.3e9
となります。 大まかには 「数倍の値に化ける」ということができます。 これで 1Hz ぐらいまで届きそうです。

このマイクは、ステージでの音楽収録とスタジオでの音声収録の両用の高級機です。
ついでですが、出力トランスのセンタータップを使って、リピータからマイクケーブルを逆に通して電源を供給できるようになっている点にも注目してください。  ファントム電源といいます。

(注: 数百円で売っている 1cm 位の直径のエレクトレットコンデンサマイクはこの回路は使っていません)

ブートストラップはうまく使ってください。 とても助かることがよくあります。



[余談]
「ブートストラップ」という言葉は、コンピュータの始動時のシステムの立ち上げのことを言うこともあります。
もとは、ほら吹き男爵(Baron Munchausen)の話から取られたということです。 

ブーツを履くときにつかむ革の部分をブートストラップといいます。 沼にはまってしまったとき、ここをつかんで引っ張り上げると、靴が持ち上がり、靴が上がると足が持ち上がり、足が上がると身体が持ち上がり、身体が上がると手も上がるから、この循環で沼から抜けだせる、、、というほらです。
ところが、「ほら吹き男爵」は本が何種類もあって話が少しずつ異なるのですが、探してもそんな話は見つかりませんねえ。

上の、図3でいうと、エミッタフォロアの出力端子が身体で、C1が手で、R1がつかむところで、Q1のコレクタが靴で、Q2のベースが足になります。 
足(Q2ベース)が上がると身体(エミッタ)が上がります。 身体が上がると手(C1)が上がります。 手が上がると靴つまみ(R1)が上がります。 靴つまみが上がると靴(Q1コレクタ)が上がります。 こうして身体はどんどん上昇します。

パソコンの時は、電源が入ると、MPU のCSレジスタ以外のレジスタに0を入れるようにハードウェアが動作し、CSレジスタにはFFFFhを入れクロックがスタートします。 メモリーの FFFF:0000 番地はROMなので必ず実行可能な命令になっていて、通常は Jamp です。 それが実行されると、F000 セグメントのどこかに行きます。 そこでは、ブートデバイス(例えばC:だとします)のシリンダ0,ヘッド0,セクター1から 512バイト(MBR といいます)を読むプログラムになっていて、その MBR を 0000:7c00 番地に読み込んでから、そこにジャンプします。 MBR のプログラムは OS を読み込むように書かれています。  
こうやって、エラーの検出もできないようなちいさなプログラムから、少しずつ大きなプログラムへ発展的に読み込んで立ち上げるのです。
大型コンピュータのときは IPL (Initial Program Load) とも言って、もう少し複雑ですが、原理的には、まあ同じように行います。 わたしも IPL のプログラムを何種類か書いたことがあります。