Está en la página 1de 7

LA SIMULACIÓN DE SISTEMAS UTILIZANDO MATLAB

Se comienzo esta sección demostrando como utilizar MATLAB para ayudar en el análisis de un
típico modelo matemático de un sistema mecánico formado por un resorte-masa-amortiguador.
Utilizando un programa escrito en MATLAB se desarrollará una capacidad de análisis interactivo
para estudiar los efectos de la frecuencia natural y el amortiguamiento sobre la respuesta no
forzada del desplazamiento de la masa. Este análisis utilizará el hecho de que se dispone de una
solución analítica que describe la respuesta temporal no forzada del desplazamiento de la masa.

La modelización es una forma de crear una representación virtual de un sistema real que incluye
software y hardware. Si los componentes de software de este modelo están gobernados por
relaciones matemáticas, es posible simular esta representación virtual con una amplia gama de
condiciones para ver cómo se comporta.

La modelización y la simulación son especialmente útiles para probar condiciones que podrían
resultar difíciles de reproducir solamente con prototipos de hardware, especialmente en la primera
fase del proceso de diseño, cuando es posible que no esté disponible el hardware. La iteración
entre la modelización y la simulación puede mejorar la calidad del diseño del sistema en una etapa
temprana y reducir así el número de errores descubiertos más adelante en el proceso de diseño.

Para la introducción de funciones de transferencia polinómicas se utiliza la función


“sys=tf(num,den)” del modo que a continuación se indica:

RESPUESTA TRANSITORIA A UNA ENTRADA ESCALÓN E IMPULSO

Para visualizar gráficamente la respuesta transitoria a una entrada escalón e impulso se procede
como a continuación se indica:

ESCALÓN:

La función a utilizar es la función: “step(sys)”

CONVERSIÓN DE MODELOS

Matlab permite que los distintos modelos puedan ser convertidos entre sí, de modo que, por
ejemplo, se pueda obtener la forma factorizada de la función de transferencia cero-polo-ganancia,
partiendo de la forma de cociente de polinomios.

Respuesta en frecuencia

La respuesta en frecuencia de los sistemas se puede obtener usando las funciones bode, nyquist y
nichols. Si no se le ponen argumentos a la izquierda, estas funciones generan las gráficas por sí
solas. En caso contrario, vuelcan los datos en los vectores de salida oportunos.

A continuación se presentan ejemplos de las tres posibles sintaxis de la función bode:

1.- bode(num,den)

2.- [mag,phase,w] = bode (num,den)


3.- [mag,phase] = bode (num,den,w)

La primera de ellas produce un gráfico con la magnitud en decibelios (dB) y la fase en grados.

En las otras dos la magnitud se devuelve en el vector mag y est´a expresada en unidades
absolutas, no en dB. Por su parte, la fase, devuelta en el vector phase, sigue siendo en grados.

En esta forma, la representación es más interactiva, en el sentido de que ”pinchando” con el ratón
en un punto de la curva, podemos ver los valores correspondientes. La segunda forma
automáticamente genera los puntos de frecuencia en el vector w. En la tercera forma es el usuario
el que escoge los rangos de frecuencia, y resulta muy adecuado cuando se quieren representar
varias graficas conjuntamente, que habrán de compartir una misma escala frecuencial.

El resultado de los dos últimos ´ comandos se puede representar usando funciones conocidas:

subplot(211), loglog(w,mag), title(’Magnitud’), xlabel(’rad/s’);

subplot(212), semilogx(w,phase), title(’Fase’), xlabel(’rad/s’);

Existen una serie de comandos relacionados con las operaciones típicas en diagramas de bloques:

 [N12,D12] = series (N1,D1,N2,D2): Devuelve la resultante de colocar en serie dos


funciones de transferencia (Fig. 2.9). El mismo resultado podría obtenerse llamando dos
veces al comando conv, que recuérdese permitía multiplicar dos polinomios.
 [N12,D12] = parallel (N1,D1,N2,D2): Devuelve la resultante de colocar en paralelo dos
funciones de transferencia (Fig. 2.10).
 [Nbc,Dbc] = feedback (N1,D1,N2,D2,-1): A partir de un sistema en bucle abierto, dado por
