Sunteți pe pagina 1din 56

DISEÑO DE

CONTROLADORES
DIGITALES

1
Tema 5. Diseño de controladores digitales

• Ventajas del control digital.


• Diseño de controladores digitales a partir de controladores continuos.
• Obtención de los polos dominantes en el espacio z.
• Diseño de control PID digital con la técnica de ubicación de polos.
• Diseño de controladores digitales en el espacio de estados.
• Diseño de reguladores digitales (r = 0) por ubicación de polos y
realimentación de estado.
• Diseño de servosistemas digitales (planta con integrador).
• Diseño de servosistemas digitales con integrador.
• Observador de estado discreto.
• Diseño de regulador con observador de estado discreto.
• Diagrama de control digital con observador.
• Ejemplos de diseño.

2
Ventajas del control digital
• Los antiguos sistemas de control continuo usaban resistencias, condensadores,
transistores (después amplificadores operacionales), junto con algún componentes
mecánico (componentes caros, poco fiables, y de corta duración).

• Los computadores actuales hacen que sea mucho más eficiente y económico utilizar
técnicas de control digital.

• La mayoría de los sistemas de control actuales utilizan PCs empotrados, o se


diseñan con microprocesadores, microcontroladores o DSPs

• Todos estos dispositivos son:


• De bajo coste,
• Fácilmente programables y modificables, y
• Permiten además otros usos:
• Visualización local o remota
• Comunicaciones digitales mediante buses de campo.
• Integración en Sistemas de Control Distribuido y SCADAs

3
Diseño de controladores digitales a partir de
controladores continuos
Se empieza diseñando un controlador continuo que cumpla las especificaciones de
diseño y después se utilizan transformaciones bilineales u otras técnicas de
discretización para obtener el controlador digital equivalente.

Este método funciona bien si se muestrea 30 veces más rápido que el ancho de
banda del sistema.
4
Obtención de los polos dominantes en z
Partimos de unas condiciones de diseño: Mp, ts, y tenemos que obtener los polos
dominantes en z para esas condiciones
Ejemplo1. Diseño para polos en s: Mp=15%; ts=1 seg
 ξπ 
 
4 -  1− ξ
2  ln 2 M p
=ts (criterio del 2%) =
Mp e 
⇒ξ
=
ξ ωn π 2 + ln 2 M p
ln 2 M p ln 2 (0.15)
ξ = = 0.516
π 2 + ln 2 M p π + ln (0.15)
2 2

4 4 4
ts = = 1seg ⇒ ωn = = = 7.738
ξ ωn ξ ts 0.516
ωn2
G ( s ) deseada = 2
s + 2 ξ ωn + ωn2
s 2 + 2 ξ ωn s + ωn2 =s 2 + 2. ( 0.516 ) .(7.738) s + (7.738) 2 =
s 2 + 7.985s + 59.87
Los polos se obtienen haciendo: s 2 + 7.985s + 59.87 =0
s =−4 ± j 6.623 5
ωn2
G ( s ) deseada = 2
s + 2 ξ ωn + ωn2
s 2 + 2 ξ ωn s + ωn2 =
0
− ξ ωn ± jωn 1 − ξ
s=
σ = ξ ωn
ωd ωn 1 − ξ
=
s =−σ ± jωd
z = e sT T=Periodo de muestreo
Los polos en z son:
= ( −σ ± jωd )T
z=e sT e= σ T ± jωd T
e −= e e −σ T [cos (ωd T ) ± jsen (ωd T )]

6
Ejemplo 2. Convertir la función de transferencia continua: G(s)=1/(s+5), con
un polo en s= - 5, a su equivalente discreta.

n=[1];d=[1 5]; Un polo en s=-5


T=0.1;
[num,den]=c2dm(n,d,T,'zoh')
>>
num =
0 0.0787
den = 0.0787
G( z) =
1.0000 -0.6065 z − 0.6065
exp(-5*T )% obtenemos el polo en z
ans =
z = e sT Tiene un polo en z=0.6065
0.6065

El polo en s= - 5 de G(s)=1/(s+5), se convierte en polo en


z=0.6065 para G(z)= 0.0787 / (z-0.6065)
7
Ejemplo3. Dado un coche con una masa m=1000 Kg, y con un coeficiente de
fricción b=100, diseñar un controlador de velocidad de crucero que alcance en 8
segundos los 100 desde la posición de parado, con un sobredisparo de menos
del 20%.

Usaremos un controlador PI con f.d.t: D(s)= Kp+KI/s.

La función de transferencia en lazo cerrado será:

Y (s) G ( s) D( s) 0.001K p s + 0.001K I


H (s) = = = 2
R( s ) 1 + G ( s ) D( s ) s + (0.1 + 0.001K p ) s + 0.001K I
8
A partir de Mp(<20%) y de ts=8 seg, vamos a obtener el amortiguamiento y la
frecuencia propia:

