Escolar Documentos
Profissional Documentos
Cultura Documentos
Diagrama de bode
Respuesta en el tiempo
Donde
. Si definimos
, entonces tendremos:
Donde:
Determinamos la ganancia
Donde
, por lo tanto:
De donde obtenemos:
Con
verificando:
implica que el sistema es muy oscilatorio. Por tanto, satisfacer la especificacin en estado
estable produce un desempeo deficiente de la respuesta transitoria)
Bode Diagram
Gm = Inf dB (at Inf rad/sec) , Pm = 18 deg (at 6.17 rad/sec)
Magnitude (dB)
50
-50
Phase (deg)
-100
-90
-135
-180
-1
10
10
10
10
Frequency (rad/sec)
Diagramas de bode de
, margen de fase
y se debe dar en
Remplazando el valor de
, asumimos que el
, obtenemos:
La frecuencia
Cero:
Polo:
El valor de
determinamos de la relacin
BodeSystem:
Diagramsys
Frequency (rad/sec): 6.16
Magnitude (dB): 25.1
Magnitude (dB)
50
0
System: sys
Frequency (rad/sec): 6.16
Magnitude (dB): -19.9
-50
-100
45
System: sys
Frequency (rad/sec): 6.16
Phase (deg): 32
Phase (deg)
0
-45
-90
System: sys
Frequency (rad/sec): 6.16
Phase (deg): -162
-135
-180
-1
10
10
10
10
10
Frequency (rad/sec)
Magnitude (dB)
50
0
-50
-100
Phase (deg)
-150
-90
-135
-180
System: untitled1
Frequency (rad/sec): 6.16
Phase (deg): -130
-1
10
10
10
10
10
Frequency (rad/sec)
Del diagrama de bode concluimos que por el efecto de la magnitud del compensador de
adelanto no se cumple los requerimientos de margen de fase (
).
BodeSystem:
Diagramsys
Frequency (rad/sec): 6.16
Magnitude (dB): 25.1
Magnitude (dB)
50
0
System: sys
Frequency (rad/sec): 6.16
Magnitude (dB): -19.9
-50
-100
45
System: sys
Frequency (rad/sec): 6.16
Phase (deg): 32
Phase (deg)
0
-45
-90
System: sys
Frequency (rad/sec): 6.16
Phase (deg): -162
-135
-180
-1
10
10
10
10
10
Frequency (rad/sec)
Remplazando el valor de
, obtenemos:
se puede calcular:
Que en dB es igual a:
es
Bode Diagram
M a g n itu d e ( d B )
50
System: sys
Frequency (rad/sec): 8.88
Magnitude (dB): -6.04
-50
P h a s e (d e g )
-100
-90
-135
-180
10
System: sys
Frequency (rad/sec): 8.88
Phase (deg): -167
-1
10
10
10
Frequency (rad/sec)
ocurre en
Cero:
Polo:
El valor de
determinamos de la relacin
, donde:
M a gn itu d e ( d B)
35
30
25
Ph a s e (d e g )
20
40
System: sys
Frequency (rad/sec): 8.89
Phase (deg): 37
30
20
10
0
-1
10
10
10
10
Frequency (rad/sec)
Figura a.
La grafica de Bode del sistema y del compensador, figura b.
10
Bode Diagram
M agnitude (dB)
50
System: sys
Frequency (rad/sec): 8.98
Magnitude (dB): 26.1
0
System: sys
Frequency (rad/sec): 8.98
Magnitude (dB): -26.2
-50
-100
Phas e (deg)
-150
45
System: sys
Frequency (rad/sec): 8.89
Phase (deg): 37
0
-45
-90
System: sys
Frequency (rad/sec): 8.89
Phase (deg): -167
-135
-180
-1
10
10
10
10
10
Frequency (rad/sec)
Figura N b.
La funcin de transferencia del sistema compensado es:
Magnitude (dB)
50
0
-50
-100
Phas e (deg)
-150
-90
-135
-180
-1
10
10
10
10
10
Frequency (rad/sec)
Sistema no compensado:
Lazo abierto
Lazo cerrado
Sistema compensado:
Lazo abierto
Lazo cerrado
1.4
1.2
A m p litu de
0.8
0.6
0.4
0.2
Time (sec)
La respuesta ante una entrada rampa para los sistemas no compensado y compensado:
Step Response
5
4.5
4
3.5
Amplitude
3
2.5
2
1.5
1
0.5
0
0.5
1.5
2.5
3.5
4.5
Time (sec)
Si definimos
Verificando el cumplimiento de
es:
Los diagramas de bode para este nuevo valor de constante tenemos en la siguiente
figura c. para la funcin de transferencia siguiente
Bode Diagram
Gm = 8.79 dB (at 3.16 rad/sec) , Pm = 17.7 deg (at 1.86 rad/sec)
Magnitude (dB)
100
50
0
-50
-100
Phas e (deg)
-150
-90
-135
-180
-225
-270
10
-2
-1
10
10
10
10
10
Frequency (rad/sec)
Figura N c.
La figura N 2.32, muestra las curvas de magnitud y de fase del sistema y de
.A
partir de estas diagramas, vemos que los mrgenes de fase y de ganancia del sistema son
y
, respectivamente.
adelanto debe contribuir al ngulo de fase requerido. Tomando en cuenta que la adicin de
, debido a este
Remplazando el valor de
, obtenemos:
De donde obtenemos:
Que en dB es igual a:
es
Bode Diagram
100
System: sys
Frequency (rad/sec): 2.71
Magnitude (dB): -6.1
Magnitude (dB)
50
0
-50
-100
Phase (deg)
-150
-90
-135
-180
-225
-270
-2
10
-1
10
10
10
10
10
Frequency (rad/sec)
Cero:
Polo:
El valor de
determinamos de la relacin
, si asumimos
Bode Diagram
Magnitude (dB)
25
20
15
Phase (deg)
10
40
System: sys
Frequency (rad/sec): 2.71
Phase (deg): 37.3
30
20
10
0
10
-1
10
10
10
Frequency (rad/sec)
Bode Diagram
100
System: sys
Frequency (rad/sec): 2.7
Magnitude (dB): 18.1
Magnitude (dB)
50
0
System: sys
Frequency (rad/sec): 2.7
Magnitude (dB): -5.99
-50
-100
Phase (deg)
-150
90
0
System: sys
Frequency (rad/sec): 2.7
System: sys
Phase (deg): 37.3
Frequency (rad/sec): 2.7
Phase (deg): -175
-90
-180
-270
-2
10
10
-1
10
10
10
10
Frequency (rad/sec)
Magnitude (dB)
50
0
-50
-100
-150
-90
Phase (deg)
-135
-180
-225
-270
-1
10
10
10
Frequency (rad/sec)
10
10
Sistema no compensado:
Lazo abierto
Lazo cerrado
Sistema compensado:
Lazo abierto
Lazo cerrado
Step Response
1.4
1.2
Amplitude
0.8
0.6
0.4
0.2
10
12
Time (sec)
La respuesta ante una entrada rampa para los sistemas no compensado y compensad:
Step Response
10
9
8
7
Amplitude
6
5
4
3
2
1
0
10
Time (sec)
3.4. Proponer un programa en MATLAB que realice la compensacin para los casos
Compensacin en adelanto
clc, clear all,
disp('===================================================================
')
disp('
INGRESO DE DATOS: ')
disp('===================================================================
')
ECBODE=20*log10(k*abs(prod(ceros1))/abs(prod(polos1)));
syms x w;
for m=1:length(ceros) % SUMA LOS 20LOGS DEL NUMERADOR
if ceros(m)==0
ECBODE=ECBODE+20*log10(sqrt((w)^2));
else
ECBODE=ECBODE+20*log10(sqrt(1+(w/ceros(m))^2));
end
end
for m=1:length(polos) % RESTA LOS 20LOGS DEL NUMERADOR
if polos(m)==0
ECBODE=ECBODE-20*log10(sqrt((w)^2));
else
ECBODE=ECBODE-20*log10(sqrt(1+(w/polos(m))^2));
end
end
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE BODE PARA HALLAR WF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ECWBODEN=k*abs(prod(ceros1))/abs(prod(polos1));
ECWBODEN=1;
syms x w;
for m=1:length(ceros) % SUMA LOS 20LOGS DEL NUMERADOR
if ceros(m)==0
ECWBODEN=ECWBODEN*(sqrt((w)^2));
else
ECWBODEN=ECWBODEN*(sqrt(1+(w/ceros(m))^2));
end
end
ECWBODED=1;
for m=1:length(polos) % RESTA LOS 20LOGS DEL NUMERADOR
if polos(m)==0
ECWBODED=ECWBODED*(sqrt((w)^2));
else
ECWBODED=ECWBODED*(sqrt(1+(w/polos(m))^2));
end
end
ECWBODE=(ECWBODEN/ECWBODED)^2(((k*abs(prod(ceros1))/abs(prod(polos1))))^-1)^2;
WFFS=sort(double(solve(ECWBODE)));
WF1R=imag(WFFS);
WF11=[];
for c=1:length(WFFS)
if and(0<=WF1R(c),WF1R(c)<=10^-5)
WF11=[WF11 WFFS(c)]; %solo soluciones reales
end
end
if length(WF11)==3
WF=sum(abs(WF11))/2;
else
if length(WF11)==0
WF=[];
else
end
WF=abs(max(WF11(end)));
end
WF=abs(WF);
if 10^15<WF
WF=[];
end
disp(['Frecuencia para el margen de fase: ' num2str(WF)])
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE ANG. DE BODE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ECANGBODE=0;
syms x w;
for m=1:length(ceros)
if ceros(m)==0
ECANGBODE=ECANGBODE+pi/2;
else
ECANGBODE=ECANGBODE+atan(-w/ceros(m));
end
end
for m=1:length(polos)
if polos(m)==0
ECANGBODE=ECANGBODE-pi/2;
else
ECANGBODE=ECANGBODE-atan(-w/polos(m));
end
end
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE ANG. DE BODE PARA HALLAR WG
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ECANGBODE1=-pi;
ECANGBODE2=0;
syms x w;
for m=1:length(ceros)
if ceros(m)==0
ECANGBODE1=ECANGBODE1-pi/2;
else
ECANGBODE2=(ECANGBODE2+(-w/ceros(m)))/(1-ECANGBODE2*(w/ceros(m))); %Teorema de suma de Arctgs
ECANGBODE2=factor(ECANGBODE2);
ECANGBODE2=simplify(ECANGBODE2);
end
end
ECANGBODE21=0;
for m=1:length(polos)
if polos(m)==0
ECANGBODE1=ECANGBODE1+pi/2;
else
ECANGBODE21=(ECANGBODE21+(-w/polos(m)))/(1-ECANGBODE21*(w/polos(m))); %Teorema de suma de Arctgs
ECANGBODE21=factor(ECANGBODE21);
ECANGBODE21=simplify(ECANGBODE21);
end
end
ECANGBODE22=simplify(ECANGBODE2-ECANGBODE21);
WG1=sort(double((solve(ECANGBODE22-tan(ECANGBODE1)))));
WG
WG1R=imag(WG1);
WG11=[];
for c=1:length(WG1)
if and(0<=WG1R(c),WG1R(c)<=10^-5)
WG11=[WG11 WG1(c)]; %solo soluciones reales
end
end
if length(WG11)==3
WG=sum(abs(WG11))/2;
else
if length(WF11)==0
WF=[];
else
WG=abs(max(WG11(end)));
end
end
% soluciones de
WG=abs(WG);
if 10^15<WG
WG=[];
end
disp(['Wg: Frecuencia para el margen de ganancia: ' num2str(WG)])
MG=-subs(ECBODE,WG); % El signo menos para indicar que el MG es positivo
o negativo (despues de wf)
disp(['MG: Margen de Ganancia: ' num2str(MG)])
MF=-(-180-subs(ECANGBODE,WF)*180/pi);
disp(['MF: Margen de Fase: ' num2str(MF)]) % el signo menos para indicar
si el MF es positivo o negativo y -180 para restar y ver solo el margen
de fase
disp('FIGURA 1: Diagrama de bode de la Funcin sin compensar ')
figure (1),
bode(PlantaLA),
legend('Sin Compensar'), grid
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE NIQUIST
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ECNIQUIST=k*prod(ceros1)/prod(polos1);
syms x w;
for m=1:length(ceros)
if ceros(m)==0
ECNIQUIST=ECNIQUIST*sqrt(w^2);
else
ECNIQUIST=ECNIQUIST*sqrt(1+(w/ceros(m))^2);
end
end
for m=1:length(polos)
if polos(m)==0
ECNIQUIST=ECNIQUIST/sqrt(w^2);
else
ECNIQUIST=ECNIQUIST/sqrt(1+(w/polos(m))^2);
end
end
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE NICHOLS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ECNICHOLS=20*log10((ECNIQUIST^2/(1+2*ECNIQUIST*cos(ECANGBODE)
+ECNIQUIST^2))^0.5);
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DEL ANGULO DE NICHOLS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ECANGNICHOLS=ECANGBODE-atan(ECNIQUIST*sin(ECANGBODE)/
(1+ECNIQUIST*cos(ECANGBODE)));
disp('===================================================================
')
disp('
Caracteristicas Deseadas: ')
disp('===================================================================
')
disp(['Kv: Coeficiente de Error Estatico: ' num2str(KVc)])
disp(['MG: Margen de Ganancia: ' num2str(MGc)])
disp(['MF: Margen de Fase: ' num2str(MFc)])
disp('===================================================================
')
disp('===================================================================
')
disp('2: Calcule el valor del margen de fase para G1(s)=K.G(s):
')
disp('===================================================================
')
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ECUACION DE BODE PARA HALLAR WF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ECWBODEN=k*abs(prod(ceros1))/abs(prod(polos1));
ECWBODEN=1;
syms x w;
for m=1:length(ceros) % SUMA LOS 20LOGS DEL NUMERADOR
if ceros(m)==0
ECWBODEN=ECWBODEN*(sqrt((w)^2));
else
ECWBODEN=ECWBODEN*(sqrt(1+(w/ceros(m))^2));
end
end
ECWBODED=1;
for m=1:length(polos) % RESTA LOS 20LOGS DEL NUMERADOR
if polos(m)==0
ECWBODED=ECWBODED*(sqrt((w)^2));
else
ECWBODED=ECWBODED*(sqrt(1+(w/polos(m))^2));
end
end
ECWBODE=(ECWBODEN/ECWBODED)^2(((K*k*abs(prod(ceros1))/abs(prod(polos1))))^-1)^2;
WFFS=sort(double(solve(ECWBODE)));
WF1R=imag(WFFS);
WF11=[];
for c=1:length(WFFS)
if and(0<=WF1R(c),WF1R(c)<=10^-5)
WF11=[WF11 WFFS(c)]; %solo soluciones reales
end
end
if length(WF11)==3
WFK=sum(abs(WF11))/2;
else
if length(WF11)==0
WFK=[];
else
WFK=abs(max(WF11(end)));
end
end
WFK=abs(WFK);
if 10^15<WFK
WFK=[];
end
disp(['Frecuencia para el margen de fase: ' num2str(WFK)])
MFK=-(-180-subs(ECANGBODE,WFK)*180/pi);
disp(['MF: Margen de Fase con Ganancia K: ' num2str(MFK)]) % el signo
menos para indicar si el MF es positivo o negativo y -180 para restar y
ver solo el margen de fase
disp('===================================================================
')
disp(['3: El MF debe ser al menos: ',num2str(MFc)])
disp('===================================================================
')
disp(['Entonces se requiere: ', num2str(MFc), ' - ', num2str(MFK), ' = ',
num2str(MFc-MFK)])
disp(['PHIm = ', num2str(MFc-MFK)])
disp('Considerando el cambio de la frecuecia de cruce de ganancia
suponemos:')
%aume=ceil((MFc-MFK)/10)*10-round(MFc-MFK);
aume=input('Ingrese cuantos grados se va adicionar (5 a 12): ');
disp(['Se Puede Aumentar 5 ~ 12; ', num2str(round(MFc-MFK)), ' + ' ,
num2str(aume) ' = ', num2str(aume+round(MFc-MFK)) ])
%PHIm=ceil((MFc-MFK)/10)*10;
%PHIm=37
PHIm=aume+round(MFc-MFK);
disp('===================================================================
')
disp(['4: Hallamos alfa, a partir del valor PHIm = ', num2str(PHIm)])
disp('===================================================================
')
disp('alfa = (1-sin(PHIm))/(1+sin(PHIm))')
disp(['alfa = (1-sin(', num2str(PHIm) ,'))/(1+sin(',
num2str(PHIm) ,'))'])
alfa=(1-sind(PHIm))/(1+sind(PHIm));
disp(['alfa = ', num2str(alfa)])
disp('Determinamos la fecuencia a la cual la magnitud del sistema G1(s)
es igual:')
disp('-20*log10(1/sqrt(alfa))')
MG1=-20*log10(1/sqrt(alfa));
disp(['-20*log10(1/sqrt(', num2str(alfa), '))', ' = ', num2str(MG1)])
% ECUACION DE BODE
[z,p,k]=tf2zp(num,den);
ceros=roots(num); ceros1=ceros; for d=1:length(ceros1); if ceros1(d)==0,
ceros1(d)=1; end,end % Con el for se reemplaza los ceros por unos
polos=roots(den); polos1=polos; for d=1:length(polos1); if polos1(d)==0,
polos1(d)=1; end,end
ECBODE1=20*log10(K*k*abs(prod(ceros1))/abs(prod(polos1)));
syms x w;
for m=1:length(ceros) % SUMA LOS 20LOGS DEL NUMERADOR
if ceros(m)==0
ECBODE1=ECBODE1+20*log10(sqrt((w)^2));
else
ECBODE1=ECBODE1+20*log10(sqrt(1+(w/ceros(m))^2));
end
end
for m=1:length(polos) % RESTA LOS 20LOGS DEL NUMERADOR
if polos(m)==0
ECBODE1=ECBODE1-20*log10(sqrt((w)^2));
else
ECBODE1=ECBODE1-20*log10(sqrt(1+(w/polos(m))^2));
end
end
ECBODE1=ECBODE1-MG1;
WFFS=sort(double(solve(ECBODE1)));
WF1R=imag(WFFS);
WF11=[];
for c=1:length(WFFS)
if and(0<=WF1R(c),WF1R(c)<=10^-5)
WF11=[WF11 WFFS(c)]; %solo soluciones reales
end
end
if length(WF11)==3
WM=sum(abs(WF11))/2;
else
if length(WF11)==0
WM=[];
else
WM=abs(max(WF11(end)));
end
end
WM=abs(WM);
if 10^15<WM
WM=[];
end
disp(['Frecuencia para esta Magnitud es: ' num2str(WM)])
disp('A esta nueva frecuencia w=wm, le corresponde la fase mxima PHIm:')
disp(['Wm=1/(T*sqrt(alfa)) = ', num2str(WM)])
disp('===================================================================
')
disp('5: Determinar las frecuencias de esquina del comp. Adelanto')
disp('===================================================================
')
CERO=WM*sqrt(alfa);
disp(['CERO: 1/T = Wm*sqrt(alfa) = ', num2str(WM),'*sqrt(',
num2str(alfa), ') = ' num2str(CERO)])
POLO=WM/sqrt(alfa);
disp(['POLO: 1/alfa*T = Wm/sqrt(alfa) = ', num2str(WM),'/sqrt(',
num2str(alfa), ') = ' num2str(POLO)])
disp(' ')
disp('El Compensador en Adelanto queda determinado: ')
disp('Gc(s)=Kc*alfa*(Ts+1)/(alfa*Ts+1) = Kc*(s+1/T)/(s+1/alfaT) ')
disp(['Gc(s)=Kc*(s+', num2str(CERO), ')/(s+', num2str(POLO), ')'])
Kc=K/alfa;
disp(['Kc = K/alfa = ', num2str(K), '/', num2str(alfa) , ' = ',
num2str(Kc)])
Gc=tf(Kc*[1 CERO],[1 POLO]);
disp(' ')
disp('El Compensador queda: ')
Gc
disp(' ')
disp('FIGURA 2: La Grafica de bode del Compensador en Adelanto')
figure (2), bode(Gc), grid
disp('FIGURA 3: La Grafica de bode del Sistema y del Compensador')
figure (3), bode(PlantaLA,K*PlantaLA,Gc), grid, legend('Sin
Compensar','Con ganancia K','Compensador en Adelanto')
disp('===================================================================
')
disp('6: EL SISTEMA COMPENSADO QUEDA:')
disp('===================================================================
')
disp('LAZO ABIERTO')
PlantaCLA=series(Gc,PlantaLA)
disp('LAZO CERRADO')
PlantaCLC=feedback(PlantaCLA,Realim)
disp('FIGURA 4: La Grafica de bode del Sistema, del Compensador y del
Sistema Compensado')
figure (4), bode(PlantaLA,K*PlantaLA,Gc,PlantaCLA), grid, legend('Sin
Compensar','Con ganancia K','Compensador en Adelanto','Sistema
Compensado')
disp('FIGURA 5: Rpta. Escalon Sin Compensar y Compensado')
figure (5), step(PlantaLC,PlantaCLC), grid, legend('Sin
Compensar','Compensado en Adelanto')
disp('FIGURA 6: Rpta. Rampa Sin Compensar y Compensado')
figure (6), step(series(PlantaLC,integr),series(PlantaCLC,integr)), hold
on, plot(0:0.1:10,0:0.1:10,'-r'), grid, legend('Sin
Compensar','Compensado en Adelanto','Entrada Rampa'), axis([0 10 0 10]),
hold off
disp('===================================================================
')
disp('
Caracteristicas Finales del Sistema: ')
disp('===================================================================
')
[Gmc,Pmc,Wgc,Wpc] = margin(PlantaCLA);
disp(['MP = ', num2str(Pmc)]);
disp(['MG = ', num2str(20*log10(Gmc))]);
Compensacin en atraso
Compensacin atraso adelanto.