sim: add frequency simulation
This commit is contained in:
parent
bc00240aef
commit
d5dd02736b
|
@ -0,0 +1,55 @@
|
|||
# %%
|
||||
import control as ct
|
||||
import numpy as np
|
||||
|
||||
# %%
|
||||
# Gain term
|
||||
N = 0x8000
|
||||
F_s = 125e6 / N # Hz
|
||||
T = 1 / F_s
|
||||
|
||||
K_dxco = 0.0001164 * (2**np.pi) * N / (1e6)
|
||||
K_pd = N / (2**np.pi)
|
||||
|
||||
# PI controller
|
||||
K_P, K_I = 6, 2
|
||||
|
||||
sims = [
|
||||
["KP=6,KI=2", (K_P + K_I), -K_P, 0, 1, -1, 0],
|
||||
[
|
||||
# from https://www.earlevel.com/main/2021/09/02/biquad-calculator-v3/
|
||||
"Biquad Low pass",
|
||||
0.07209205036273991,
|
||||
0.14418410072547982,
|
||||
0.07209205036273991,
|
||||
1,
|
||||
-0.6114078511562919,
|
||||
-0.10022394739274834,
|
||||
],
|
||||
]
|
||||
|
||||
open_loops = []
|
||||
close_loops = []
|
||||
|
||||
for [name, b0, b1, b2, a0, a1, a2] in sims:
|
||||
ph_gain = ct.tf([K_pd], [1], dt=T)
|
||||
loop_filter = ct.tf([b0, b1, b2], [a0, a1, a2], dt=T)
|
||||
dcxo = ct.tf([K_dxco], [1, -1], dt=T)
|
||||
|
||||
open_tf = ct.series(ph_gain, loop_filter, dcxo)
|
||||
close_tf = ct.feedback(open_tf, 1)
|
||||
gm, pm, _, _ = ct.margin(open_tf)
|
||||
print(f"{name} | gain margin:{gm} phase margin:{pm}")
|
||||
|
||||
# HACK labeling graph
|
||||
open_tf.name = name
|
||||
close_tf.name = name
|
||||
open_loops.append(open_tf)
|
||||
close_loops.append(close_tf)
|
||||
|
||||
ct.bode_plot(open_loops, dB=True, Hz=True, title="Open loop bode")
|
||||
ct.bode_plot(
|
||||
close_loops, dB=True, Hz=True, plot_phase=False, title="Close loop response"
|
||||
)
|
||||
|
||||
# %%
|
Loading…
Reference in New Issue