ts=8;
Mp=0.2;
amort=sqrt(((log(Mp)^2))/(pi^2+(log(Mp))^2)) ln 2 ( Mp)
wn=4/ts*amort ξ=
π 2 + ln 2 ( Mp)
amort =
0.4559 4.6
t s (1%) =
%Tomamos algo mas: amort= 0.7 ξωn
amort=0.7
wn=4/(ts*amort)
wn= 0.82

ωn2
H deseada ( s ) = 2 =
s + 2ξωn s + ωn
2

(0.82)2 =
0.67
s 2 + 2(0.7)(0.82) s + (0.82 ) s 2 + 1.15s + 0.67
2

9
Ahora vamos a calcular las constantes Kp y KI:
Y (s) G ( s) D( s) 0.001K p s + 0.001K I
H ( s) = = = 2
R ( s ) 1 + G ( s ) D( s ) s + (0.1 + 0.001K p ) s + 0.001K I
La f.d.t en lazo cerrado que produce la respuesta transitoria deseada es:
0.67
H deseada ( s ) = 2
s + 1.15s + 0.67
Comparando los denominadores:
0.1 + 0.001K p = 1.15 ⇒ K p = 1050 1050 s + 670
⇒ D( s ) PI =
0.001K I = 0.67 ⇒ K I = 670 s
1.05s + 0.67
La función de transferencia en lazo cerrado será: H ( s) = 2
s + 1.15s + 0.67
Su respuesta es:

n=[1.05 0.67];
d=[1 1.15 0.67];
step(100*n,d)

10
1050s+670 1
s 1000s+100
Consigna 100 Controlador PI Vehiculo velocidad

11
Opcion 1 (Ejemplo 4). Controlador digital con periodo de muestreo 30 veces el ancho
de banda. Utilizaremos la transformación bilineal, con un periodo de muestreo
T=1/(30x0.3 Hz)=0.1 seg para discretizar el controlador PI continuo:
2( z − 1)
1050 + 670
1050 s + 670 T ( z + 1) 1083.5 z − 1016.5
D( z ) = D( s ) s = 2 ( z −1) = = =
T ( z +1) s s=
2 ( z −1) 2( z − 1) z −1
T ( z +1)
T ( z + 1)
La respuesta con
el PI discreto es
Señal control

1083.5z-1016.5 1 prácticamente
z-1 1000s+100 igual que con el PI
continuo
Consigna 100 Zero-Order Transfer Fcn velocidad
Discrete Hold
Transfer Fcn

Velocidad
Señal de control (T=0.1) controlada 12
Opcion 2 (Ejemplo 5). Controlador digital con periodo de muestreo 6 veces el ancho de
banda.En este caso utilizaremos la misma transformación bilineal, pero con un periodo
de muestreo T=1 / ( 6 x 0.3 Hz)=0.6 seg para discretizar el controlador PI continuo:
2( z − 1)
1050 + 670
1050 s + 670 T ( z + 1) 1251z − 849
D( z ) = D( s ) s = 2 ( z −1) = = =
T ( z +1) s s=
2 ( z −1) 2( z − 1) z −1
T ( z +1)
T ( z + 1)
Señal control

1251z-849 1
z-1 1000s+100
Consigna 100 Zero-Order Transfer Fcn velocidad
Discrete Hold
Transfer Fcn

Ahora la respuesta
es algo peor.

La señal de control
es “muy fuerte”.

Salida control PI digital (T=0.6) Velocidad regulada 13


Diseño de control PID digital con la técnica de
ubicación de polos

Ahora vamos a discretizar la planta o proceso a controlar, para controlarla con un PID
digital según este esquema:

D(z) es el controlador PID digital

1 − e − sT
Gzoh .G ( s ) = G ( s ); Como z = e sT ⇒ e − sT = z −1
s
 G (s) 
Luego: G ( z ) = (1 − z −1 ) Z  
 s  14
Control PID
Control
Proporcional (P) continuo: u (t ) = K p e(t ) ⇒ D(s) = K p
discreto: u (k ) = K p e(k ) ⇒ D(z) = K p
Control diferencial (D):
de(t )
continuo: u (t ) = K d ⇒ D(s) = K d s
dt
e(k ) − e(k − 1) 1 − z −1 z −1
discreto: u (k ) = K d ⇒ D(z) = K d = Kd
T T Tz
Control Integral (I):
t KI
continuo: u (t ) = K I ∫ e(t ) dt ⇒ D(s) =
0 s
U ( z ) K I T K I Tz
discreto: u (k ) = u (k − 1) + K I Te(k ) ⇒ D(z) = = −1
=
E( z) 1 − z z −1
Aproximación rectangular para
el cálculo de la integral

