やっつけな日常(73) Maxima on Android、エミッタ接地回路、動作点計算

Joseph Halfmoon

もったいなくもMaxima様を電卓代わりに使い、前回まで受動素子(R、L、C)共の複素インピーダンスを計算、グラフ化。でもね能動素子(トランジスタ)はどうよ。そこで、お惚け老人がいつも手抜きをしているトランジスタのDC動作点の設定(ホンワカしたところだけれども)をMaxima様にお願いできるようにしてみました。

※「やっつけな日常」投稿順 Index はこちら

※動作確認は、パソコン上の wxMaxima 22.04.0 および Androidスマホ上の Maxima on Android 3.2.1 で行っています。

NPNトランジスタのエミッタ接地増幅回路

今回「Maxima化」してみる回路は以下です(LTspice回路図。EmitterCommonSchematic

アリガチでシンプル(ナンの工夫もない)エミッタ接地の増幅回路です。トランジスタはNPNの2N3904としてみましたが、これはLTspiceにパラメータがデフォルトで含まれているためで、別に2SC1815など他のトランジスタでも変わりはありませぬ。

こういう回路を描くときに、上だとバイアス点(bias0のところ)の電圧を決め(R1、R2の値をきめる)、REに流れる電流を求め、vc0の動作電圧を求め、そしてざっくりした増幅率を求めておく、と。そういう動作が身についた人は何の苦もなく一撃でしょう。しかしお惚け老人は、直ぐに計算間違えるし、気力もないのでSPICEにお願いするばかりです。今回はこのDC動作点の設定のための計算をMaxima化しておくことにいたしました。スマホのエディタでちょいちょいと数字をいじって「エイ」と気合を入れれば(ボタンを押すだけ)、動作点が求まるようにしておきたいと。

まずはLTspice上で求めたDC動作点が以下に。なお、回路図上に置いた .op なるシミュレーション・コマンドこそは、いつもお世話になっている割には単独で使うことがほとんどない「DC動作点解析のみ」の指定です。結果はこんな感じ。DCoperatingPoint

上記回路のvc0の動作点は3.42V付近、bias0のバイアス電圧は約0.82V、エミッタ電流=抵抗Reを流れる電流は約1.5mAっと。

Maximaソース

前回まで使っていたインピーダンス計算のソースから「共通」部分を残し、エミッタ接地回路用の関数を追加したものが以下に。

/* Maxima BATCH FILE 2024/05/22 J.Halfmoon       */
/* Emitter Common circuit DC calculation         */
algebraic:true$
/*- Utilities -----------------------------------*/
log10(x) := log(x)/log(10)$
roundF(x, p) := float(round(x*10^p)/10^p)$
dB(Vout, Vin) := float(20*log10(Vout/Vin))$
phase(z) := 180*carg(z)/%pi$
vec2(x, y) := matrix([x],[y])$
mat22(a11, a12, a21, a22) := matrix([a11, a12],[a21, a22])$
vecP(v2) := vector([0, 0], [v2[1, 1], v2[2, 1]])$
vecLis(lis) := if listp(lis) then map(vecP, lis) else [vecP(lis)] $
vi: vec2(1, 0);
vj: vec2(0, 1);
I: mat22(1, 0, 0, 1);
/*- impedance calculation -----------------------*/
define(ser ([Lis]), '(apply ("+", Lis)))$
define(par ([Lis]), '(1 / (apply ("+", 1/Lis))))$
ci(C):= 1/(%i*2*%pi*f*C)$
ii(L):= %i*2*%pi*f*L$
/*-----------------------------------------------*/
/* Emitter Common Amplifier Circuit              */
/*            -+--------+- VCC                   */
/*             |        |                        */
/*            +++      +++                       */
/*            |R|      |R|                       */
/*            |1|      |C|                       */
/*            +++      +++  +--+                 */
/*             |        +---+C2+->OUTPUT         */
/*       +--+  |       /    +--+                 */
/*INPUT>-+C1+--+-----|| NPN transistor           */
/*       +--+  |       \                         */
/*             |        |                        */
/*            +++      +++                       */
/*            |R|      |R|                       */
/*            |2|      |E|                       */
/*            +++      +++                       */
/*             |        |                        */
/*            -+--------+- GND                   */
/*-----------------------------------------------*/
VBE: 0.67; /* 2N3904 TYP. */
VB: (R2 / (R1 + R2)) * VCC;
IE: (VB - VBE) / RE;
VC: VCC - 'IE * RC;
AV: RC / RE;
/*- Example -------------------------------------*/
bias0: float(at(VB, [R1=10e3, R2=2e3, VCC=5]));
ie0: float(at(IE, [VB=bias0, RE=100]));
vc0: float(ev(VC, [IE=ie0, RC=1e3, VCC=5]));
av0: float(at(AV, [RC=1e3, RE=100]));

どこがR1でR2なんだか、分からなくならないように、テキストで回路図を描いてみましたぞ。VBE(ベース・エミッタ間電圧)は、LTspiceのシミュレーションから0.67Vとしてみました。どのトランジスタも似たような値ではないかと思うのですが、結構「効いてくる」のでお好みのトランジスタの値を入れてくだされ。末尾の方のExampleの中の設定値の数字だけを書き変えれば計算できます。

実行結果

まずはパソコン上のwxMaximaで計算したもの。EmitterCommonCalcResults
つづいてスマホの上のMoAで計算nしたもの。EmitterCommonMoA

だいたい雰囲気でてるんでないかい?いい加減だな。

やっつけな日常(72) Maxima on Android、複素インピーダンス、周波数応答 へ戻る

やっつけな日常(74) Maxima on Android、3次元ベクトルの表示 へ進む