Diseño y Control Del Péndulo Invertido
Diseño y Control Del Péndulo Invertido
Diseño y Control Del Péndulo Invertido
\
|
=
J
mg
s
J
m
s
x
2
2
Escrito en forma compacta
( )
2
2
s dc
x s c
Donde c y d son parmetros a determinar mediante la identificacin.
Captulo 3 Modelado e Identificacin
29
3.1.2. Modelado del pndulo no invertido
Cuando el pndulo se encuentra en la posicin vertical inferior, ya no son validas las
aproximaciones hechas anteriormente. Es necesario entonces recalcular el modelo, cambiando el
origen de medicin del ngulo . La nueva variable cuyo origen es el eje vertical inferior, la
llamaremos *.
Figura 3.3: Modelo Simplificado del Pndulo No Invertido
Aplicando nuevamente las leyes de la mecnica clsica, obtenemos
* * cos * J mg sen mx
''
'' =
Se puede demostrar que la funcin de transferencia resulta
( )
2
2
* s dc
x s c
=
+
La diferencia entre ambos sistemas corresponde a una inversin en el signo del parmetro c . Esto
es equivalente a una rotacin de 90 en la ubicacin de los polos y una inversin del signo en la
ganancia.
Figura 3.4: Ubicacin de polos y ceros para el pndulo invertido (izq.) y el pndulo no invertido (der.)
Captulo 3 Modelado e Identificacin
30
3.1.3. Modelado del Motor
El circuito equivalente de un motor de corriente continua consiste de una fuente electromotriz,
proporcional a la velocidad de giro del motor, en serie con la resistencia interna del devanado.
Figura 3.5: Modelo Simplificado del motor de CC
De aqu tenemos que
R
k V
i
i
'
=
1
Tambin sabemos que la cupla motora es proporcional a la corriente y que la aceleracin angular es
proporcional a la cupla motora menos el rozamiento (que se considera proporcional a la velocidad
angular).
i k
m 2
= ' =
3
k
r
r m
J = ' '
remplazando obtenemos
' ' = ' '
3
1 2 2
k
R
k k
V
R
k
J
i
aplicando transformada de Laplace
i
V sk
R
k k
s J s
k
R
= |
.
|
\
|
+ +
3
1 2 2
2
|
.
|
\
|
+ +
=
3
1 2
2
k
R
k k
sJ Rs
k
V
i
Captulo 3 Modelado e Identificacin
31
Como el ngulo del motor es proporcional a la posicin del carro y la tensin de entrada es
proporcional a la seal de control, resulta
|
.
|
\
|
+ +
=
3
1 2
2 4
k
R
k k
sJ Rs
k k
u
x
o en forma compacta
( )
x ba
u s s a
=
+
Donde a y b son parmetros a determinar mediante la identificacin.
3.1.4. Modelo Completo
A partir de estas funciones de transferencia podemos armar un sistema multi-variable, con una
entrada y dos salidas. En la figura 3.6 se observan dos posibles formas de representacin del sistema
en diagramas de bloques.
Figura 3.6: Posibles representaciones del sistema en diagramas de bloques
Tambin es posible expresar el sistema como un sistema de cuarto orden en variables de estado
( ) 0 0 0 ( )
( ) 1 0 0 0 ( ) 0
( )
( ) 0 0 ( )
( ) 0 0 1 0 ( ) 0
x t a x t ba
x t x t
u t
t dca c t badc
t t
'' ' ( ( ( (
( ( ( (
'
( ( ( (
= +
'' ' ( ( ( (
( ( ( (
'
(
(
(
(
'
'
(
=
) (
) (
) (
) (
1 0 0 0
0 0 1 0
) (
t
t
t x
t x
t y
Captulo 3 Modelado e Identificacin
32
o en forma compacta
) ( ) ( ) ( t u B t X A t X + = '
) ( ) ( t X C t y =
donde ) (t y representa el vector de salidas
(
) (
) (
t
t x
3.1.5. Discretizacin
Visto desde la computadora, debido a la forma discreta de medir y aplicar la seal de control, el
sistema se ve como un sistema discreto. Existen varias tcnicas para derivar un modelo discreto del
sistema a partir del modelo continuo de forma analtica
[16]
, pero debido al alto grado de
complejidad, inherente a un sistema de cuarto orden, la discretizacin se realiz en forma numrica
mediante la funcin c2d de MATLAB.
El tipo de discretizacin utilizado es la discretizacin con mantenedor de orden cero, la cual
consiste en suponer que la entrada se mantiene constante durante todo el perodo de muestreo (lo
cual es cierto en esta aplicacin). La misma es exacta en el sentido de que todas las variables de
estado de ambos sistemas (continuo y discreto) coinciden en el instante de muestreo. De esta forma
se obtiene un sistema discreto equivalente al continuo.
) (
) (
) (
) (
) (
) 1 (
) 1 (
) 1 (
) 1 (
4
3
2
1
44 43 42 41
34 33 32 31
24 23 22 21
14 13 12 11
k u
k
k
k x
k x
k
k
k x
k x
(
(
(
(
+
(
(
(
(
'
'
(
(
(
(
=
(
(
(
(
+
+ '
+
+ '
(
(
(
(
'
'
(
=
) (
) (
) (
) (
1 0 0 0
0 0 1 0
) (
k
k
k x
k x
k y
o en forma compacta
) ( ) ( ) 1 ( k u k X k X I + u = +
) ( ) ( k X C k y =
Captulo 3 Modelado e Identificacin
33
3.2. Identificacin Mediante Simulacin
Para la identificacin de los parmetros del sistema se implement un algoritmo en MATLAB para
simular respuestas de sistemas y compararlas, mediante una funcin de costo cuadrtico, con la
respuesta del sistema real. En la Figura 3.7 se puede ver un diagrama en bloques del algoritmo.
Figura 3.7: Diagrama en bloques del algoritmo de Identificacin por Simulacin
Existen muchos algoritmos de minimizacin basados en este criterio, como por ejemplo los que se
describen en
[17]
. En este trabajo se utiliz el mtodo de la grilla que, si bien tiene un alto costo
computacional, nos garantiza encontrar la solucin con una precisin arbitraria. El mismo se
describe a continuacin.
Captulo 3 Modelado e Identificacin
34
3.2.1. Identificacin de la Funcin de Transferencia del Motor
Para empezar, se defini una entrada arbitraria ) (k u y se ejecut el equipo para obtener la respuesta
real del sistema a dicha entrada.
Figura 3.8: Respuesta real del sistema ante una entrada pulso
Luego, se defini arbitrariamente una grilla inicial de valores para los parmetros a y b, cubriendo
una regin de inters
Figura 3.9: Grilla de valores para los parmetros a y b
Posteriormente se utiliz la funcin filter de MATLAB para simular un conjunto de respuestas ) ( k x
de sistemas del tipo
( )
ba
s s a +
para cada par de valores (a, b) dentro de la grilla.
Captulo 3 Modelado e Identificacin
35
A continuacin se calcul, para cada par de valores (a, b), el valor de la sumatoria del error
cuadrtico entre la respuesta real y la respuesta simulada.
( )
=
2 2
) ( ) ( ) , ( k x k x b a e
Finalmente de se seleccion el par (a, b) que produce el error mnimo utilizando la funcin min de
MATAB.
Debido a que este es un problema cuadrtico lineal, est garantizado que es convexo y por lo tanto
tiene un solo mnimo. Consecuentemente, si el error mnimo se encuentra en el interior de la grilla,
esta asegurado que el mismo es la solucin del problema. El algoritmo puede luego repetirse
reduciendo el rango de variacin de la grilla, para obtener estimaciones de mayor exactitud.
Por otro lado, si el mnimo se encuentra sobre el borde de la grilla, significa que la solucin puede
encontrarse fuera de la misma, por lo tanto habr que redefinir la grilla con rangos de variacin ms
amplios para repetir los clculos.
Algunos de los resultados obtenidos pueden verse en las Figuras 3.10 y 3.11
Figura 3.10: Error cuadrtico en
funcin de los parmetros a y b
Figura 3.11: Contornos de la funcin de error
cuadrtico alrededor del punto mnimo
El par de parmetros que produjeron el error mas bajo fueron 3 . 25 = a y 98 . 5 = b
Captulo 3 Modelado e Identificacin
36
3.2.2. Identificacin de la Funcin de Transferencia del pndulo
Una vez identificados los parmetros del motor, se procedi con la identificacin de los parmetros
del pndulo. Debido a que resulta demasiado complicada la identificacin del pndulo en la
posicin superior (ya que es un sistema inestable), se realiz la identificacin del pndulo en la
posicin inferior (pndulo no invertido). Luego, ya que los parmetros son los mismos, se puede
obtener la funcin de transferencia del pndulo invertido realizando los correspondientes cambios
de signo. Debido a que
( )
2
2
* s dc
x s c
=
+
y
( )
x ba
u s s a
=
+
la funcin de transferencia entere la seal de control y el ngulo de desviacin del pndulo resulta
( )( )
2
* s abcd
u s c s a
=
+ +
Luego, se procedi de la misma forma que en el caso anterior, esta vez para determinar los
parmetros c y d, con una funcin de transferencia de tercer orden
Figura 3.12: Respuesta real del Pndulo ante una entrada Pulso
En este caso, los parmetros obtenidos fueron 2 . 80 = c y 017 . 0 = d
Captulo 3 Modelado e Identificacin
37
3.3. Identificacin Mediante Clculo Matricial
Otra forma de aplicar el mtodo de mnimos cuadrados, a la identificacin de los parmetros del
sistema, es mediante el clculo matricial
[16] [17].
Supongamos que queremos identificar los parmetros de una funcin de transferencia discreta de
segundo orden
1 0
2
1 0
b z b
x u
z a z a
+
=
+ +
A partir de una secuencia de entradas conocida u(k) y una secuencia de mediciones x(k) afectadas
por ruido.
La funcin de transferencia puede reescribirse en forma de ecuacin en diferencias, para calcular la
prediccin de x(k+1) dados los datos hasta el instante k
1 0 1 0
( 1) ( ) ( 1) ( ) ( 1) x k a x k a x k bu k b u k + = + +
O en forma matricial
| |
1
0
1
0
( 1) ( ) ( 1) ( ) ( 1)
a
a
x k x k x k u k u k
b
b
(
(
(
+ =
(
(
Repitiendo recursivamente, obtenemos
1
0
1
0
(2) (1) (0) (1) (0)
(3) (2) (1) (2) (1)
(4) (3) (2) (3) (2)
a x x x u u
a x x x u u
b x x x u u
b
( ( (
( ( (
( ( (
=
( ( (
( ( (
Y = +
El conjunto de parmetros que mejor se ajusta a los datos, es el que minimiza la sumatoria del
cuadrado del error de prediccin
Captulo 3 Modelado e Identificacin
38
2 2
( ) ( ( ) ( )) ( ) ( ) ( ) ( )
T T
k
e x k x k Y Y Y Y Y Y = = = + +
El mnimo se obtiene igualando a cero la expresin de la derivada del error
2
( )
( ) ( ) 0
T T
e
Y Y
c
= + + + + =
c
( ) 0
T
Y + + =
1
( )
T T
Y
= + + +
Usando esta expresin es posible calcular una estimacin de los parmetros del sistema discreto a
partir de los datos experimentales u(k) y x(k).
3.3.1. Identificacin de la Funcin de Transferencia del motor
El proceso de identificacin de la funcin de transferencia del motor comienza inyectando una seal
de prueba al equipo, en este caso una seal binaria pseudo-aleatoria, y registrndose los datos de
salida.
Figura 3.13: Entradas u(k) y salidas x(k) para una seal de prueba binaria pseudo-aleatoria
Captulo 3 Modelado e Identificacin
39
A continuacin se ensamblan las matrices Y y + siguiendo la forma
(3) (2) (1) (2) (1)
(4) (3) (2) (3) (2)
(5) (4) (3) (4) (3)
x x x u u
x x x u u
Y
x x x u u
( (
( (
( (
= + =
( (
( (
El vector de parmetros
se calcula como
( )
1
1.2024
0.2024
0.0391
0.0299
T T
Y
(
(
(
= + + + =
(
(
2
0.0391 0.0299
1.202 0.202
z
x u
z z
+
=
+
A partir de estos resultados es posible calcular el modelo continuo equivalente utilizando la funcin
d2c de MATLAB, con lo cual se obtiene
( )
( )( )
0.423 816.6
79.89 0.003
s
x u
s s
=
+
Haciendo algunas simplificaciones llegamos a
( )
345.4
79.89
x u
s s
=
+
79.9 4.32 a b ~ ~
3.3.2. Identificacin de la Funcin de Transferencia del Pndulo
El mismo procedimiento puede aplicarse para la identificacin de la funcin de transferencia del
pndulo, esta vez con una funcin de transferencia de tercer orden. Al igual que en la seccin 3.2.2.
la identificacin se realiza con el pndulo en la posicin inferior, por lo que se trabajar con la
variable de salida *( ) k .
Se inicia el experimento con el pndulo en la posicin inferior y se aplica la seal de prueba binaria
pseudo-aleatoria. En la Figura 3.14 vemos el comportamiento de *( ) k al aplicar la seal de
prueba.
Captulo 3 Modelado e Identificacin
40
Figura 3.14: Entradas u(k) y salidas *(k) para una seal de prueba binaria pseudo-aleatoria
A continuacin se ensamblan las matrices Y y + siguiendo la forma
*(4) *(3) *(2) *(1) (3) (2) (1)
*(5) *(4) *(3) *(2) (4) (3) (2)
*(6) *(5) *(4) *(3) (5) (4) (3)
u u u
u u u
Y
u u u
( (
( (
( (
= + =
( (
( (
Y se calcula vector de parmetros como
( )
1
T T
Y
= + + +
Obteniendo as
2.099
1.266
0.138
0.051
0.0005
0.0471
(
(
(
(
=
(
(
(
(
2
3 2
0.051 0.0005 0.047
*
2.099 1.267 0.138
z z
u
z z z
+ +
=
+
A partir de estos resultados se calcula el modelo continuo equivalente utilizando la funcin d2c de
MATLAB, con lo cual se obtiene
( )( )
( )( )
2
1.58 355.5 1.716
*
98.6 0.296 85.03
s s
u
s s s
+
=
+ + +
Captulo 3 Modelado e Identificacin
41
Despreciando algunos trminos de menor valor, llegamos a
( )( )
2
561.7
*
98.6 85.03
s
u
s s
~
+ +
De donde pueden extraerse los valores de los parmetros
98.6 85.03 0.016 a c d ~ ~ ~
3.3.3. Identificacin del Sistema en Variables de Estado
El mtodo de Mnimos Cuadrados mediante Clculo Matricial puede extenderse a la identificacin
de sistemas en variables de estado.
A partir del modelo del sistema en Variables de Estado
) ( ) ( ) 1 ( k u k X k X I + u = +
Podemos expresar la prediccin de x(k+1) a partir de los datos hasta el instante k, de la siguiente
forma
( 1) ( ) ( )
T
T T T
T
X k X k u k
( u
( + =
(
I
Luego, repitiendo recursivamente, tenemos que
(1)
(0) (0)
Y = +
Captulo 3 Modelado e Identificacin
42
A partir de ahora, es posible aplicar el mtodo de Mnimos Cuadrados, de la misma forma que en
los casos anteriores. Suponiendo que todos los estados y las entradas son conocidos, la matriz de
parmetros puede estimarse mediante
( )
1
T T
Y
= + + +
De donde pueden extraerse la estimacin de la matriz de transicinu y del vector de entadas I del
sistema bajo identificacin.
T
T
(
u
=
(
I (
Las variables de estado ( ) x k y ( ) k son directamente medibles y sus valores son conocidos. Por
otro lado ( ) x k ' y ( ) k ' no lo son, pero pueden ser estimadas mediante un operador de derivacin,
por ejemplo:
( 1) ( 1)
( )
2
x k x k
x k
h
+
' =
( 1) ( 1)
( )
2
k k
k
h
+
' =
Al igual que en los casos anteriores, la identificacin se realiza con el pndulo en la posicin
inferior, por lo que se trabajar con la variable *( ) k en lugar de ( ) k . Se comienza inyectando
una seal de prueba pseudo-aleatoria u(k) al sistema, y registrando las salidas ( ) x k y *( ) k . Luego
se estiman los valores de ( ) x k ' y * ( ) k ' utilizando los operadores de derivacin. En la Figura 3.15
se muestran algunos de los valores registrados para ( ) u k , ( ) x k , ( ) x k ' , *( ) k y * ( ) k ' durante un
ensayo de identificacin.
Captulo 3 Modelado e Identificacin
43
Figura 3.15: Entradas y salidas del sistema para una seal de prueba binaria pseudo-aleatoria
A continuacin se ensamblan las matrices Y y + siguiendo la forma
(1) (0) (0)
(2) (1) (1)
(3) (2) (2)
T T T
T T T
T T T
X X u
X X u
Y
X X u
( (
( (
( (
= + =
( (
( (
Y se calcula la matriz de parmetros como
( )
1
T T
Y
= + + +
Obteniendo as
0.375 0.014 0.846 0.007
0.013 1.000 0.008 0.000
0.000 0.000 0.981 0.020
0.013 0.000 1.659 0.983
1.978 0.027 2.809 0.037
(
(
(
( =
(
(
(
Captulo 3 Modelado e Identificacin
44
Luego
0.375 0.013 0.000 0.013
0.014 1.000 0.000 0.000
0.846 0.008 0.981 1.659
0.007 0.000 0.020 0.983
(
(
(
u =
(
(
1.978
0.027
2.808
0.037
(
(
(
I =
(
(
A partir de estos resultados se calcula el modelo continuo equivalente utilizando la funcin d2c de
MATLAB, con lo cual se obtiene
49.01 0.985 0.058 0.963
1.126 0.006 0.000 0.008
66.69 0.918 0.062 83.99
0.204 0.007 1.006 0.012
A
(
(
(
=
(
(
155.07
0.078
218.2
0.019
B
(
(
(
=
(
(
Luego de hacer algunas simplificaciones, obtenemos
49.01 0 0 0
1 0 0 0
66.69 0 0 83.99
0 0 1 0
A
(
(
(
~
(
(
155.07
0
218.2
0
B
(
(
(
~
(
(
De donde, por comparacin con el modelo terico
( ) 0 0 0 ( )
( ) 1 0 0 0 ( ) 0
( )
* ( ) 0 0 * ( )
* ( ) 0 0 1 0 *( ) 0
x t a x t ba
x t x t
u t
t dca c t badc
t t
'' ' ( ( ( (
( ( ( (
'
( ( ( (
= +
'' ' ( ( ( (
( ( ( (
'
Podemos extraer
49 3.16 84 0.016 a b c d ~ ~ ~ ~
Captulo 3 Modelado e Identificacin
45
3.4. Identificacin Mediante Ensayo
Una vez conocidos los valores aproximados de los parmetros, es posible realizar una identificacin
ms fina realizando ensayos con el equipo.
Para esto, se asigna un valor al parmetro que se quiere determinar, se calcula el modelo y el
controlador (ver Captulo 4) en base a dicho valor, y luego se realiza el ensayo. Calculando la
varianza de x(k), es posible obtener una medida de en cuanto se ajusta el modelo al sistema real.
Repitiendo el ensayo para valores sucesivos del parmetro, es posible trazar una curva. El punto de
varianza mnima corresponder entonces al valor verdadero del parmetro en cuestin.
Figura 3.16: Varianza de x(k) en funcin de los parmetros a, b, c y d
Los parmetros obtenidos con este mtodo fueron
60 a = 4 b = 85 c = y 0.016 d =
Captulo 3 Modelado e Identificacin
46
3.5. Comparacin de los Mtodos de Identificacin
En esta seccin se presentan los resultados obtenidos por los diferentes mtodos de identificacin y
se realiza una breve comparacin en base a los errores obtenidos con cada mtodo.
Si bien es posible calcular una cota de error para los parmetros discretos obtenidos mediante los
mtodos de identificacin por mnimos cuadrados
[16]
, debido a la gran cantidad de clculos
involucrados, resulta prcticamente imposible realizar la propagacin de dicho error a los valores de
los parmetros continuos (a, b, c y d). Las cotas de error de dichos parmetros resultan entonces ser
desconocidas.
Por esta razn, se elige uno de los mtodos de identificacin (el de mejor desempeo) como mtodo
de referencia. Luego, la comparacin entre los diferentes mtodos de identificacin, se realiza
contrastando los resultados obtenidos contra los valores del mtodo de referencia.
El mtodo de Identificacin Mediante Ensayo (Seccin 3.4.) fue el que mostr el mejor desempeo
(minima varianza), por lo que los valores obtenidos con este mtodo se toman como valores de
referencia y se presumen como verdaderos.
Captulo 3 Modelado e Identificacin
47
A continuacin se muestran resumidos en la Tabla 3, los resultados obtenidos con los diferentes
mtodos de identificacin. Al lado del valor de cada parmetro se presenta el error porcentual con
respecto al valor verdadero presunto.
a b c d
valor e% valor e% valor e% valor e%
Identificacin Mediante
Simulacin
25.3 -58% 5.98 +49% 80.2 -4% 0.017 +6%
Clculo Matricial en
Funcin de Transferencia
79.9 +33% 4.32 +8% 79.9 -4% 0.016 0%
Clculo Matricial en
Variables de Estado
49 -18% 3.16 -21% 84 -1% 0.016 0%
Valor Verdadero Presunto 60 4 85 0.016
Tabla 3: Comparacin de los mtodos de identificacin
Podemos observar que el mtodo de Clculo Matricial en Variables de Estado presenta los menores
errores porcentuales, frente a los otros dos mtodos.
Vemos que los valores de los parmetros c y d fueron identificados prcticamente sin error por los
tres mtodos. Por otro lado, existe gran incertidumbre con respecto a los valores de los parmetros a
y b. Ensayos posteriores demostraron que existe una fuerte dependencia de estos dos parmetros
con el tipo de seal de prueba utilizada, lo que evidencia la persistencia de un comportamiento no
lineal en el motor. Se propone para trabajos futuros, la implementacin de un lazo de
realimentacin local, para reducir los efectos no lineales indeseados del motor.
Captulo 3 Modelado e Identificacin
48
Captulo 4 Control del Pndulo Invertido
49
Captulo 4 - Control del Pndulo Invertido
Este captulo estar dedicado al diseo e implementacin de diferentes controladores para el
pndulo invertido, as como tambin, del anlisis de su desempeo.
4.1. Control en Variables de Estado
4.1.1. Vector de Realimentacin
Dado un sistema discreto del tipo
) ( ) ( ) 1 ( k u k X k X I + u = +
si aplicamos una realimentacin de la forma
) ( ) ( k X L k u =
donde L es un vector, obtenemos un sistema nuevo sistema, de lazo cerrado, sin entradas
) ( ) ( ) 1 ( k X L k X I u = +
La matriz de transicin de este nuevo sistema es ) ( L I u . Escogiendo adecuadamente el vector L
se pueden ubicar arbitrariamente los autovalores de ) ( L I u y por lo tanto los polos del sistema de
lazo cerrado. Para esto es necesario que el sistema sea controlable.
Si los polos de lazo cerrado se ubican dentro del crculo unitario, el vector de estados converger a
cero, lo que implica que el pndulo tender a moverse hacia su posicin de equilibrio vertical
superior.
Existen muchos mtodos para calcular el vector de realimentacin L, algunos de ellos se describen
en la bibliografa citada
[16]
. Debido al alto grado de complejidad, inherente a un sistema de cuarto
orden, el calculo del vector L se realiz en forma numrica mediante la funcin place de
MATLAB.
Captulo 4 Control del Pndulo Invertido
50
Para la implementacin de la realimentacin en variables de estado, primero es necesario conocer,
en tiempo real, el vector de estados del sistema. Como no todos los estados del sistema son
medibles, se hace necesaria la estimacin de los mismos mediante un Observador de Estados.
4.1.2 Observador de Estados
Un Observador de Estados es un algoritmo que estima los valores del vector de estados a partir de
los valores de las entradas y las mediciones de las salidas del sistema.
Un observador dinmico es un algoritmo que genera un sistema simulado, idntico al sistema real.
Si el sistema real y su simulacin son sometidos a la misma entrada, y tienen las mismas
condiciones iniciales, se puede esperar que, en todo momento, sus variables de estado sean las
mismas. De este modo, el estado interno de la simulacin se puede usar como una aproximacin del
estado interno del sistema real.
Figura 4.1: Observador de Estados Libre
En caso de que los dos sistemas no tengan las mismas condiciones iniciales (ya que estas
generalmente son desconocidas) si el sistema es estable, la influencia de las condiciones iniciales ir
disminuyendo a medida que pase el tiempo. Por lo tanto, si bien al principio tendrn valores
diferentes, las variables de estado de ambos sistemas terminarn convergiendo asintticamente a
medida que transcurra el tiempo.
Para acelerar la convergencia del estado del sistema simulado al estado del sistema real, se puede
estimular a la simulacin con una realimentacin del error entre la salida de los dos sistemas. De
este modo, se logra modificar la dinmica del error de modo que converja ms rpido. Otra ventaja
Captulo 4 Control del Pndulo Invertido
51
de esta configuracin es que hace posible estimaciones de estados en sistemas inestables, como es el
caso del pndulo invertido.
Figura 4.2: Observador de Estados Realimentado
Supongamos que se tiene un observador de la forma:
( ) ( )
( 1) ( ) ( ) X k X k u k K y k C X k
(
+ = u + I +
) (
) ( ) (
~
k X k X k X =
Restando la ecuacin del observador de la ecuacin del sistema
( ) ( )
( 1) ( 1) ( ) ( ) ( ) ( ) X k X k X k u k X k u k K y k C X k
(
+ + = u + I u I
Obtenemos
| | ) (
~
) 1 (
~
k X KC k X u = +
Vemos que si se escoge K de forma que los polos de | | KC u sean estables, el error de estimacin
siempre converger a cero sin importar sus condiciones iniciales. Para esto es necesario que el
sistema sea observable.
Los mtodos para el clculo del vector K son similares a los utilizados para el clculo del vector L,
algunos de ellos se describen tambin en la bibliografa citada
[16]
. Al igual que en el caso anterior,
el clculo del vector K se realiz en forma numrica mediante la funcin place de MATLAB.
Captulo 4 Control del Pndulo Invertido
52
Si en la ley de realimentacin, ahora se reemplaza los valores del vector de estados por su
estimacin, tenemos:
( ) ( ) u k L X k =
( )
( ) ( ) ( ) u k L X k X k =
El sistema ahora incluye la dinmica del error. El sistema resultante puede expresarse como:
( 1) ( )
( 1) 0 ( )
X k L L X k
X k KC X k
+ u I I ( ( (
=
( ( (
+ u
4.1.3. Controlabilidad y observabilidad del sistema
La controlabilidad del sistema se verific calculando el rango de la matriz de controlabilidad.
2 3
C
W ( = I uI u I u I
( ) 4
C
rango W =
Ya que el rango de dicha matriz es igual al orden del sistema, significa que el sistema es
completamente controlable, lo que permite ubicar arbitrariamente los polos de lazo cerrado.
De forma similar, se verific la observabilidad del sistema, calculando el rango de la matriz de
observabilidad.
2
3
O
C
C
W
C
C
(
(
u
(
=
( u
(
u
( ) 4
O
rango W =
Ya que el rango de dicha matriz es igual al orden del sistema, significa que el sistema es
completamente observable, lo que permite ubicar arbitrariamente los polos del observador.
Captulo 4 Control del Pndulo Invertido
53
4.1.4. Valor deseado
Si en vez de alimentar el observador con los valores medidos de la posicin, se lo alimenta con una
diferencia entre la misma y un valor de referencia, se obtiene un sistema como el de la Figura 4.3.
Figura 4.3: Esquema de Control en Variables de Estado con Regulacin de la Posicin Deseada
Esto resulta equivalente a desplazar el centro de coordenadas de la posicin del carro, y por lo tanto,
el esquema de realimentacin tratar de llevar a cero la diferencia entre la posicin y la posicin
deseada
( ) ( ) 0
d
x k x ( )
d
x k x
Es decir, que llevar la posicin del carro, a su valor deseado. Ya que la dinmica del sistema no se
ve afectada, frente a variaciones en la posicin deseada, el sistema responder entonces, de la
misma forma que ante la imposicin de una condicin inicial.
4.1.5. Algoritmo de Diseo
Para facilitar el proceso de diseo del controlador, se implement un programa en MATLAB. El
mismo ensambla el sistema, realiza la discretizacin y calcula los vectores K y L de forma
automtica a partir de los parmetros a, b, c, y d. (ver modelado2.m en el Anexo IV)
Figura 4.4: Algoritmo de diseo del controlador en Variables de Estado
Captulo 4 Control del Pndulo Invertido
54
De esta forma resulta muy fcil recalcular los vectores del controlador en caso de modificarse los
parmetros del sistema o los valores deseados para los polos.
4.1.6. Implementacin
La implementacin resulta muy sencilla utilizando el esquema visto en la seccin 2.3.2.
Simplemente se agregaron las lneas de cdigo correspondientes al control y a la estimacin del
vector de estados, dentro del bucle principal.
Figura 4.5: Diagrama de Flujo del Algoritmo de Control en Variables de Estado
Captulo 4 Control del Pndulo Invertido
55
h=0.02;
N=1000;
usb_start;
for (i=1:N)
u(i)=-L*xe(:,i);
usb_com;
xe(:,i+1)=(F-K*C)*xe(:,i)+G*u(i)+K*[x(i);f(i)];
end
usb_stop;
Figura 4.6: Cdigo fuente en MATLAB del algoritmo de control por Variables de Estado
El algoritmo se debe iniciar con el pndulo en proximidades de la posicin vertical superior, ya que
de lo contrario, no son vlidas las aproximaciones hechas en la deduccin del modelo y por lo tanto
el sistema resultara ser no lineal.
Captulo 4 Control del Pndulo Invertido
56
4.1.7. Resultados
A continuacin se presentan los resultados de algunos de los ensayos realizados con el equipo y se
los compara con simulaciones del modelo terico del sistema. En la figura 4.7 se muestra la
respuesta del sistema ante una condicin inicial 0.6 en la posicin del carro.
Figura 4.7: Respuesta del sistema con control en Variables de Estado ante una condicin inicial en la posicin
Se observa la presencia de oscilaciones de alta frecuencia de aproximadamente 10 Hz, producidas
por la interaccin entre el ruido la dinmica del observador (ver Seccin 4.3.5 y 4.6.).
Captulo 4 Control del Pndulo Invertido
57
En la Figura 4.8 podemos observar la simulacin y la respuesta del sistema real ante una entrada de
onda cuadrada en la posicin deseada del carro.
Figura 4.8: Simulacin y respuesta del sistema real ante variaciones en la posicin deseada
Aqu vemos la presencia de oscilaciones de baja frecuencia de aproximadamente 0.5 Hz, producidas
por la dinmica del observador (ver Seccin 4.3.5 y 4.6.).
Captulo 4 Control del Pndulo Invertido
58
4.2. Control en Enfoque Polinomial
Esta seccin trata el problema del control del pndulo invertido utilizando funciones de
transferencia discreta, en transformada z.
4.2.1. Funcin de Transferencia de la Realimentacin de Estados
A partir del controlador basado en variables de estado desarrollado en la seccin anterior, es posible
obtener un controlador equivalente en funcin de transferencia.
Aplicando transformada Z a la ecuacin del observador y combinando con la ley de realimentacin
de estados, obtenemos:
( ) ( )
( 1) ( ) ( ) X k X k u k K y k C X k
(
+ = u + I +
( )
zX KC X L X K y = u I +
( )
zI KC L X K y u+ + I =
( )
1
X zI KC L K y
= u + + I
( )
1
u LX L zI KC L K y
= = u + + I
( )
1 u
L zI KC L K
y
= u + + I
Utilizando esta funcin de transferencia es posible calcular directamente la seal de control u(k) a
partir de las mediciones de la salida y(k). El funcionamiento y desempeo de este controlador es
igual al del controlador de variables de estado de la seccin anterior ya que es en realidad, una
realizacin alternativa del mismo controlador.
4.2.2. Funcin de Transferencia de la planta
A partir del modelo de variables de estado es posible obtener un modelo en funcin de trasferencia
aplicando transformada Z.
Captulo 4 Control del Pndulo Invertido
59
( 1) ( ) ( ) X k X k u k + = u + I
zX X u = u + I
( ) zI X u u = I
1
( ) X zI u
= u I
1
( ) y CX C zI u
= = u I
1
y BA u
=
Donde
1 1
( ) C zI BA
u I =
Siendo A y B matrices de polinomios en z de 1x1 y 2x1 respectivamente. La matriz polinomial A
puede calcularse como
det( ) A zI = u
Mientras que B se calcula mediante
1
( ) B C zI A
= u I
4.2.3. Asignacin de Polos
Si aplicamos un controlador de la forma
1 1
c
u R S y R T u
= +
Con R, S y T siendo matrices de polinomios en z de 1x1, 1x2 y 1x1 respectivamente, obtenemos el
siguiente sistema de lazo cerrado:
1 1 1
c
u R S BA u R T u
= +
( )
1 1 1
1
c
R SBA u R T u
+ =
( )
c
AR SB u AT u + =
( )
1
c
u AR SB AT u
= +
( )
1
1
c
y BA u B AR SB T u
= = +
Captulo 4 Control del Pndulo Invertido
60
( )
1
c
y BT AR SB u
= +
Las conmutaciones realizadas, son posibles debido a que A, R y SB resultan ser escalares. Podemos
ver que los polos del sistema de lazo cerrado son las races del polinomio ( ) AR SB + . Este resulta
ser el polinomio caracterstico del sistema. Igualando el mismo, al polinomio caracterstico deseado,
podemos despejar los valores de los polinomios R y S necesarios para ubicar arbitrariamente los
polos de lazo cerrado.
( )
1 2
( )( )...( )
k
AR SB z p z p z p + =
4.2.4. Algoritmo de Diseo
Al igual que en el caso del diseo en variables de estado, se implement un programa en MATLAB
para facilitar el proceso de clculo de los coeficientes del controlador. El mismo ensambla el
sistema, realiza la discretizacin, calcula los coeficientes de las matrices A y B, y resuelve la
ecuacin de diseo de forma automtica a partir de los parmetros a, b, c, y d. (ver modelado7.m en
el Anexo IV)
Figura 4.9: Algoritmo de diseo en enfoque polinomial
De esta forma resulta muy fcil recalcular los coeficientes del controlador en caso de modificarse
los parmetros del sistema o los valores deseados para los polos.
Debido a que MATLAB no presenta funciones especficas para resolver ecuaciones diofnticas
polinomiales, como lo es la ecuacin de diseo, se hizo necesario elaborar un algoritmo propio a tal
fin.
Captulo 4 Control del Pndulo Invertido
61
Para esto se ensambla una ecuacin matricial, que representa el sistema de ecuaciones lineales, que
resulta de igualar los coeficientes de mismo grado a ambos lados de la igualdad. El primer paso es
determinar el grado de los polinomios contenidos en R y S, para esto se iguala el nmero de
ecuaciones del sistema con la cantidad de incgnitas.
Ecuaciones Incgnitas =
( ) ( ) 1 1 2 1 grA grR grR grS + + = + + +
El grado mnimo de los polinomios que satisfacen esta condicin resulta
1 grR grS = =
Entonces
( ) ( )
4 3 2
4 3 2 1 0 1 0
AR a z a z a z a z a r z r = + + + + +
( )( ) ( )( )
3 2 3 2
13 12 11 10 11 10 23 22 21 20 21 20
SB b z b z b z b s z s b z b z b z b s z s = + + + + + + + + +
5 4 3 2
1 2 5 5 4 3 2 1 0
( )( )...( ) P z p z p z p q z q z q z q z q z q = = + + + + +
Expresando la ecuacin de diseo en forma matricial
( ) AR SB P + =
4 5 1
3 4 13 23 4 0
2 3 12 13 22 23 3 11
10 1 2 11 12 21 22 2
21 0 1 10 11 20 21 1
20 0 10 20 0
0 0 0 0 0
0 0
0 0 0
a q r
a a b b q r
a a b b b b q s
s a a b b b b q
s a a b b b b q
s a b b q
( ( (
( ( (
( ( (
( ( (
=
( ( (
( ( (
( ( (
( ( (
( ( (
Captulo 4 Control del Pndulo Invertido
62
La solucin del sistema de ecuaciones se obtiene invirtiendo la matriz
1
4 5 1
3 4 13 23 4 0
2 3 12 13 22 23 3 11
10 1 2 11 12 21 22 2
21 0 1 10 11 20 21 1
20 0 10 20 0
0 0 0 0 0
0 0
0 0 0
a q r
a a b b q r
a a b b b b q s
s a a b b b b q
s a a b b b b q
s a b b q
( ( (
( ( (
( ( (
( ( (
=
( ( (
( ( (
( ( (
( ( (
( ( (
4.2.5. Implementacin
La implementacin resulta muy sencilla agregando las lneas de cdigo correspondientes al clculo
de la seal de control en el esquema visto en la seccin 2.3.2.
Figura 4.10: Diagrama de Flujo del Algoritmo de Control Polinomial
Captulo 4 Control del Pndulo Invertido
63
La implementacin de la funcin de transferencia del controlador se realiz mediante el esquema
Directo I, multiplicando los valores presentes y pasados de las seales ( ), ( ) ( ) x k k y u k por los
respectivos coeficientes de la funcin de transferencia.
Figura 4.11: Implementacin de la Funcin de Transferencia
h=0.02;
N=1000;
usb_start;
for (i=1:N)
u(i)=-1*(S1(1)*x(i-1)+S1(2)*x(i-2)+S2(1)*f(i-1)+S2(2)*f(i-2))-R(2)*u(i-1);
usb_com;
end
usb_stop;
Figura 4.12: Cdigo fuente en MATLAB del algoritmo de Control Polinomial
Al igual que en el caso del control en variables de estado y por las mismas razones, algoritmo se
debe iniciar con el pndulo en proximidades de la posicin vertical superior.
Captulo 4 Control del Pndulo Invertido
64
4.2.6. Resultados
En la Figura 4.13 se muestra la respuesta del sistema ante una condicin inicial de 0,6 en la
posicin.
Figura 4.13: Respuesta del sistema con control polinomial ante una condicin inicial en la posicin
Se observa un mejor desempeo en comparacin con el control en Variables de Estado, presentando
un comportamiento ms amortiguado.
Captulo 4 Control del Pndulo Invertido
65
En la Figura 4.14 podemos observar la simulacin y la respuesta del sistema real ante una entrada
de onda cuadrada en la posicin deseada del carro.
Figura 4.14: Simulacin y respuesta del sistema real ante variaciones en la posicin deseada
Vemos un mejor desempeo en comparacin con el control en Variables de Estado, oscilaciones
ms amortiguadas y con una menor varianza en estado estacionario (ver Seccin 4.6.)
Captulo 4 Control del Pndulo Invertido
66
4.3. Filtro de Kalman
El filtro de Kalman
[18]
es un algoritmo desarrollado por Rudolf E. Kalman en 1960 que sirve para
poder identificar el vector de estados de un sistema dinmico lineal (de forma similar al observador
de estados) cuando el sistema est sometido a ruido blanco aditivo. La ventaja que presenta el filtro
de Kalman es que la ganancia de realimentacin del error puede ser calculada de forma ptima
cuando se conocen las varianzas de los ruidos que afectan al sistema.
4.3.1. Ganancia ptima
Supongamos que modelo del sistema discreto esta dado por
( 1) ( ) ( ) ( ) X k X k u k v k + = u + I +
( ) ( ) ( ) y k C X k e k = +
Donde ( ) v k y ( ) e k son procesos de ruido blanco discreto gaussianos independientes, con media
cero y matrices de covarianza
( )
1
cov ( ) ( ) ( )
T
v k E v k v k R = =
( )
2
cov ( ) ( ) ( )
T
e k E e k e k R = =
Considerando un estimador (predictor de un paso) de la forma
( ) ( )
( 1) ( ) ( ) ( ) X k X k u k K k y k C X k
(
+ = u + I +
Donde
( ) ( ) ( ) X k X k X k =
Captulo 4 Control del Pndulo Invertido
67
Restando la ecuacin del observador de la ecuacin del sistema obtenemos
( )
( 1) ( 1) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) X k X k X k u k v k X k u k K k C x k e k C X k
(
+ + = u + I + u I +
| | ( 1) ( ) ( ) ( ) ( ) ( ) X k K k C X k v k K k e k + = u +
El criterio para encontrar el K ptimo es minimizar la varianza del error de estimacin
( )
( 1) ( 1) ( 1)
T
P k E X k X k + = + +
| | | |
( )
( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
T
T T T T
E K k C X k X k K k C v k v k K k e k e k K k = u u + +
| | | |
1 2
( 1) ( ) ( ) ( ) ( ) ( )
T
T
P k K k C P k K k C R K k R K k + = u u + +
Ya que X
+ = u u + u + u
Estas expresiones permiten estimar recursivamente la varianza del error de estimacin ( ) P k , y a
partir de sta, calcular el vector de realimentacin ( ) K k ptimo.
Captulo 4 Control del Pndulo Invertido
68
4.3.2. Caracterizacin del Ruido
Para calcular correctamente la ganancia de realimentacin del error, es necesario conocer primero
las matrices de covarianza de los ruidos
1
R y
2
R .
El clculo de
2
R se realiza a partir de supuestos sobre la distribucin de probabilidad del error de
medicin. El error de medicin ( ) e k consiste nicamente del error de cuantificacin de los
encoders. El mismo suele considerarse como ruido blanco aleatorio con distribucin uniforme
[20]
en
el intervalo
2
x A
, donde x A es la distancia minima que puede distinguir el encoder. Esta
distribucin tiene media cero y varianza
2
12
x A
.
( ) ,
2 2
x
x x
e k U
A A | |
|
\ .
( ) ( ) 0
x
E e k =
( )
2
( ) ( )
12
T
x x
x
E e k e k
A
=
( ) ,
2 2
e k U
A A | |
|
\ .
( )
( ) 0 E e k
=
( )
2
( ) ( )
12
T
E e k e k
A
=
La resolucin de los encoders se calcula dividiendo el rango de variacin de la variable por la
cantidad de niveles distinguibles sobre dicho rango.
3
2
5.98 10
334
x
A = =
3
2
6.13 10
1024
A = =
El vector ( ) e k esta compuesto por los ruidos del encoder de posicin y el de ngulo
( )
( )
( )
x
e k
e k
e k
(
=
(
La matriz de covarianza de ( ) e k resulta
6
2
2.98 0
( ( ) ( ) ) 10
0 3.13
T
R E e k e k
(
= =
(
Para la implementacin del filtro de Kalman supondremos que este ruido tiene distribucin
Gaussiana con la misma media y matriz de covarianza.
Captulo 4 Control del Pndulo Invertido
69
La estimacin de la matriz de covarianza del ruido de carga
1
R , en cambio, se deduce a partir del
modelo del sistema y de los valores medidos de ( ) y k . Teniendo en cuenta el modelo del sistema en
lazo cerrado
( 1) ( ) ( ) ( ) X k L X k v k + = u I +
Si calculamos la covarianza a ambos lados de la igualdad, obtenemos
( ) ( )( )
( )
( 1) ( 1) ( ) ( ) ( ) ( ) ( ) ( )
T
T
E X k X k E L X k v k L X k v k + + = uI + u I +
Ya que X(k) y v(k) son independientes, tenemos
1
( 1) ( )
T
X LC X LC
R k R k R + = u u +
Donde ( ) ( ) cov ( )
X
R k X k = y ( )
LC
L u = u I .
Luego, en estado estacionario ( ) ( 1)
X X
R k R k = + , por lo que
1
R puede calcularse a partir de
X
R
1
T
X LC X LC
R R R = u u
Si aplicamos el mismo procedimiento a la ecuacin de salida del sistema
( ) ( ) ( ) y k C X k e k = +
Obtenemos
2
T
y X
R C R C R = +
Debido a que
y
R y
2
R son matrices de 2x2, no es posible deducir
X
R directamente de esta ecuacin,
ya que se tiene un sistema con 3 ecuaciones y 10 incgnitas. Para calcular el valor de
X
R , es
necesario utilizar informacin adicional, ms precisamente, conocer los estados no medibles del
sistema.
Para esto se ensambla un vector de estimacin de estados ( ) Y k , a partir de los valores medidos de
( ) y k y la aproximacin de sus derivadas con diferencias finitas centradas de primer orden.
Captulo 4 Control del Pndulo Invertido
70
( 1) ( 1)
2
( )
( )
( 1) ( 1)
2
( )
x x
x
y k y k
h
y k
Y k
y k y k
h
y k
+ (
(
(
(
=
(
+
(
(
(
Luego, como
( ) ( ) ( )
( ) ( ) ( )
x x
y k x k e k
y k k e k
= +
= +
Llegamos a
( 1) ( 1) ( 1) ( 1) ( 1) ( 1)
( )
2 2 2
( ) ( ) ( )
( )
( )
( 1) ( 1) ( 1) ( 1)
( 1) ( 1) ( )
2 2 2 ( )
( ) ( ) ( )
x x x x
x x
e k e k e k e k x k x k
x k
h h h
x k e k e k
x k
Y k
e k e k e k e k
k k k
h h h k
k e k e k
+ + + ( (
+
( (
'
(
( (
(
+
( (
(
= ~ +
( (
+ + ' ( +
(
+
(
(
(
+
(
(
(
Aplicando covarianza a ambos lados de la igualdad, y como ( ) ( 1) ( ) ( 1) X k e k e k y e k + son
independientes, obtenemos
( ) ( )
( 1) ( 1)
2
( )
cov ( ) cov ( ) cov
( 1) ( 1)
2
( )
x x
x
Y X E
e k e k
h
e k
R Y k X k R R
e k e k
h
e k
| | + (
|
(
|
(
|
(
= ~ + = +
|
(
+
|
(
|
(
|
(
\ .
Donde
( )
( )
( )
( )
cov
0 0 0
0 cov 0 0
cov
0 0 0
0 0 0 cov
x
x
E
e
h
e
R
e
h
e
(
(
(
(
( =
(
(
(
(
Captulo 4 Control del Pndulo Invertido
71
Luego
X Y E
R R R =
Y consecuentemente
( ) ( )
1
T
Y E LC Y E LC
R R R R R = u u
4.3.3. Algoritmo de Diseo
Para el clculo de la matriz de realimentacin de error ( ) K k ptima, se implement un algoritmo de
clculo en MATLAB. La estructura del mismo sigue los pasos que se explican a continuacin.
Primero, se ensayo el equipo, con un controlador de variables de estado para obtener una secuencia
de mediciones de ( ) y k de un tamao suficiente (por ejemplo 1600 muestras).
Figura 4.15: Salidas del sistema en estado estacionario con control en Variables de Estado
Captulo 4 Control del Pndulo Invertido
72
A partir de esos datos, se construye el vector ( ) Y k y se calcula su matriz de covarianza
Y
R , as
como tambin la matriz de covarianza
E
R del ruido presente en ( ) Y k .
0.1043 0.0000 0.1474 0.0001
0.0000 0.0004 0.0001 0.0002
0.1474 0.0001 0.2353 0.0000
0.0001 0.0002 0.0000 0.0002
Y
R
(
(
(
=
(
(
3
0.1494 0 0 0
0 0.0030 0 0
10
0 0 0.1569 0
0 0 0 0.0031
E
R
(
(
(
=
(
(
Aplicando
X Y E
R R R = obtenemos
0.1041 0.0000 0.1474 0.0001
0.0000 0.0004 0.0001 0.0002
0.1474 0.0001 0.2351 0.0000
0.0001 0.0002 0.0000 0.0002
X
R
(
(
(
=
(
(
Finalmente, aplicando
1
T
X LC X LC
R R R = u u obtenemos
1
0.0337 0.0003 0.0863 0.0008
0.0003 0.0000 0.0002 0.0000
0.0863 0.0001 0.1751 0.0009
0.0008 0.0000 0.0009 0.0000
R
(
(
(
=
(
(
A partir de estos valores de
1
R y
2
R se calculan recursivamente los valores de ( ) P k y ( ) K k
utilizando, partiendo de un valor inicial arbitrario de (0) P
( )
1
1 2
( 1) ( ) ( ) ( ) ( )
T T T T
P k P k R P k C R CP k C CP k
+ = u u + u + u
( )
1
2
( ) ( ) ( )
T T
K k P k C R CP k C
= u +
Captulo 4 Control del Pndulo Invertido
73
La convergencia se logra prcticamente en 3 pasos, obtenindose el valor de estado estacionario de
( ) K .
5.46 0.204
0.928 0.026
( )
31.2 49.1
0.527 1.91
K
(
(
(
=
(
(
Debido a esta convergencia tan rpida, pierde sentido la implementacin de la versin variante en el
tiempo del Filtro de Kalman. Es por esto que en este trabajo solamente se implement la versin de
estado estacionario.
4.3.4. Implementacin
El algoritmo utilizado para la implementacin del Filtro de Kalman es el mismo que se utiliz en la
seccin 4.1.6 para el control en Variables de Estado. Simplemente se reemplaza el vector de
realimentacin del error K por su valor ptimo estacionario ( ) K .
Captulo 4 Control del Pndulo Invertido
74
4.3.5. Resultados
En la Figura 4.16 se muestra la respuesta del sistema ante una condicin inicial de 0,6 en la
posicin.
Figura 4.16: Respuesta del sistema con Filtro de Kalman ante una condicin inicial en la posicin
Captulo 4 Control del Pndulo Invertido
75
En la Figura 4.17 podemos observar la simulacin y la respuesta del sistema real ante una entrada
de onda cuadrada en la posicin deseada del carro.
Figura 4.17: Simulacin y respuesta del sistema real ante variaciones en la posicin deseada
Vemos una notable mejora en el desempeo en comparacin con el control en Variables de Estado,
una reduccin del sobreimpulso y con una menor varianza en las partes planas. Si se tiene en cuenta
que el vector de realimentacin de estados L es el mismo, y que la nica diferencia entre ambos es
la eleccin de la ganancia K, podemos atribuir los problemas del controlador en Variables de Estado
a su Observador (ver Seccin 4.6.).
Captulo 4 Control del Pndulo Invertido
76
Captulo 4 Control del Pndulo Invertido
77
4.4. Control No Lineal
Debido a que el pndulo en si mismo es un sistema no lineal, el control Polinomial y en Variables
de Estado solamente funciona dentro de un rango reducido de variacin del ngulo ( ) k (alrededor
de su posicin vertical). Para poder llevar el pndulo, desde su posicin inferior hasta la posicin
superior, es necesario implementar un algoritmo de control no lineal, como por ejemplo, el control
basado en energa
[21][22]
.
4.4.1. Control Basado en Energa
El Control Basado en Energa consiste en aplicar una estrategia de control tal que la energa del
pndulo se incremente hasta alcanzar el valor que tendra en la posicin superior. Luego es posible
capturar y estabilizar el pndulo en esa posicin conmutando al control clsico.
Volviendo al modelo del pndulo, esta vez no realizaremos simplificaciones que reduzcan los
lmites de variacin del ngulo
Figura 4.18: Modelo Simplificado del Pndulo Invertido
Visto desde un marco de referencia inercial solidario al eje del pndulo, la energa del pndulo es la
suma de su energa potencial gravitatoria y su energa cintica de rotacin.
p c
E E E = +
2
1
(cos 1)
2
E mg J ' = + +
Captulo 4 Control del Pndulo Invertido
78
Donde la posicin de reposo corresponde a la energa cero. La derivada de dicha energa es
dE
mg sen J
dt
' ' '' = +
Combinando esta ecuacin con la ecuacin diferencial del pndulo
cos x m sen mg J ' ' + = ' '
Obtenemos:
( ) cos
dE
mg sen mg sen mx
dt
' ' '' = + +
cos
dE
m x
dt
'' ' =
Para que la energa del pndulo aumente, su derivada debe ser positiva. Para esto es necesario que:
( ) ( cos ) sign x sign '' ' =
Para que la energa del pndulo disminuya el signo de la aceleracin del carro debe ser el contrario
( ) ( cos ) sign x sign '' ' =
Entonces, se puede aplicar una ley de control proporcional para llevar la energa del pndulo al
valor deseado
( ) ( )
0
cos x k E E sign '' ' =
Donde
0
E es el nivel de energa deseado y k es la ganancia de la realimentacin. El valor de k es
un parmetro del diseo que puede determinarse empricamente.
A fines prcticos, podemos considerar el carro prcticamente detenido durante la fase de
levantamiento del pndulo (swing-up), es decir 0 x' ~ .
( )
x ba
x ax bau x ba u
u s s a
'' ' '' = + = ~
+
En estas condiciones la aceleracin del carro es proporcional a la seal de control, lo que nos lleva a
la siguiente ley de control
( ) ( )
0
cos
k
u sat E E sign
ba
| |
' =
|
\ .
Captulo 4 Control del Pndulo Invertido
79
En la misma se incluye una funcin de saturacin para evitar que el valor de la seal de control
alcance valores excesivamente grandes.
4.4.2. Implementacin
Al igual que en los casos anteriores, la implementacin resulta muy sencilla utilizando el esquema
visto en la seccin 2.3. Simplemente se agregaron las lneas de cdigo correspondientes al control
por energa, al control por variables de estado y a la estimacin del vector de estados, dentro del
bucle de ejecucin. Se incluy adems, una estructura de decisin para elegir cual de los dos
controles se utilizar en cada momento.
A diferencia de los casos anteriores, el algoritmo se puede iniciar con el pndulo en cualquier
posicin, incluso con el pndulo detenido, ya que el control por energa se encarga de realizar los
movimientos necesarios para elevarlo a su posicin vertical superior.
Otra forma de implementar el algoritmo para el clculo del signo de la seal de control, es haciendo
uso de la derivada del seno del ngulo de desviacin, ya que
cos
d
sen
dt
' =
El signo de esta derivada puede calcularse comparando el valor del seno de en el instante actual
con el valor anterior.
( ) ( ) cos ( ) ( 1) sign sign sen k sen k ' =
Entonces, es posible obtener otra realizacin del algoritmo reemplazando esta parte de la ley de
control.
Para hacer ms fcil la implementacin del algoritmo, se normaliz el valor de la energa para que
la misma sea cero en el estado de reposo y uno en la posicin de equilibrio superior. El valor
deseado para la energa es entonces
0
1 E = .
Captulo 4 Control del Pndulo Invertido
80
En las figuras 4.19 y 4.20 se muestran el diagrama de flujo y el cdigo fuente en MATLAB del
algoritmo de control implementado
Figura 4.19: Diagrama de Flujo del Algoritmo de Control por Energa
Captulo 4 Control del Pndulo Invertido
81
h=0.02;
N=1000;
usb_start;
for (i=3:N)
u(i)= -3*(E(i-1)-1)*sign(sen_fi(i-1)-sen_fi(i-2))-0.1*x(i-1);
if(u(i)>0.8)
u(i)=0.8;
end
if(u(i)<-0.8)
u(i)=-0.8;
end
if((abs(f(i-1))<0.3)&(E(i-1)<1.3))
u(i)=-L*xe(:,i);
end
usb_com;
xe(:,i+1)=(F-K*C)*xe(:,i)+G*u(i)+K*[x(i);f(i)];
end
usb_stop;
Figura 4.20: Cdigo fuente en MATLAB del algoritmo de Control por Energa
4.4.3. Resultados
En las figura 4.21 se muestran los resultados de los ensayos realizados con el control por energa.
En las mismas se observa como el pndulo realiza oscilaciones de amplitud creciente hasta alcanzar
el punto de equilibrio superior en aproximadamente 3 segundos. Luego, cuando la desviacin
angular es menor a 0.3 radianes, se aplica el control por variables de estado para mantener al
pndulo estabilizado en dicha posicin.
Captulo 4 Control del Pndulo Invertido
82
Figura 4.21: Angulo de desviacin del pndulo, posicin del carro y seal de control
en funcin del tiempo, para el algoritmo de Control por Energa
Captulo 4 Control del Pndulo Invertido
83
En la figura 4.22 se muestra el aumento de energa producido por el algoritmo. Puede observarse
que su valor es uno a partir del momento en que se alcanza la posicin de equilibrio superior.
Figura 4.22: Energa del pndulo en funcin del tiempo
Otra cuestin interesante para analizar es el intercambio que se produce entre la energa potencial y
la energa cintica del pndulo a medida que la energa total va aumentando. En la figura 4.23 se
grafican los valores que van tomando dichas energas, a medida que el pndulo alcanza su punto de
equilibrio superior. Se pueden observar trazos cuya pendiente es predominantemente de -45. Esto
se debe a la facilidad que tiene el pndulo de intercambiar energa potencial y cintica, en contraste
a la dificultad de incrementar la energa total.
Figura 4.23: Intercambio de energa potencial y cintica a medida que el pndulo alcanza el equilibrio superior
Captulo 4 Control del Pndulo Invertido
84
Por ltimo, es posible realizar un anlisis del comportamiento del pndulo, en funcin de sus
variables de estado y ' .
La energa total del pndulo, expresada en funcin de dichas variables de estado, genera una
superficie tridimensional. En estado libre, cuando el pndulo no es excitado, y despreciando el
rozamiento, podemos decir que el pndulo tender a conservar su estado energtico. Es decir que
solamente podr transitar, las lneas de nivel, de igual energa, de dicha superficie. En la figura 4.24
se han graficado dichas lneas de nivel, en funcin de las variables de estado y ' .
Figura 4.24: Curvas de nivel de igual energa en funcin de las variables de estado
En esta figura puede observarse que el punto de energa minima corresponde al punto de reposo
(posicin vertical inferior). Alrededor del mismo se encuentra la Regin de Oscilacin en la cual el
pndulo oscila siguiendo el crculo de la energa correspondiente. Al adquirir la energa E=1, el
pndulo puede oscilar o rotar, alcanzando el Punto de Equilibrio Superior. Mas all de este punto,
para energas superiores, se encuentra la Regin de Rotacin, en la cual el pndulo rota sin
detenerse nunca.
Captulo 4 Control del Pndulo Invertido
85
Al aplicar el algoritmo de Control Basado en Energa, el pndulo puede ahora pasar de una curva de
nivel a la siguiente, aumentando su energa sucesivamente. Este proceso continua hasta alcanzar la
curva E=1, la que lo lleva luego hasta el Punto de Equilibrio Superior. En la figura 4.25 puede
observarse la trayectoria que describe el pndulo al aplicar el algoritmo de Control Basado en
Energa, comenzando desde el Punto de Reposo hasta el Punto de Equilibrio Superior.
Figura 4.25: Evolucin de las variables de estado al aplicar Control por Energa
Captulo 4 Control del Pndulo Invertido
86
4.5. Control con Coeficientes Variantes
Otra forma de mejorar el control del pndulo invertido es modelar la no linealidad del sistema
utilizando un modelo lineal de coeficientes variantes. Si suponemos que el ngulo tiene poca
variacin durante un periodo de muestreo, podemos modelar el sistema como un sistema lineal
variante en el tiempo, cuyos parmetros dependern del valor de .
4.5.1. Modelado
Partiendo de la ecuacin del pndulo invertido
cos x m sen mg J ' ' + = ' '
Podemos reescribir la misma como
c d c x
'' '' = +
donde
mg sen
c
J
=
cos
m
d c
J
=
son coeficientes que dependen de , los cuales supondremos como constantes para poder aplicar la
transformada de Laplace.
2 2
s c s d c x
= +
Obteniendo
( )
2
2
2
2
cos
s d c
s dc
x sen s c
s c
= =
| |
|
\ .
Vemos que la funcin de transferencia del sistema es similar a la del sistema lineal. La misma se
obtiene al reemplazar
sen
c c c
= y cos dc d c dc
=
Captulo 4 Control del Pndulo Invertido
87
De forma anloga, el sistema en variables de estado resulta
0 0 0
( ) ( )
1 0 0 0
( ) ( ) 0
( )
cos 0 0 ( ) ( ) cos
( ) ( ) 0
0 0 1 0
a
x t x t ba
x t x t
u t sen
adc c t t badc
t t
(
'' '
( ( (
(
( ( (
(
'
( ( (
= + (
'' ' ( ( (
(
( ( (
(
'
(
(
(
(
(
'
'
(
=
) (
) (
) (
) (
1 0 0 0
0 0 1 0
) (
t
t
t x
t x
t y
O en forma compacta
( ) ( ) ( ) ( ) ( ) X t A X t B u t ' = +
) ( ) ( t X C t y =
4.5.2. Discretizacin de
Si dividimos el intervalo ( ; ) + en N sub-intervalos iguales, podemos calcular las matrices ( ) A
y ( ) B correspondientes a cada uno de los mismos. Luego, realizando la discretizacin se obtienen
las matrices ( ) u y ( ) I , por ltimo se calculan los vectores de realimentacin ( ) L y ( ) K
correspondientes a la ubicacin deseada de los polos del sistema de lazo cerrado para cada sub-
intervalo.
Figura 4.26: Divisin del ngulo en sub-intervalos
Captulo 4 Control del Pndulo Invertido
88
4.5.3. Implementacin
Una vez calculadas las matrices ( ) u , ( ) I , ( ) L y ( ) K puede establecerse una ley de control
de coeficientes variables. El algoritmo de control deber entonces determinar en cual de los sub-
intervalos se encuentra el ngulo , y luego aplicar la ley de realimentacin de estados
correspondiente a dicho sub-intervalo. La desventaja de utilizar este mtodo de control es que no se
puede garantizar la estabilidad, ya que se esta conmutando de un controlador a otro constantemente.
El diagrama de flujo es similar al visto en la seccin 4.1 control en variables de estado, pero en este
caso, tanto el vector de realimentacin como las matrices del observador dependen del valor que
toma el ngulo en el periodo de muestreo anterior. Se agreg una funcin de saturacin para
evitar que la seal de control alcance valores excesivos cuando los valores del ngulo sean muy
elevados.
Figura 4.27: Diagrama de Flujo del Algoritmo de Control con Coeficientes Variables
Captulo 4 Control del Pndulo Invertido
89
%control coeficientes variables
h=0.02;
N=1000;
usb_start;
if (conectado == 1)
for (i=3:N)
k=fix(abs(NN*f(i-1)/pi))+1;
u(i)=-LL(:,:,k)*xe(:,i);
if(abs(f(i-1))>0.7)
if(u(i)>0.4)
u(i)=0.4;
end
if(u(i)<-0.4)
u(i)=-0.4;
end
end
usb_com;
xe(:,i+1)=FKC(:,:,k)*xe(:,i)+GG(:,:,k)*u(i)+KK(:,:,k)*[x(i);f(i)];
end
end
usb_stop;
Figura 4.28: Cdigo Fuente del Algoritmo de Control con Coeficientes Variables
4.5.4. Resultados
En la figura 4.29 se muestran los resultados de los ensayos realizados con el control con
coeficientes variantes. En la misma se observa como el pndulo realiza oscilaciones de amplitud
creciente hasta alcanzar el punto de equilibrio superior en aproximadamente 3 segundos.
Captulo 4 Control del Pndulo Invertido
90
Figura 4.29: Angulo de desviacin del pndulo, posicin del carro y seal de control
en funcin del tiempo, para el algoritmo de Control con Coeficientes Variantes
Captulo 4 Control del Pndulo Invertido
91
Figura 4.30: Evolucin de las variables de estado al aplicar Control con Coeficientes Variantes
En la figura 4.30 se muestra el diagrama de fase del sistema. En la misma podemos observar que el
pndulo realiza tres ciclos de oscilacin antes de alcanzar la posicin de equilibrio.
El desempeo de este controlador es similar al del control por energa. La gran diferencia consiste
en que en este caso no existe la necesidad de conmutar entre cos controladores, ya que el control
con coeficientes variantes realiza sin dificultad, tanto el levantamiento, como la estabilizacin del
pndulo.
Captulo 4 Control del Pndulo Invertido
92
4.6. Comparacin de los Mtodos de Control
En esta seccin se realiza una breve comparacin de los algoritmos de control utilizados. Para
realizar una comparacin equitativa, en todos los algoritmos, se ubicaron los polos de lazo cerrado
en el punto z = 0.7.
En la Figura 4.31 pueden observarse grficamente, los ndices de desempeo utilizados en la
comparacin.
Figura 4.31: ndices de desempeo utilizados
En primer lugar, se calcularon las varianzas de las variables bajo control x(k) y (k), para comparar
el desempeo de los algoritmos en estado estacionario. Por otro lado, se calcul tanto el
sobreimpulso como el pre-impulso que presentaron ante una entrada escaln en la posicin deseada,
para evaluar las caractersticas dinmicas de los controladores. As mismo, se calcul el tiempo de
subida y el tiempo de establecimiento para comparar la velocidad de respuesta de los sistemas.
Captulo 4 Control del Pndulo Invertido
93
Los resultados pueden observarse en la Tabla 4.
Varianza [10
-4
] Sobreimpulso [%] Pre-impulso [%] Tiempo [s]
x(k) (k) x(k) (k) x(k) (k) T
S
T
E
Variables de
Estado
4.95 1.92 16 33 33 50 0.6 -
Control
Polinomial
2.95 1.50 12 25 16 36 0.4 2
Filtro de Kalman 1.83 1.41 7 14 14 30 0.48 1
Tabla 4: comparacin del desempeo de los diferentes Controladores
Podemos observar una notable superioridad del Filtro de Kalman en todos los indicadores, con
excepcin del tiempo de subida, en el que el Control Polinomial tuvo un tiempo menor.
Como se mencion anteriormente, debido a que el vector de realimentacin de estados es el mismo,
tanto para el Filtro de Kalman como en Variables de Estado, podemos atribuir el bajo desempeo
del Control en Variables de Estado al bajo rendimiento del Observador de Estados en presencia de
ruido.
En cuanto a la comparacin de los algoritmos de levantamiento (swing-up), los dos algoritmos
utilizados, el Control por Energa y el Control con Coeficientes Variantes, mostraron un
comportamiento similar en cuanto a la velocidad de levantamiento.
Cabe destacar que, debido a que se establece una limitacin en la seal de control (para evitar daos
en el equipo), los tiempos de levantamiento dependen de la amplitud de ese lmite. Por lo tanto
existe una relacin de compromiso en cuanto a la velocidad de levantamiento y la violencia con la
cual el motor ejecuta el algoritmo.
Para un mismo valor lmite en la seal de control, los tiempos medios de levantamiento fueron de 3
segundos en ambos casos.
Captulo 4 Control del Pndulo Invertido
94
En cuanto a una evaluacin cualitativa del desempeo general, podemos decir que el algoritmo de
Control por Energa mostr un desempeo ms estable frente a perturbaciones externas, logrando
reducir el exceso de energa aplicada externamente de forma eficaz. El algoritmo de Control con
Coeficientes Variantes en cambio, present ocasionalmente, comportamiento errtico inesperado.
Conclusiones
95
5. Conclusiones
A continuacin se destacan los principales resultados alcanzados y las conclusiones extradas de la
realizacin del trabajo:
Se logr cumplir el objetivo de disear y construir un prototipo operativo del pndulo invertido,
apto para ser utilizado en las prcticas de laboratorio de la ctedra de Sistemas Controlados por
Computadora. El mismo, como fue demostrado a lo largo del trabajo, posee la capacidad de auto-
elevarse desde la posicin de reposo y mantenerse erguido el tiempo que sea necesario. Se
realizaron mltiples experimentos que permitieron aplicar diferentes tcnicas de identificacin de
sistemas, estrategias de control lineal y no lineal, obtenindose excelentes resultados.
Se han elaborado las guas de laboratorio necesarias para que los alumnos puedan llevar a cabo los
experimentos de identificacin, control en variables de estado y control polinomial, as como
tambin un breve manual de usuario que explica como conectar e instalar el equipo.
La gran mayora de los pndulos de laboratorio implementados en el mundo son instalaciones fijas
que ocupan grandes volmenes y requieren un ambiente especfico para ellos. Uno de los grandes
mritos de este trabajo, fue desarrollar un pndulo porttil, de dimensiones reducidas (67cm), que
pudiera ser transportado y utilizado en un aula comn. Para lograr esto hubo que reducir la longitud
del pndulo, lo que hace que su cada sea muy rpida, y constituye todo un desafo de control, ya
que plantea grandes exigencias para los sistemas mecnicos, elctricos y electrnicos.
Conclusiones
96
Otra gran ventaja del equipo desarrollado es que puede ser operado desde cualquier PC o notebook
con MATLAB, sin la necesidad de instalar ningn hardware o software adicional. Esto le brinda
una gran versatilidad y compatibilidad.
Resulta importante destacar, la gran cantidad de temticas abarcadas para la realizacin del
proyecto, como por ejemplo: diseo de circuitos electrnicos analgicos y digitales, diseo con
microcontroladores, comunicacin USB, programacin en diferentes lenguajes (C, Visual Basic,
MATLAB), procesamiento digital de seales, sistemas controlados por computadora, procesos
estocsticos, mquinas elctricas, entre otras, lo cual le confiere un alto carcter integrador al
trabajo realizado. Adems se ha incursionado en algunas temticas nuevas, no vistas durante la
carrera, como por ejemplo: control polinomial multi-variable, identificacin de sistemas, control no
lineal y diseo mecnico.
Todos los registros generados durante el desarrollo del trabajo se adjuntan en un CD para que el
equipo pueda ser replicado o reparado en caso de desperfecto. Estos registros incluyen, planos
mecnicos, circuitos esquemticos, lay-out de circuito impreso, cdigo fuente de MATLAB y
microcontroladores, listado de componentes utilizados.
Por ltimo, es importante mencionar que el equipamiento construido queda a disposicin del
Departamento de Electrotecnia de la Facultad, para ser usado en las prcticas de laboratorio de las
materias del rea de Control Automtico y Sistemas.
Conclusiones
97
5.1. Propuestas de Mejora y Futuras Lneas de Trabajo
Existen varias propuestas para perfeccionar el equipo desarrollado que podran llevarse a cabo en
futuras lneas de trabajo. A continuacin se mencionan algunas de ellas:
- Implementar un lazo de control local en el microcontrolador para reducir la alinealidad del
motor. Esto reducira las incertezas en la identificacin del sistema.
- Mejorar la construccin mecnica del equipo, por ejemplo utilizando un carro con menor
rozamiento, evitar el uso de poleas (ya que agrega dinmica y alinealidades), utilizar un riel
mas largo (que permita mayor amplitud de movimiento), etc.
- Investigar las variaciones en los parmetros del sistema provocados por factores externos
como por ejemplo la temperatura.
Bibliografa y Referencias
98
Bibliografa
Karl J. Astrom. Sistemas Controlados por Computadora Paraninfo. Ao 1988
Katsuhiko Ogata Sistemas de Control en Tiempo Discreto Prentice Hall. Ao 1996
Dorf R. C., Bishop R. H. Sistemas de Control Moderno Prentice Hall. Ao 2005
Proakis, Manolakis. Tratamiento Digital de Seales. Prentice Hall. Ao 1998
Alan V.Oppenhein, Alan S. Wilson Signals and Systems Pearson Education Ao 1998
Vladimir Kucera Analysis and Design of Discrete Linear Control Systems Prentice Hall Ao 1991
Walter E. Pronzato L. Identification of Parametric Models Springler Ao 1997
Jer-Nan Juang Minh Q. Phan Identification and Control of Mechanical Systems Cambridge University Press. Ao 2004
Ljung L., System Identification Prentice-Hall, 1987.
Robert Resnick, David Halliday, Fisica Vol. 1 Cuarta Edicin, Compaa Editorial Continental, Ao 2001
Boylestad, Nashelsky, Electrnica: Teora de Circuitos y Dispositivos Electrnicos, Prentice Hall, Ao 2003
B. Wilamowski J. Irwin Control and Mechatronics, CRC Press, Ao 2011
Bibliografa y Referencias
99
Referencias
[1] Segway, http://www.segway.com/
[2] Honda Motor Company. U3-X Unicycle http://world.honda.com/U3-X/
[3] Norris, James Caspar (1951), An analysis of a compound pendulum rocket suspension. Engineer's thesis, California Institute of
Technology
[4] B. Vanderborght, B. Verrelst, R. Van Ham, M. Van Damme, and D Lefeber, (2008), Objective locomotion parameters based
inverted pendulum trajectory generador, Robotics and Autonomous Systems, 56, 9, , 738-750 .
[5] N. J. Peruzzi and J. M. Balthazar (2007), Nonlinear Dynamics and Control of an Ideal/Nonideal Load Transportation System
With Periodic Coefficients, J. Comput. Nonlinear Dynamics, 2, 1, 32-40.
[6] Y. Takahashi, O. Tsubouchi (2005), Modern Control Approach for Robotic Wheelchair with Inverse Pendulum Control,. 5th
International Conference on Intelligent Systems Design and Applications (ISDA'05), 2005364-369, 364-369.
[7] MATLAB The language of technical computing http://www.mathworks.com/products/matlab
[8] USB Universal Serial Bus http://www.usb.org/
[9] Microchip Technology Inc. (2009) PIC18F4550 Datasheet - High-Performance, Enhaced Flash, USB Microcontrollers with
nanoWatt Technology
[10] Custom Computer Services Inc. http://www.ccsinfo.com/
[11] Microchip Technology Inc. http://www.microchip.com/
[12] Gabriel J. Pool Balam (2009), Transferencia y procesamiento de datos a alta velocidad, mediante el uso de MATLAB, el puerto
USB 2.0 y PIC18F2455 de Microchip Universidad Modelo. Escuela de Ingenieria.
[13] International Rectifier IRF540 N-Chanel HEXFET Power MOSFET Datasheet - PD-9.373H
[14] International Rectifier IRF9530 P-Chanel HEXFET Power MOSFET Datasheet - PD-9.320G
[15] Robert Resnick, David Halliday (2001), Fisica Vol. 1 Cuarta Edicin Pag. 362-364
[16] Karl J. Astrom (1988), Sistemas Controlados por Computadora Paraninfo. Pag. 53-78, 240-243, 389-391.
[17] Walter E. Pronzato L. (1997) Identification of Parametric Models Springler , Pag. 1-6, 83-90, 238
[18] Kalman, R. E. (1960). A new approach to linear filtering and prediction problems Transactions of the ASME, Journal of Basic
Engineering, 82, 3445.
[19] Petersen & Pedersen (2008), The Matrix Cookbook , Pag. 9-10
[20] R. Kustra, O. Tujsnaider (1984), Principios de Transmisin de Seales Digitales, ENTEL, Pag. 115-116
[21] .J. Astrom and K. Furuta (1996), Swinging-up a pendulum by energy control. Proc. IFAC Congress 37-95.
[22] K. Graichen, M. Treuer, and M. Zeitz (2007), Swing-up of the double pendulum on a cart by feedforward and feedback control
with experimental validation , 43, 1, 63-71.
Bibliografa y Referencias
100
Anexos
101
ANEXOS
ANEXO I Manual de Usuario
En este anexo se describen los pasos a seguir para la puesta en funcionamiento del equipo
experimental de laboratorio (*).
1. Ubique el equipo experimental sobre una base bien firme y nivelada horizontalmente.
2. Ubique la PC o notebook que se utilizar para realizar los experimentos cerca del equipo
experimental y encindala.
3. Conecte el cable de alimentacin del equipo experimental a la red elctrica y el cable USB a
la PC o notebook.
4. Espere a que el pndulo se encuentre detenido, luego encienda el equipo accionando la tecla
de alimentacin.
5. Si es la primera vez que conecta el equipo experimental a esta PC o notebook, deber
instalar los drivers correspondientes. Los mismos se encuentran en el CD que viene incluido
con el equipo.
6. Inicie el entorno MATLAB y cargue los programas que desee ejecutar con el equipo (**).
7. Ejecute los programas y observe el funcionamiento del equipo.
8. Los datos obtenidos del experimento quedan registrados en los vectores f, x y u del
workspace de MATLAB, las mismas pueden graficarse o ser almacenadas en un archivo
para su posterior uso.
(*) Si tiene dudas sobre la construccin fsica del equipo, consulte el captulo 2 del presente trabajo.
(**) Si tiene dudas con respecto a los mtodos de identificacin, consulte el captulo 3. Si tiene dudas con respecto a las
tcnicas de control, consulte el captulo 4.
Anexos
102
ANEXO II Guas de Laboratorio
Trabajo Prctico de Laboratorio N 1 Control en Variables de Estado
Introduccin
Una de las aplicaciones ms importantes del control automtico es el control de sistemas mecnicos
inestables. El presente trabajo prctico consiste en la implementacin de un controlador en variables
de estado, utilizando el equipo experimental provisto por la ctedra.
El objetivo es que los alumnos apliquen los conocimientos adquiridos en las clases tericas,
adquieran experiencia en el diseo de controladores en variables de estado y tomen contacto con las
realizaciones prcticas los mismos.
Descripcin
El trabajo se realizar siguiendo las consignas planteadas en esta gua de laboratorio. Se utilizar el
entorno MATLAB para realizar el diseo del vector de realimentacin y el observador para el
sistema planteado. Posteriormente se implementar dicho controlador utilizando el equipo
experimental y se evaluar su desempeo.
Se trabajar en forma grupal, en grupos de no ms de 4 integrantes. Se deber presentar un informe
escrito describiendo el trabajo realizado, los resultados obtenidos y las conclusiones.
Datos
Para la realizacin del diseo utilizaremos los siguientes datos
El modelo del sistema es
( ) 0 0 0 ( )
( ) 1 0 0 0 ( ) 0
( )
( ) 0 0 ( )
( ) 0 0 1 0 ( ) 0
x t a x t ab
x t x t
u t
t acd c t abcd
t t
'' ' ( ( ( (
( ( ( (
'
( ( ( (
= +
'' ' ( ( ( (
( ( ( (
'
Anexos
103
(
(
(
(
'
'
(
=
) (
) (
) (
) (
1 0 0 0
0 0 1 0
) (
t
t
t x
t x
t y
Con 80 5 88 0.015 a b c d = = = =
El perodo de muestreo es h = 0.02
La ubicacin deseada para los polos del observador es alrededor del punto z = 0.1
La ubicacin deseada para los polos de lazo cerrado es alrededor del punto z = 0.8
Desarrollo
1. Utilizando el entorno MATLAB realice la discretizacin del sistema planteado.
2. Luego, disee un vector de realimentacin L utilizando la funcin place.
3. Del mismo modo, disee un vector de realimentacin K para el observador del sistema.
4. Elabore un programa en MATLAB que implemente tanto el observador como la
realimentacin de los estados del sistema.
5. Conecte y encienda el equipo siguiendo el manual de usuario del mismo.
6. Ejecute el programa elaborado en el paso 4, la seal de entrada quedar almacenada en el
vector u(k) y las seales de salida en los vectores x(k) y f(k).
7. Verifique el correcto funcionamiento del controlador, de lo contrario busque y corrija
errores, luego repita los pasos 1 a 6.
8. Guarde los datos obtenidos en un archivo .mat
9. Evale el desempeo del controlador calculando la varianza de x(k) y f(k)
10. Compare con los desempeos obtenidos por otros grupos
Anexos
104
Trabajo Prctico de Laboratorio N 2 Control en Enfoque Polinomial
Introduccin
Una de las aplicaciones ms importantes del control automtico es el control de sistemas mecnicos
inestables. El presente trabajo prctico consiste en la implementacin de un controlador en Enfoque
Polinomial para el problema del pndulo invertido, utilizando el equipo experimental provisto por la
ctedra.
El objetivo es que los alumnos apliquen los conocimientos adquiridos en las clases tericas,
adquieran experiencia en el diseo de controladores utilizando Enfoque Polinomial y tomen
contacto con las realizaciones prcticas los mismos.
Descripcin
El trabajo se realizar siguiendo las consignas planteadas en esta gua de laboratorio. Se utilizar el
entorno MATLAB para realizar el diseo de la funcin de transferencia del controlador para el
sistema planteado. Posteriormente se implementar dicho controlador utilizando el equipo
experimental y se evaluar su desempeo.
Se trabajar en forma grupal, en grupos de no ms de 4 integrantes. Se deber presentar un informe
escrito describiendo el trabajo realizado, los resultados obtenidos y las conclusiones.
Datos
Para la realizacin del diseo utilizaremos los siguientes datos
El modelo del sistema es
Anexos
105
( ) 0 0 0 ( )
( ) 1 0 0 0 ( ) 0
( )
( ) 0 0 ( )
( ) 0 0 1 0 ( ) 0
x t a x t ab
x t x t
u t
t acd c t abcd
t t
'' ' ( ( ( (
( ( ( (
'
( ( ( (
= +
'' ' ( ( ( (
( ( ( (
'
(
(
(
(
'
'
(
=
) (
) (
) (
) (
1 0 0 0
0 0 1 0
) (
t
t
t x
t x
t y
Con 80 5 88 0.015 a b c d = = = =
El perodo de muestreo es h = 0.02
La ubicacin deseada para los polos de lazo cerrado es alrededor del punto z = 0.7
Desarrollo
1. Utilizando el entorno MATLAB realice la discretizacin del sistema planteado para obtener
las matrices u y I del sistema discreto.
2. Calcule la funcin de transferencia del sistema mediante
( ) det( ) A z zI = u
1
( ) ( ) B z C zI A
= u I
3. Calcule los coeficientes q
i
del polinomio caracterstico deseado
5 4 3 2
1 2 5 5 4 3 2 1 0
( )( )...( ) z p z p z p q z q z q z q z q z q = + + + + +
4. Calcule el vector de coeficientes a partir de
1
4 5 1
3 4 13 23 4 0
2 3 12 13 22 23 3 11
10 1 2 11 12 21 22 2
21 0 1 10 11 20 21 1
20 0 10 20 0
0 0 0 0 0
0 0
0 0 0
a q r
a a b b q r
a a b b b b q s
s a a b b b b q
s a a b b b b q
s a b b q
( ( (
( ( (
( ( (
( ( (
=
( ( (
( ( (
( ( (
( ( (
( ( (
Donde a
i
y b
ij
son los coeficientes de A(z) y B(z)
5. La funcin de transferencia del controlador resulta
Anexos
106
11 10
1 0 1
21 20
1 0
s z s
r z r
R S
s z s
r z r
+ (
(
+
(
=
( +
(
+
6. Elabore un programa en MATLAB que implemente dicho controlador
7. Conecte y encienda el equipo siguiendo el manual de usuario del mismo.
8. Ejecute el programa elaborado en el paso 6, la seal de entrada quedar almacenada en el
vector u(k) y las seales de salida en los vectores x(k) y f(k).
9. Verifique el correcto funcionamiento del controlador, de lo contrario busque y corrija
errores, luego repita los pasos 1 a 8.
10. Guarde los datos obtenidos en un archivo .mat
11. Evale el desempeo del controlador calculando la varianza de x(k) y f(k)
12. Compare con los desempeos obtenidos por otros grupos
Anexos
107
Trabajo Prctico de Laboratorio N 3 Identificacin de Sistemas
Introduccin
En cualquier aplicacin de los conceptos de control vistos en clase, es muy importante primero,
conocer con cierta exactitud las caractersticas del sistema a controlar. Para esto existen varias
tcnicas de identificacin de sistemas, el presente trabajo prctico consiste en la implementacin de
una de ellas, utilizando el equipo experimental provisto por la ctedra.
El objetivo es que los alumnos apliquen los conocimientos adquiridos en las clases tericas y tomen
contacto con las realizaciones prcticas de los sistemas controlados por computadora.
Descripcin
El trabajo se realizar siguiendo las consignas planteadas en esta gua de laboratorio. Se utilizar el
entorno MATLAB para inyectar diferentes seales de prueba en el sistema y se registraran las
seales de entrada y salida. Posteriormente se utilizaran dichas seales para identificar la funcin de
transferencia del sistema utilizando las tcnicas de identificacin de sistemas.
Se trabajar en forma grupal, en grupos de no ms de 4 integrantes. Se deber presentar un informe
escrito describiendo el trabajo realizado, los resultados obtenidos y las conclusiones.
Desarrollo
1. Elabore un programa en MATLAB para realizar la obtencin de los datos, el mismo deber
incluir:
1.1. La especificacin del periodo de muestreo y la cantidad de pasos a ejecutar h=0.02 N=500
1.2. La especificacin de la seal de pruebas u(k) para 1 < k < N
1.3. La llamada al comando usb_start
1.4. La llamada al comando usb_com , N veces utilizando un bucle for
Anexos
108
1.5. La llamada al comando sub_stop
2. Conecte y encienda el equipo siguiendo el manual de usuario del mismo
3. Ejecute el programa elaborado en el paso 1, la seal de entrada quedar almacenada en el
vector u(k) y la seal de salida en el vector x(k)
4. Guarde los datos obtenidos en un archivo .mat
5. A partir de los datos obtenidos, ensamble las matrices e Y siguiendo la forma
(3) (2) (1) (2) (1)
(4) (3) (2) (3) (2)
(5) (4) (3) (4) (3)
x x x u u
x x x u u
Y
x x x u u
( (
( (
( (
= + =
( (
( (
6. Calcule el vector de parmetros utilizando
( )
1
T T
Y
= + + +
7. La funcin de transferencia del sistema resulta
1 0
2
1 0
( ) ( )
b z b
x z u z
z a z a
+
=
+ +
Donde los coeficientes b
1
b
0
a
1
y a
0
se extraen del vector de parmetros
1
0
1
0
a
a
b
b
(
(
(
=
(
(
8. Realice la simulacin de la respuesta de la funcin de transferencia obtenida a la entrada u(k)
9. Grafique la respuesta del sistema real y la simulacin para verificar que los resultados son
correctos.
Anexos
109
ANEXO III Cdigo Fuente de los Microcontroladores
master_t.c
#include "a18F4550_t.h"
//~~~ 20MHZ OSCILLATOR CONFIGS ~~~//
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,CCP2C1,NOMCLR
#use delay(clock=48M)
#include "axl_usb_t.c"
#include "defines_t.c"
#include "rutinas_t.c"
////////////////////////////////////////////////////////////////////////////
//PROGRAMA PRINCIPAL
////////////////////////////////////////////////////////////////////////////
void main()
{
INIT();
while (TRUE)
{
usb_task();
if(usb_enumerated())
{
if (usb_kbhit(1))
{
if(usb_get_packet(1, rxdata, 8)==8);
{
DATA();
if ((L0)&&(US))
U1=0;
if ((L1)&&(!US))
U1=0;
usb_put_packet(1, rxdata, 8, USB_DTS_TOGGLE);
PWM();
}
}
}
L0=input(LIM0);
L1=input(LIM1);
if ((L0)&&(US))
{
U1=0;
PWM();
}
if ((L1)&&(!US))
{
U1=0;
PWM();
}
}
}
Anexos
110
defines_t.c
/////////////////////////////////////////////////////////////////////////////
//PINES
/////////////////////////////////////////////////////////////////////////////
#define LED1 PIN_E0
#define LED2 PIN_A4
#define LED3 PIN_A5
#define BUTTON1 PIN_A0
#define BUTTON2 PIN_A1
#define BUTTON3 PIN_A2
#define BUTTON4 PIN_A3
#define BUSCON1 PIN_C6
#define BUSCON2 PIN_C7
#define PWM1ENABLE PIN_E2
#define PWM2ENABLE PIN_E1
#define LIM0 PIN_B6
#define LIM1 PIN_B7
////////////////////////////////////////////////////////////////////////////
//TIMES
////////////////////////////////////////////////////////////////////////////
#DEFINE TBUSCON1 8 //TIEMPO DE DURACION DEL PULSO BUSCON1
#DEFINE TBUSCON2 8 //TIEMPO DE DURACION DEL PULSO BUSCON2
#DEFINE TBUSCON3 1 //TIEMPO DE REPOSO DESPUES DEL PULSO BUSCON
////////////////////////////////////////////////////////////////////////////
//DEFINES
////////////////////////////////////////////////////////////////////////////
#define LED_ON output_high
#define LED_OFF output_low
////////////////////////////////////////////////////////////////////////////
//VARIABLES
////////////////////////////////////////////////////////////////////////////
unsigned int8 T0;
#BIT T00 = 0x25.0
#BIT T01 = 0x25.1
#BIT T02 = 0x25.2
#BIT T03 = 0x25.3
#BIT T04 = 0x25.4
#BIT T05 = 0x25.5
#BIT T06 = 0x25.6
#BIT T07 = 0x25.7
unsigned int8 T1;
#BIT T10 = 0x26.0
#BIT T11 = 0x26.1
#BIT T12 = 0x26.2
#BIT T13 = 0x26.3
#BIT T14 = 0x26.4
#BIT T15 = 0x26.5
#BIT T16 = 0x26.6
#BIT T17 = 0x26.7
unsigned int8 D;
#BIT D0 = 0x27.0
#BIT D1 = 0x27.1
#BIT D2 = 0x27.2
#BIT D3 = 0x27.3
#BIT D4 = 0x27.4
#BIT D5 = 0x27.5
#BIT D6 = 0x27.6
#BIT D7 = 0x27.7
unsigned int8 B;
#BIT B0 = 0x28.0
#BIT B1 = 0x28.1
#BIT B2 = 0x28.2
#BIT B3 = 0x28.3
Anexos
111
#BIT B4 = 0x28.4
#BIT B5 = 0x28.5
#BIT B6 = 0x28.6
#BIT B7 = 0x28.7
unsigned int16 Xref;
unsigned int8 UA,trash, A0,A1,A2;
unsigned int8 rxdata[8];
#BIT US = 0x30.0
//#WORD U = 0x31
//#BYTE U0 = 0x31
#BYTE U1 = 0x32
#WORD F = 0x33
#BYTE F0 = 0x33
#BYTE F1 = 0x34
#WORD X = 0x35
#BYTE X0 = 0x35
#BYTE X1 = 0x36
#BYTE L = 0x37
#BIT L0 = 0x37.0
#BIT L1 = 0x37.1
int1 USA;
unsigned int8 rxdata2[8];
rutinas_t.c
void DATA()
{
output_high(BUSCON1); //REQUEST X
delay_us(TBUSCON1);
output_low(BUSCON1);
delay_us(TBUSCON3);
D=input_d(); //DATA IN
B=input_b();
T00=B5;
T01=B4;
T02=B3;
T03=B2;
T04=B1;
T05=B0;
T06=D7;
T07=D6;
T1=0;
T10=D5;
X0=T0;
X1=T1;
X=((X-Xref)&(0x01FF));
output_high(BUSCON2); //REQUEST F
delay_us(TBUSCON2);
output_low(BUSCON2);
delay_us(TBUSCON3);
D=input_d(); //DATA IN
B=input_b();
T00=B5;
T01=B4;
T02=B3;
T03=B2;
T04=B1;
Anexos
112
T05=B0;
T06=D7;
T07=D6;
T1=0;
T10=D5;
T11=D4;
F0=T0;
F1=T1;
L=0;
L0=input(LIM0);
L1=input(LIM1);
}
void INIT()
{
trash=input_b();
trash=input_d();
output_low(BUSCON1);
output_low(BUSCON2);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
set_pwm1_duty(0);
set_pwm2_duty(0);
U1=0;
UA=0;
//referencia de X
U1=64;
if(input(LIM1))
{
output_low(PWM1ENABLE);
set_pwm1_duty(0);
output_high(PWM2ENABLE);
set_pwm2_duty(U1);
delay_ms(200);
}
output_low(PWM2ENABLE);
set_pwm2_duty(0);
delay_ms(5);
output_high(PWM1ENABLE);
set_pwm1_duty(U1);
while(!input(LIM1)) {}
U1=0;
output_low(PWM2ENABLE);
set_pwm2_duty(0);
output_high(PWM1ENABLE);
set_pwm1_duty(0);
delay_ms(200);
Xref=0;
DATA();
Xref=(X-100);
usb_init();
}
void PWM()
{
if (US!=USA)
{
output_low(PWM1ENABLE);
output_low(PWM2ENABLE);
set_pwm1_duty(0);
set_pwm2_duty(0);
Anexos
113
delay_us(200);
USA=US;
UA=0;
}
if (U1!=UA)
{
if (US)
{
output_low(PWM1ENABLE);
set_pwm1_duty(0);
output_high(PWM2ENABLE);
set_pwm2_duty(U1);
}
else
{
output_low(PWM2ENABLE);
set_pwm2_duty(0);
output_high(PWM1ENABLE);
set_pwm1_duty(U1);
}
UA=U1;
}
}
Slave_t.c
#include "a18F4550_t.h"
//~~~ 48MHZ OSCILLATOR CONFIGS ~~~// 4Mhz Crystal
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,CCP2C1,NOMCLR
#use delay(clock=48M)
#include "defines_s_t.c"
////////////////////////////////////////////////////////////////////////////
//PROGRAMA PRINCIPAL
////////////////////////////////////////////////////////////////////////////
void main()
{
X=0x0;
F=0x0;
while (TRUE)
{
//////////////////////////////////////////
//DATA
///////////////////////////////////////////
if(input(BUSCON1))
{
output_d(X0);
output_b(X1);
}
if(input(BUSCON2))
{
output_d(F0);
output_b(F1);
}
/////////////////////////////////////////////////////////////////////////////
//encoder A
///////////////////////////////////////////////////////////////////////////
enca1p=input (ENCA1);
enca2p=input (ENCA2);
if(enca1p)
{
if(enca2p)
Anexos
114
{
if(enca1a)
{
if(enca2a)
{
//1111
ZZ++; //nada
}
else
{
delay_cycles(1);
//1110
F++;
}
}
else
{
delay_cycles(1);
if(enca2a)
{
//1101
F--;
}
else
{
delay_cycles(1);
//1100
ZZ++; //error
}
}
enca2a=1;
}
else //C7=0
{
delay_cycles(1);
if(enca1a)
{
if(enca2a)
{
//1011
F--;
}
else
{
delay_cycles(1);
//1010
ZZ++; //nada
}
}
else
{
delay_cycles(1);
if(enca2a)
{
//1001
ZZ++; //error
}
else
{
delay_cycles(1);
//1000
F++;
}
}
enca2a=0;
}
enca1a=1;
}
else //C6=0
{
delay_cycles(1);
if(enca2p)
{
if(enca1a)
{
if(enca2a)
{
//0111
Anexos
115
F++;
}
else
{
delay_cycles(1);
//0110
ZZ++; //error
}
}
else
{
delay_cycles(1);
if(enca2a)
{
//0101
ZZ++; //nada
}
else
{
delay_cycles(1);
//0100
F--;
}
}
enca2a=1;
}
else //C7=0
{
delay_cycles(1);
if(enca1a)
{
if(enca2a)
{
//0011
ZZ++; //error
}
else
{
delay_cycles(1);
//0010
F--;
}
}
else
{
delay_cycles(1);
if(enca2a)
{
//0001
F++;
}
else
{
delay_cycles(1);
//0000
ZZ++; //nada
}
}
enca2a=0;
}
enca1a=0;
}
/////////////////////////////////////////////////////////////////////////////
//encoder B
///////////////////////////////////////////////////////////////////////////
encb1p = input (ENCB1);
encb2p = input (ENCB2);
if(encb1p)
{
if(encb2p)
{
if(encb1a)
{
if(encb2a)
{
Anexos
116
//1111
ZZ++; //nada
}
else
{
delay_cycles(1);
//1110
X++;
}
}
else
{
delay_cycles(1);
if(encb2a)
{
//1101
X--;
}
else
{
delay_cycles(1);
//1100
ZZ++; //error
}
}
encb2a=1;
}
else //C7=0
{
delay_cycles(1);
if(encb1a)
{
if(encb2a)
{
//1011
X--;
}
else
{
delay_cycles(1);
//1010
ZZ++; //nada
}
}
else
{
delay_cycles(1);
if(encb2a)
{
//1001
ZZ++; //error
}
else
{
delay_cycles(1);
//1000
X++;
}
}
encb2a=0;
}
encb1a=1;
}
else //C6=0
{
delay_cycles(1);
if(encb2p)
{
if(encb1a)
{
if(encb2a)
{
//0111
X++;
}
else
{
delay_cycles(1);
Anexos
117
//0110
ZZ++; //error
}
}
else
{
delay_cycles(1);
if(encb2a)
{
//0101
ZZ++; //nada
}
else
{
delay_cycles(1);
//0100
X--;
}
}
encb2a=1;
}
else //C7=0
{
delay_cycles(1);
if(encb1a)
{
if(encb2a)
{
//0011
ZZ++; //error
}
else
{
delay_cycles(1);
//0010
X--;
}
}
else
{
delay_cycles(1);
if(encb2a)
{
//0001
X++;
}
else
{
delay_cycles(1);
//0000
ZZ++; //nada
}
}
encb2a=0;
}
encb1a=0;
}
}
}
Anexos
118
Defines_s_t.c
/////////////////////////////////////////////////////////////////////////////
//PINES
/////////////////////////////////////////////////////////////////////////////
#define ENCA1 PIN_C0
#define ENCA2 PIN_C1
#define ENCB1 PIN_E0
#define ENCB2 PIN_E1
#define BUSCON1 PIN_C6
#define BUSCON2 PIN_C7
////////////////////////////////////////////////////////////////////////////
//DEFINES
////////////////////////////////////////////////////////////////////////////
#define LED_ON output_high
#define LED_OFF output_low
////////////////////////////////////////////////////////////////////////////
//VAR
////////////////////////////////////////////////////////////////////////////
signed int16 F;
#BYTE F0=5
#BYTE F1=6
signed int16 X;
#BYTE X0=7
#BYTE X1=8
int1 enca1p,enca2p,enca1a,enca2a,encb1p,encb2p,encb1a,encb2a;
signed int16 ZZ;
Anexos
119
ANEXO IV Cdigo Fuente en MATLAB
usb_start.m
LIMU=1;
LIMX=0.5;
u=zeros(1,N);
f=zeros(1,N);
x=zeros(1,N);
xe=zeros(4,N+1);
sen_fi=zeros(1,N);
E=zeros(1,N);
Ec=zeros(1,N);
Ep=zeros(1,N);
loadlibrary mpusbapi _mpusbapi.h alias libreria
data_in = eye(1,8,'uint8'); % Se declara el vector de datos de entrada
data_out = eye(1,8,'uint8'); % Se declara el vector de datos de salida
len = 8*ones(1,4,'uint8');
waittime=uint8(50);
vid_pid_norm = libpointer('int8Ptr',[uint8('vid_04d8&pid_1011') 0]);
out_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
in_pipe = libpointer('int8Ptr',[uint8('\MCHP_EP1') 0]);
[conectado] = calllib('libreria','MPUSBGetDeviceCount',vid_pid_norm);
if conectado == 1
[my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe, uint8(0),
uint8 (0)); % Se abre el tunel de envio
[my_in_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, in_pipe, uint8 (1),
uint8 (0)); % Se abre el tunel de recepcin
end
t1=cputime;
tic
usb_stop.m
toc;
Elapsed_time=cputime-t1
h_medio=Elapsed_time/N
if (conectado == 1)
data_out(3)=uint8(0);
calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, len(1), len(2), waittime); % Se envia el
dato al PIC
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, len(3), len(4),
waittime); % Se recibe el dato que envia el PIC
calllib('libreria', 'MPUSBClose', my_in_pipe); % Se cierra el tunel de recepcin
calllib('libreria', 'MPUSBClose', my_out_pipe); % Se cierra el tunel de envio
end
unloadlibrary libreria
%close all
clear t1 ans data_in data_out uc aa bb dd conectado i in_pipe len my_in_pipe my_out_pipe out_pipe
vid_pid_norm waittime
Anexos
120
usb_com.m
if(u(i)>LIMU)
u(i)=LIMU;
end
if(u(i)<-LIMU)
u(i)=-LIMU;
end
if(u(i)>0)
if(x(i-1)>LIMX)
u(i)=0;
u0=0;
else
data_out(1)=0;
u0=u(i);
end
else
if(x(i-1)<-LIMX)
u(i)=0;
u0=0;
else
data_out(1)=1;
u0=-u(i);
end
end
u1=u0*18.3333;
if(u0>0.012)
u1=(u0*1.0448)+0.2075;
end
if(u0>0.28)
u1=(u0*0.7813)+0.2813;
end
u0=fix(200*u0);
if(u0>0)
u0=u0+35;
else
u0=0;
end
data_out(3)=uint8(u0);
calllib('libreria', 'MPUSBWrite',my_out_pipe, data_out, len(1), len(2),waittime); % Se envia el
dato al PIC
[aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, len(3),
len(4),waittime); % Se recibe el dato que envia el PIC
f(i)=(single(data_in(4))+256*single(data_in(5)));
f(i)=f(i)-512;
f(i)=(-pi/512)*f(i);
x(i)=(-1)*(single(data_in(6))+256*single(data_in(7))-258)/167;
sen_fi(i)=sin(f(i));
Ec(i)=(7*(f(i)-f(i-1))^2); %aproximacion de primer orden
if(Ec(i)>2)
Ec(i)=Ec(i-1);
end
Ep(i)=0.25*cos(f(i))+0.25*cos(f(i-1))+0.5;
E(i)=Ec(i)+Ep(i);
ttt=toc;
while (ttt<h)
ttt=toc;
end
tic
Anexos
121
modelado2.m
%modelado del sistema en variables de estado
%pndulo arriba
h=0.02;
a=50;
b=4;
c=88;
d=0.016;
A=[-a 0 0 0 ; 1 0 0 0 ; -a*c*d 0 0 c ; 0 0 1 0];
B=[a*b ; 0 ; a*b*c*d ; 0];
C=[0 1 0 0 ; 0 0 0 1];
SS=ss(A,B,C,0);
SSD=c2d(SS,h);
F=SSD.a;
G=SSD.B;
Po=[0.02 0.021 0.022 0.023]; %polos del observador
K=place(F',C',Po).';
Pc=[0.8 0.85 0.75 0.7]; %polos del control
L=place(F,G,Pc);
clear SS SSD A B Po Pc
modelado6.m
%modelado del sistema en enfoque polinomial
%pndulo arriba
h=0.02;
a=50;
b=5;
c=88;
d=0.015;
A=[-a 0 0 0 ; 1 0 0 0 ; -a*c*d 0 0 c ; 0 0 1 0];
B=[a*b ; 0 ; a*b*c*d ; 0];
C=[0 1 0 0 ; 0 0 0 1];
SS=ss(A,B,C,0);
SSD=c2d(SS,h);
F=SSD.a;
G=SSD.B;
Po=[0.1 0.11 0.12 0.13]; %polos del observador
K=place(F',C',Po).';
Pc=[0.7+0.1*i 0.7-0.1*i 0.71 0.72]; %polos del control
L=place(F,G,Pc);
clear A B SS SSD
syms z
I=eye(4);
AA=expand(det(z*I-F));
BB=expand(simplify(AA*C*inv(z*I-F)*G));
A=fliplr(eval(coeffs(AA,z)));
B1=fliplr(eval(coeffs(BB(1),z)));
B2=fliplr(eval(coeffs(BB(2),z)));
Anexos
122
AoAm=expand((z-0.7)*(z-0.72)^4);
AoAm=fliplr(eval(coeffs(AoAm)));
M=[[A';0] [0;A'] [0;B1';0] [0;0;B1'] [0;B2';0] [0;0;B2']];
X=M\AoAm';
R=[X(1) X(2)];
S1=[X(3) X(4)];
S2=[X(5) X(6)];
clear AA BB A B1 B2 AoAm X M I z
modelado_param_v.m
%modelado del sistema en variables de estado
%con parametros variantes
%pendulo arriba
h=0.02;
a=50;
b=3.8;
c=88;
d=0.015;
NN=100; %numero de divisones en fi
for i=1:NN;
fi=pi*i/NN
i
A=[-a 0 0 0 ; 1 0 0 0 ; -a*c*d*cos(fi) 0 0 c*sinc(fi/pi) ; 0 0 1 0];
B=[a*b ; 0 ; a*b*c*d*cos(fi) ; 0];
C=[0 1 0 0 ; 0 0 0 1];
SS=ss(A,B,C,0);
SSD=c2d(SS,h);
F=SSD.a;
G=SSD.B;
Po=[0.1 0.11 0.12 0.13]; %polos del observador
K=place(F',C',Po).';
if(i==NN/2)
L=[0 0 0 0]; %para fi=pi/2 no hay control
else
if(i==NN)
else
Pc=[0.8 0.85 0.75 0.7]; %polos del control
L=place(F,G,Pc);
end
end
LL(:,:,i)=L;%/(10*sin(fi)*sin(fi)+1);
KK(:,:,i)=K;
GG(:,:,i)=G;
FF(:,:,i)=F;
FGL(:,:,i)=(F-G*L);
FKC(:,:,i)=(F-K*C);
end
LL(:,:,i+1)=L;
KK(:,:,i+1)=K;
GG(:,:,i+1)=G;
FF(:,:,i+1)=F;
FGL(:,:,i+1)=(F-G*L);
FKC(:,:,i+1)=(F-K*C);
clear SS SSD A B Po Pc
Anexos
123
ANEXO V Circuitos Esquemticos
Anexos
124
Figura A.1: Circuito esquemtico de la placa principal
Anexos
125
MAESTRO ESCLAVO
Nombre N de PIN
TIPO FUNCION TIPO FUNCION
RA0RA5 2-3-4-5-6-7 - No utilizado - No utilizado
P
u
e
r
t
o
A
OSC1OSC2 13 - 14 O Cristal 4MHz O Clock
RB0RB5 33-34-35-36-37-38 E
Bus de datos
Protocolo Paralelo
S
Bus de datos
Protocolo Paralelo
P
u
e
r
t
o
B
RB6-RB7 39-40 E/P
ICSP
Lmites de carrera
- ICSP
RC0 15 E
Pin de censado de
conexin USB
E Encoder A
RC1 16 S PWM E Encoder A
RC2 17 S PWM - No utilizado
RC3 18 A Regulador USB 3.3V - No utilizado
RC4-RC5 23-24 E/S Seal USB - No utilizado
P
u
e
r
t
o
C
RC6-RC7 25-26 S
Banderas del
Protocolo Paralelo
E
Banderas del
Protocolo Paralelo
P
u
e
r
t
o
D
RD0RD7
19-20-21-22
27-28-29-30
E
Bus de datos
Protocolo Paralelo
S
Bus de datos
Protocolo Paralelo
RE0 8 - No utilizado E Encoder A
RE1 9 S Control del Puente H E Encoder A
RE2 10 S Control del Puente H - No utilizado
P
u
e
r
t
o
E
MCLR 1 P
ICSP
Reset
P
ICSP
Reset
VDD 11-32 A +5V A +5V
A
l
i
m
e
n
t
a
c
i
n
VSS 12-31 A GND A GND
E-Entrada, S-Salida, P-Programacin, A-Alimentacin, O- Oscilador
Tabla 5: Descripcin de Puertos y Pines, detallando Tipo y Funcin de cada uno
126
127
128