Documente Academic
Documente Profesional
Documente Cultură
CONTROLADORES
DIGITALES
1
Tema 5. Diseño de controladores digitales
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.
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.
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”.
Ahora vamos a discretizar la planta o proceso a controlar, para controlarla con un PID
digital según este esquema:
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
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
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:
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
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
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
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:
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.
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
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
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
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
≈
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)’
zI − (G − HK ) = ( z − α1 )( z − α 2 ).....( z − α n )
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‘)
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: