Académique Documents
Professionnel Documents
Culture Documents
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:
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.
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
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:
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
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
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:
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)
Realice el icono del LGQ Control de la misma forma que ha realizado los dos iconos anteriores;
guarde el modelo.
Finalmente es posible simular y visualizar los resultados utilizando el Simulation Center usando
diferentes configuraciones y comparando los resultados realizando diferentes experimentos.