In [2]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Un sistema de segundo orden en su forma estándar se define:
$$\frac{Y(s)}{R(s)}=\frac{\omega_{n}^{2}}{s^{2}+2\,\zeta\omega_{n}s + \omega_{n}^{2}}$$Luego el comportamiento dinámico del sistema de segundo orden se describe en términos de dos parámetros $\zeta$ y $\omega_{n}$.
Si $0< \zeta < 1$, los polos a lazo cerrado son complejos conjugados y se encuentran en el semiplano izquierdo del plano $s$
falta
La señal de error para este sistema es la diferencia entre la entrada y la salida y es:
$$e(t) = r(t) - y(t) = e^{-\zeta \omega_{n}t}(cos(\omega_{d} \, t)+\frac{\zeta}{\sqrt{1-\zeta^{2}}}sin(\omega_{d} \, t))$$Ya que $$y(t) =1 - e^{-\zeta \omega_{n}t}(cos(\omega_{d} \, t)+\frac{\zeta}{\sqrt{1-\zeta^{2}}}sin(\omega_{d} \, t)) $$
In [3]:
def y(t, zeta, omega_d):
return 1 - np.exp(-zeta * omega_d * t) * (np.cos(omega_d * t) + (zeta / np.sqrt(1 - zeta**2)) * np.sin(omega_d * t))
In [4]:
def error(t, zeta, omega_d):
return np.exp(-zeta * omega_d * t) * (np.cos(omega_d * t) + (zeta / np.sqrt(1 - zeta**2)) * np.sin(omega_d * t))
Sabemos que finalmente la discretización del controlador PID queda:
$$u(t_{k})=u(t_{k-1})+[u_{0}(t_{k})-u_{0}(t_{k-1})]+K_{p}[e(t_{k})-e(t_{k-1})]+\frac{K_{p}T_{s}}{T_{i}}e(t_{k})+\frac{K_{p}T_{d}}{T_{s}}[e(t_{k})-2e(t_{k-1})+e(t_{k-2})] $$Luego el controlador total o incrmental se calcula:
$$u(t_{k})=u(t_{k-1})+\Delta u(t_{k})$$
In [7]:
T_s = .1
N = 100 # numero de muestras
u = np.zeros(N)
In [5]: