basic PWM model
This commit is contained in:
File diff suppressed because it is too large
Load Diff
47
RL Testing/PWM_Circuit_Model.py
Normal file
47
RL Testing/PWM_Circuit_Model.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from scipy.signal import TransferFunction, lsim
|
||||||
|
|
||||||
|
# ---- Parameters (edit these) ----
|
||||||
|
R = 1.5 # ohms
|
||||||
|
L = 0.0025 # henries
|
||||||
|
V = 12.0 # volts
|
||||||
|
|
||||||
|
# Time base
|
||||||
|
t_end = 0.2
|
||||||
|
dt = 1e-4
|
||||||
|
t = np.arange(0, t_end, dt)
|
||||||
|
|
||||||
|
# ---- Define a duty command D(t) ----
|
||||||
|
# Example: start at 0, step to 0.2 at 20 ms, then to 0.6 at 80 ms, then to 1.0 at 140 ms (DC full on)
|
||||||
|
D = np.zeros_like(t)
|
||||||
|
D[t >= 0.020] = 0.2
|
||||||
|
D[t >= 0.080] = 0.6
|
||||||
|
D[t >= 0.140] = 1.0 # "straight DC" case (100% duty)
|
||||||
|
|
||||||
|
# Clamp just in case
|
||||||
|
D = np.clip(D, 0.0, 1.0)
|
||||||
|
|
||||||
|
# ---- Transfer function I(s)/D(s) = V / (L s + R) ----
|
||||||
|
# In scipy.signal.TransferFunction, numerator/denominator are polynomials in s
|
||||||
|
G = TransferFunction([V], [L, R])
|
||||||
|
|
||||||
|
# Simulate i(t) response to input D(t)
|
||||||
|
tout, i, _ = lsim(G, U=D, T=t)
|
||||||
|
|
||||||
|
# ---- Print steady-state expectations ----
|
||||||
|
# For constant duty D0, steady-state i_ss = (V/R)*D0
|
||||||
|
print("Expected steady-state currents (V/R * D):")
|
||||||
|
for D0 in [0.0, 0.2, 0.6, 1.0]:
|
||||||
|
print(f" D={D0:.1f} -> i_ss ~ {(V/R)*D0:.3f} A")
|
||||||
|
|
||||||
|
|
||||||
|
# ---- Plot ----
|
||||||
|
plt.figure()
|
||||||
|
plt.plot(tout, D, label="Duty D(t)")
|
||||||
|
plt.plot(tout, i, label="Current i(t) [A]")
|
||||||
|
plt.xlabel("Time [s]")
|
||||||
|
plt.grid(True)
|
||||||
|
plt.legend()
|
||||||
|
plt.show()
|
||||||
|
|
||||||
Reference in New Issue
Block a user