laboratorio 2 contro automatico

27
universidad nacional de san Agustín escuela profesional de ingeniería eléctrica DOCENTE: ING. LUIS MERCADO ALUMNO: QUICAÑO QUISPE JESUS CUI: 20101583 CURSO: LAB. DE CONTROL 1

Upload: jesus-quicano

Post on 29-Sep-2015

256 views

Category:

Documents


13 download

DESCRIPTION

electrico

TRANSCRIPT

Informe #02 de laboratorio de control 1

universidad nacional de san Agustn escuela profesional de ingeniera elctrica2014Informe #02 de laboratorio de control 1DOCENTE: ING. LUIS MERCADOALUMNO: QUICAO QUISPE JESUSCUI: 20101583CURSO: LAB. DE CONTROL 1laboratorio de control 1

Laboratorio 2

Modelacin de sistemas utilizando MATLAB

2.1. Objetivos.-

Modelar sistemas lineales invariantes en el tiempo. Utilizar los diferentes comandos que proporciona MATLAB para realizar simulaciones de sistemas de control. Utilizar herramientas computacionales provistas por MATLAB para la conexin, conversin de modelos LTI.

2.2. Marco terico.-

MATLAB trabaja esencialmente con matrices numricas rectangulares (que pueden tener elementos complejos), lo cual implica el uso de vectores fila o columna. Por esta razn este paquete tiene una proyeccin hacia el control moderno (descrito a variables de estado) y es til para ilustrar las relaciones existentes entre las tcnicas clsicas y modernas de anlisis. Para ello, contiene un conjunto de rutinas de propsito general que permite modelar, analizar y simular cualquier tipo d sistema, adems, es capaz de trabajar con modelos lineales invariantes en el tiempo (LTI), los cuales son:

TF : modelo a funcin de transferencia ZPK : modelo ceros polos ganancia SS : modelo a espacio de estados FRD : modelo de respuesta a frecuencia

MATLAB realiza las diversas conexiones y conversiones entre este conjunto de modelos.

2.2.1. Funciones para la Conexin de Modelos LTI utilizando MATLAB.-

La librera de sistemas de control de Matlab cuenta con un conjunto de funciones para interconectar modelos para desarrollar concatenaciones de entrada salida, colocarlos en serie, paralelo y con realimentacin.

2.2.1.1. Conexin Serie.-

sys = series(sys1,sys2)conecta en serie dos modelos:

Es equivalente a multiplicacin: sys = sys2 * sys1

sys = series(sys1,sys2,outputs1,inputs2)

permite la siguiente conexin:

En donde outputs1 e inputs2 indican cuales salidas y1 de sys1 y cuales entradas u2 de sys2 deben ser conectadas. El modelo sys resultante tiene como entrada u y como salida y.

2.2.1.2. Conexin con Realimentacin.-

Considerando que el sistema de control realimentado es aquel que tiende a mantener una relacin preestablecida entre la salida y alguna entrada de referencia, comparndolas y utilizando la diferencia como medio de control. Matlab permite realizar dicha realimentacin con los siguientes comandos:

sys = feedback(sys1,sys2)

El modelo en lazo cerrado sys tiene un vector de entrada y otro de salida, y esta funcin determina una realimentacin negativa como la de la figura. Los modelos sys1 y sys2 deben ser continuos.

sys = feedback(sys1,sys2,feedin,feedout)

en la mayora de sistemas de control realimentado es comn la presencia de perturbaciones o seales que tienden a afectar adversamente el valor de la salida, pueden ser internas o externas. Esto implica seales que ingresan al sistema, pero que no se realimentan, as:

El vector feedin contiene ndices dentro del vector de entrada de sys1 y especifica cuales entradas u son afectadas en el lazo de realimentacin. Similarmente, feedout especifica cuales salidas y de sys1 son usadas en la realimentacin. El modelo LTI resultante sys tiene el mismo numero de entradas y salidas que sys1.

2.2.1.3. Conexiones mas frecuentes en Sistemas de Control.-

