Mostrando entradas con la etiqueta código. Mostrar todas las entradas
Mostrando entradas con la etiqueta código. Mostrar todas las entradas

lunes, 23 de septiembre de 2013

Simulación de un masa-resorte-amortiguador doble

En Matlab ejecute la siguiente instrucción:

>> mra2_ini

Los siguientes archivos están en la carpeta en donde se ejecutó la instrucción arriba mencionada.

mra2_ini.m

%  Programa principal que grafica la posicion y velocidad de un sistema 
%  mecanico masa-resorte-amortiguador de 2gdl mediante la instruccion ode45. 
%  Requisitos: mra2.m

%  Realizo: Ricardo Cuesta
%  Fecha: 23/sep/13
%  Version: 0.1

clc; clear; clf;            % limpia pantalla, variables y figura

t = linspace(0,10,1000);    % tiempo de simulacion
x0 = [0;0;0;0];                 % condiciones iniciales

[t,x] = ode45(@mra2,t,x0);   % solucion de la EDO
figure(1)

subplot(2,1,1)
plot(t,x(:,1))              % grafica posicion de la primera masa
legend('posicion masa 1')

subplot(2,1,2)
plot(t,x(:,3))              % grafica posicion de la segunda masa
legend('posicion masa 2')


mra2.m

%  Programa que contiene las ecuaciones de estado de un sistema
%  masa-resorte-amortiguador de 2gdl.
%  Los parametros se pueden modificar.
%  La entrada es un escalon, pero es posible modificarla.
%  No cambiar el nombre de la variables.

%  Realizo: Ricardo Cuesta
%  Fecha: 23/sep/13
%  Version: 0.1

function xp = mra2(t,x)

m1 = 1;      % masa 1
b1 = 0.75;   % amortiguador 1
k1 = 10;     % resorte 1

m2 = 1;      % masa 2
b2 = 0.75;   % amortiguador 2
k2 = 10;     % resorte 2

u = 1;      % entrada: escalon

xp(1,:) = x(2);
xp(2,:) = (u-b1*x(2)-k1*x(1)-k2*(x(1)-x(3)))/m1;

xp(3,:) = x(3);
xp(4,:) = (-b2*x(4)-k2*(x(3)-x(1)))/m2;

En este caso se consideró que x(1) es la posición de la primera masa, x(2) su velocidad; x(3) la posición de la segunda masa y su respectiva velocidad es x(4).

El siguiente video es útil para realizar las animaciones de sistemas mecánicos.
 
El siguiente video muestra una forma de realizar la animación del sistema mecánico masa-resorte-amortiguador doble.
 
El siguiente video muestra cómo realizar la simulación de un sistema masa-resorte-amortiguador doble usando Simulink.

El siguiente video muestra cómo obtener el modelo y las ecuaciones de estado del sistema mecánico masa-resorte-amortiguador doble.


jueves, 15 de noviembre de 2012

Simulación y animación de un masa-resorte-amortiguador

En Matlab ejecute la siguiente instrucción:

>> mra_ini

Los siguientes archivos están en la carpeta en donde se ejecutó la instrucción arriba mencionada.

mra_ini.m

%  Programa principal que grafica la posicion y velocidad de un sistema 
%  mecanico masa-resorte-amortiguador mediante la instruccion ode45. 
%  Tambien se incluye una animacion sencilla.
%  Requisitos: mra.m y dibujomasa.m

%  Realizo: Ricardo Cuesta
%  Fecha: 15/11/12
%  Version: 0.1

clc; clear; clf;            % limpia pantalla, variables y figura

t = linspace(0,10,1000);    % tiempo de simulacion
x0 = [0;0];                 % condiciones iniciales

[t,x] = ode45(@mra,t,x0);   % solucion de la EDO
figure(1)

subplot(2,1,1)
plot(t,x(:,1))              % grafica posicion
legend('posicion')

subplot(2,1,2)
plot(t,x(:,2))              % grafica velocidad
legend('velocidad')


figure(2)
dibujomasa(x(:,1))          % genera una sencilla animacion del MRA


mra.m

%  Programa que contiene las ecuaciones de estado de un sistema
%  masa-resorte-amortiguador.
%  Los parametros se pueden modificar.
%  La entrada es un escalon, pero es posible modificarla.
%  No cambiar el nombre de la variables.

%  Realizo: Ricardo Cuesta
%  Fecha: 15/11/12
%  Version: 0.1

function xp = mra(t,x)

m = 1;      % masa
b = 0.75;   % amortiguador
k = 10;     % resorte

u = 1;      % entrada: escalon

xp(1,:) = x(2);
xp(2,:) = (u-b*x(2)-k*x(1))/m;



dibujomasa.m


%  Programa que dibuja un esquema de la planta rectilinea
%  con el que cuenta el Laboratorio de Control del Departamento
%  de Electronica y Telecomunicaciones del CICESE.
 

%  Realizo: Ricardo Cuesta
%  Fecha: 28/01/08
%  Version: 0.1

function dibujomasa(t1)
clf;

axis([-10,10,-10,10])
plot([0,0,5],[2,0,0]) % base
axis equal; axis off;
l1=2; h1=1;
hold on
masa1=plot(0,0);
resorte1=plot(0,0);
amort1=plot(0,0);
amort2=plot(0,0);

for i=1:length(t1)
  p1=t1(i)+1.25;
  pause(0.01) % tiempo entre datos
  delete(masa1);
  delete(resorte1);
  delete(amort1); delete(amort2);

  % masa
  xm=[0,l1,l1,0,0];
  ym=[0,0,h1,h1,0];
  masa1=plot(xm+p1,ym);

  % resorte
  xr=[0,1.5,2,3,4,5,5.5,7];
  yr=[0,0,1,-1,1,-1,0,0];
  resorte1=plot(xr/7*p1,yr/7*2+0.5);

  % amortiguador
  la=p1; lb=2;
  xa1=[0,0,0,2,2];
  ya1=[-1,1,0,0,-2];
  xa2=[0,lb,lb,lb+4,lb,lb,lb+4];
  ya2=[0,0,1,1,1,-1,-1];
  amort1=plot(xa1/2+la,ya1/4+1.5);
  amort2=plot(xa2/3,ya2/4+1.5);
end