Chapter 5 [目的] 電気通信大学・Ⅲ類の2年次後期に実施される理工学基礎実験において “ダイオード・トランジスタ”を実施している。この実験項目について、無料ソフトの Maxima を用 いることで、理論解析と実験値の比較が可能である。また、近年のパソコンの性能の向上により、 Maxima の実行処理速度が大幅に改善された。 Maxima を用いて計算方法と計算結果を示すことで、実験レポートの考察のヒントにして、実験 内容の理解を深めることが目的である。 [目次] 以下の節から構成されています。 5-1 ダイオードのIV特性について 5-2 ダイオード特性方程式と負荷線について 5-3 ダイオード特性の実験データの解析 5-4 トランジスタ特性:IC-VCEについて 5-5 Ebers-Mollモデルを用いたIB-IC特性グラフの表示 5-6 アーリー効果を考慮した静特性のEbers-Moll Modelについて 5-7 Ebers-Moll model と実験データの比較について 課題について (準備中) 付録.1 単位の解析について 付録.2 熱電圧(Thermal Voltage)について
Maxima を用いたダイオード・トランジスタの解析について
2017.12.18 版5-1 ダイオードの IV 特性について [目的] ダイオードの特性方程式について調査する。 [手順と結果] 変数を初期化する。 (%i1) kill(all); 計算で必要な物理定数を定義する。 素電荷 q [C]を定義する。 (%i1) q:1.60218*10^-19; ボルツマン定数 k [J/K]を定義する。 (%i2) k:1.38065*10^-23; 動作温度 T[K]を定義する。 (%i3) T:300; 室温(T=300K)での熱温度電圧:Vroom を定義する。 (%i4) Vroom:k*T/q; 飽和電流 Is[A] を定義する。 ((注))今回は、式の特性をグラフ化が目的なので、以下の数値とした。 (%i5) Is:1*10^-12; 拡散電流が支配的である場合と仮定して、理想係数 N=1 とする。 (%i6) Id:Is*(exp(V/Vroom)-1); Fig.1 ダイードと抵抗の直列回路
ダイオードの特性方程式を定義する。 (%i7) define(Idiod(V),%); 定義した関数の動作を確認する。 (%i8) Idiod(1); 定義した関数をグラフ表示する。 (%i9) wxplot2d(Idiod(V),[V,0.001,0.7], /* [logy],*/ [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [gnuplot_preamble,"set grid"]); 飽和電流 Is[A]の影響を確認するために、Is1=1*10^-11[A] を代入する。 (%i10) Is1:1*10^-11; (%i11) Id1:Is1*(exp(V/Vroom)-1); Fig.2 ダイオード特性の理論グラフ
定義した関数の計算確認する。 (%i12) define(Idiod1(V),%); 異なる Is のグラフ表示する。 (%i13) wxplot2d([Idiod(V),Idiod1(V)],[V,0.001,0.7], /* [logy], */ [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [legend,"Is:1pA","Is:10pA"], [gnuplot_preamble,"set grid"]); ダイオード特性の特徴を確認するために、縦軸を log グラフに変更する。 表示されるグラフが直線であることが確認できる。 (%i14) wxplot2d([Idiod(V),Idiod1(V)],[V,0.001,0.7], [logy], [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [legend,"Is:1pA","Is:10pA"], [gnuplot_preamble,"set grid"]); Fig.3 異なる Is のダイオード特性の理論グラフ
つぎに、 0.7V での接線から立ち上がり電圧を求める。 V=0.7[V]での電流値を計算する。 (%i15) Ico:Idiod(0.7); 傾きを求めるために、ダイオード特性の理論線から微分式を求める。 (%i16) dI:diff(Idiod(V),V); 定義した関数の動作確認する。 (%i17) dIco:ev(%,V:0.7); 接点の値を定義する。 (%i18) xpoint:[0.7];ypoint:[Ico]; Fig.4 Semi-log グラフでの異なる Is のダイオード特性の理論グラフ
接線: I-Ico=dIco*(V-0.7) で計算できる。この式を変形すると以下の式となる。 I=dIco*(V-0.7)+Ico Ref. [1] example site http://www.geisya.or.jp/~mwm48961/kou3/sessen1.htm 接線を定義する。 (%i20) expr:dIco*(V-0.7)+Ico; Maxima の関数として再定義する。 (%i21) define(Icon(V),expr); ダイオード特性式と接線を同時に表示する。 (%i22) wxplot2d([Idiod(V),Icon(V),[discrete,xpoint,ypoint]],[V,0.001,0.75], /* [logy],*/ [x,0.5,0.75], [y,-1,1], [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [color,blue,red,green], [style,lines,lines,points], [point_type,circule], [legend,false], [gnuplot_preamble,"set grid"]); Fig.5 ダイオード特性の理論グラフと接点と接線のグラフ
立上り電圧は、x 軸との交点を求める。 接線において、I=0 となる電圧であるので以下で計算できる。 (%i23) solve(Icon(V),V); 出力結果を実数で表示する。 (%i24) float(%); 以上から、立ち上がり電圧は、以下となる。 (%i25) xzero:[rhs(%[1])];yzero:[0.0]; 最後に、 ダイオード特性、接点、接線そして、立ち上がり電圧を、同時に表示する。 (%i27) wxplot2d([Idiod(V),Icon(V),[discrete,xpoint,ypoint],[discrete,xzero,yzero]], [V,0.001,0.75], /* [logy],*/ [x,0.5,0.75], [y,-1,1], [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [color,blue,red,green,black], [style,lines,lines,points,points], [point_type,circule],
[legend,"Diode","Contact line","Contact point","Cross Point"], [gnuplot_preamble,"set key left bottom;"],
グラフから、計算できていることが確認できる。
5-2 ダイオード特性方程式と負荷線について [目的] ダイオード特性をグラフ表示して、負荷線とダイオード方程式の交点を求める。 [手順と結果] 変数を初期化する。 (%i1) kill(all); 計算で必要な物理定数を定義する。 素電荷 q [C]を定義する。 (%i1) q:1.60218*10^-19; ボルツマン定数 k [J/K]を定義する。 (%i2) k:1.38065*10^-23; 動作温度 T[K]を定義する。 (%i3) T:300; 室温(T=300K)での熱温度電圧:Vroom を定義する。 (%i4) Vroom:k*T/q; 飽和電流 Is[A] を定義する。 ((注))今回は、式の特性をグラフ化が目的なので、以下の数値とした。 (%i5) Is:1*10^-12; 拡散電流が支配的である場合と仮定して、理想係数 N=1 とする。 (%i6) Id:Is*(exp(V/Vroom)-1); ダイオードの特性方程式を定義する。 (%i7) define(Idiod(V),%); Fig.1 ダイードと抵抗の直列回路
定義した関数の動作を確認する。 (%i8) Idiod(1); 定義した関数をグラフ表示する。 (%i9) wxplot2d(Idiod(V),[V,0.001,0.7], /* [logy],*/ [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [gnuplot_preamble,"set grid"]); ダイオード特性方程式のグラフ表示ができたので、 次に、負荷線方程式を定義して、グラフ表示する。 回路の抵抗 R0 を定義する。 (%i10) R0:1*10^3; 式を定義する。 (%i11) I(E,V):=E/R0-V/R0; 関数の動作を確認する。 (%i12) I(5,1); Fig.2 ダイオード理論グラフ
電源電圧を 5V のときの負荷線を定義する。 (%i13) define(Ir(V),I(5,V)); 定義した負荷線をグラフ表示する。 (%i14) wxplot2d(Ir(V),[V,0.001,5], /* [logy],*/ [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [gnuplot_preamble,"set grid"]); 以上で負荷線の表示を確認できた。 次に、 負荷線とダイオード特性方程式の交点を確認する。 Fig.3 負荷線のグラフ
以上の定義した関数を同時に表示する。 (%i15) wxplot2d([Idiod(V),Ir(V)],[V,0.001,0.6], /* [logy],*/ [xlabel,"Voltage[V]"], [ylabel,"Current [A]"], [gnuplot_preamble,"set grid"]); 交点が存在することが確認できたので、交点を求める。 定義式を確認する。 (%i16) Id; Solve 関数で解を求める。 (%i17) solve(Id-(5-V)/R0=0,V); Solve 関数では、解が得られないので、数値解析の ニュートン・ラプソン法を用いて交点を求める。 http://whs-math.net/math/sec3240.html basic package:newton を読み込みます。 (%i18) load(newton); Fig.4 負荷線とダイオード特性のグラフの交点近傍
((注))以下はテスト関数です。 (%i19) /* newton(2^(-x)-x,1); */; (%i19) /* float(%); */; 交点を求めるために、初期値を 0.3 として解を求める。 (%i19) newton(Id-(5-V)/R0,0.3); 精度を指定可能なニュートン・ラプソン法を用いる。 Check another function:newton for package:newton1 Package を読み込みます。 (%i20) load(newton1); (%i21) newton(Id-(5-V)/R0,V,0.4,1/100000); 連立方程式を解くニュートン・ラプソン方法を用いる。 package:mnewton を読み込む。 (%i22) load(mnewton); (%i23) mnewton([Id-(5-V)/R0],[V],[0.5]); 解が小数点5ケタまでは一致していることが確認できました。
解を求めるときに、初期値が適切なのか判断できない場合は、 初期値を変更しながら計算させることもできます。
(%i24) for i:1 thru 5 step 1 do( x:i*0.1,
kai:mnewton([Id-(5-V)/R0],[V],[x]), print(kai)
5-3 ダイオード特性の実験データの解析 [目的] 測定データを入力確認後、近似したダイオードの特性式に fitting した近似式を求める。 [手順と結果] 変数の初期化を実行する。 (%i1) kill(all); 測定した電流値のデータを設定する。 (%i1) datax:[0,0.001,0.005,0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,14]; 測定した電圧値のデータを設定する。 (%i2) datay:[0,0.24,0.34,0.36,0.39,0.43,0.46,0.49,0.53,0.57,0.6,0.65,0.68,0.69]; 電流値は、mA なので 10^-3 倍して A にする。 (%i3) dataxA:datax*10^-3;
実験データを表示し確認する。 (%i4) wxplot2d([discrete,datay,dataxA], /* [x,2000,200*10^3], */ /*[logx],*/ /*[logy],*/ [style,points], [color,red], [gnuplot_preamble,"set grid"]); 近似式を求めるために、電流値を log に変換する。 入力した電流値を確認する。 (%i5) dataxA; Log 変換するので、ゼロは、削除する。 (%i6) dataxA1:rest(dataxA); Fig.1 実験データのグラフ
参考文献[1] Wollett_mbe1strt.pdf (%i7) dataxAlog:map(log,dataxA1); 変換したデータを表示して確認する。 (%i8) wxplot2d([discrete,rest(datay),dataxAlog], /* [x,2000,200*10^3], */ /*[logx],*/ /*[logy],*/ [style,points], [color,red], [gnuplot_preamble,"set grid"]); Fig.2 Log 変換した実験データのグラフ
近似式を求めるために、x-y 形式のデータリストに変換する。 (%i9) dataxy:map("[",rest(datay),dataxAlog); 最小自乗法行列形式に変更する。 (%i10) dataM:apply('matrix,dataxy); 最小二乗法の Package: lsquares を読み込む。 (%i11) load(lsquares);
Fitting を計算を実行する。 計算結果を kai に代入する。 解として、a,b がリスト形式で出力される。 (%i12) kai:lsquares_estimates(dataM,[x,y],y=a*x+b, [a,b],iprint=[-1,0]); 得られたリスト形式の解を myfit 関数に代入する。 以下の様にすると、関数の a, b に代入されます。 (%i13) myfit:a*x+b,%;
Fitting 関数とデータを同時表示して確認する。 (%i14) wxplot2d([myfit,[discrete,dataxy]],
[x,0,1],
[style,[lines,5],[points,4,2,1]], [legend,"myfit","data"],
[gnuplot_preamble,"set key bottom;"] );
Fitting した関数を再確認する。 (%i15) myfit;
計算結果の kai から値を取り出す。 リスト形式であるので、以下で取り出すことができる。 (%i19) A:rhs(kai[1][1]); (%i20) B:rhs(kai[1][2]); 係数 A,B を実数表示する。 (%i21) float(A); (%i22) float(B);
係数 A,B と、ダイオード特性式の関係を以下に示す。
exp(qV/kT)>>1 のとき、 特性方程式は以下の式に近似できる。 I = Is* Exp(q*V/N*k*T -1) ≒Is*Exp(q*V/N*k*T) ----(1) (1) 式の両辺の自然対数をとる。 log(I) = log(Is) + q*V/N*k*T ---(2) (2)式は、以下の(3)式の形式であることが確認できる。 y = B + A*x ---(3) この(3)式において、y=log(I)で、x=V とすると、 A=q/(k*T)*1/N ---(4) B=log(Is) ---(5) に対応していることが確認できる。 kT/q は、室温電圧と呼ばれている。 T=300K のとき, kT/q は約 26mV である。 (4)式から、理想係数 N が得られる。 (%i23) N:1/(A*0.026); 実数表示する。 (%i24) float(%); 同様に、(5)式から Is が求められる。 (%i25) Is:exp(B); 計算結果を実数表示する。 (%i26) float(%);
近似したダイオード特性式を電圧 V の関数として定義する。 (%i27) define(Id(V),Is*exp(V/(0.026*N))); 実験データと近似したダイオード特性式を同時に表示して確認する。 (%i32) wxplot2d([Id(V),[discrete,datay,dataxA]], [V,0,0.5], [style,[lines,5],[points,4,2,1]], [legend,"myfit","data"],
[gnuplot_preamble,"set key top;"] );
以上で、実験データに、近似したダイオード特性式が fitting できていることが確認できる。 Fig.4 実験データと fitting したダイオード特性方程式のグラフ
5-4 トランジスタ特性:IC-VCE について [目的]
トランジスタの特性の中の Ic-Vce 特性についての理論グラフを表示する。
ここで、使用する理論は、最もシンプルな回路モデルの Ebers-Moll モデルを使用する。 参考文献
[1]G. Massobrio, and P. Antognetti,
"Semiconductor Device Modeling with SPICE 2nd" McGraw Hill,1933
[手順と結果]
すべての変数を初期化する。 (%i1) kill(all);
参考文献[1]にある
”SPICE2 BJT Ebers-Moll static model”の式を定義する。
Is,など主要な定数は、Block 関数を用いて以下の様に定義する。 (%i1) Ic(Vbe,Vbc,Is,betaF,betaR):=block( [Ic, q:1.602*10^-19, k:1.38*10^-23, T:300, GMIN:1.0*10^-12, Isf:1.0*10^-16], /* Active */ if (Vbe>-5*k*T/q) and (Vbc<=-5*k*T/q) then Is*Isf*(exp(q*Vbe/(k*T))+1/betaR)+(Vbe-(1+1/betaR)*Vbc)*GMIN /* Inverse */
elseif (Vbe<=-5*k*T/q) and (Vbc>-5*k*T/q)
then -Is*Isf*(exp(q*Vbc/(k*T))+1/betaR*(exp(q*Vbc/(k*T))-1))+(Vbe-(1+1/betaR)*Vbc)*GMIN
/* Satrurate */
elseif (Vbe > -5*k*T/q) and (Vbc>-5*k*T/q)
then Is*Isf*(exp(q*Vbe/(k*T))-exp(q*Vbc/(k*T))-1/betaR*(exp(q*Vbc/(k*T))-1))+(Vbe-(1+1/betaR)*Vbc)*GMIN
/* Off */
elseif (Vbe <= -5*k*T/q) and (Vbc <= -5*k*T/q) then Is*Isf/betaR+(Vbe-(1+1/betaR)*Vbc)*GMIN );
Fig.1 Run - Mode
Vbc=-Vce+Vbe を用いて、変数変換を実行する。 (%i2) subst(-Vce+Vbe,Vbc,Ic(Vbe,Vbc,Is,betaF,betaR));
関数の動作確認するために、値を代入する。 (%i4) Ic(0.78,6,1,150,0.001); つぎに、関数を確認する。 (%i6) wxplot2d(Ic(0.8,x,1,180,0.001),[x,0.001,10], [y,0,0.01], [xlabel,"Vce"], [ylabel,"Ic"], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.1 Ic-Vce 特性のグラフ
実験では、Ib を一定の値として実験しているが、 定義した関数は、Vbe 一定の関数であることに注意する。 Vbe=0.8 と Vbe=0.75 の関数を定義する。 そして、定義した関数について、グラフ表示する。 (%i7) define(Ic0_8(x),Ic(0.8,x,1,180,0.001))$ (%i8) define(Ic0_75(x),Ic(0.75,x,1,180,0.001))$ (%i9) wxplot2d([Ic0_75(x),Ic0_8(x)],[x,0,10], [y,0,0.01], [xlabel,"Vce"], [ylabel,"Ic"], [legend,false], [gnuplot_preamble,"set grid"] ); このグラフと実験データを比較すると、 Ebers-Moll モデルの問題点が確認できます。 Fig.2 異なる Ib での Ic-Vce 特性のグラフ
5-5 Ebers-Moll モデルを用いた IB-IC 特性グラフの表示 [目的]
Ebers-Moll モデルを用いたときの IB-IC 特性のグラフを表示する。 参考文献
[1]p224, R. C. Jaeger & T. N. Blaloac, “MicroElectronic circuit design,4th" 参考文献での設定値を以下に示す。 ideal coefficient:N=1.4 Is:10^-13 [A] betaF:170 betaR:170 Vt:0.026[V] VCC:12 [V] [手順と結果] 参考文献の計算を確認する。 はじめに、上記の設定値を定義する。 (%i27) Vt:0.026; (%i28) Is:10^-15; (%i29) betaF:50; (%i30) betaR:1; (%i31) Vcc:5; (%i32) Vbe:0.75; (%i33) Vbc:Vbe-Vcc; Ic の計算を実行する。 (%i34) Ic:Is*(exp(Vbe/Vt)-exp(Vbc/Vt))-Is/betaR*(exp(Vbc/Vt)-1); Ie の計算を実行する。
(%i35) Ie:Is*(exp(Vbe/Vt)-exp(Vbc/Vt))+Is/betaF*(exp(Vbe/Vt)-1); 最後に、Ib についの計算を実行する。 (%i36) Ib:Is/betaF*(exp(Vbe/Vt)-1)+Is/betaR*(exp(Vbc/Vt)-1); (%i37) Ic+Ib; 以上より、使用する式について計算ができることが確認できたので、 以下に使用する式についてまとめる。 電圧条件:Vbe>4Vt=0.1V and Vbc<-4Vt=-0.1V, この場合は、exp(-Vbc/Vt)<<1 をもちいて、次の関係が成立する。 ic=Is*exp(Vbe/Vt)+Is/betaR ie=Is/betaF*exp(Vbe/Vt)+Is/betaF ib=Is/betaF*exp(Vbe/Vt)-Is/betaF-Is/betaR => ib=1/betaF(exp(Vbe/Vt)+Is/(betaR*betaF))-Is/betaF-Is/betaR-Is/betaR =1/betaF*Ic-Is/betaF-2Is/betaR 以上で、Ic, Ie と Ib の関係式が定義できたので、再計算する。 すべての変数を初期化する。 (%i38) kill(all); Ic の関数を定義する。 (%i1) Ic:Is*(exp(Vbe/(N*Vt))-exp(Vbc/(N*Vt)))-Is/betaR*(exp(Vbc/(N*Vt))-1); Ie の関数を定義する。 (%i2) Ie:Is*(exp(Vbe/(N*Vt))-exp(Vbc/(N*Vt)))+Is/betaF*(exp(Vbe/(N*Vt))-1);
最後に、Ib の関数を定義する。 (%i3) Ib:Is/betaF*(exp(Vbe/(N*Vt))-1)+Is/betaR*(exp(Vbc/(N*Vt))-1); Vbc=Vbe-Vcc の関係を用いて、変数変換する。 (%i4) ratsubst(Vbe-Vcc,Vbc,Ic); 得られた数式に、値を代入する。 (%i5) ev(%,Is:10^-13,Vt:0.026,betaF:170,betaR:170,Vcc:12,N:1.4); 値を代入した数式を関数として定義する。 (%i6) define(ICC(Vbe),%); 関数の動作を確認する。 (%i7) ICC(0.75); つぎに、Ie に対して (%i8) ratsubst(Vbe-Vcc,Vbc,Ie);
得られた数式に、値を代入する。 (%i9) ev(%,Is:10^-13,Vt:0.026,betaF:170,betaR:170,Vcc:12,N:1.4); IEE の関数を定義する。 (%i10) define(IEE(Vbe),%); 関数の動作を確認する。 (%i11) IEE(0.75); 最後に、Ib に対して、 (%i12) ratsubst(Vbe-Vcc,Vbc,Ib); 数値を代入する。 (%i13) ev(%,Is:10^-13,Vt:0.026,betaF:170,betaR:170,Vcc:12,N:1.4); IBB 関数を定義する。 (%i14) define(IBB(Vbe),%);
IBB 関数の動作を確認する。 (%i15) IBB(0.75); 計算できたので、関数をセミログのグラフで表示する。 (%i16) wxplot2d([ICC(x),IEE(x),IBB(x)], [x,0.3,0.8], [logy], [xlabel,""], [ylabel,""], [legend,false], [gnuplot_preamble,"set grid"] ); 得られたグラフは、セミロググラフ上で直線的に変化しているので、 指数関数的に変化することが確認できる。 Ib-Vbe の関数 IBB をグラフ表示する。 (%i17) wxplot2d(IBB(x), [x,0.3,0.8], /* [logy], */ [xlabel,"Vbe[V]"], [ylabel,"IBB[A]"], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.1 ICC,IEE,IBBのグラフ表示
ここで、Ib の方程式を確認する。 (%i18) Ib; トランジスタのバイアス関係:Vbc=Vbe-Vcc を用いて、変数変換する。 (%i19) Ibb:ratsubst(Vbe-Vcc,Vbc,Ib); Ic と Ib のグラフを表示する。 解析解は得られないので、Vbe のリストに対応した Ib と Ic のリストを作成する。 はじめに、Vbe の変化に対応する xdata のリストを作成する。 (%i20) xdata:makelist(x,x,7,9,0.02)$ (%i21) xxdata:xdata*0.1; Fig.2 IBB-Ibe,のグラフ表示
IBB に代入して、IBB の計算を実行する。 (%i22) ydata:maplist(IBB,xxdata)$ hFE=ICC(x)/IBB(x) を定義して、グラフ表示する。 横軸 X が Vbe に相当する。 (%i24) wxplot2d(ICC(x)/IBB(x), [x,0.7,1.0], /* [logy],*/ [xlabel,"Vbe"], [ylabel,"IBB"], [legend,false],
[gnuplot_preamble,"set grid;set yrange[150:200]"] );
このグラフから、hFE が一定値の 170 を表示することが確認できる。 Vbe データリストを ICC 関数に代入して、ICC をリストデータとして求める。 (%i25) y3data:maplist(ICC,xxdata)$ 得られたリストをグラフ表示する。 (%i26) wxplot2d([discrete,ydata,y3data], /* [logy], */ [xlabel,"Ib[A]"], [ylabel,"Ic[A]"], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.3 IBB-Ibe,のグラフ表示
アーリー効果を考慮した静特性の Ebers-Moll Model について [目的]
トランジスタのモデルにおいて、アーリー効果を考慮した Ebers-moll モデルのグラフを表示する。 [参考文献]
[1]p325, Sima Dimitrijev,
"Understanding Semiconductor Devices", Oxford University Express., 2000 [手順と結果]
変数を初期化する。 (%i1) kill(all);
アーリー効果を考慮した飽和電流:Is を定義する。[1] VA:アーリー電圧 for Active 領域,
VB:アーリー電圧 for Reverse 領域 (%i1) Is:Is0*(1-Vbc/VA-Vbe/VB); Ic を定義する。 (%i2) Ic:Is*(exp(Vbe/Vt)-1)-(1+1/betaR)*Is*(exp(Vbc/Vt)-1); Vbc=Vbe-Vcc を用いて、変数を変換する。 (%i3) ratsubst(Vbe-Vcc,Vbc,Ic);
Fig.1 Ebers – Moll Model 5-6
出力した式に、値を代入する。 (%i4) ev(%,Is0:10^-15,Vt:0.026,betaF:170,betaR:5,VA:50,VB:50); 値を代入した式を、電流 ICC を Vcc と Vbe の関数として定義する。 (%i5) define(ICC(Vcc,Vbe),%); 定義の確認するために、数値を代入する。 (%i6) ICC(5,0.8);
電流 ICC のグラフを表示する。 (%i7) wxplot2d(ICC(x,0.8), [x,0.01,6],[y,0,0.1], /* [logy], */ [xlabel,"Vce[V]"], [ylabel,"Icc[A]"], [legend,false], [gnuplot_preamble,"set grid"] ); つぎに、 電流 Ib を定義する。 (%i8) Ib:Is/betaF*(exp(Vbe/Vt)-1)+Is/betaR*(exp(Vbc/Vt)-1); Vbc=Vbe-Vcc の関係を用いて、変数変換する。 (%i9) ratsubst(Vbe-Vcc,Vbc,Ib); Fig.3 定義した関数のグラフ
出力された数式に、値を代入する。 (%i10) ev(%,Is0:10^-15,Vt:0.026,betaF:170,betaR:5,VA:50,VB:50); 出力された数式を、Vcc と Vbe を変数とする関数 IBB(Vcc,Vbe)として定義する。 (%i11) define(IBB(Vcc,Vbe),%); 定義の確認のために、数値を代入する。 (%i12) IBB(5,0.8);
定義した IBB(Vcc,Vbe)をグラフ表示する。 (%i13) wxplot2d(IBB(5,x), [x,0.01,0.8], /* [logy], */ [xlabel,"Vbe[V]"], [ylabel,"IBB[A]"], [legend,false], [gnuplot_preamble,"set grid"] );
以上で、トランジスタの Active 領域での Ic-Vce グラフと Ib-Vbe グラフが表示できました。 Fig.4 定義した関数のグラフ
5-7 Ebers-Moll model と実験データの比較について [目的]
Ebers-Moll モデルを用いた計算値と実験データを比較する。
[参考文献]
[1]p325, Sima Dimitrijev,
"Understanding Semiconductor Devices", Oxford University Express., 2000
[手順と結果] 変数の初期化する。 (%i32) kill(all); ベース電流 Ib = 15uA の実験データについて、 印加電圧:Vcc を datax に格納する。 (%i1) datax:[0.05,0.1,0.2,0.3,0.5,0.6,0.7,1,2,2.5,3,4,5]; datay に測定電圧 Vce を格納する。 (%i2) datay:[0.038,0.06,0.089,0.11,0.15,0.18,0.24,0.53,1.53,2.03,2.53,3.53,4.52]; dataz に、測定電流 Ic[mA]を格納する。 (%i3) dataz:[0.082,0.238,0.653,1.117,2.047,2.447,2.689,2.739,2.76,2.769,2.776,2.792,2.806]; 実験データの電流値の mA を A に変換する。 (%i4) datazmA:dataz*10^-3;
実験データをグラフ表示する。 (%i5) wxplot2d([discrete,datay,datazmA], /* [x,2000,200*10^3], */ /*[logx],*/ /*[logy],*/ [style,points], [color,red], [gnuplot_preamble,"set grid"]); 同様に、Ib=30uA のときのデータをリスト格納する。 (%i6) datay30u:[0.0306,0.0478,0.0706,0.0868,0.1121,0.1365,0.1909,0.5770,1.0733,1.5685,2.064,3.0554,4.0478]; 電流値を格納する。 (%i7) dataz30u:[0.123,0.31,0.764,1.258,2.285,3.318,4.76,5.428,5.46,5.485,5.506,5.558,5.605]; 電流値の mA を A に変換する。 (%i8) dataz30umA:dataz30u*10^-3; Fig.1 実験値のグラフ
格納したデータをグラフ表示する。 (%i9) wxplot2d([discrete,datay30u,dataz30umA], /* [x,2000,200*10^3], */ /*[logx],*/ /*[logy],*/ [style,points], [color,red], [gnuplot_preamble,"set grid"]); 格納した実験データのすべてを表示する。 (%i10) wxplot2d([[discrete,datay,datazmA],[discrete,datay30u,dataz30umA]], /* [x,2000,200*10^3], */ /*[logx],*/ /*[logy],*/ [xlabel,"Vce[V]"], [ylabel,"Ic[A]"], [style,points,points], [color,red,blue], [legend,"Ib:15uA","Ib:20uA"], [gnuplot_preamble,"set grid"],
[gnuplot_preamble,"set key right bottom;"]);
Ebers-Moll のトランジスタのモデルを定義する。 (%i11) Is:Is0*(1-Vbc/VA-Vbe/VB); 電流値:Ic を定義する。 (%i12) Ic:Is*(exp(Vbe/Vt)-1)-(1+1/betaR)*Is*(exp(Vbc/Vt)-1); 電圧 Vbc=Vbe-Vcc を用いて、変数の変換する。 (%i13) ratsubst(Vbe-Vcc,Vbc,Ic); 実験データを用いて、Is0 を求める。 Vbe は、測定していないので Vbe=0.8[V]と仮定する。 (%i14) lnIs:log(5.6*10^-3)-0.8/0.026; 以上から、飽和電流:Is00 は以下となる。 (%i15) Is00:exp(%); 得られた値を、SPICE モデル式に代入する。 (%i16) ev(%o13,Is0:Is00,Vt:0.026,betaF:185,betaR:5,VA:50,VB:50);
Vcc と Vbe の関数として ICC を定義する。 (%i17) define(ICC(Vcc,Vbe),%); 計算の確認のため数値を代入する。 (%i18) ICC(5,0.8); 電流関数 ICC のグラフを表示する。 (%i19) wxplot2d(ICC(x,0.8), [x,0.01,6],[y,0,0.01], /* [logy], */ [xlabel,"Vce[V]"], [ylabel,"Icc[A]"], [style,points,points], [color,red,blue], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.4 Ic-Vce の理論のグラフ
SPICE モデルのグラフと実験データを同時に表示する。 (%i20) wxplot2d([[discrete,datay30u,dataz30umA],ICC(x,0.8)], [x,0.01,5],[y,0,0.007], /* [logy], */ [xlabel,"Vce[V]"], [ylabel,"Ic[A]"], [style,points,points], [color,red,blue], [legend,false], [gnuplot_preamble,"set grid"] ); 相違を確認するために、電流値の一部分を拡大表示する。 (%i21) wxplot2d([[discrete,datay30u,dataz30umA],ICC(x,0.8)], [x,0.01,4],[y,0.004,0.007], /* [logy], */ [xlabel,"Vce[V]"], [ylabel,"Ic[A]"], [style,points,points], [color,red,blue], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.5 Ic-Vce の実験値と理論のグラフ Fig.6 Ic-Vce の拡大したグラフ
拡大したグラフにおいて、Vce=0.5 以下で不一致であることが確認できる。 さらに、実験データと計算グラフでのアーリー電圧が一致していないことがわかる。 つぎに、実験データを用いて、アーリー電圧を求める。 VB の項を無視すると、以下で Ic と AV は計算できる。 Ic1=Ic(0)(1+Vcb1/VA) Ic2=Ic(0)(1+Vcb2/VA) 以上の 2 式から、VA は以下の式となる。 (%i22) VA0:(Vcb2-Vcb1)*(Ic2/Ic1)/(Ic2/Ic1-1); Vcb=Vce-Vb を用いて、変数変換する。 ただし、Vbe を測定していないので、Vbe=0.8[V]と仮定して計算する。 使用データは、Ib=30uA のとき、(Ic,Vce)=(5.605mA,4.0478V),(5.506mA,2.064V)を使用する。 (%i23) Vcb20:4.0478-0.8; Vce=2.064 のときも同様に計算する。 (%i24) Vcb10:2.064-0.8; すべての計算した値を代入する。 アーリー電圧:VA は以下の値となる。 (%i25) ev(VA0,Vcb2:Vcb20,Vcb1:Vcb10,Ic2:5.605*10^-3,Ic1:5.506*10^-3); 得られたアーリー電圧を用いて、新しい ICC 定義をする。 数値をもう一度代入する。 (%i26) ev(%o13,Is0:Is00,Vt:0.026,betaF:185,betaR:5,VA:112,VB:50); I𝐶(|𝑉𝐵𝐶| = 0) 𝑉𝐴 = 𝐼𝐶(|𝑉𝐵𝐶|) |𝑉𝐴| + |𝑉𝐵𝐶| Early 電圧と電流の関係式
表示された数式を、ICC0関数として定義する。 (%i27) define(ICC0(Vcc,Vbe),%); 実験データと定義した関数のグラフを同時に表示する。 (%i28) wxplot2d([[discrete,datay30u,dataz30umA],ICC0(x,0.8)], [x,0.01,4],[y,0.004,0.007], /* [logy], */ [xlabel,"Vce[V]"], [ylabel,"Ic[A]"], [style,points,points], [color,red,blue], [legend,false], [gnuplot_preamble,"set grid"] ); Fig.7 アーリー効果ありの Ic-Vce グラフを拡大したグラフ
付録. 1 単位の解析について [目的] 室温電圧:Vrm について Maxima で使用可能である単位計算 Package を使用して計算する。 参考サイト: [1]http://www.physics.nist.gov/cuu/Units/index.html [2] Essentials of the SI http://www.physics.nist.gov/cuu/Units/units.html (%i1) kill(all); 単位計算可能 Package を読み込む (%i1) load(ezunits); Ref. [3] 45.2 Introduction to physical_constants http://maxima.sourceforge.net/docs/manual/de/maxima_45.html [4] http://physics.nist.gov/cuu/Constants/index.html
物理定数の Package を呼び出す。 (%i2) load(physical_constants); 電子の電荷量を確認する。 (%i3) %%e; 数値表示する。 (%i4) constvalue(%); ボルツマン定数を数値表示する。 (%i5) constvalue(%%k); 室温熱電圧を計算する。単位を含まない 300 の値を用いる。 (%i6) %%k*300/%%e; 数値で表示する。 (%i7) vrm:constvalue(%); (%i8) vrm; 室温 Trm を 300K とする。 (%i9) Trm:300 ` K;
単位を含む変数を用いて計算する。 (%i10) %%k*Trm/%%e; 数値で表示する。単位計算も実行されます。 単位が、J/C となる (%i11) constvalue(%); [J/C]は、W[J/s]=V[V]*I[A]から、[J]=[V]*[C]となるので、 [J/C]=[V]であることが確認できます。 参考文献:
付録. 2 熱電圧(Thermal Voltage)について [目的] 熱電圧(thermal Voltage)は、kT/q で定義される。熱電圧の室温での値、単位について確認する。 [手順と結果] 変数の初期化する。 (%i14) kill(all);
電子の電荷量:q(charge of the electron)[C] (%i1) q:1.6*10^-19; ボルツマン定数:k[J/K] (%i2) k:1.38*10^-23; 熱電圧(Thermal Voltage):VT を以下で定義する。 温度[K]を室温として、熱電圧を求める。 (%i3) VT:k*300/q; 飽和電流:Is [A] (%i4) Is:0.1*10^-12; 使用例を示す。 ダイオードの電流 ID = Is*exp(VD/(N*VT)-1) VD:ダイオードに印加される電圧、 理想係数:N として、1 ≦ N ≦ 2 の間の値を取る。 VD>0.2[V]の場合は, ID ≒ exp(VD/(N*VT))と近似できる ダイオード電流:ID を定義する。 (%i5) ID:Is*exp(VD/VT); VD の関数を IDD(VD)を定義する。 --> define(IDD(VD),ID);
定義したダイオードの電流関数 IDD をグラフ表示する。 --> wxplot2d(IDD(VD),[VD,0.001,0.8], /* [logy], */ [xlabel,"VD[V]"], [ylabel,"ID[A]"], [gnuplot_preamble,"set grid"]); 電流の縦軸をログ表示にして、表示する。 Is と VD の関係が直線表示されることが確認できる。 --> wxplot2d(IDD(VD),[VD,0.001,0.8], [logy], [xlabel,"VD[V]"], [ylabel,"ID[A]"], [gnuplot_preamble,"set grid"]); Fig.1 ダイオード特性 Fig.2 Semi-Log グラフでのダイオード特性
最後に、熱電圧の単位を確認する。 (%i25) load(unit); 準単位系を定義する。 (%i28) setunits([J,V,ohm,farad,henry,coulomb]); 熱電圧の単位を計算させる。 (%i29) (J/K)*K/coulomb; 電圧の単位の V が得られることが確認できた。