Cuando el comportamiento dinmico de un sistema no es satisfactorio, esto es, no cumple las especificaciones de respuesta transitoria y en estado estable a fin de obtener un funcionamiento satisfactorio es posible utilizar, compensacin en serie, que abreves rasgos implica colocar en serie con la planta un compensador cuya funcin de transferencia Gc puede implicar desde una variacin de ganancia hasta complejas redes de adelanto y atraso, etc. Esto es posible siempre y cuando exista realimentacin de tal forma que Gc procese la seal de error. Las conexiones ms comunes en los sistemas de control clsicos son:

Compensador Planta

GC(s) G(s)R(s) Y(s)

H(S)

Compensacin en Serie

G1(s) G(s)R(s) Y(s)

Gc(s)

H(s)

Compensacin de Retroalimentacin o en Paralelo

Generalmente, en el anlisis y diseo de sistemas de control se ha de tener una base de comparacin del desempeo de diversos sistemas de control, la misma que se configura especificando las seales de entrada de prueba particulares y comparando las respuestas de varios sistemas a estas seales de entrada. MATLAB permite utilizar seales de prueba tpicas para comparar sistemas, como seales paso, rampa, etc. Esta funcin reproduce una figura con la respuesta de sys a la entrada Paso:

step(sys)% Respuesta Escaln Unitario (paso)

2.2.2. Funciones para la Conversin de Modelos LTI utilizando MATLAB.-

Existen cuatro tipos de modelos linealmente invariantes en el tiempo LTI que pueden utilizarse con la librera de Sistemas de Control, que son TF (funcin de transferencia), ZPK (ceros, polos y ganancia), SS (espacio de estados) y FRD (respuesta en frecuencia). Es posible realizar la conversin de un modelo a otro, en forma explicita, para un modelo dado sys con la siguiente sintaxis:

sys = tf(sys)% Conversin a TFsys = zpk(sys)% Conversion a ZPKsys = ss(sys)% Conversion a SSsys = frd(sys, frequency)% Conversion a FRD

para el ltimo caso, frequency es un vector de frecuencias usada como argumento e entrada cuando se realiza la conversin al modelo FRD.

Por ejemplo:

Un modelo de espacio estados, para convertirse a un modelo ZPK:

sys = ss(-2,1,1,3)

zpk(sys)

Matlab en ocasiones realiza conversiones automticas ya que existen varios comandos que requieren de un modelo especfico como parmetro de entrada as que antes de realizar la funcin indicada por el comando realiza la conversin. Estas conversiones pueden ser utilizadas tanto para sistemas sencillos con una nica entrada y nica salida (SISO) como para sistemas de mltiples entradas y salidas (MIMO).

2.2.3. Conversin Continua/Discreta para modelos LTI.-

Los sistemas de control discreto difieren de los sistemas de control en tiempo continuo en que las seales en uno o ms puntos del sistema son, ya sea en forma de pulsos o un cdigo digital. Pueden ser sistemas de control de datos muestreados y de control digital, en el primer caso, el sistema nicamente recibe datos o informacin intermitente en instantes especficos, mientras que para el segundo caso implica el uso de una computadora o un controlador digital en el sistema. Es posible encontrar el equivalente discreto de una planta a fin de implementar un control digital, trabajando en el dominio de z, con un tiempo de muestreo adecuado.

Para discretizar de los modelos invariantes en el tiempo TF, SS o ZPK, es posible utilizar la instruccin:

sysd = c2d(sysc,Ts,metodo)

Donde:

sysd = sistema discreto

sysc = sistema continuo

Ts = periodo de muestreo en segundos

sysc = sistema continuo en el tiempo

Donde mtodo es el procedimiento de discretizacion y puede ser:

zohretenedor de orden cero

fohretenedor de primer orden

imp Discretizacion de impulso invariantetustin Aproximacin Bilinear Tustin

matchedMapeo de Polos y Ceros

Por defecto cuando el mtodo es omitido se usa el zoh.

Viceversa, para convertir un sistema discreto a uno continuo:

sysc = d2c(sysd,metodo)

En forma similar el mtodo de conversin utilizara el equivalente propio de zoh, tustin, o matched.

as como para los sistemas continuos en el tiempo se ingresan seales singulares para conocer el desempeo del mismo, aqu se usa por ejemplo, la seal paso discreta, con la siguiente instruccin:

step(sysd)% sysd = planta discretizada

2.3. Trabajo Preparatorio.-

Se tiene un circuito serie RLC alimentado por una fuente v(t) entrada y Vc(t) tensin en el capacitor de salida

2.3.1. Obtener la ecuacin diferencial que define el sistema

Para la obtencin de la ecuacin diferencial hacemos una malla en el circuito resultando:

Luego:

Reemplazando en la ecuacin:

La ecuacin diferencial resulta:

2.3.2. Obtener la funcin de transferencia del sistema.

Haciendo sumatoria de voltajes:(1) Hallando el voltaje en el capacitor:(2) Hallando la transformada de Laplace de (1) y (2)(3)(4) Despejando I(s) de (4) y reemplazando en (3)

La funcin de transferencia ser:

2.3.3. Obtener analticamente el modelo en variables de estado.

Aplicando las Leyes de Kirchhoff:

Organizando las ecuaciones:

En forma matricial:

2.3.4. Obtener analticamente Vc(t) para una entrada escaln unitario para valores de R, L y C asumidos por el estudiante. (Ntese que la entrada paso es la integral de una entrada impulso). Se tienen los valores de R=20, L=0.5h y C=0.01F

De la parte 2.3.2 se tiene que la funcin de transferencia ser:

Reemplazando los valores de R, L y C

Luego de la funcin de transferencia

Hallando las especificaciones de respuesta del sistema:

0.1

2.4 Trabajo Experimental

2.4.1 Obtenga el modelo en espacio de estado, zpk, respuesta en frecuencia si es posible del sistema del trabajo preparatorio.

SS: Modelo a espacios estados%Modelo a espacios de EstadosclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];A=tf(num,den);Ass=ss(A)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

a = x1 x2x1 -66.67 -2.778x2 4 0

b = u1x1 2x2 0

c = x1 x2 y1 0 1.389

d = u1 y1 0

Continuous-time model.

ZPK: Modelo ceros-polos-ganancia

%Modelo a ceros-polos-gananciaclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];B=tf(num,den);Bzp=zpk(B)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

Zero/pole/gain: 11.1111-------------------(s+66.5) (s+0.1671)

FRD: Modelo de respuesta de Frecuencia%Modelo respuesta de frecuenciaclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];B=tf(num,den);Bfr=frd(B,3)

Ingrese un valor para L=0.3Ingrese un valor para C=0.3Ingrese un valor para R=20

Frequency(rad/s) Response ---------------- -------- 3 5.864e-004 - 0.0555i

Continuous-time frequency response.

2.4.2 Obtener la respuesta en lazo abierto y cerrado para las entradas: impulso, paso, rampa, senoidal

Lazo Abierto

ENTRADA IMPULSO%Entrada ImpulsoclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];I=tf(num,den);impulse(I)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

ENTRADA PASO%Entrada PasoclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];I=tf(num,den);step(I)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

ENTRADA RAMPA%Entrada RampaclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];I=tf(num,den);t=0:0.3:10;u=t;lsim(I,u,t)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20ENTRADA SENOIDAL

ENTRADA SENOIDAL

%Entrada SenoidalclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];I=tf(num,den);

t=0:0.3:10;u=sin(t);lsim(I,u,t)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

Lazo Cerrado

ENTRADA IMPULSO

%Entrada ImpulsoclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];I=tf(num,den);feedback(I,1);impulse(I)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

ENTRADA PASO%Entrada PasoclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];P=tf(num,den);P=feedback(P,1);step(P)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

ENTRADA RAMPA%Entrada RampaclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];P=tf(num,den);P=feedback(P,1);t=0:0.3:10;u=t;lsim(P,u,t)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

ENTRADA SENOIDAL

%Entrada SenoidalclcL=input('ingrese un valor para L=');C=input('ingrese un valor para C=');R=input('ingrese un valor para R=');num=[1];den=[L*C R*C 1];P=tf(num,den);P=feedback(P,1);t=0:0.3:10;u=sin(t);lsim(P,u,t)