Hemos usado el Teorema del retardo:


Z { f (k − n)} = z − n F ( z ) ⇒ U(z- 1 ) = z -1U(z) 15
Control PI digital
Tz ( K p + K I T ) z − K p
(Aprox. Rectangular) DPI (z) = K p + K I =
z −1 z −1
(Transf. bilineal)
KI K I T ( z + 1)
DPI (z) = K p + = Kp +
s s=
2 ( z −1) 2( z − 1)
Control PD digital T ( z +1)

z − 1 ( K pT + K d ) z − K d
Aprox rectangular DPD(z) = K p + K d =
Tz Tz
2 K ( z − 1)
Transf bilineal DPD(z) = K p + K d s 2( z −1) = K p + d
s=
T ( z +1) T ( z + 1)
Control PID digital
Aprox. rectangular:
z − 1 ( K p + K I T + K d ) z − ( K pT + 2 K d ) z + K d
2 2
Tz
DPID(z) = K p + K I + Kd =
z −1 Tz Tz ( z − 1)
Transformación bilineal:
 K  K T ( z + 1) 2 K d ( z − 1)
DPID(z) =  K p + I K d s  = Kp + I +
 s  s = 2( z −1) 2( z − 1) T ( z + 1)
T ( z +1) 16
Ejemplo 6. Diseñar un controlador PI del control de velocidad de un coche con masa m= 1000
Kg, coeficiente de fricción b= 100, de forma que pase de 0 a 100 en 8 seg. Con un sobredisparo
inferior al 20% y un periodo de muestreo de T=0.6 seg.

Con Mp= 20%, y tr=8 seg, ya vimos en el Ejemplo 3, que z=0.7 y wn=0.82, por lo que la
función de transferencia continua deseada en lazo cerrado era:
ωn2 0.67
H deseada ( s ) = 2 = 2
s + 2ξωn s + ωn s + 1.15s + 0.67
2
s=roots([1 1.5 0.67])
Los polos deseados del dominio s son: sp= - 0.75 +- 0.33 j T=0.6
Los polos en z son aproximadamente: zp= 0.62 +- 0.12 j z=exp(s*T)
_ s=
(1 − z p )(1 − z p ) 0.16 -0.7500 + 0.3279i
H deseada ( z ) = = (1)
_
z 2 − 1.25 z + 0.4 -0.7500 - 0.3279i
( z − z p )( z − z p ) z=
Vamos a discretizar G(s) 0.6253 + 0.1246i
1 1 0.001 0.6253 - 0.1246i
G ( s) = = =
ms + b 1000 s + 100 s + 0.1
−1  G ( s)  −1
 0.001  z − 1  0.01 0.01 
G ( z ) = (1 − z ) Z   =(1 − z ) Z  = Z − =
 s   s ( s + 0 . 1)  z  s s + 0 . 1 
z −1  z z  0.00058
0.01  − − ( 0.1)( 0.6 ) 
= = G( z) (2)
z  z −1 z − e  z − 0.942 17
Vamos a usar el controlador PI con T=0.6, calculado con transformación bilineal (por
aproximación bilineal): K T ( z + 1)
DPI (z) = K p + I
2( z − 1)
Por lo que el sistema en lazo cerrado será:
r=100 m/s K T ( z + 1) y=v
0.00058
Kp + I
+ 2( z − 1)
- z - 0.942

La f.d.t. discreta global en lazo cerrado será:

0.00058  K I T ( z + 1) 
 K p + 
G ( z ) D( z ) z - 0.942  2( z − 1) 
H ( z) = = =
1 + G ( z ) D( z ) 0.00058  K I T ( z + 1) 
1+ Kp + 
z - 0.942  2( z − 1) 
(0.00058 K p + 0.0017 K I ) z − 0.00058 K p + 0.0017 K I
H ( z) = (3)
z + (0.00058 K p + 0.0017 K I − 1.942) z − 0.00058 K p + 0.0017 K I + 0.942
2

18
Comparando los denominadores de las ecuaciones (1) y (3) (para hacer coincidir los
polos) de H(z) y H(z) deseada
z 2 + (0.00058 K p + 0.0017 K I − 1.942) z − 0.00058 K p + 0.0017 K I + 0.942 = z 2 − 1.25 z + 0.4

Igualando los coeficientes, nos quedan dos ecuaciones con dos incógnitas:

 0.00058 K p + 0.0017 K I − 1.942 = −1.25 z K p = 1063



− 0.00058 K p + 0.0017 K I + 0.942 = 0.4 K I = 44

Entonces, la f.d.t del controlador PI discreto será:

K I T ( z + 1) 1076 z − 1018.7
DPI ( z ) K p + =
2( z − 1) z −1

