LTspiceには電圧制御スイッチがあります。この電圧制御スイッチにはヒステリシス機能(パラメータ“VT”と”VH”によってオン電圧とオフ電圧を変える機能)があり、この機能を用いると容易にヒステリシススイッチを作成することができます。
しかし、ネットや参考書等に載っているヒステリシススイッチの作成方法では、電圧制御スイッチのヒステリシス機能を使用せず、サブサーキットでヒステリシススイッチを作成しているのを度々見かけます。
これは、シミュレーションソフトによってはヒステリシス機能が組み込まれていないものがあり、電圧制御スイッチにヒステリシス機能を追加するためにはサブサーキット化する必要があるからです。
この記事では、このヒステリシススイッチをサブサーキットで作成する方法について説明します。
なお、電圧制御スイッチについては、以下の記事を参考にしてください。
【LTspice】理想スイッチである『電圧制御スイッチ』の使い方
ヒステリシススイッチをサブサーキットで作成する方法
電圧制御スイッチにヒステリシス機能を追加したサブサーキットを上図に示しています。上記のサブサーキットには4つのパラメータ(RON,ROFF,VT,VH)があります。RONはオン抵抗、ROFFはオフ抵抗、VTはスイッチの閾値電圧です。そして、VHはVTパラメータと共に使用すると、スイッチの閾値電圧にヒステリシス機能を持たせることができ、高閾値電圧は「VT+VH」、低閾値電圧は「VT-VH」となります。上記のシミュレーションだと、「VT=5 VH=2」なので、高閾値電圧は「7V」、低閾値電圧は「3V」となります。
ノード(IN_Plus、IN_Minus)は電圧検出用ノードです。各ノードには入力抵抗を模擬した10MΩの抵抗Rconv2とRconv3を接続しています。
ノード(SW_Plus、SW_Minus)は出力用ノードです。
サブサーキット内にあるスイッチS1は以下のモデルで定義しています。
このスイッチS1はヒステリシス特性を持っており、入力ノードの電圧(NC1-0)がVT+VH=1.0Vを超えるとスイッチS1の抵抗がRONとなり、入力ノードの電圧(NC1-0)がVT-VH=0Vを下回ると、スイッチS1の抵抗がROFFとなります。スイッチS1の2つの抵抗値RONとROFFはパラメータ「.PARAMS RON=1 ROFF=1Meg」で定義されています。
ビヘイビア電源B_Ctrlは以下の式となっています。
この式は入力ノードの差動電圧「V(IN_Plus)-V(IN_Minus)」をサブサーキット内のノードRefの電圧V(Ref)と比較します。差動電圧がV(Ref)より大きいと、スイッチS1をオンする2Vの出力を生成し、差動電圧がV(Ref)より小さいと、スイッチS1をオフする0Vの出力を生成します。
ビヘイビア電源B_Refは以下の式となっています。
ノードRefはスイッチの閾値電圧の記憶用です。スイッチS1がオンしている時は、ノードNC1の電圧V(NC1)は2Vとなります。そのため、0.5Vより大きくなります。その結果、ビヘイビア電源B_Refの出力は{VT+VH}となり、小さなRC時定数の後、CdelコンデンサのRefノードに保存されます。一方、スイッチS1がオフしている時は、ノードNC1の電圧は0.5Vより小さくなります。その結果、ビヘイビア電源B_Refの出力は{VT-VH}となり、小さなRC時定数の後、CdelコンデンサのRefノードに保存されます。
これがヒステリシススイッチをサブサーキットで作成する方法です。
ヒステリシススイッチの動作の流れ
初期状態において、ノードRefの電圧V(Ref)は「.ic V(Ref)={VT+VH}」より7Vとなっています。
入力ノードの差動電圧「V(IN_Plus)-V(IN_Minus)」が7Vを超えると、
より、ビヘイビア電源B_Ctrlの出力が2Vとなり、ノードNC1の電圧V(NC1)も2Vとなります。
ノードNC1の電圧V(NC1)が2Vなので、
より、ビヘイビア電源B_Refの出力が「VT-VH=3V」となり、ノードRefの電圧V(Ref)も3Vとなります。
これより、オン電圧は7V、オフ電圧は3Vとなり、ヒステリシス機能を持っていることが分かります。
シミュレーションで確認してみる
1.サブサーキット化
サブサーキットで作成したヒステリシススイッチをシミュレーションで確認してみます。今回、シミュレーションをする前にサブサーキットを上図のようにシンボル化しました。シンボル化方法については以下の記事を参考にしてください。
【LTspice】サブサーキットの作成方法と使用方法について
2.シミュレーション1
上図のように回路を組みました。入力電圧V1はサブサーキットのIN_Plusに接続しています。また、SW_Plusには抵抗R1と電圧源V2を接続し、SW_PlusのノードをOUTとしています。
入力電圧V1を0Vから10Vに上げた後に、再度0Vに下げた時におけるOUTノードの電圧を観測してみます。
入力電圧V1が7Vを超えると、ヒステリシススイッチがオンして、OUTノードの電圧が低下します。また、入力電圧V1が3Vを下回ると、ヒステリシススイッチがオフして、OUTノードの電圧が上昇しているのが確認できます。
3.シミュレーション2
次にRC発振器のシミュレーションをしてみます。入力電圧V1は10Vとしています。
シミュレーションスタート時、コンデンサC1に電荷が蓄えられることでノードC1の電圧が上昇します。ノードC1の電圧が7Vを超えると、ヒステリシススイッチがオンして、コンデンサC1に蓄えられた電荷が放電することで、ノードC1の電圧が低下します。ノードC1の電圧が3Vを下回ると、ヒステリシススイッチがオフして、コンデンサC1に電荷が蓄えられることでノードC1の電圧が上昇します。この繰り返しが行われています。
サブサーキットをネットリスト化した場合
今まで紹介した回路をネットリストで記述すると以下のようになります。
S1 SW_Plus SW_Minus NC1 0 SmoothSW
B_Crtl NC1 0 V = IF ( V(IN_Plus)-V(IN_Minus) > V(Ref), 2, 0 )
B_Ref Ref1 0 V = IF ( V(NC1) > 0.5, {VT-VH}, {VT+VH} )
Rdel Ref1 Ref 100
Cdel Ref 0 100p IC={VT+VH}
Rconv1 NC1 0 10Meg
Rconv2 IN_Plus 0 10Meg
Rconv3 IN_Minus 0 10Meg
.model SmoothSW SW(RON={RON} ROFF={ROFF} VT=0.5 VH=0.5)
.ends SW_Hyste
なお、ネットや参考書等ではPSpiceにおけるヒステリシススイッチが公開されています。公開されているネットリストを以下に示します。
S5 NodePlus NodeMinus 8 0 smoothSW
EBcrtl 8 0 Value = { IF ( V(plus)-V(minus) > V(ref), 1, 0 ) }
EBref ref1 0 Value = { IF ( V(8) > 0.5, {VT-VH}, {VT+VH} ) }
Rdel ref1 ref 100
Cdel ref 0 100p IC={VT+VH}
Rconv1 8 0 10Meg
Rconv2 plus 0 10Meg
Rconv3 minus 0 10Meg
.model smoothSW VSWITCH (RON={RON} ROFF={ROFF} VON=1 VOFF=0)
.ends SWhyste
LTspiceにおけるネットリストでは上記のネットリストにおいて以下の箇所を変えています。マストで変えなければいけないのはモデル記述です。また、IF ( V(plus)-V(minus) > V(ref), 1, 0)の「1」を「1」より大きな値である「2」に変更しています。「1」のままだとスイッチSmoothSWがオンしないためです。
PSpice | LTspice | 補足 |
.model smoothSW VSWITCH (RON={RON} ROFF={ROFF} VON=1 VOFF=0) | model SmoothSW SW(RON={RON} ROFF={ROFF} VT=0.5 VH=0.5) | マストで変える |
SWhyste | SW_Hyste | 変えなくても良い |
NodePlus | SW_Plus | 変えなくても良い |
NodeMinus | SW_Minus | 変えなくても良い |
Plus | IN_Plus | 変えなくても良い |
Minus | IN_Minus | 変えなくても良い |
8 | NC1 | 変えなくても良い |
smoothSW | SmoothSW | 変えなくても良い |
補足
抵抗やコンデンサ等を用いず、LTspiceにあるヒステリシスパラメータ(VT、VH)を用いると、以下のようにネットリストを簡略することができます。
S1 SW_Plus SW_Minus IN_Plus IN_Minus SmoothSW
.model SmoothSW SW(RON={RON} ROFF={ROFF} VT={VT} VH={VH})
.ends SW_Hyste