任意の関数や、Laplace表記を利用して出力を記述できる
Behavioral Model の例として、
Voltage Dependent Voltage Source (回路シンボル E)と、
Arbitrary behavioral voltage source (BV)
の使用例です。
他の SPICE では、回路シンボル B が GaAsFET 素子モデル
に使用されていたりしますので、ネットリストを用いて
使用する場合は注意が必要かもしれません。
この他にも、
Voltage Dependent Current Source (F)など、
入出力が電圧か、電流かでいくつか異なるモデルがありますが、
使い方の基本は同じです。
使用する素子はこれです。左側の2本の端子が入力端子(制御端子)で、
上下にあるのが出力端子です。
入力端子の+/−が上下逆になった素子 E2 もありますので
回路図の都合によって使いやすいほうが選べます。
このモデルには基本的に3通りの使用法があり、
以下にそれぞれの例を示しますが、
詳細は LTspice のヘルプ、
LTspice - Circuit Elements - E. Voltage Dependent Voltage Source
を参照してください。使用できる関数については、
LTspice - Circuit Elements - B. Arbitrary behavioral voltage or current sources
を参照してください。
ただし、ヘルプはシミュレータの SPICE エンジンに
渡されるネットリストをベースに記述してありますので、
回路図エディタのシンボルを使用する場合は若干注意が必要です。
例として使用する基本回路構成は以下のようなものです。
見やすいかと考え、入力をわざとラベルにより分離しています。
E1 の入力は基本は差動入力ですが、
今回は GND 共通としています。
V1により、定電圧、ステップ入力やランプ入力などを生成し、
出力 OUT にどのような波形が現れるか確認します。
もっとも簡単な使い方です。素子 E1 の上にマウスカーソルを置き、
右クリックするとあらわれる設定画面にて、
以下のように Value のところに 2 を入力して Ok を左クリックし
ウィンドウを閉じます。
同様に電源 V1 のほうも設定画面を開き以下のように設定します。
回路図はこのようになります。(サンプルファイルは gain.asc です)
Run アイコンをクリックし、V(IN) と V(OUT) をプローブすると以下のような
結果が得られます。非常に見にくいですが、V(IN) が青で 1V、
V(OUT) が緑で 2V となっています。
すなわち、E1 の Value のところに数値(もしくは定数パラメータ)を
記入すると、入力の電圧値にその値をかけた値が出力されます。
入力電圧と出力電圧の関係をルックアップテーブルを用いて
定義する使い方です。
入力電圧[V], 出力電圧[V]
というペア(点)でルックアップテーブルを作成します。
各点の間は線形補完されます。
入力電圧が、定義されたテーブルの範囲外の場合、
一番端の出力電圧が使用されます。
例えば、
(0,0)
(2,10)
と指定すると、入力電圧が、-∞〜0[V] までは出力は 0[V] で、
0〜2[V]の間は、入力電圧が 5 倍されて出力され、
2[V] 以上の入力に対しては 10 [V] が出力されます。
使い方は Gain の例のときと同様ですが、
Value のところに、
Table = (入力電圧出力電圧ペア, 入力電圧出力電圧ペア, ... )
と入力します。たとえばこの例だと以下のようになります。
実は () や , はすべて省略できますが、
データ数が多くなるとほとんど理解できないので、
() と , を適当に用いてデータを見やすくする方が良いと思います。
さて、今回は入力波形として、ランプ入力を利用します。
DC SWEEP 解析をかけるという方法もありますが、
ここでは、V1 のほうも Table を利用してランプ入力を作成してみます。
V1 の設定画面において以下のように入力します。
Run アイコンを左クリックして、
V(in) と V(out) のシミュレーション結果を
表示すると以下のようになります。
入力 V(in)が、-10[V] から 10[V] (青)に対して、
先ほど述べたように出力 V(out) (緑)が応答していることがわかります。
電圧をある範囲に制限したい場合などに重宝する使い方です。
入力と出力の関係を、
変数 S を用いた伝達関数(Laplace変換関数)で定義する使い方です。
たとえば、1次ローパスフィルタ(LPF)の表記として、1/(1+S) がありますが、
これをそのまま記述できます。なにはともあれ使ってみましょう。
入力のフォーマットは、
Laplace = S による伝達関数
と入力します。1次 LPF の場合、
となります。入力 V1 は以下のようにステップ入力とします。
Run アイコンを左クリックして、
V(in) と V(out) のシミュレーション結果を
表示すると以下のようになります。
1次 LPF の応答が確認できます。
この使い方は伝達関数が直接表記できますので、
AC 解析などを併用して帯域や位相特性をシミュレーション
すればフィルタの学習などに大変便利です。
ただ、次に述べるような制限(仕様?)がありますので、
このモデルを使用する上で注意が必要です。
Laplace 表記による Transient 解析は、
伝達関数のインパルスレスポンスと入力波形の畳み込み積分により
計算されます。
ここで、伝達関数のインパルスレスポンスは、
伝達関数で S = j*2*PI*f ( j は虚数単位、f は周波数)とおいて
適当な周波数間隔で周波数応答係数を求め、
そのフーリエ逆変換により計算されます。
LPFの場合、通常なにも気にせずともシミュレータが適当な
値を選択して問題なく計算できます。
問題となるのは以下の場合です。
-
周波数応答係数が収束しない場合
(周波数をあげても、係数の大きさが無視できる程度に
小さくならず、逆フーリエ変換を行う最大周波数が規定できない場合)
-
インパルスレスポンスが振動的で収束しない場合
(畳み込み積分の積分範囲が規定できない場合)
これらを回避(減少)するために、Laplace 表記では、
マニュアルにてこれらの最適化が行えるよう、
nfft と window というパラメータが指定できます。
LPFの場合、最初の問題はありませんが、2番目の問題は
2次以上の持続的な振動があるLPFの場合にあてはまります。
一例として、以下は2次のフィルタを、
1 / ( 1 + 0.01*S + S**2 )・・・緑
1 / ( 1 + 0.1*S + S**2 )・・・青
1 / ( 1 + 1*S + S**2 )・・・赤
1 / ( 1 + 2*S + S**2 )・・・水色?
と S の係数を変えてシミュレーションした結果です。
0.1 にてすでに定常状態に若干の差が確認でき、
0.01の場合は完全に異なります。
ちなみに、LTspice では、^ 演算子は XOR に割り当てられていますので
べき乗は ** を使います。
いずれにせよ、これらのパラメータを設定する必要があるということは、
シミュレーションがかなり微妙な領域にあるということですので、
どちらかというと、これらのパラメータを使わなくてすむような
安定なフィルタのシミュレーションが良いと思います。
さて、次に素子 BV(B) を使った例をあげます。
回路シンボルは以下になります。
B は特に入力端子を持ちませんが、
任意の関数を用いて出力電圧をあらわせます。
関数の中で使用できる変数として、
各ノード電圧および電位差、各素子電流、
時間(変数 TIME)などが使用できます。
例えば電圧を参照する場合は、V(ノード名)などと書きますが、
詳しくはヘルプの、
LTspice - Circuit Elements -
B. Arbitrary behavioral voltage or current sources
を参照してください。
どんな関数が使えるかもここに載っています。
BVの使用例として、以下の簡単な例をあげます。
式の入力は、E のときと同様に、Valueのところに入力します。
以下の例では、V = SIN(2*PI * TIME) + V(IN) と入力します。
シミュレーション結果は以下のようになります。
理想的な電圧加算器や絶対値回路などが簡単に記述できます。