Vous êtes sur la page 1sur 13

M ATH M ODELICA ® S YSTEM D ESIGNER ™

Modelo del Péndulo Invertido


© 2006 MathCore Engineering AB
Traducido por Addlink Software Científico

1 Introducción
Este ejemplo muestra como desarrollar un péndulo invertido paso a paso con MathModelica System
Designer. Este ejemplo enseñará como se pueden construir sub componentes y usarlos para
componer modelos jerárquicos en un péndulo invertido. Este ejemplo también ilustra como se puede
combinar modelado gráfico de “arrastrar y pegar” drag and drop y modelado textual.
Un péndulo invertido es un problema clásico de control. El proceso es no lineal e inestable con una
señal de entrada y múltiples señales de salida. El problema asemeja sistemas de control usados en
proyectiles. El objetivo es balancear verticalmente un péndulo sobre un motor colocado en un vagón.
Es posible dirigir el vagón hacia diferentes posiciones con una señal de referencia.
En la figura a continuación se hace un bosquejo de un péndulo invertido. El péndulo de masa m y
longitud L es montado sobre un vagón de masa M. El vagón se mueve en la dirección x,
dependiendo de la fuerza Fdrive suministrado por el motor CC.

Para implementar el sistema se desarrollan tres nuevos objetos/componentes, un motor CC, un vagón
con un péndulo, y un sistema de control. Estos componentes serán usados para completar el sistema.
2:13

2 Motor CC
R L

emf
SignalVoltage1
J

Ground
Un sencillo motor CC puede ser implementado con componentes provenientes de la librería
Electrical and Mechanical, la cual es incluida en Modelica Standard Library. Los siguientes
componentes son necesarios:

La fuente Signal Voltage la puede obtener en Modelica.Electrical.Analog.Sources.SignalVoltage


El resistor, inductor, emf y tierra en Modelica.Electrical.Analog.Basic
Finalmente la Inercia en Modelica.Mechanics.Rotational.Inertia
1. Resistor
2. Inductancia
3. Tierra
4. EMF
5. Fuente de Voltaje
6. Inercia

El propósito de este ejemplo es usar el motor CC para controlar el vagón; una fuente de voltaje
controlada es necesaria. Esta fuente tiene la ventaja de tener un conector RealInput, como se
muestra en la figura siguiente, a la que es posible conectar una señal de control, así se controla el
nivel de voltaje de salida. La fuente, al igual que los otros componentes necesarios, puede ser
agregada al modelo por medio de drag-n-drop.
3:13

ConstantCurrent ConstantVoltage
Negative pin

Input SignalVoltage
connector

Positive pin

Izquierda: La plantilla contiene las fuentes usadas. Derecha: La fuente de voltaje indicando los
conectores.

2.1 Agregando la Interfaz


Como en todos los diseños de sistemas, definir la interfaz entre los componentes de un sistema es
una de las tareas más importantes de diseño al igual que las leyes en las que se basa la comunicación
entre los componentes ya que esto proporciona la base para la comunicación entre los mismos y así
también influye en la descomposición del modelo. Todos los paquetes de la librería Modelica
Standard Library tienen predefinida la interfaz estándar que esta disponible en el dominio
respectivo, esto es ilustrado en la siguiente figura, donde la interfaz de bloque y del mecanismo
rotacional son mostradas.

En el caso del motor CC, la interfaz para las fuentes de voltaje como señales de entrada y la inercia
como salida son necesarias. Entonces puede ir agregándolas por medio del drag and drop y
conectándolas con sus respectivas conexiones, como se muestra en la siguiente figura.

Cuando los conectores y las conexiones prediseñadas han sido agregadas, el motor CC se encuentra
listo para ser usado, para facilitar su uso también se ha añadido un icono. El modelo es representado
como sigue:
4:13

Para crear el icono deberá hacer lo siguiente:

Vaya al icono de creación de iconos de modelos .


