LastUPDATE '06.2.19(.include の導入) UPDATE '06.2.6(回路図を入れる) UPDATE '06.2.3 (ngspice for windows 用に書き直し始める) , 02/10/29 (誤字脱字の修正) , 02/03/19 (6つの回路を扱い,とりあえず完成) , New 02/03/18(spice for linux 用に立ち上げる)

第8問 オペアンプ回路


ファイル ' n81.cir ' の中身。 Download
* circuit 81
.tran 30u 60m 0 30u
V1 1 0 sin(0V 1V 50Hz) 
Rs 1 2 10k
Rf 2 3 10k
X1 0 2 3 opamp00
.probe
*-----------------------------------------------------
* copy from http://www.madlabo.com/mad/edat/spice/index.htm
*-----------------------------------------------------
* HItachi Si EP High speed switch
.model d1s2075	D(IS=1.387E-9 N=1.702 RS=1.53
+		CJO=1.92pf VJ=0.4996 M=0.0605 TT=5ns BV=75 IBV=100E-15)
*
*Low Noise Amp PC=0.4W Ic=0.15A Vcbo=60V
.model Q2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ne=1.5 Ise=0
+ Ikf=20m Xtb=1.5 Br=3.377 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=2p
+ Mjc=.3333
+ Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=311.1p
+ Itf=0 Vtf=0 Xtf=0)
*		TOSHIBA		90-01-29	creation
*
*Low Noise Amp PC=0.4W Ic=0.15A Vcbo=50V
.model Q2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Ne=1.5 Ise=0
+ Ikf=0 Xtb=1.5 Br=10.45 Nc=2 Isc=0 Ikr=0 Rc=15 Cjc=66.2p
+ Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n
+ Tf=1.661n Itf=0 Vtf=0 Xtf=0)
* TOSHIBA 90-01-23	creation
*
* Ideal Operational Amplifier . . . K. Mochizuki 2002.3.15
* + - out
.subckt opamp00 50 51 55
rin 50 51 1G
cin 50 51 5p
e1st 52 0 50 51 100000
r53 0 52 1g 
r51 52 53 100k 
c51 0 53 53n 
d51 56 53 d1s2075 
d52 53 57 d1s2075 
v51 56 0 -13.7V
v52 57 0 13.7V
r52 53 54 1k 
c52 0 54 53p 
d53 58 54 d1s2075 
d54 54 59 d1s2075 
v53 58 0 -13V
v54 59 0 13V
eout 55 0 54 0 1
rpow 55 0 1G
.ends
*-----------------------------------------------------
.END
---解説開始↓
.subckt は,サブサーキットのこと。複数のデバイスから成る一つの回路を定義する。
定義したファイルは, X から始まる素子で利用できる。
この回路では,1回だけ利用しているが,何回利用しても良い。
ちょうど Fortran や C 言語のサブルーチンや関数に対応する機能である。

ここでは,演算増幅器(オペアンプ,op-amp)を定義した。
通常の op-amp のうち,以下の点を取り込んでいる。
        ・直流利得は10万倍であること。(理想的には無限大である)
        ・電源電圧よりも大きな電圧は出力できないこと:
         ただし,電源は常に 15V を使うものとして,最初から取り込んだ。
         従って,ユーザは n81.cir の最初の8行のように電源を意識せず使える。
        ・演算増幅器の周波数特性を取り込んでいること。
                1st-pole は,約 30 Hz であり,
                2nd-pole は,約 3 MHz である。
         なお,1st-pole から計算される GB積は 3 MHz であるが,
         ユニティゲイン周波数は 約 2 MHz であり,
         2 MHz における位相余裕は 約45度 である。
         従って,汎用と呼ばれる op-amp に比べて少々不安定の可能性がある。
        ・入力インピーダンスは,1GΩの抵抗と 5pF の容量の並列とした。
通常の op-amp にはあるがこの op-amp に無い特性は,以下のとおりである。
        ・電圧オフセット
        ・電流オフセット
これらの機能が必要な場合は,入力部に直流電圧源や直流電流源をつければよい。

なお,このファイルは最初の約10行がユーザの回路である,それ以降の約 50行は
このWebページの中で何度もでてくるお決まりの内容である。
こうした場合,後ろの約50行については別ファイルとし,インクルードファイル機能を
使うことでファイルをすっきりさせることも可能。これについては興味ある学生の自主課題。
---解説終了↑


回路 n81 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n81.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(2) v(3) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。

---課題:
・最初の6行について,回路図を書こう。
・入力と出力の波形を観察し,記録しよう。
        注意:この回路は,op-ampを使った「反転増幅回路」と呼ばれ,
        入力から出力への利得は - Rf/Rs 倍になるはずである。
        注意:記録する時,もしも正弦波だったならば
                「入力信号は,振幅 ○○V, 周期○○Hz の正弦波」
                「出力信号は,振幅 ○○V, 周期○○Hz の正弦波」
                「入力と出力の位相のずれは ○○度」
        というふうに,文章で記録しよう。
        (学生が下手な図を書くと,後から見直したときに「三角波?」
                「入力と出力の位相のずれは 135度?」
                「出力は周期ごとに振幅が変わる?」
        という記録が残される。
        そういういい加減な図を書くくらいなら,文章のほうがよっぽど良い)

