20201229

LTSpiceの素子の値を経時変化 三角波も作った。

抵抗値Rの経時変化

電気回路シミュレーターのLTSpiceを使って、時間が経つと電気抵抗が上がったり下がったりする素子を作りたい。
操作すると抵抗値が変化する可変抵抗とかではない。
時間が変数となって、値が上がり下がりする抵抗値を入れたかったのだ。

検索したら見つけたページ

時間が経つにつれて上がる抵抗は、
抵抗Rを、変数(時間time)を使って式で表す。

valueに

R=10000-100*time

と入力すれば、10kohmから、1秒ごとに100ohm減っていく抵抗を表現できる。

R=を忘れたら動かなかった気がする。

LTSpice_schematic_Rtime.png

R=10000+100*time

と入力すれば、10kohmから、1秒ごとに100ohm増えていく抵抗を表現。

静電容量Cの経時変化

さっきのコンデンサ版。
こちらもやはり、LTSpiceを使って、時間が経つと静電容量が上がったり下がったりする素子を作りたい。
時間が変数となって、値が上がり下がりする静電容量を入れたかったのだ。

こちらも上のページと同じサイトで、解決策を見つけた。

なぜかCを直接入力できず、電荷量で指定することになる。

時間が経つにつれて上がるコンデンサ(キャパシタ)は、 電荷量Qを、変数(電圧xと時間time)で表すことになる。
電圧xを入れないと、静電容量っぽい振舞ではなくなる。
Q=CV

普通の1uFのコンデンサを作りたければ

Q=1u*x

xの所には電圧が入るので、入れ忘れてはいけない。

Q=静電容量*xと書く感じ。

Q=1u*x+1n*time*x

一秒あたり1 nFずつ容量が増えていく。
Q=CV
図では2 Vを印加しているので、一秒ごとに2nクーロン電荷が多くたまるようになるから、実質2 nAの電流が流れる感じになっている。

LTSpice_schematic_Ctime.png

三角波を式で書く

三角波についてはPWLを使うのがお約束らしいが、だめだ。
GUIを使って値を指定するのが気に入らない。(大変。)

式を使って書く。(こっちの方が大変だった…)

結論を先に書くと、

componetから電圧源を選択するとき、bvを使用して(voltageではだめ)、

V=(abs(int(time)-time+1/2)-0.25)*4

と書くと、三角波になる。

LTSpice_schematic_bihaviorV(triangle).png

入力した式の意味

式を作る作戦

  1. int(time)として階段関数を作る。

  2. そこに-timeして鋸歯状波を作る(-側にオフセットがかかっている。)

  3. +1/4して(オフセットを引いて)0を中心とした鋸歯状はを作る。
  4. 絶対値をとると、三角波ができる(+側にオフセットがかかっている。波高は0.25)
  5. *4して波高を調節。

手順1~2を図にすると、

int_slope_sawtooth.png

手順3~4を図にすると、

abs_triangle.png

最後の2枚の図は、pythonで書いてみた。

一応コードを載せておく。

import numpy as np
import matplotlib.pyplot as plt


x=np.linspace(0,4,1001)

y1= x.astype(np.int32)
y2=x
y3=y1-y2


f,(ax1,ax2,ax3) = plt.subplots(3,1)

ax1.axhline(y=0, xmin=-10, xmax=10, c="k")
ax2.axhline(y=0, xmin=-10, xmax=10, c="k")
ax3.axhline(y=0, xmin=-10, xmax=10, c="k")

ax1.plot(x, y1)
ax2.plot(x, y2)
ax3.plot(x, y3)

ax1.set_ylim(-4,4)
ax2.set_ylim(-4,4)
ax3.set_ylim(-4,4)

plt.show()



f,((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2)

y4=y3
y5=y3+0.5
y6=np.abs(y3)
y7=np.abs(y5)

ax1.axhline(y=0, xmin=-10, xmax=10, c="k")
ax2.axhline(y=0, xmin=-10, xmax=10, c="k")
ax3.axhline(y=0, xmin=-10, xmax=10, c="k")
ax4.axhline(y=0, xmin=-10, xmax=10, c="k")

ax1.plot(x, y4)
ax2.plot(x, y5)
ax3.plot(x, y6)
ax4.plot(x, y7)

ax1.set_ylim(-4,4)
ax2.set_ylim(-4,4)
ax3.set_ylim(-4,4)
ax4.set_ylim(-4,4)

plt.show()

LTSpiceを使って矩形波などを書く方法については、以前書いていた。(2016年!4年も前からマイナー記事を書き続けている。)


今年は新型コロナ一色の年だったが、私生活的には意外といい年だったと思う。

posted by yuchan at 17:00 | Comment(81) | LTspice

20160901

Rectangular(square) wave in LTspice.(Usage "limit" function)

20160831 screenshot0000.png

Usage "limit" function: limit(x, min, max)

For example,
V = limit(sin(10 * 2 * pi * time), -1e-2, 1e-2)

20160831 screenshot0000.png

with offset
V = limit(sin(10 * 2 * pi * time), -1e-2, 1e-2) + 1e-2

20160831 screenshot11.png

steep slope
V = limit(sin(10 * 2 * pi * time), -1e-2, 1e-2) * 10


Read B-Sources part in Undocumented LTspice for more details.


1. Put two GNDs.
20160831 screenshot00.png

2. Then put a voltage source
20160831 screenshot01.png
20160831 screenshot02.png

3. Then put a Resistor or something, set parameter of it and wire them.
20160831 screenshot03.png
20160831 screenshot04.png
20160831 screenshot04-1.png20160831 screenshot04-2.png

4. Then set parameter of the voltage source(in this step, sin curve is setted.)
Don't forget typing "V =" or error message will be apeared.
Don't forget typing "time" for argument in sin function or the transient shape will be DC.
for example,
V = sin(2 * pi * 10 * time)
in case of 10 Hz.
20160831 screenshot05.png
20160831 screenshot06.png
20160831 screenshot07.png

5. Run
20160831 screenshot08.png
20160831 screenshot09.png

V = sin(2 * pi * 10 * time)
20160831 screenshot08-1.png

V = limit(sin(10 * 2 * pi * time), -1e-2, 1e-2)
20160831 screenshot0000.png


英語のサイトを参考にしたので、たまには英語で書いてみる。
間違ってたらごめん。

posted by yuchan at 07:00 | Comment(323) | LTspice