function [B,J,Kt,Rf,Lf]=parametrosMotorCampo() labels=['B','J','Kt','Rf (Ohm)','Lf (H)']; vini=['1','2','3','4','5']; valfinal=x_mdialog('Entre parámetros físicos',labels,vini) B=evstr(valfinal(1)) J=evstr(valfinal(2)) Kt=evstr(valfinal(3)) Rf=evstr(valfinal(4)) Lf=evstr(valfinal(5)) function [H] =crearSistemaMotorCampo(B,J,Kt,Rf,Lf) [lhs,rhs]=argn(0); if rhs<=1 then [B,J,Kt,Rf,Lf]=parametrosMotorCampo(); N=Kt/(J*Lf); D=poly([0 (B/J)*Rf/Lf (Rf/Lf)+B/J 1 ],'s','c'); H = syslin('c',N/D) printf("escriba H y presione enter. Despues escriba resume y enter") pause else N=Kt/(J*Lf); D=poly([0 (B/J)*Rf/Lf (Rf/Lf)+B/J 1 ],'s','c'); H = syslin('c',N/D) end function [B,J,Kt,Kv,Ra,La]=parametrosMotorArmadura() labels=['B','J','Kt','Kv','Ra (Ohm)','La (H)']; vini=['1','2','3','4','5','6']; valfinal=x_mdialog('Entre parámetros físicos',labels,vini) B=evstr(valfinal(1)) J=evstr(valfinal(2)) Kt=evstr(valfinal(3)) Kv=evstr(valfinal(4)) Ra=evstr(valfinal(5)) La=evstr(valfinal(6)) function [H] =crearSistemaMotorArmadura(B,J,Kt,Kv,Ra,La) [lhs,rhs]=argn(0); if rhs<=1 then [B,J,Kt,Kv,Ra,La]=parametrosMotorArmadura(); end N=Kt; D=poly([0 (Ra*B+Kv*Kt) (La*B+Ra*J) La*J ],'s','c'); H = syslin('c',N/D) printf("escriba H y presione enter. Despues escriba resume y enter") pause function [A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5,B6]=coeficientesnumeradordenominador() labels=['NS0','NS1','NS2','NS3','NS4','NS5','DS0','DS1','DS2','DS3','DS4','DS5']; vini=['5','2.5','0','0','0','0','0','1','7','11','5','0']; valfinal=x_mdialog('coeficientes N=numerador D=denominador',labels,vini) A1=evstr(valfinal(1)) A2=evstr(valfinal(2)) A3=evstr(valfinal(3)) A4=evstr(valfinal(4)) A5=evstr(valfinal(5)) A6=evstr(valfinal(6)) B1=evstr(valfinal(7)) B2=evstr(valfinal(8)) B3=evstr(valfinal(9)) B4=evstr(valfinal(10)) B5=evstr(valfinal(11)) B6=evstr(valfinal(12)) function [H] =crearFuncionTransferencia (A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5,B6) [lhs,rhs]=argn(0); if rhs<=1 then [A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5,B6]=coeficientesnumeradordenominador(); end N=poly([A1 A2 A3 A4 A5 A6],'s','c'); D=poly([B1 B2 B3 B4 B5 B6],'s','c'); H = syslin('c',N/D) printf("escriba H y presione enter. Despues escriba resume y enter") pause function [k1,A,B,numCeros,numPolos]=cerosyPolos() labels=['valor constante','cero-1','cero-2','cero-3','cero-4','cero-5','polo1','polo2','polo3','polo4','polo5']; vini=['1','-2','','','','','-1+%i','-1-%i','-5','','']; valfinal=x_mdialog('Valores de ceros y polos de la funcion',labels,vini) numPolos=0;numCeros=0; k1=evstr(valfinal(1)) A=zeros(0); for i = 1:5, if valfinal(i+1)<>'' then A(numCeros+1)=evstr(valfinal(i+1)); numCeros=numCeros+1; end ,end B=zeros(0); for i=1:5, if valfinal(i+6)<>'' then B(numPolos+1)=evstr(valfinal(i+6)); numPolos=numPolos+1; end ,end function [H] =crearFuncionTransferenciaPolosCeros(k1,A,B,numCeros,numPolos) [lhs,rhs]=argn(0); if rhs<=1 then [k1,A,B,numCeros,numPolos]=cerosyPolos(); end s=poly(0,"s"); N=k1; for i=1:numCeros, N=N*(s-A(i)); ,end D=1; for i=1:numPolos, D=D*(s-B(i)); ,end N=real(N); D=real(D); H=syslin('c',N/D) printf("escriba H y presione enter. Despues escriba resume y enter") pause function []=respuestaImpulso(H,t) [lhs,rhs]=argn() if rhs<=1 then t=[0:0.1:50]; end; y=csim('impuls',t,H); xbasc(); plot(t,y); function []=respuestaPaso(H,t) [lhs,rhs]=argn(0); if rhs<=1 then t=[0:0.01:50]; end; y=csim('step',t,H); xbasc(); plot(t,y); function []=dibujarBode(H,F,step) xbasc(); [lhs,rhs]=argn(0); if rhs<=1 then bode(H); else if rhs<=2 then bode(H,F); else if rhs<=3 then bode(H,F,step); end end end function []=dibujarBodeComplementario(H,Fmin,Fmax,step) xbasc(); [lhs,rhs]=argn(0); if rhs<=1 then bode(-H); else if rhs<=3 then bode(-H,[F]); else bode(-H,F,step); end end function []=dibujarRootLocus(H,k) xbasc(); [lhs,rhs]=argn(0); if rhs<=1 then evans(H); else evans(H,k) end; function []=dibujarRootLocusComplementario(H,k) xbasc(); [lhs,rhs]=argn(0); if rhs<=1 then evans(-H); else evans(-H,-k) end; function [r]=tablaRouth(H,k) [lhs,rhs]=argn(0); if rhs <=1 then k=poly(0,'k'); end; r= routh_t(H,k) [nf,nc]=size(r); for i=1:nf; for j=1:nc; s(i,j)=pol2str(r(i,j)); if r(i,j)==0 then s(i,j)='0' ;end // mprintf("%s ",s); ;end // mprintf("\n") ;end printf("escriba s y presione enter. Despues escriba resume y enter") pause function[]=dibujarNyquist(H,fmin,fmax,step) xbasc() [lhs,rhs]=argn(0); if rhs<=1 then nyquist(H); else if rhs<=3 then nyquist(H,F) else nyquist(H,F,step) end end function[]=dibujarNyquistComplementario(H,fmin,fmax,step) xbasc() [lhs,rhs]=argn(0); if rhs<=1 then nyquist(-H); else if rhs<=3 then nyquist(-H,F) else nyquist(-H,F,step) end end function[t]=crearTiempo() labels=['Tiempo inicial','Incremento Tiempo','Tiempo Final']; vitie=['0','0.1','10']; valfinal=x_mdialog('Entrar Tiempos',labels,vitie) ti=evstr(valfinal(1)) At=evstr(valfinal(2)) tf=evstr(valfinal(3)) t=[ti:At:tf] function[F]=crearFrecuencias() labels=['Frecuencia mínima','Frecuencia máxima']; vifcia=['0.001','1000']; valfinal=x_mdialog('Entrar Frecuencias',labels,vifcia) Fmin=evstr(valfinal(1)) Fmax=evstr(valfinal(2)) F=[Fmin,Fmax] function[step]=crearPaso() labels=['Paso']; vifcia=['10']; valfinal=x_mdialog('Entrar Paso',labels,vifcia) paso=evstr(valfinal(1)) step=paso function[Motores]=crearMenu() submenus=['Motor Armadura','Motor Campo','Funcion de transferencia',... 'Funcion de transferencia polos y ceros',... 'Respuesta Impulso','Respuesta Impulso con Tiempo',... 'Respuesta Paso','Respuesta Paso con Tiempo',... 'Bode', 'Bode con Frecuencias',... 'Bode con Frecuencias y Paso',... 'Bode Complementario', 'Bode Complementario con Frecuencias',... 'Bode Complementario con Frecuencias y Paso',... 'Nyquist', 'Nyquist con Frecuencias',... 'Nyquist con Frecuencias y Paso',... 'Nyquist Complementario', 'Nyquist Complementario con Frecuencias',... 'Nyquist Complementario con Frecuencias y Paso',... 'Tabla de Routh-Hurwitz' ] funciones=['H=crearSistemaMotorArmadura()';... 'H=crearSistemaMotorCampo()';... 'H=crearFuncionTransferencia()';... 'H=crearFuncionTransferenciapolosceros()';... 'respuestaImpulso(H)';... 'respuestaImpulsoTiempo(H)';... 'respuestaPaso(H)';... 'respuestaPasoTiempo(H)';... 'dibujarBode(H)';... 'dibujarBodeFrecuencias(H)';... 'dibujarBodeFrecuenciasconpaso(H)';... 'dibujarBodeComplementario (H)';... 'dibujarBodecomplementarioFrecuencias(H)';... 'dibujarBodecomplementarioFrecuenciasconpaso(H)';... 'dibujarNyquist(H)';... 'dibujarNyquistFrecuencias(H)';... 'dibujarNyquistFrecuenciasconpaso(H)';... 'dibujarNyquistComplementario (H)';... 'dibujarNyquistcomplementarioFrecuencias(H)';... 'dibujarNyquistcomplementarioFrecuenciasconpaso(H)';... 'tablaRouth(H)'] addmenu('Motores',submenus) Motores=[funciones] function[]=elegir() H=crearSistemaMotorCampo(1,2,3,4,5); opciones=['Motor Armadura','Motor Campo','Función de Transferencia',... 'Función de Transferencia polos y ceros',... '<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>',... 'Respuesta Impulso','Respuesta Impulso con Tiempo',... 'Respuesta Paso','Respuesta Paso con Tiempo',... 'Bode', 'Bode con Frecuencias',... 'Bode con Frecuencias y Paso',... 'Bode Complementario', 'Bode Complementario con Frecuencias',... 'Bode Complementario con Frecuencias y Paso',... 'Nyquist', 'Nyquist con Frecuencias',... 'Nyquist con Frecuencias y Paso',... 'Nyquist Complementario', 'Nyquist Complementario con Frecuencias',... 'Nyquist Complementario con Frecuencias y Paso',... 'Tabla de Routh-Hurwitz' ] n=1; while n<>0, n=x_choose(opciones,'Escoja una opción'); if n==1 then H=crearSistemaMotorArmadura();end if n==2 then H=crearSistemaMotorCampo();end if n==3 then H=crearFuncionTransferencia();end if n==4 then H=crearFuncionTransferenciaPolosCeros();end if n==6 then respuestaImpulso(H);end if n==7 then t=crearTiempo();respuestaImpulso(H,t);end if n==8 then respuestaPaso(H);end if n==9 then t=crearTiempo();respuestaPaso(H,t);end if n==10 then dibujarBode(H);end if n==11 then F=crearFrecuencias();dibujarBode(H,F);end if n==12 then F=crearFrecuencias();step=crearPaso();dibujarBode(H,F,step);end if n==13 then dibujarBodeComplementario(H);end if n==14 then F=crearFrecuencias();dibujarBodeComplementario(H,F);end if n==15 then F=crearFrecuencias();step=crearPaso();dibujarBodeComplementario(H,F,step);end if n==16 then dibujarNyquist(H);end if n==17 then F=crearFrecuencias();dibujarNyquist(H,F);end if n==18 then F=crearFrecuencias();step=crearPaso();dibujarNyquist(H,F,step);end if n==19 then dibujarNyquistComplementario(H);end if n==20 then F=crearFrecuencias();dibujarNyquistComplementario(H,F);end if n==21 then F=crearFrecuencias();step=crearPaso();dibujarNyquistComplementario(H,F,step);end if n==22 then r=tablaRouth(H);r ;end end function[]=main() elegir();