・n81.cir に対して,Rf を 20k ohm にしてみよう。
        注意:理論とおりの出力振幅か確認しよう。
        注意:出力が正弦波のようなよく見る波形でないなら,図で記録するしかない!!
        注意:v(2) の波形にも注目しよう。
                op-amp は仮想ショート(特に+入力がGNDの場合は仮想接地)
                が成り立つと言われるが,本当にそうだろうか?

・n81.cir に対して,Rf=20k ohm, V1 の振幅= 0.5V としてみよう。
        注意:理論とおりの出力振幅か確認しよう。
circuit 81 をシミュレーションするための便利な方法 (.include の利用)

ファイル ' n81i.cir ' の中身。 Download
* circuit 81i
.tran 30u 60m 0 30u
V1 1 0 sin(0V 1V 50Hz) 
Rs 1 2 10k
Rf 2 3 10k
X1 0 2 3 opamp00
.probe
.include n01inc.cir
.END

ファイル ' n01inc.cir ' の中身。
Download
* for include
*-----------------------------------------------------
* copy from http://www.madlabo.com/mad/edat/spice/index.htm
*-----------------------------------------------------
* HItachi Si EP High speed switch
.model d1s2075	D(IS=1.387E-9 N=1.702 RS=1.53
+		CJO=1.92pf VJ=0.4996 M=0.0605 TT=5ns BV=75 IBV=100E-15)
*
*Low Noise Amp PC=0.4W Ic=0.15A Vcbo=60V
.model Q2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ne=1.5 Ise=0
+ Ikf=20m Xtb=1.5 Br=3.377 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=2p
+ Mjc=.3333
+ Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=311.1p
+ Itf=0 Vtf=0 Xtf=0)
*		TOSHIBA		90-01-29	creation
*
*Low Noise Amp PC=0.4W Ic=0.15A Vcbo=50V
.model Q2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Ne=1.5 Ise=0
+ Ikf=0 Xtb=1.5 Br=10.45 Nc=2 Isc=0 Ikr=0 Rc=15 Cjc=66.2p
+ Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n
+ Tf=1.661n Itf=0 Vtf=0 Xtf=0)
* TOSHIBA 90-01-23	creation
*
* Ideal Operational Amplifier . . . K. Mochizuki 2002.3.15
* + - out
.subckt opamp00 50 51 55
rin 50 51 1G
cin 50 51 5p
e1st 52 0 50 51 100000
r53 0 52 1g 
r51 52 53 100k 
c51 0 53 53n 
d51 56 53 d1s2075 
d52 53 57 d1s2075 
v51 56 0 -13.7V
v52 57 0 13.7V
r52 53 54 1k 
c52 0 54 53p 
d53 58 54 d1s2075 
d54 54 59 d1s2075 
v53 58 0 -13V
v54 59 0 13V
eout 55 0 54 0 1
rpow 55 0 1G
.ends
*-----------------------------------------------------
.END
---解説開始↓
.incllude でファイルを指定すると,
指定されたファイルの内容がそのまま本文に含まれていることと同じ効果が得られる。
今回のようにオペアンプをその都度ファイル内に入れるよりも,
別ファイルにしたほうが n81i.cir がシンプルになり,
そのぶん回路設計に集中することができる。


また,オペアンプだけ別の機種を使う場合,
n01inc.cir と同じ機能の別ファイルを作成して,
.include でのファイルで指定すれば良い。

回路 n81i をシミュレーションするための操作
○最初に,n01inc.cir と n81i.cir を用意しておくこと
○実際の操作は n81 の時と同一。


ファイルの中身(抜粋) (後半部分はn81.cir や n81i.cir 参照)
Download n82.cir , Download n82i.cir
* circuit 82
.tran 30u 60m 0 30u
V1 1 0 sin(0V 10V 50Hz) 
V2 2 0 sin(0V 10V 100Hz) 
X1 1 2 3 opamp00
.probe

: 略

.END
回路 n82 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n82.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(2) v(3) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。


---課題:
・最初の6行について,回路図を書こう。
・入力と出力の波形を観察し,記録しよう。
	注意:この回路は,op-ampを使った「比較回路」と呼ばれ,
	2つの入力の電圧を比較して,+入力が大きければ +の,
	そうでなければ - の電圧を出力するはずである。

ファイルの中身(抜粋。後半部分はn81.cir や n81i.cir 参照)
Download n83.cir , Download n83i.cir
* circuit 83
.tran 30u 60m 0 30u
V1 1 0 sin(0V 1V 50Hz) 
R1 1 2 3k
V2 10 0 pulse(-1V 1V 0 1ms 1ms 19ms 40ms) 
R2 10 2 1k
Rf 2 3 1k
X1 0 2 3 opamp00
.probe