ingrese un valor para L=0.3ingrese un valor para C=0.3ingrese un valor para R=20

2.4.3 Obtenga la ecuacin diferencial que representa al sistema y la funcin de transferencia del siguiente circuito

Su ecuacin diferencial es:

; ; I=

Se toma la transformada de laplace:

I(s)R1+(s)R2

(s)

2.5 Informe

2.5.1 presente los resultados

2.5.2 Empleando lazos y estructuras de control de flujo, elabore un programa que permita obtener sobre un mismo grafico l respuesta escalon en lazo abierto para cinco valores diferentes del parmetro a del sistema dado por la siguiente funcin de transferencia

%Respuesta en escalon para cinco valores diferentesclcfor i=6:1:10num=[i];den=[1 4];G=tf(num,den);step(G)holdonend

PROGRAMA EN MATLAB SOBRE LA FORMULA DE MASON

function [Num,Den] = mason(NetFile,Start,Stop)

fid=fopen(NetFile); if (fid==-1)fprintf('\n*** File, %s, not found ***\n\n',NetFile)returnendNet=[]; line_number=0; Coeff_Names={}; while 1 line_number=line_number+1; x=fscanf(fid,'%d',3); Coeff=fscanf(fid,'%s\n',1); if isempty(x) breakendNet(line_number,:)=transpose(x); Coeff_Names{line_number}= Coeff; endfclose(fid); temp=size(Net); Number_Coeff=temp(1); [PathCoeffList,PathNodeList]=findpaths(Start,Stop,[],[],Net);LoopCoeffList=[]; LoopNodeList=[]; for index=1:Number_Coeff; [FoundLoops,FoundNodes]=findpaths(index,index,[],[],Net);LoopCoeffList=[LoopCoeffList;FoundLoops]; LoopNodeList=[LoopNodeList;FoundNodes]; end [LoopCoeffList,LoopNodeList]=RemoveDuplicateLoops(LoopCoeffList,LoopNodeList);temp=size(PathCoeffList); NumberPaths=temp(1);if (NumberPaths==0);fprintf('\n*** There are no paths connecting those nodes ***\n')returnendfor index=1:NumberPaths Coeff=PathCoeffList(index,:); P{index}.Coeff=Coeff(1:sum(Coeff>0)); Node=PathNodeList(index,:); P{index}.Node=[Node(1:sum(Coeff>0)),Stop]; endtemp=size(LoopCoeffList);NumberLoops=temp(1); L{1}.NumberLoops=NumberLoops; for index=1:NumberLoops Coeff=LoopCoeffList(index,:); L{1}.Coeff{index}=Coeff(1:sum(Coeff>0)); Node=LoopNodeList(index,:); L{1}.Node{index}=[Node(1:sum(Coeff>0)),Node(1)]; end=1; while 1 n=n+1; L{n}.NumberLoops=0; for first=1:L{1}.NumberLoops for second=1:L{n-1}.NumberLoops if not(AreTouchingLoops(L{1}.Node{first},L{n-1}.Node{second})) Duplicate=0;for index=1:L{n}.NumberLoops if IsSameLoop([L{1}.Coeff{first}, L{n-1}.Coeff{second}],L{n}.Coeff{index})Duplicate=1; endendif (Duplicate==0) L{n}.NumberLoops=L{n}.NumberLoops+1;

