now I just used ACME.jl package to simulate it in Julia and I wrote the code as follows:
using ACME
circ = @circuit begin
j_in = voltagesource()
d1 = diode(;is=1e-12, η = 1)
r=resistor(10)
j_out = voltageprobe()
j_in[+] ⟷ d1[+]
j_in[-] ⟷ gnd
d1[-] ⟷ r[1]
gnd ⟷ r[2]
r[1] ⟷ j_out[+]
r[2] ⟷ j_out[-]
end
fs = 44100;
fsig = 100000;
Tsim = 1 ;
Tsim = round(Int, Tsim);
Nsamples = round(Int, Tsimfs) - 1
t = (0:Nsamples)'/fs
model = DiscreteModel(circ, 1/fs)
y = run!(model, 310sin.(2πfsig . t))
using Plots
plotly()
Plots.PlotlyBackend()
plot(t’, y’)
and the figure is as follows:
so my qustion is why the figures are not matched. what should I do?
my code using ACME.jl package in julia as follows :
using ACME
circ = @circuit begin
j_in = voltagesource()
l1=inductor(0.001)
d1 = diode(;is=1e-12, η = 1)
d2 = diode(;is=1e-12, η = 1)
d3 = diode(;is=1e-12, η = 1)
d4 = diode(;is=1e-12, η = 1)
c1 = capacitor(1e-3)
r1 = resistor(20)
i_out = currentprobe()
j_in[+] ⟷ l1[1]
j_in[-] ⟷ gnd
l1[2] ⟷ d1[+] ⟷ d4[-] ⟷ i_out[-]
gnd ⟷ d2[+] ⟷ d3[-]
d1[-] ⟷ d2[-] ⟷ r1[1] ⟷ c1[1] ⟷ i_out[+]
d4[+] ⟷ d3[+] ⟷ r1[2] ⟷ c1[2]
end
fs = 44100;
fsig = 1000;
Tsim = 1 ;
Tsim = round(Int, Tsim);
Nsamples = round(Int, Tsimfs) - 1
t = (0:Nsamples)'/fs
model = DiscreteModel(circ, 1/fs)
y = run!(model, 310sin.(2πfsig . t))
using Plots
plotly()
Plots.PlotlyBackend()
plot(t’, y’)
and the figure is as follows :
although the diodes paramters are approximately matched with simulation, what should I do to match the waveforms of current with simulation result. Is there a problem with freuqncy of sinus in my code or the package can’t solve the circuit???
I never actually used this package (never knew it existed, but it’s really cool!) but I don’t think you placed the current probe correctly in order to measure D1 current. I tried this configuration, with the current probe between D1- and D2-:
using ACME
using Plots
plotly()
Plots.PlotlyBackend()
circ = @circuit begin
j_in = voltagesource()
l1 = inductor(1e-3)
d1 = diode(;is=1e-12, η = 1)
d2 = diode(;is=1e-12, η = 1)
d3 = diode(;is=1e-12, η = 1)
d4 = diode(;is=1e-12, η = 1)
c1 = capacitor(1e-3)
r1 = resistor(20)
i_out = currentprobe()
j_in[+] ⟷ l1[1]
j_in[-] ⟷ gnd
l1[2] ⟷ d1[+] ⟷ d4[-]
gnd ⟷ d2[+] ⟷ d3[-]
d1[-] ⟷ i_out[+]
i_out[-] ⟷ d2[-] ⟷ r1[1] ⟷ c1[1]
d4[+] ⟷ d3[+] ⟷ r1[2] ⟷ c1[2]
end
fs = 44100;
fsig = 1000;
dt = 1/fs
t = 0:dt:1
model = DiscreteModel(circ, 1/fs)
y = run!(model, 10*sin.(2*π*fsig .* t'))
plot(t, y')
If you mess around with the frequencies or components, your simulation will not converge. I’m not sure why, but it converges if I lower the sine amplitude.
Is this a homework?
Also, please avoid double posting. It only clutters the discourse dashboard and makes responses harder to track.
Thanks for the answer and I am very sorry if I disturb you as I asked new question here.
I wish it was my homework. but, my homework is simulation the circuit without using packages. Actually, I have to model diode as a switch connected to a DC Voltage and a resistor and extracting a admitance matrix which can be 21*21 to simulate it and using backward or forward Euler to find the answer.