Con los numeradores de (1) y (2) no podemos hacer nada, aunque también afectarán al
comportamiento global, y la respuesta no será exactamente lo esperado.
19
Usando Simulink para la simulación (sin olvidar seleccionar T=0.6 como periodo
de muestreo, dentro de los bloques discretos y de la señal de consigna r =100):

1076z-1018 0.00058
z-1 z-0.942
Consigna 100 velocidad
Controlador PI Modelo discreto del vehículo
digital

El tiempo de subida es inferior a


8 segundos, ya que pasa de 0 a
100 Km/ h en 6 segundos; ello
sin duda, exige una gran
potencia de motor, y una señal u
muy alta.

No hay sobredisparo; la
respuesta es más amortiguada
que la prevista. 20
La simulación del controlador PI digital con el modelo del vehículo continuo
sería:

1076z-1018 1
z-1 1000s+100
Consigna 100 Zero-Order Modelo continuo velocidad
Controlador PI Hold del vehiculo
digital

21
DISEÑO DE CONTROLADORES
DIGITALES EN EL ESPACIO DE
ESTADOS

22
DISEÑO DE REGULADORES DIGITALES (R=0) POR UBICACION DE POLOS Y
REALIMENTACION DE ESTADO.
x(k+1) x(k) y(k)
u(k)
x(k += 1) Gx(k ) + Hu (k ) H z-1I C

y (k ) = Cx(k )
u (k ) = −Kx(k ) G

K = [k1 k2 ....kn ]
-K
x(k + 1) = (G − HK )x(k )
Dados los polos deseados en lazo cerrado (en función de la respuesta transitoria
deseada (tiempo de asentamiento, etc …): m1 m2... mn se diseña el sistema , de
forma que:
( z µ1 )( z − µ2 ).....( z − µn )
zI - (G - HK) =−
El cálculo se puede hacer a mano (para matrices de dimensiones pequeñas) o
bien usando la función place de Matlab
A continuación haremos el cálculo a mano.
23
Ejemplo 7: Dado un sistema con la siguiente representación en el espacio discreto de
estados:   0 1  0
=  x(k + 1)   x(k ) +   u (k )
  −0.2 − 0.5  1
 y (k ) 0.1 0.2 x(k ) + 0.u (k )
=  ( )
a) Calcular la matriz de realimentación K, tal que asigne los polos del sistema en lazo cerrado
en las posiciones: µ1=0.7968 + 0.302 j ; µ2=0.7968 - 0.302 j

u (k ) = − Kx(k )
 0 1  0 
=
x(k + 1)   −   ( k1 k2 )  u (k )
 −0.2 −0.5   1  
( z µ1 )( z − µ2 ).....( z − µn )
zI - (G - HK) =−
 z 0   0 1  0 
 −
   −   ( k1 k2 )  =
( z − 0.7968 + 0.3021 j )( z − 0.7968 − 0.3021 j )
 0 z   −0.2 −0.5   1  
 z 0  0 1  0 0 z −1
 − +k =
k2  k1 + 0.2 z + k2 + 0.5
=
z 2 − 1.5936 z + 0.7261
 0 z   −0.2 −0.5   1
24
b) Obtener las señales de salida, y de los dos estados, para condiciones iniciales x0=[-1 -1],
si el periodo de muestreo es de T=0.08 seg.

Igualando z2 ⇒ 1 = 1 

coeficientes: z ⇒ k2 + 0.5 = −1.5936  K =
[k1 k2 ] =
[0.5262 −2.0936]

z 0 ⇒ k1 + 0.2 =0.7261 
G=[0 1; -0.2 -0.5]; H=[0;1];
C=[0.1 0.2]; D=[0];
K=[0.5262 -2.0936];
T=0.08;
sys=ss(G-H*K,H,C,D,T);
t=0:T:3;
u=zeros(size(t)); % u=0
x0=[-1 -1]; % C.iniciales
[y,t,x]=lsim(sys,u,t,x0);
subplot(3,1,1)
plot(t,y); ylabel('y');
subplot(3,1,2)
plot(t,x(:,1)); ylabel('x1');
subplot(3,1,3)
plot(t,x(:,2)); ylabel('x2') 25
Con simulink: salida_y

u
y
estados x

ss discreto

[k1 k2]
x
-K* u

ss discreto:
D* u

Matriz D

x(k+1)
1 H* u 1 x(k) 1
C* u
u
z salida_y
Matriz H Add1
Add Unit Delay Matriz C

Matriz G

G* u 2
estados x

Importante: “ Todos los elementos tienen que definirse con el mismo


periodo de muestreo T. Las matrices G,H,C,D y K= [k1 k2], se definen
desde Matlab (workspace). 26
Como se ve, hemos inicializado
los estados a x(t=0)=[-1 -1]

Esto se hace, estableciendo las condiciones iniciales del


