位相補償(Type3等)はオペアンプで実現できるが、各抵抗やコンデンサの定数を計算するのが手間である。今回は、LTspiceでラプラス演算子を使って位相補償(Type3)ブロックを作り、零点周波数や極周波数を直接指定して位相補償器を作れるようにする。
.subckt(サブサーキット)モデルで作成
色々と方法はあるかと思うが、今回は.subckt(サブサーキット)モデルで作成する。「.subckt」から始まるコードを記述し、Type3補償器を作成する。
【手順】
下記に示すコードをメモ帳に貼り付け、拡張子「.sub」で保存する。
* Type3
.subckt TYPE3 IN OUT params: K=1 fz1=1k fz2=1k fp1=100k fp2=100k
.param PI = 3.141592653589793
.param wz1 = 2*PI*fz1
.param wz2 = 2*PI*fz2
.param wp1 = 2*PI*fp1
.param wp2 = 2*PI*fp2
E OUT 0 IN 0 laplace = { K*(1+wz1/(s+0.1))*(1+s/wz2) / ((1+s/wp1)*(1+s/wp2)) }
.ends TYPE3
簡単なコード説明を以下に書いておきます。
.subckt TYPE3 IN OUT params: K=1 fz1=1k fz2=1k fp1=100k fp2=100k
「.subckt」を宣言し、ブロック名称を「TYPE3」、入出力ピンを「IN OUT」とする。
「params:」でパラメータを宣言して、デフォルト値を入れる。
.param PI = 3.141592653589793
.param wz1 = 2*PI*fz1
.param wz2 = 2*PI*fz2
.param wp1 = 2*PI*fp1
.param wp2 = 2*PI*fp2
「.param」でパラメータを定義する。
E OUT 0 IN 0 laplace = { K*(1+wz1/(s+0.1))*(1+s/wz2) / ((1+s/wp1)*(1+s/wp2)) }
「E」で電圧源の出力としている。入力(「IN 0」:IN-GND間)に伝達関数をかけて、出力(「OUT 0」:OUT-GND間)としている。
「LAPLACE…」で伝達関数を定義している。理想積分器:1/sがあると、収束せずエラーとなるため、1/(s+0.1)として、0.1を加算しておく(回路によっては収束しないので適宜修正する)。

.subcktからシンボルを生成
下の画面のように、「.subckt」のあたりで右クリックして、「Create Symbol」をクリックする。

下記の画面のようなシンボルが生成されるので、そのまま保存する。

作成したType3補償器の周波数特性を確認してみる。
下図のように、生成したType3補償器ブロックとオペアンプを用いたType3補償器をAC解析して、周波数特性を比較した。極零周波数とゲインGoは下記のように設定し、オペアンプ周りの部品定数は設定周波数とゲインになるように決定した。
$$ \begin{align}
f_{z1} &= 0.1 \,kHz \\
f_{z2} &= 0.1 \,kHz \\
f_{p1} &= 56 \,kHz \\
f_{p2} &= 56 \,kHz \\
Go &= 0.008 \\
\end{align} $$

シミュレーション結果を下図に示す。周波数特性は一致しており(重なっている)、Type3補償器ブロックが正しく生成できたことが確認できた。位相が180度ずれているが、Type3補償器ブロックは直接AC信号を入力しているが、オペアンプにはマイナス端子にAC信号を注入しているためである。