L{n}.Coeff{(L{n}.NumberLoops)}=[L{1}.Coeff{first}, L{n-1}.Coeff{second}];L{n}.Node{(L{n}.NumberLoops)}=[L{1}.Node{first}, L{n-1}.Node{second}];endendendendif (L{n}.NumberLoops==0) break endendfprintf('\n-- Network Info --\n')fprintf('Net File : ');fprintf(NetFile);fprintf('\n');fprintf('Start Node : %d\n',Start);fprintf('Stop Node : %d\n',Stop);fprintf('\n----- Paths -----\n')for pathn=1:length(P) fprintf('P%d : ',pathn); fprintf('%d ',P{pathn}.Coeff);fprintf('\n');endfor loop_order=1:length(L)-1 fprintf('\n- Order %d Loops -\n',loop_order) for loop_number=1:L{loop_order}.NumberLoops fprintf('L%d%d : ',loop_order,loop_number) fprintf('%d ',L{loop_order}.Coeff{loop_number})fprintf('\n')endendNum=''; for pathn=1:length(P) Num=sprintf('%s%s*(1', Num, CoeffToString(P{pathn}.Coeff)); % Pn*(1 ..for order=1:length(L)-1 if (rem(order,2)==1)Num=sprintf('%s-',Num);elseNum=sprintf('%s+',Num);endNum=[Num,PrintSumsNotTouching(L,order,P{pathn}.Node)];endNum=sprintf('%s)+',Num); % endNum=Num(1:length(Num)-1); Den='1'; for order=1:length(L)-1 % if (rem(order,2)==1)Den=sprintf('%s-',Den);elseDen=sprintf('%s+',Den);endDen=[Den,PrintSumsNotTouching(L,order,[9999999 999999])]; endfprintf('\nThe variables returned are strings describing\n')fprintf('the numerator and Denominator of the transfer equation.\n')fprintf('If you have the symbolic toolbox, use Denominator=sym(Denominator)\n');fprintf('and Numerator=sym(Numerator) to make these symbolic equations.\n')fprintf('You can now use simple(Numerator/Denominator) to boil the whole\n')fprintf('thing down. You could also use simple(Numerator) to simplify the\n')fprintf('Numerator on it'' own.\n\n')for coeff_num=length(Coeff_Names):-1:1; orig=sprintf('c%d',Net(coeff_num,1)); Den=strrep(Den,orig,Coeff_Names{coeff_num}); Num=strrep(Num,orig,Coeff_Names{coeff_num});end % function Touching=AreTouchingLoops(Nodes1,Nodes2)Loop1Length=sum(Nodes1>0);Loop2Length=sum(Nodes2>0);for first=1:Loop1Lengthfor second=1:Loop2Lengthif (Nodes1(first)==Nodes2(second))Touching=1;return;endendendTouching=0;function StrMult=CoeffToString(Coefficients)N=length(Coefficients); StrMult=sprintf('c%d',Coefficients(1)); for n=2:N StrMult=[StrMult, sprintf('*c'),sprintf('%d',Coefficients(n))];endfunction [PathUp,NodesUp]=findpaths(StartNode,StopNode,Path,Nodes,Net)

temp=size(Net);NumberCoeff=temp(1,1);PathUp=[];NodesUp=[];

for index=1:NumberCoeffif not(isempty(Nodes)) if (sum(Nodes==index)>1)PathUp=[];

returnendendend

if ((StartNode==StopNode) & (length(Path>1)))PathUp=Path;NodesUp=Nodes;

returnend

for index=1:NumberCoeffif (StartNode==Net(index,2)) [FoundPath,FoundNodes]=findpaths(Net(index,3),StopNode,[Path,Net(index,1)],[Nodes,StartNode],Net);if not(isempty(FoundPath)) PathUp=[PathUp;[FoundPath,zeros(1,NumberCoeff+1-length(FoundPath))]];NodesUp=[NodesUp;[FoundNodes,zeros(1,NumberCoeff+1-length(FoundPath))]];endendend

function Same=IsSameLoop(Loop1,Loop2)

Loop1Length=sum(Loop1>0); Loop2Length=sum(Loop2>0);

if (Loop1Length~=Loop2Length)Same=0;returnend

if (sum(abs(sort(Loop1)-sort(Loop2)))==0)Same=1; elseSame=0; %

function Str=PrintSumsNotTouching(L,order,Pnodes)

No_NonTouching=1; Str=('('); for n=1:L{order}.NumberLoops if not(AreTouchingLoops(Pnodes,L{order}.Node{n})) Str=sprintf('%s%s+',Str,CoeffToString(L{order}.Coeff{n}));No_NonTouching=0; % endendStr=Str(1:(length(Str)-1)); Str=sprintf('%s)',Str);

if No_NonTouching==1 end

function [LoopList,NodeList]=RemoveDuplicateLoops(LoopList,NodeList);

temp=size(LoopList); NumberLoops=temp(1);

first=1; while (first