módulo 1/z:

27
Vamos a calcular el tiempo de asentamiento ts y el sobredisparo
z 2 − 1.5936 z + 0.72 =
0
Polos en z en lazo cerrado
=z p 0.7968 ± 0.2917 j

Como z=exp(sT), entonces los polos en s son: sp=(1/T) ln(zp)

sp =
−2.0533 ± 4.3867 j ⇒ ωn =
4.843 ξ =0.424
−πξ
2
ln ( Mp ) zp=[0.7968+0.2917j 0.7968-0.2917j]
1−ξ 2
ξ =⇒ Mp e T=0.08
π + ln ( Mp )
2 2
sp=(1/T)*log(zp)
4.6 k=1;zz=0;p=sp;
ts (1%) = [n,d]=zp2tf(zz,p,k)
ξωn wn=sqrt(d(3))
zeta=d(2)/(2*wn)
Se comprueba que para un periodo de ts=4.6/(wn*zeta)
T=0.08, se obtiene (tal y como hemos visto Mp = exp(-pi*zeta/sqrt(1-zeta^2))
en el gráfico de la página anterior) un tiempo ts = 2.2403
de asentamiento ts=2.24 seg, y un Mp = 0.2298
sobredisparo del 23 %. 28
DISEÑO DE SERVOSISTEMAS DIGITALES (planta con integrador)

r
y=x1
+
K1
- +
u (k) x
- y (k ) = Cx(k )
-
-
x(k +=
1) Gx(k ) + Hu (k )

x2
K2
x3
K3
xn
Kn

29
DISEÑO DE SERVOSISTEMAS DIGITALES (planta con integrador)
r + y=x1
K1 +
-
- u (k) x y (k ) = Cx(k )
- x(k +=
1) Gx(k ) + Hu (k )
-

K2 x2

K3 x3

xn
Kn

x(k +=
1) Gx(k ) + Hu (k ); y (=
k ) Cx(k )
 x1 
 
 x2 