Puede cambiar el nombre del icono haciendo clic directamente sobre el texto, y escribiendo la
leyenda deseada.
5:13

Con las herramientas de dibujo se va creando el icono para el motor, como el mostrado en la
siguiente figura: Todas son configurables dando clic derecho sobre cada
figura dibujada y configurando sus características como color y forma, etc.
6:13

Acerque los conectores para entrada y salida respectivamente. Una vez terminado guarde el modelo.
Ahora este modelo aparecerá como un modelo disponible con un icono especifico, en la ventana de
las librerías, como se muestra en la siguiente imagen:

3 Vagón con Péndulo


El vagón con péndulo es creado de forma similar en la creación del motor CC, pero en vez de utilizar
componentes listos para usar, se desarrolla un modelo completamente de manera textual.
7:13

Para comenzar se necesita configurar la ecuación de movimiento. Usando un diagrama de grados de


libertad, del vagón en la figura anterior se obtiene la primera y segunda ecuación de movimiento para
el sistema:

(M + m)x'' + bx' + mlθ''cos(θ) – mlθ’2sin(θ) = F


(I + ml2)θ'’ – mglsin(θ) = -mlx’’cos(θ)

Estas ecuaciones pueden ser usadas para configurar el modelo de acuerdo al código a continuación.
Note que la interfaz ha sido agregada para habilitar la conexión del péndulo al resto del sistema. .

Añada los terminales en el área de trabajo arrastrando y pegando la entrada y la salida, para esto
utilice:
• Modelica.Blocks.Interfaces.RealOutput realOutput1
• Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a1

Ahora escriba el código Modelica correspondiente a las ecuaciones determinadas al inicio de este
ejercicio, para esto deberá utilizar el área de trabajo para texto, de clic en el siguiente icono .

model InvertedPendulum
constant Real g=Modelica.Constants.g_n;
parameter Modelica.SIunits.Mass M=1 "Mass of wagon";
parameter Modelica.SIunits.Mass m=1 "Mass of pendulum";
parameter Modelica.SIunits.Length L=1 "Length of pendulum";
8:13

parameter Modelica.SIunits.Inertia I=1/12*m*L^2 "Inertia of


pendulum";
parameter Real b=0.2 "Friction constant";
Modelica.SIunits.Position s "Position of wagon";
Modelica.SIunits.Velocity v "Velocity of wagon";
Modelica.SIunits.Acceleration a "Acceleration of wagon";
Modelica.SIunits.Angle phi "Angle of pendulum";
Modelica.SIunits.AngularVelocity omega "Angular velocity of
wagon";
Modelica.SIunits.AngularAcceleration alpha "Angular acceleration
of wagon";
Modelica.SIunits.Force F "Force acting on wagon";
Modelica.Blocks.Interfaces.RealOutput realOutput1
Modelica.Mechanics.Translational.Interfaces.Flange_a flange_a1

equation
flange_a1.s=s;
flange_a1.f=F;
phiOut=phi;
v=der(s);
a=der(v);
omega=der(phi);
alpha=der(omega);
(M + m)*a + b*v + m*I*alpha*cos(phi) - m*I*omega^2*sin(phi)=F;
(I + m*I^2)*alpha - m*g*I*sin(phi)=-m*I*a*cos(phi);
end InvertedPendulum;
9:13

Aquí tenemos una copia de la imagen del código en Modelica

Una vez hecho esto puede crear el icono correspondiente al péndulo invertido, de la misma forma
que se creo el icono para el motorCC; el orden no alterará el resultado, lo que quiere decir que
son tres pasos esenciales: posicionamiento de entradas-salidas, diseño del icono, y creación del
código en Modelica.
10:13

Ahora obtendrá dos iconos con los respectivos modelos creados recientemente, como luce en la
siguiente figura:

3.1 Diseño del sistema de control


