Programa compensación en adelanto Matlab (fichero pdf)

Anuncio
Programa Compensación Adelanto
% Compensacion en adelanto
% Formato: adelanto(num,den,tipo)
% tipo: 'alfa'
Red adelanto método bisectriz
%
'vertical'
Red adelanto polo en vertical
%
'compen'
Red de adelanto por compensación
%
'pd'
Proporcional Derivativo
function [] = adelanto (num,den,tipo)
capa=input('Introduce coef amortiguamiento ');
wn=input('Introduce frecuencia natural ');
% Polos Dominantes
s1=-capa*wn+wn*sqrt(1-capa*capa)*i
ang=angle(polyval(num,s1)/polyval(den,s1))*180/pi;
% Contribucion angular Compensador
if ang<0
cang=ang+180
else
cang=180-ang
end
if(nargin == 2),
tipo='alfa';
end
%Por defecto método de la bisectriz
n=1;
1
continúa ...
2
% Red adelanto alfa min, Método de la bisectriz
if tipo(1) == 'a'
if cang > 60
pause % Dos controladores en cascada
n=2;
cang=cang/2;
cang
end
theta=180-angle(s1)*180/pi
gamma=0.5*(180-theta-cang)
zc=sin(gamma*pi/180)*wn/sin((180-theta-gamma)*pi/180);
pc=sin((gamma+cang)*pi/180)*wn/sin((180-theta-gamma-cang)*pi/180);
numc=[1 zc];
denc=[1 pc];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))^n/((abs(polyval(num,s1))*abs(polyval(numc,s1))^n));
pause
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
else
kc=kc
printsys(numc,denc,'s');
end
end
continúa ...
3
% Compensador en la Vertical
if (tipo(1) == 'v')
if cang > 60
pause % Dos controladores en cascada
n=2;
cang=cang/2;
cang
end
zc=-real(s1)
numc=[1 zc];
angnum=angle(polyval([1 zc],s1))*180/pi;
zp=-real(s1)+imag(s1)/tan((angnum-cang)*pi/180);
denc=[1 zp];
kc=abs(polyval(den,s1))*abs(polyval(denc,s1))^n/((abs(polyval(num,s1))*abs(polyval(numc,s1))^n));
kc=abs(kc);
if(n==2)
kc=sqrt(kc)
printsys(numc,denc,'s'); printsys(numc,denc,'s');
else
kc=kc
printsys(numc,denc,'s');
end
end
continúa ...
4
% CONTROLADOR PD
if tipo(1) == 'p'
zc=-real(s1)+imag(s1)/tan(cang*pi/180);
numc=[1 zc]
denc=[1];
kc=polyval(den,s1)/((polyval(numc,s1)*polyval(num,s1)));
kc=abs(kc)
% printsys(numc,[],'s');
end
end
%% Comprobación
if n==1
[numt,dent]=cloop(kc*conv(num,numc),conv(den,denc));
elseif n==2
[numt,dent]=cloop(kc*kc*conv(conv(num,numc),numc),conv(conv(den,denc),denc));
end
roots(dent)
5
Descargar