− ( 0 K 2 K 3 .... K n )  x3  + K1 (r (k ) − x1 (k ) =
u (k ) = −Kx(k ) + K1r (k )
 
 . 
x 
 n
x(k + 1) = Gx(k ) + H (− Kx(k ) + K1r (k )) = (G − HK ) x(k ) + HK1r (k )
30
Ejemplo 8: Diseñar un servosistema discreto con periodo de muestreo T=0.01 seg, y
con condiciones iniciales=0, para el sistema discreto:

 x1 (k + 1)   1 0.0097   x1 (k )   0 
=      +  u (k )
 x2 (k + 1)   0 0.9468   x2 (k )   0.1103 
 x1 (k ) 
y (k ) = (1 0 )  
 2
x ( k ) 
 x1 (k ) 
u (k ) = − ( 0 K 2 )   + K1 (r (k ) − x1 (k ))
 x2 (k ) 
Para el cálculo a mano de K es necesario partir de los valores propios, que son:

( z − µ1 )( z − µ2 ).....( z − µn ) =
zI - (G - HK) = ( z − 0.9724 + 0.0577 j )( z − 0.9724 − 0.0577 j )
 z 0   1 0.0097   0  
 −
  −
  ( k1 k 2 ) =
( z − 0.9724 + 0.0577 j )( z − 0.9724 − 0.0577 j )
 0 z   0 0.9468   0.1103  
K1 = 3.8237
K 2 = 0.0181
31
Con Matlab:

G=[1 0.0097;0 0.9468];


H=[0;0.1103];
C=[1 0];D=[0];
Z=[0.9724+0.0577j 0.9724-
0.0577j];
K=place(G,H,Z);
T=0.01;
sys=ss(G-H*K,H*K(1),C,D,T);
t=0:T:2;
r=ones(size(t));
[y,t,x]=lsim(sys,r,t);
subplot(3,1,1)
plot(t,y); ylabel('y');
subplot(3,1,2)
plot(t,x(:,1)); ylabel('x1');
subplot(3,1,3)
plot(t,x(:,2)); ylabel('x2');

32
Con Simulink, con entrada escalón unitario:
salida_y

K*u u(k)
y
estados x(k)
Step k1
ss discreto

x1
x

K*u x2

k2

x1 x2
 x1   x1 
− ( 0 K 2 )   + K1 (r (k ) − x1 (k ) =
u (k ) = − ( K1 K 2 )   + K1r (k ) =
−Kx(k ) + K1r (k )
 2
x  2
x

33
Con Simulink, con entrada de señal cuadrada:

salida_y

K*u u(k)
y
Pulse estados x(k)
k1
Generator
ss discreto
Nota: usar la
x1
x configuración
x2
K*u solver: “discrete”
k2 como parámetro
de simulación, y
x1 x2
seleccionar Ts.

Se puede ver el comportamiento del servomecanismo


ante el cambio rápido de consigna. 34
DISEÑO DE SERVOSISTEMAS DIGITALES CON INTEGRADOR

En el caso de que la planta no tenga integrador, introducimos uno en la cadena


directa:

r(k) p(k+1) u(k)


y (k)

K*u u(k)
y
Step x(k)
p(k) KI
x(k+1)=Gx(k)+Hu(k)
Unit Delay y(k)=Cx(k)+Du(k)
1
K
z x
K* u

r(k): señal de referencia ; p(k): señal del integrador; u(k): señal de control

35
DISEÑO DE SERVOSISTEMAS DIGITALES CON INTEGRADOR

r(k) p(k+1) u(k)


y (k)

K*u u(k)
y
Step x(k)
p(k) KI
x(k+1)=Gx(k)+Hu(k)
Unit Delay y(k)=Cx(k)+Du(k)
1
K
z x
K* u

r(k): señal de referencia ; p(k): señal del integrador; u(k): señal de control

y (k ) = Cx(k )
u (k ) =
− Kx(k ) + K I p (k + 1)
p (k + 1) = p (k ) + r (k ) − y (k ) = p (k ) + r (k ) − Cx(k )
x(k +=1) Gx(k ) + Hu (= k ) Gx(k ) − HKx(k ) + HK I [ p (k ) + r (k ) − Cx(k )]
36
El modelo en el espacio de estados discreto del sistema en lazo cerrado es:
 x(k + 1)   G − H ( K + K I C ) HK I  x(k )   HK I 
  =    +  r (k )
 p ( k + 1)   − C 1  p ( k )   1 
 x(k ) 
y (k ) = (C 0 ) 
 p (k ) 
Se puede calcular la expresión del  xe (k + 1)   G − H ( K + K I C ) HK I  xe (k ) 
  =   
error:
 pe (k + 1)   −C 1  pe (k ) 

Operando:  xe (k + 1)   G 0   xe (k )   H   xe (k ) 
=

+
    p (k )    [
+ ( − K + K C ) K I ] 

I
 e
p ( k 1)   C 1  e    0  e 
p ( k )
Asignando:
 xe (k )  ∧ G 0 H 
∧ ∧
e( k ) =
  G=
  H=
  [( K − K I C ) − K I ]
K=
 e 
p ( k )  −C 1  0
∧ ∧ ∧
e(k + 1) = G e(k ) + H(− K e(k ))
Se puede calcular con Matlab con:
 ∧
 ∧ ∧
e(k + 1) = G − H K  e(k ) K=acker(G,H,P) o bien:
  K=place(G,H,P)
37
K y KI se obtienen a partir de K
Ejemplo: Control de posición angular (servo) con integrador de un motor DC

% Simulacion servo de posicion + integrador DISCRETO con motor DC


% Parametros del motor
clear all; clc
consigna=10; % consigna servo en radianes
J= 0.007; % J del motor
K = 0.8446523; %K=Kt=Ke del motor (Nm/A) o bien (Volt/(rad/seg))
R = 5.6; %resistencia bobinado motor (ohm)
L= 88E-6; % 0,088 mH
b=0.00764; % rozamiento
Ts =0.01; %tiempo de muestreo (s)
% Modelo del motor
A = [0 1 0; 0 -b/J K/J; 0 -K/L -R/L ];
B = [0; 0; 1/L];
C = [1 0 0];
D = [0];
% Variables de estado: x1=teta(angulo servo) // x2= vang // x3=I (corriente)
sys=ss(A,B,C,D); % sistema continuo

38
% discretizamos el modelo del motor
dsys=c2d(sys,Ts,'zoh'); % sistema discreto
G=dsys.a; H=dsys.b; C=dsys.c; D=dsys.d; %matrices sistema discreto
% Matrices para calculo K,Ki
KGG=[G zeros(3,1);-C 1];
HH=[H;0];
CC=[C 0];
DD=[0];
%Polos deseados del sistema continuo
p1 = -5; p2 = -5; p3 = -15; p4=-20; ps=[p1 p2 p3 p4];
% polos deseados del sistema discreto
pz=exp(ps*Ts);
KK=acker(GG,HH,pz); % calculo constantes del regulador discreto con
integrador
% OJO: KK=[(K+KI*C) -KI]
KI=-KK(4)
K=KK(1:3)+(KI*C)
% Matrices para simulacion
AA=[G-H*(K+KI*C) H*KI;-C 1];
BB=[H*KI;1]; CC=[C 0]; DD=[0];
sys_fd=ss(AA,BB,CC,DD,Ts); 39
% Simulacion

dt = Ts; % Resolucion temporal


T = 5; % Tiempo final de simulacion
t = 0:dt:T; % Escala temporal
r = consigna+0*t; %Señal de consigna
x0 = [0 0 0 0]; % 4 Condiciones iniciales. (Añadimos integrador)
[y,t,x]=lsim(sys_fd,r,t,x0,'zoh');
u=[-KK*x']'; % señal de control: voltaje del motor
subplot(4,1,1);
plot(t,u,'r'); title('Tensión de salida para el motor');
xlabel('Tiempo(s)'); ylabel('Tensión de salida(V)');
subplot(4,1,2);
plot(t,x(:,1),'b');
title('angulo del servo'); xlabel('Tiempo(s)'); ylabel('Ángulo(rad)');
subplot(4,1,3);
plot(t,x(:,2),'r');
title('vel angular del servo'); xlabel('Tiempo(s)'); ylabel('w(rad/seg)');
subplot(4,1,4);
plot(t,x(:,3),'b'); title('Intensidad Motor'); xlabel('Tiempo(s)'); ylabel(' I (Amp)');
40
41
OBSERVADOR DE ESTADO DISCRETO
• En la práctica, por desgracia, no siempre se pueden medir las variables de
estado, para usarlas en los controladores que hasta ahora hemos estudiado.

• Por ello necesitamos estimar dichos estados con un dispositivo que


llamaremos observador. El sistema, para ello, debe ser observable

u(k) y(k)
x(k+1)=Gx(k)+Hu(k)
y(k)=Cx(k)+Du(k)
x(k)

y salida estimada
Observador ≈
x estados estimados

El estado estimado debe ser lo más parecido posible al estado real. Se utilizan las
mismas matrices G,H,C,D del estado real en el diseño del observador, pero
además se necesita una realimentación de ganancia L.
42
x(k+1) x(k)
1
1 H C 1
u(k) z salida real y
Unit Delay1 2

G
PLANTA

Estado Cx(k)
estimado x^

1 y^
H C
z
Unit Delay

L
Ke

OBSERVADOR

43
x(k+1) x(k)
1
1 H C 1
z
u(k) salida real y
Unit Delay1 2

G
PLANTA

Estado Cx(k)
estimado x^

1 y^
H C
z
Unit Delay

L
Ke

OBSERVADOR

≈ ≈ ≈
x(k +=
1) G x(k ) + Hu (k ) + L [ y (k ) − y (k )] ≈ ≈
≈ ≈ x(k + 1) − x(k + 1) = (G − LC )[ x(k ) − x(k )]
y (k ) = C x(k )
e(k + 1) = (G − LC )e(k )
≈ ≈
x(k + 1) = (G − LC ) x(k ) + Hu (k ) + Ly (k )
Para diseñar el observador hay que calcular L en función de los polos deseados, por lo
que los valores propios serán:
zI − (G − LC ) =( z − µ1 )( z − µ2 )...( z − µn ) 44
DISEÑO DE REGULADOR CON OBSERVADOR DE ESTADO DISCRETO

El sistema debe ser


u(k)
y(k) observable y
x(k+1)=Gx(k)+Hu(k) controlable
y(k)=Cx(k)+Du(k)
x(k)


Observador
x
-K

45
DISEÑO DE REGULADOR CON OBSERVADOR DE ESTADO DISCRETO
u(k) y(k)
x(k+1)=Gx(k)+Hu(k)
y(k)=Cx(k)+Du(k) x(k)
El sistema debe ser
observable y
controlable

Observador x

-K

x( k + 1) = Gx( k ) + u ( k ) = Gx( k ) − HK x( k )

x( k ) = x( k ) − e( k )
x( k + 1) = Gx( k ) − HKx( k ) + HKe( k )
x( k + 1) = (G − HK ) x( k ) + HKe( k ); Teniamos : e( k + 1) = (G − LC )e( k )
 x( k + 1)   G − HK HK  x(k ) 
  =   
 e( k + 1)   0 G − LC  e(k ) 
 x(k ) 
y (k ) = (C 0 ) 
 e ( k ) 
 G − HK HK 
zI −   = zI − (G − HK ) zI − (G − LC ) = 0
 0 G − LC  46
Por lo tanto, se pueden obtener por separado las constantes de realimentación del
observador (L) y del controlador (K).
a) Para el observador, L se obtiene resolviendo:
zI − (G − LC ) = ( z − µ1 )( z − µ 2 )...( z − µ n )
J= [ m1 m2 …. mn ] : polos en z deseados del observador
Con Matlab, L se calcula con: L=place(G’,C’,J)’

b) Para el controlador , K se obtiene resolviendo

zI − (G − HK ) = ( z − α1 )( z − α 2 ).....( z − α n )

P= [ a1 a2 …. an ] : polos en z deseados del controlador


Con Matlab, K se calcula con: K=place(G,H,P)

La dinámica del observador debe ser más rápida que la del controlador para
que la estimación del estado converja al estado real más rápidamente que el
controlador.
47
Diagrama de control digital con observador

48
Péndulo invertido con control digital con observador
Condiciones de diseño: • 
Polos dominantes:  x1   0 1 0 0   x1   0 
S1=-1+j*sqrt(3); •      
 x2   20.601 0 0 0   x2   −1 
S2=-1-j*sqrt(3) ; =•  + u
 0 0 0 1   x3   0 
Otros polos:  x3      
S3= -5; •   −0.4965 0 0 0   x4   0.5 
 x4 
S4= -5;  
 x1 
 
 y1   1 0 0 0   x2 
 = 
 y2   0 0 1 0   x3 
 
 x4 

49
%Control Digital pendulo invertido con Observador
A=[0 1 0 0;20.601 0 0 0;0 0 0 1;-0.4965 0 0 0];
B=[0;-1;0;0.5];
C = [1 0 0 0;
0 0 1 0];
D = [0;
0];
sys_ss=ss(A,B,C,D)
T=1/100; %Periodo de muestreo
sys_d=c2d(sys_ss,T,'zoh') %digitalización con muestreador-% retenedor
de orden cero
%
%Controlabilidad y observabilidad
co = ctrb(sys_d);
ob = obsv(sys_d);
controllability = rank(co)
observability = rank(ob)
%
% Matrices de estado digital
G = sys_d.a;
H = sys_d.b;
C = sys_d.c;
D = sys_d.d; 50
%Observador
%
% Normalmente se hace que los polos del observador sean entre 4-10 veces % más rápidos
que los polos más pequeños del controlador (valores propios % de A-B*K ) pero si son
demasiado rápidos, es un problema cuando hay %demasiado ruido de medida.
poles = eig(A-B*K)% polos deseados del observador (primer tanteo)
% polos =
% 0.9157 + 0.0728i
% 0.9157 - 0.0728i
% 0.9535 + 0.0079i
% 0.9535 - 0.0079i
%Basandonos en los polos en z obtenidos antes, ubicaremos los polos del %observador en [-0.2
-0.21 -0.22 -0.23]
J = [-0.2 -0.21 -0.22 -0.23];
L = place(A',C',J)' % calculo de Matriz ganancia observador
%Para calcular K, queremos ubicar los polos en s:
S1=-1+j*sqrt(3); S2=-1-j*sqrt(3) ; S3=-5; S4= -5;
s=[S1 S2 S3 S4 ];
% cálculo de polos en z=exp(s*T)
Z= exp(s*T)
K=acker(G,H,Z)

51
% Ahora obtendremos la respuesta global del sistema con observador
Gce = [(G-H*K) (H*K);zeros(size(G)) (G-L*C)];
Hce = [H;zeros(size(H))] ;Cce = [C zeros(size(C))];
Dce = [0;0];
sys_lc=ss(Gce,Hce,Cce,Dce,T);
t = 0:0.01:5;
r = 0.2*ones(size(t));% Entrada escalón de amplitud 0.2
% estados = {'x' ‘dx/dt' ‘teta ‘d(teta)/dt' 'e1' 'e2' 'e3' 'e4'};
% entradas = {'r'};
%salidas = {'x'; ‘teta'};
[y,t,x]=lsim(sys_lc,r,t);
[AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
set(get(AX(1),'Ylabel'),'String','posicion carro (m)')
set(get(AX(2),'Ylabel'),'String','angulo pendulo(radianes)')
title('Respuesta escalon con Controlador Digital basado en observador‘)

Veamos a continuación la respuesta:

52
-3
x 10 Respuesta escalon con Controlador Digital basado en observador
4 0.01

2 0

angulo pendulo(radianes)
posicion carro (m)

0 -0.01

-2 -0.02

-4 -0.03
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

53
Con Simulink:

A=[0 1 0 0;20.601 0 0 0;0 0 0 1;-0.4965 0 0 0];


B=[0;-1;0;0.5];
C = [1 0 0 0;
0 0 1 0];
D = [0;
0];
sys_ss=ss(A,B,C,D)
T=1/100; %Periodo de muestreo
sys_d=c2d(sys_ss,T,'zoh') %digitalización con muestreador orden cero
G = sys_d.a;
H = sys_d.b;
C = sys_d.c;
D = sys_d.d;
J = [-0.2 -0.21 -0.22 -0.23];
L = place(A',C',J)' %
%Para calcular K, queremos ubicar los polos en s:
S1=-1+j*sqrt(3); S2=-1-j*sqrt(3) ; S3=-5; S4= -5;
s=[S1 S2 S3 S4 ];
% cálculo de polos en z=exp(s*T)
Z= exp(s*T)
K=acker(G,H,Z)
54
55
56

S-ar putea să vă placă și