I have problem with sampling Frequency when I use ACME.jl

Dear friends,
I am simulating a simple electrical circuit in EMTP-RV software which is used in electrical engineering as follows:
fig1
and the voltage waveform of resistor is as follows:

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, 310
sin.(2πfsig . t))
using Plots
plotly()
Plots.PlotlyBackend()
plot(t’, y’)
and the figure is as follows:
fig1
so my qustion is why the figures are not matched. what should I do?

Aren’t you undersampling your signal?fs is 44100 and fsig is 100k.

1 Like

LOL. I am just laughing for my silly mistake :slight_smile:
Thanks dear.
fs = 441000;
fsig = 1000;

1 Like

dear friend. I changed the circuit a bit and made it complicated why this figure of current passing through D1 doesn’t match
error2


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, 310
sin.(2πfsig . t))
using Plots
plotly()
Plots.PlotlyBackend()
plot(t’, y’)
and the figure is as follows :
error2

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???

It’s best to format your code example using back quotes . See: PSA: make it easier to help you

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.

1 Like

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.

1 Like

No worries! Good luck with the homework!

1 Like

Thanks:)