: 略

.END
回路 n83 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n83.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(10) v(2) v(3) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。


---課題:
・最初の9行について,回路図を書こう。
・入力と出力の波形を観察し,記録しよう。
	注意:この回路は,op-ampを使った「加算回路」と呼ばれ,
	2つの入力の電圧を加算したものを反転させて出力する。
・n83の出力は,正弦波と方形波の重ねあわせが得られるので,
 この回路は加算回路だと思われるのだが,
 V1 の電圧と V2 の電圧の出力への効き具合に偏りが見られる。
 それでは,両電圧が出力に対して均等に働くようにするには,
 どの部分をどのように変更すればよいか。
 理論的に考察するとともに,シミュレーションも行うこと。

ファイルの中身(抜粋。後半部分はn81.cir や n81i.cir 参照)
Download n84.cir , Download n84i.cir
* circuit 84
.tran 30u 240m 0 120u
V1 1 0 pulse(-1V 1V 0 0 0 10ms 20ms)
Rs 1 2 100k
Cf 2 3 0.01u
Rz 2 3 5Meg
X1 0 2 3 opamp00
.probe

: 略

.END
回路 n84 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n84.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(2) v(3) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。


---課題:
・最初の7行について,回路図を書こう。
・入力と出力の波形を観察し,記録しよう。
	注意:この回路は,op-ampを使った「(完全)積分回路」と呼ばれ,
	出力波形は,入力電圧を積分し,反転したものである。
・得られた出力の振幅が,理論的に正しいものか,その場で確認しよう。
・Rz が入る理由を考察せよ。
	ヒント1:Rzを500kΩにした実験を行い,出力振幅を記録しよう。
	ヒント2:Rzを除いた構成にし,v(2) を詳しく調べてみよう。

ファイルの中身(抜粋。後半部分はn81.cir や n81i.cir 参照)
Download n85.cir , Download n85i.cir
* circuit 85
.tran 30u 60m 0 30u
V1 1 0 sin(0V 1V 50Hz) 
R1 2 0 1k
R2 2 3 1k
X1 1 2 3 opamp00
.probe

: 略

.END
回路 n85 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n85.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(2) v(3) v(1)-v(2) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。


---課題:
・最初の6行について,回路図を書こう。
・各部の波形を観察し,記録しよう。
	注意:この回路は,op-ampを使った「正相増幅回路」と呼ばれ,
	入力電圧と同じ位相の電圧を出力する。
・R2を変化させ,出力電圧の振幅が理論とおりか確認しよう。

ファイルの中身(抜粋。後半部分はn81.cir や n81i.cir 参照)
Download n86.cir , Download n86i.cir
* circuit 86
.tran 30u 60m 0 30u
.ic v(2)=1V
R1 0 1 1k
R2 3 1 1k
Rt 3 2 1k
Ct 0 2 3u
X1 1 2 3 opamp00
.probe

: 略

.END

---注意:
  • .ic という行は,初期条件を与える。容量と対になって使われる。
  • .ic により,シミュレーション開始時のそのノードの電圧を与える。 これは,容量に溜まっている電荷の量を規定する。
  • .ic が無い場合は,まずはコンデンサ無しとして各部の電圧を計算し, 求まった電圧を容量の初期電圧とする。
回路 n86 をシミュレーションするための操作
(1) ngspice の起動
(2) 「file」>「open」から n86.cir を開く
(3) 「file」>「run」 コマンドによるシミュレーションの実行
(4) 「Graph」>「Select Vector」コマンドを選ぶ
--->すると,表示すべき電圧を聞いてくる。
 今回は時間特性なので,縦軸はリニアな目盛りである。
(5) v(1) v(2) v(3) と打ち込む
(6) (お好みで)「Command」>「Edit source」から編集すればパラメタを変えられる。


---課題:
・最初の6行について,回路図を書こう。
・入力と出力の波形を観察し,記録しよう。
	注意:この回路は,op-ampを使った「弛張発振回路」と呼ばれ,
	方形波を出力する。
	(発振(振動を発する)は,発信(情報を発する)ではない)
	(弛張(しちょう)とは,緩んだり張ったりという意味)
・各部の抵抗値や容量値を変更し,発振周波数を高くする条件を求めよ
・なお,ノード2 の電圧を初期条件として与える理由は,発振のタネ作りである。
	実はこの回路は,全てのノードが 0 [V] の状態は安定条件の1つである。
	実用的な回路場合には,必ずどこからかノイズが入るために,
	自然に発振が始まる。
	しかし,シミュレータ上では特にノイズを入れない限りそのままの状態が続く。
	そこで,ノイズの代わりにノード2の初期電圧を1[V]としたのである。