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