Finalmente, es necesario crear un sistema de control. El sistema de control esta compuesto por los
componentes de la librería Blocks. Es posible diseñar múltiples tipos de diferentes controladores para
este propósito, y en este ejemplo un LGQ es el elegido, ver siguiente figura. Los bloques más a la
izquierda son usados para generar una señal de referencia y el sistema de control actual es gobernado
por un filtro Kalman. Diseñar el controlador y seleccionar los mejores parámetros de control es un
arte, un lector interesado podría dedicar tiempo a esta tarea diseñando y testeando diferentes
configuraciones de parámetros.
11:13

model LGQControl
annotation
Modelica.Blocks.Sources.Constant constantZero(k=0)
Modelica.Blocks.Nonlinear.Limiter limiter1(uMax=10)
Modelica.Blocks.Logical.Switch switch2
Modelica.Blocks.Math.Feedback feedback1
Modelica.Blocks.Math.Gain L_r(k=-14.1421356237309)
Modelica.Blocks.Sources.BooleanConstant controllerQ
Modelica.Blocks.Math.MatrixGain L(K={{-14.1421356237325,-
22.816836517325,103.808169825252,12.7154342511041}})
Modelica.Blocks.Logical.Switch switch1
Modelica.Blocks.Interfaces.RealInput source
Modelica.Blocks.Interfaces.BooleanInput constantQ
Modelica.Blocks.Interfaces.RealInput pulse1
Modelica.Blocks.Interfaces.RealInput positionSensor
Modelica.Blocks.Interfaces.RealInput angleSensor
Modelica.Blocks.Interfaces.RealOutput position
Modelica.Blocks.Routing.Multiplex3 multiplex31
Modelica.Blocks.Continuous.StateSpace observer(A={{-1.79988718862447,1,-
0.394673089155332,0},{-1.69768036953897,-15.5958,-1.09692055429961,0},{-
0.394673089155339,0.0,-10.7841129698392,1},{-0.823365662172603,-38.3678,-
26.5983296967795,0}},B={{0,1.79988718862447,0.394673089155332},{3.04872,1.697680369538
97,4.14320055429961},{0,0.394673089155339,10.7841129698392},{7.50023,0.823365662172603,
58.2264296967795}},C={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}},D={{0,0,0},{0,0,0},{0,0,0},{0,0,
0}})
equation
connect(multiplex31.y,observer.u)
connect(observer.y,L.u)
connect(limiter1.y,multiplex31.u1)
connect(positionSensor,multiplex31.u2)
connect(angleSensor,multiplex31.u3)
connect(limiter1.y,position)
connect(pulse1,switch1.u3)
connect(constantQ,switch1.u2)
connect(source,switch1.u1)
connect(controllerQ.y,switch2.u2)
connect(feedback1.y,switch2.u1)
connect(constantZero.y,switch2.u3
12:13

connect(L.y,feedback1.u2)
connect(switch2.y,limiter1.u)
connect(L_r.y,feedback1.u1)
connect(switch1.y,L_r.u)

end LGQ Control;

Realice el icono del LGQ Control de la misma forma que ha realizado los dos iconos anteriores;
guarde el modelo.

3.1.1 El sistema completo


Para usar los tres componentes, el motor CC, el vagón con el péndulo, y el sistema de control, junto
con unos cuantos componentes provenientes de Modelica Standard Library, el sistema completo
puede ser modelado, como se muestra a continuación.
Las librerías necesarias para terminar el modelo se encuentran en:
Modelica.Mechanics.Rotational.IdealGearR2T idealGearR2T1
Modelica.Blocks.Sources.Constant constant2
Modelica.Blocks.Sources.Pulse pulse1
Modelica.Blocks.Sources.BooleanConstant
Modelica.Mechanics.Translational.Sensors.PositionSensor positionSensor1
13:13

Finalmente es posible simular y visualizar los resultados utilizando el Simulation Center usando
diferentes configuraciones y comparando los resultados realizando diferentes experimentos.

Vous aimerez peut-être aussi