el numerador y denominador N1,D1, proporciona el correspondiente en bucle cerrado,
considerando que en la cadena de realimentación hay otra función de transferencia, dada
por N2, D2 (Fig. 2.11). El último parámetro indica el signo de la realimentación (−1 para
realimentación negativa y 1 para positiva).
 [Nbc,Dbc] = cloop (N1,D1,-1): En el caso en que se pretenda obtener la función de
transferencia en bucle cerrado con realimentación unitaria, puede emplearse este comando
más compacto, en el que se evita tener que especificar una segunda función de
transferencia.

Conviene tener claro que para todos estos comandos relacionados con operaciones por bloques,
se podría perfectamente estar trabajando con funciones de transferencia discretas, sin ninguna
diferencia.

Para operaciones de bloques más complejas, resulta más adecuado usar la herramienta simulink.

>> %Ejemplo 2.16


>> numg=[6 0 1]; deng=[1 3 3 1]; sysg=tf(numg,deng);

z=zero(sysg)

z=

0.0000 + 0.4082i

0.0000 - 0.4082i
>> p=pole(sysg)

p=

-1.0000 + 0.0000i

-1.0000 + 0.0000i

-1.0000 - 0.0000i

>> n1=[1 1]; n2=[1 2]; d1=[1 2*i]; d2=[1 -2*i]; d3=[1 3];

numh=conv(n1,n2); denh=conv(d1,conv(d2,d3));

sysh=tf(numh, denh)

sysh =

s^2 + 3 s + 2

----------------------

s^3 + 3 s^2 + 4 s + 12

Continuous-time transfer function.

>> sys=sysg/sysh

sys =

6 s^5 + 18 s^4 + 25 s^3 + 75 s^2 + 4 s + 12

-------------------------------------------

s^5 + 6 s^4 + 14 s^3 + 16 s^2 + 9 s + 2

Continuous-time transfer function.


>> pzmap(sys)

>> grid on

>>%Ejemplo 2.17
>> numg=[1]; deng=[500 0 0]; sysg=tf(numg, deng);

numh=[1 1]; denh=[1 2]; sysh=tf(numh, denh);

sys=series(sysg,sysh);

sys

sys =

s+1

------------------

500 s^3 + 1000 s^2

Continuous-time transfer function.


>> %Conexion en Paralelo

sys=parallel(sysg,sysh);

sys

sys =

500 s^3 + 500 s^2 + s + 2

-------------------------

500 s^3 + 1000 s^2

Continuous-time transfer function.

>>%Ejemplo 2.18
>> numg=[1]; deng=[500 0 0]; sysg=tf(numg,deng);

numh=[1 1]; denh=[1 2]; sysh=tf(numh, denh);

sys3=series(sysg,sysh);

sys=feedback(sys3,[1],-1)

sys =

s+1

--------------------------

500 s^3 + 1000 s^2 + s + 1

Continuous-time transfer function.

>> %Ejemplo 2.19


sys=feedback(sysg,sysh,-1)

sys =

s+2

--------------------------

500 s^3 + 1000 s^2 + s + 1

Continuous-time transfer function.

>>% Ejemplo 2.20


>>ng1=[1]; dg1=[1 10]; sysg1=tf(ng1,dg1);
ng2=[1]; dg2=[1 1]; sysg2=tf(ng2,dg2);
ng3=[1 0 1]; dg3=[1 4 4]; sysg3=tf(ng3, dg3);
ng4=[1 1]; dg4=[1 6]; sysg4=tf(ng4,dg4);
nh1=[1 1]; dh1=[1 2]; sysh1=tf(nh1, dh1);
nh2=[2]; dh2=[1]; sysh2=tf(nh2,dh2);
nh3=[1]; dh3=[1]; sysh3=tf(nh3,dh3);
sys1=sysh2/sysg4;
sys2=series(sysg3,sysg4);
sys3=feedback(sysg2,sysh1,+1);
sys4=series(sysg2,sys3);
sys5=feedback(sys4,sys1);
sys6=series(sysg1,sys5);
sys=feedback(sys6,[1])

sys =

s^2 + 3 s + 2
---------------------------------------------
s^5 + 14 s^4 + 48 s^3 + 101 s^2 + 228 s + 252

Continuous-time transfer function.

%Ejemplo 2.21
num=[5400]; den=[2 2.5 5402]; sys=tf(num, den);
t=[0:0.005:3];
[y,t]=step(sys,t);
plot(t,y),grid
xlabel('Time (seconds)')
ylabel('Wheel velocity')

También podría gustarte