BE3024 - Sistemas de Control 1 (Biomédica)

2do ciclo, 2024

Lección 7: El controlador PID

¿En dónde estamos por el momento?

+
-

referencia

planta

sensor

controlador

salida

retroalimentación negativa

+
-
C(s)
G(s)
H(s)
R(s)
Y(s)
+
-
C(s)
G(s)
H(s)
R(s)
Y(s)

Nos hemos enfocado en el modelado y análisis de la planta

+
-
C(s)
G(s)
H(s)
R(s)
Y(s)

Objetivo principal del sistema de control: forzar que la planta se comporte de una manera deseada.

+
-
C(s)
G(s)
H(s)
R(s)
Y(s)

¿Qué hace el controlador? ¿Qué es el control en sí?

El controlador PID

+
-
R(s)
Y(s)
C_{PID}(s)
H(s)=1
G(s)
E(s)
U(s)
e(t)=r(t)-y(t)

error

E(s)
U(s)
+
C_{PID}(s)
k_P
\frac{k_I}{s}
k_D s
C_{PID}(s)=\dfrac{U(s)}{E(s)}=k_P+\dfrac{k_I}{s}+k_Ds=\dfrac{k_Ds^2+k_Ps+k_I}{s}
E(s)
U(s)
+
C_{PID}(s)
k_P
\frac{k_I}{s}
k_D s
u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)
E(s)
U(s)
+
C_{PID}(s)
k_P
\frac{k_I}{s}
k_D s
u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)

¿Cuál es la idea?

y(t)
\ t
r(t)
y(t)
\ t
r(t)
e(t_1)
t_1
t_2
e(t_2)

proporcional = presente

y(t)
\ t
r(t)
\displaystyle\int_{0}^{t}e(\tau)d\tau
e(t_1)
t_1
t_2
e(t_2)

integral = pasado

y(t)
\ t
r(t)
\displaystyle\int_{0}^{t}e(\tau)d\tau
\dot{e}(t)=-\dot{y}(t) \ (r \text{ cte.})
e(t_1)
t_1
t_2
e(t_2)

derivativo = futuro

y(t)
\ t
r(t)
\displaystyle\int_{0}^{t}e(\tau)d\tau
\dot{e}(t)=-\dot{y}(t) \ (r \text{ cte.})
e(t_1)
t_1
t_2
e(t_2)

derivativo = futuro

¿Por qué funciona esto?

Control PID de un sistema de 2do orden

R(s)
Y(s)
\dfrac{\omega_n^2}{s^2+2\zeta\omega_n s+\omega_n^2}
+
-
C_{PID}(s)

¿Dónde se encuentran los polos del equivalente en lazo abierto?

Los polos corresponden a las soluciones de la ecuación característica:

1+L(s)=0
1+C(s)G(s)H(s)=0
s^3+\left(2\zeta\omega_n+k_D\omega_n^2\right)s^2+\left(\omega_n^2+k_P\omega_n^2\right)s+\left(k_I\omega_n^2\right)=0

función de transferencia del sistema en lazo abierto

Los polos corresponden a las soluciones de la ecuación característica:

1+L(s)=0
1+C(s)G(s)H(s)=0
s^3+\left(2\zeta\omega_n+k_D\omega_n^2\right)s^2+\left(\omega_n^2+k_P\omega_n^2\right)s+\left(k_I\omega_n^2\right)=0

función de transferencia del sistema en lazo abierto

(1)
(2)
(3)

3 soluciones \(\Rightarrow\) 3 polos + 3 ctes. PID = sistema de 3 ecuaciones con 3 incógnitas con solución donde queramos (en teoría)

 

Todo sistema \(\approx\) sistema 2do orden

PID controla sistemas de 2do orden

\(\approx\) PID controla todo sistema

Puede ajustarse de manera heurística

\(\approx\) suficientemente buena, más no óptima ni perfecta.

 

No necesariamente requiere de un modelo de la planta para ajustarse.

Reglas o "rules of thumb" prácticas.

Ventajas prácticas del control PID

Diseño sin modelo

(debe tenerse acceso a la respuesta al escalón)

parámetro

t_r
t_s

\(M_p\) y oscilaciones

e_{ss}

estabilidad

k_P
k_I
k_D

cambio

pequeño

cambio

pequeño

elimina

no tiene efecto (en teoría)

degrada

degrada

mejora

Típicamente se inicia* con las constantes en cero, luego se incrementa \(k_P\) hasta tener un sistema estable y luego se usa la tabla.

 

Al disminuir las constantes se obtiene el efecto opuesto de la tabla (supuestamente).

 

* pueden encontrarse las constantes iniciales con métodos como el de Ziegler-Nichols (lectura adicional).

Ejemplo: servomotor

R(s)
Y(s)
+
-
C_{PID}(s)
\dfrac{0.2}{s^2+0.4s}
1
\dfrac{\pi}{10}

