Implementación de un Regulador PID Tema 13 REGULACIÓN Y CONTROL DE

Anuncio
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Tema 13
Implementación de un
Regulador PID
Gijón - Marzo 2012
1
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
1.4
Acciones de Control Clásicas
1.2
x(t)
1
0.8
y(t)
0.6
0.4
e(t)
x(t) +
P
I
_
1
2 +
3
0
- 5
+
u(t)
y(t)
5
10
15
20
25
30
0.8
Sistema
e(t)
0.6
1
+
0
1
0.4
D
0.2
0
-
0.2
-
0.4
- 5
0
5
10
15
20
25
30
0
5
10
15
20
25
30
0
5
10
15
20
25
30
2
1.8
1.6
1- Proporcional e(t ) = x(t ) − y (t )
1.4
1.2
1
2
0.8
0.6
t
2- Integral
∫0
0.4
e(t )·dt
0.2
0
- 5
2
1.6
1.2
0.8
3- Diferencial
de(t )
dt
0.4
3
0
-
0.4
-
0.8
-
1.2
-
1.6
- 2
- 5
Gijón - Marzo 2012
2
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Diseño de un regulador PID
Se puede sintonizar un regulador PID sencillo para sistemas monovariables que
presentan una respuesta en forma de "S" ante entradas escalón, sin necesidad
de conocer su modelo matemático.
Uno de los métodos es el primero de los propuestos por Ziegler-Nichols cuyo
objetivo es obtener una respuesta con una sobreoscilación aproximada del 25%.
U(s)
Respuesta al escalón unitario
K
G(s)
u(t)
y(t)
0
y(t)
Ziegler-Nichols considera en realidad un
sistema de primer orden con constante
de tiempo T y retardo puro L:
Tangente en el
punto de inflexión
(máxima pendiente
de la curva)
0
T
K
y(t)
t
L
T
Gijón - Marzo 2012
Y(s)
L
L+T
G( s) = e −L·s
K
T·s + 1
t
3
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Diseño de un regulador PID
A partir de los valores de "K", "L" y "T" se pueden obtener los parámetros
de un regulador P, PI o PID, para que el sistema en bucle cerrado tenga
una respuesta con una sobreoscilación aproximada del 25%.
C(s) +
c(t)
_
E(s)
e(t)
Y(s)
U(s)
R(s)
Respuesta al escalón unitario
G(s)
u(t)
y(t)
25%
y(t)
1
Nota: En el caso de que la realimentación
no sea unitaria, H(s)≠1, se debe utilizar la
respuesta al escalón unitario de G(s)·H(s)
para determinar los valores de "K", "L" y "T".
0
Gijón - Marzo 2012
0
t
4
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Diseño de un regulador PID
Los parámetros para los distintos reguladores se obtiene a partir de la
siguiente tabla:
TIPO
Kp
Ki=1/Ti Kd=Td
P
T/(K·L)
0
0
PI
0.9·T/(K·L) 0.3/L
0
PID 1.2·T/(K·L) 0.5/L 0.5·L
de( t ) 

u( t ) = K p · e( t ) + K i ·∫ e( t )·dt +K d

dt 

P
E(s)
+
I
Kp
Ki=1/Ti
Kd=Td
Gijón - Marzo 2012
1/s
D
+
+
U(s)
U(s)
 Ki

R(s) =
= K p ·1 + + K d ·s 
E(s)
s


s
5
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Cálculo Iterativo
…
uk = K p ·(ek + K i ·integral + K d ·derivada)
Cálculo en el instante K+1
Cálculo en el instante K
integral = integral + ek −1·Tm
integral = integral + ek ·Tm
ek − ek −1
derivada = pk =
Tm
ek +1 − ek
derivada = pk +1 =
Tm
e(t)
…
ek+1
ek+2
ek
pk+1
pk
ek-1
0
Gijón - Marzo 2012
∫ e( t)·dt
0
Tm
K
(K*Tm)
K+1
K+2
t
6
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Implementación de un regulador PID
PROGRAM CONTROL_NIVEL
VAR
rTM:REAL:=1.0;
(* Tiempo de muestreo en segundos *)
(* Debe coincidir con el "tiempo de ciclo" del programa *)
rREF_NIVEL: REAL;
(* REFERENCIA de nivel *)
rERROR:REAL:=0.0;
(* ERROR en este ciclo *)
rERROR_OLD:REAL:=0.0;(* ERROR en el ciclo anterior *)
rINTEGRAL:REAL:=0.0; (* INTEGRAL del error *)
rDERIVADA:REAL:=0.0; (* DERIVADA del error *)
rSPEED:REAL:=0.0;
(* CONSIGNA de velocidad para el motor de la bomba *)
END_VAR
(* Programa ciclico que calcula cada 1 segundos el algoritmo del PID *)
rNIVEL:=FU_rLEENIVEL(I_wSENNIV);
(* Se actualiza aquí la variable global rNIVEL *)
rREF_NIVEL:=FU_rLEEREF(I_iREFNIV);
(* Lectura del valor de REFERENCIA *)
rERROR:= rREF_NIVEL-rNIVEL;
rINTEGRAL:=rINTEGRAL+rERROR_OLD*rTM;
rDERIVADA:=(rERROR-rERROR_OLD)/rTM;
(* Cálculo del error *)
(* Cálculo de la integral del error *)
(* Cáculo de la derivada del error *)
rSPEED:=rKP*(rERROR+rKI*rINTEGRAL+rKD*rDERIVADA); (* Consigna de velocidad *)
rERROR_OLD:=rERROR; (* Se guarda el valor del error para el próximo ciclo *)
Gijón - Marzo 2012
7
REGULACIÓN Y CONTROL DE
MÁQUNAS NAVALES
Implementación de un regulador PID
(* Programa ciclico que calcula cada 1 segundos el algoritmo del PID *)
rNIVEL:=FU_rLEENIVEL(I_wSENNIV);
(* Se actualiza aquí la variable global rNIVEL *)
rREF_NIVEL:=FU_rLEEREF(I_iREFNIV);
(* Lectura del valor de REFERENCIA *)
rERROR:= rREF_NIVEL-rNIVEL;
(* Cálculo del error *)
IF xPID_ACTIVO THEN (* Se dan las condiciones para el funcionamietno del PID *)
IF rKI>0.0 THEN
rINTEGRAL:=rINTEGRAL+rERROR_OLD*rTM; (* Cálculo de la integral del error *)
ELSE
rINTEGRAL:=0.0;(* Evita que la integral del error crezca cuando no se usa la acción integral *)
END_IF;
rDERIVADA:=(rERROR-rERROR_OLD)/rTM;
(* Cáculo de la derivada del error *)
rSPEED:=rKP*(rERROR+rKI*rINTEGRAL+rKD*rDERIVADA); (* Consigna de velocidad *)
IF rSPEED > 100.0 THEN rSPEED:=100.0; END_IF; (* Límites de velocidad 0->100 % *)
IF rSPEED < 0.0 THEN rSPEED:=0.0; END_IF;
Q_iSPEED:=10*REAL_TO_INT(rSPEED);
(* Se envía la consigna a la salida *)
ELSE
rINTEGRAL:=0.0;(* Asegura que la integral vuelve a cero cuando el PID no está activo *)
rSPEED:=0.0;
END_IF;
rERROR_OLD:=rERROR; (* Se guarda el valor del error para el próximo ciclo *)
Gijón - Marzo 2012
8
Descargar