potenciómetro

voltaje a ángulo

motor + carga + caja

ángulo de referencia

posición angular del eje

>> clase7_servomotor.m

Ejemplo: servomotor

R(s)
Y(s)
+
-
C_{PID}(s)
\dfrac{0.2}{s^2+0.4s}
1
\dfrac{\pi}{10}

potenciómetro

voltaje a ángulo

motor + carga + caja

ángulo de referencia

posición angular del eje

>> clase7_servomotor.m

Requerimientos:

  • \(e_{ss}=0\)
  • \(t_r\le 5\) s
  • \(t_s\le 30\) s
  • \(M_p\le 25\%\)

Ejemplo: avión de ataque

R(s)
Y(s)
+
-
C_{PID}(s)
\dfrac{114}{s^3 + 11.4 s^2 + 14 s}
1

IMU

alerones + dinámica del avión

ángulo de banqueo deseado

ángulo de banqueo

>> clase7_avion.m

Ejemplo: avión de ataque

R(s)
Y(s)
+
-
C_{PID}(s)
\dfrac{114}{s^3 + 11.4 s^2 + 14 s}
1

IMU

alerones + dinámica del avión

ángulo de banqueo deseado

ángulo de banqueo

>> clase7_avion.m

Requerimientos:

  • estabilizar
  • \(e_{ss}=0\)
  • \(M_p\le 25\%\)
  • respuesta rápida

Ejemplo: generador eólico

R(s)
Y(s)
+
-
C_{PI}(s)
\dfrac{-7200}{5s+1}

velocidad deseada

velocidad del generador

>> clase7_generador.m

Ejemplo: generador eólico

R(s)
Y(s)
+
-
C_{PI}(s)
\dfrac{-7200}{5s+1}

velocidad deseada

velocidad del generador

>> clase7_generador.m

Requerimientos:

  • sólo control PI
  • \(e_{ss}=0\)
  • \(t_r\le 1\) s

Diseño con modelo

Podemos usar herramientas como el PID Tuner de MATLAB para diseñar el controlador, según las especificaciones o requerimientos.

>> clase7_pid_tuner.m

Implementación

Implementación analógica

Implementación digital

\ t
0
\Delta t
2\Delta t
k\Delta t
\Delta t
u(k\Delta t) \equiv u_k \qquad y(k\Delta t) \equiv y_k \qquad r(k\Delta t) \equiv r_k \\ e(k\Delta t) \equiv e_k \\ e\left((k-1)\Delta t\right) \equiv e_{k-1}

Implementación digital

u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)
\ t
0
\Delta t
2\Delta t
k\Delta t
\Delta t
e(k\Delta t)=e_k=r_k-y_k
k_Pe_k=k_P(r_k-y_k)

Implementación digital

u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)
\ t
0
\Delta t
2\Delta t
k\Delta t
\Delta t
\displaystyle\int_{0}^{k\Delta t}e(\tau)d\tau \approx E_k \Delta t=\displaystyle \lim_{\Delta t \to 0} \sum_{i=0}^{k} e(i\Delta t) \Delta t
k_Pe_k=k_P(r_k-y_k)

Implementación digital

u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)
\ t
0
\Delta t
2\Delta t
k\Delta t
\Delta t
E_k =E_{k-1}+e_k
k_Pe_k=k_P(r_k-y_k)

error acumulado

Implementación digital

u(t)=k_Pe(t)+k_I\displaystyle\int_{0}^{t}e(\tau)d\tau+k_D\dot{e}(t)
\ t
0
\Delta t
2\Delta t
k\Delta t
\Delta t
k_Pe_k=k_P(r_k-y_k)
\dot{e}(k\Delta t)\approx \dfrac{e_D}{\Delta t}=\displaystyle \lim_{\Delta t \to 0} \frac{e_k-e_{k-1}}{\Delta t}

De lo cual obtenemos la versión digital del controlador PID:

u(t)\approx u_k=k_Pe_k+k_IE_k\Delta t+k_D\dfrac{e_D}{\Delta t}
k_I^*
k_D^*
u_k=k_Pe_k+k_I^*E_k+k_D^*e_D
// Inicialización
e_k_1 = 0, E_k_1 = 0;
kP, kI_ast, kD_ast; // ya incluyen el período de muestreo

loop()
{
    r_k = leer_referencia(); // puede ser una cte. definida
    y_k = leer_sensor();
    
    // PID
    e_k = r_k - y_k;
    E_k = E_k_1 + e_k;
    eD = e_k - e_k_1;
    
    u_k = kP*e_k + kI_ast*E_k + kD_ast*eD;
    // u_k = kP*e_k + (kI*dt)*E_k + (kD/dt)*eD; // si no incluyen el Ts
    mandar_a_actuador(u_k);
    
    e_k_1 = e_k;
    E_k_1 = E_k;
}