%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Codigo de ejemplo para la obtencion de las curvas de operacion de un
% Motor de CD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all; clc;                                % Esta linea borra las variables del Workspace y limpia la  
                                               % ventana de comandos

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Las siguientes lineas sirven para determinar la conexion de la maquina a analizar. 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                               
                                               
fprintf('Escoge una opcion\n');                % Despliega una lista de opciones para seleccionar la
                                               % conexion que se va a analizar.
fprintf('\n1.\tMotor de CD En Serie')
fprintf('\n2.\tMotor de CD En Derivacion')
fprintf('\n3.\tMotor de CD Compuesto En Derivacion Corta\n\n')

conexion=input('Opcion: ');                    % Solicitud del tipo de conexion.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Las siguientes lineas sirven para el ingreso de los datos nominales de la maquina, asi como
% para la lectura de los datos experimentales a partir de un archivo de Microsoft Excel. 
% Existen comandos para leer desde distintos tipos de archivos, se selecciono Excel por su 
% comodidad en la captura de datos. El archivo con los datos debe estar en el mismo directorio 
% que este programa
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   

VtNom=input('Ingrese el de voltaje nominal: ');  % Lee de la ventana de comandos el valor del Vt del motor.
PoNom=input('Ingrese la potencia nominal: ');    % Lee de la ventana de comandos el valor de Po del motor 
                                                 % en kW
Pr=input('Ingrese las perdidas por rotacion: '); % Lee de la ventana de comandos el valor de Pr del motor.
IaNom=input('Ingrese la corriente nominal: ');   % Lee de la ventana de comandos el valor de Ia del motor.
nNom=input('Ingrese la velocidad del motor: ');  % Lee de la ventana de comandos el valor del n del motor.
wNom=(2*pi/60)*nNom;                             % Calcula la velocidad nominal en rad/s.
Ra=input('Ingrese la resistencia de armadura: ');% Lee de la ventana de comandos el valor de Ra del motor.

switch conexion
    case 1
    Rs=input('Ingrese la resistencia serie: ');  % Lee de la ventana de comandos el valor de Rs del motor.


    Ia=xlsread('DatosMotorCD.xlsx',1,'A2:A16');  % Lee los datos de corriente de armadura del archivo 
                                                 % 'DatosMotorCD.xlsx', Numero de Hoja, 
                                                 % 'Celda con el primer dato :Celda con el ultimo dato'.

    Tm=xlsread('DatosMotorCD.xlsx',1,'B2:B16');  % Lee los datos de par mecanico del mismo archivo.
                                                 % En caso de que las lecturas del electrodinamometro esten
                                                 % en unidades distintas de newton-metro, se debe agregar 
                                                 % una l?nea para realizar la conversion:
                                                 % Tm=ConstanteDeConversion*Tm

    nm=xlsread('DatosMotorCD.xlsx',1,'C2:C16');  % Lee los datos de velocidad del mismo archivo.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Las siguientes lineas realizan los calculos necesarios para obtener las
% curvas solicitadas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
    
    wm=(2*pi/60)*nm;                             % Calculo de la velocidad experimental en rad/s.
    Po=Tm.*wm;                                   % Calculo de la potencia entregada en la flecha del motor.
    Pd=Po+Pr;                                    % Calculo de la potencia generada en la armadura.
    Td=Po./wm;                                   % Calculo del par electromagnetico.
    eff=Po./(Vt*Ia);                             % Calculo de la eficiencia para distintos valores de Ia.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Las siguientes lineas realizan los calculos necesarios para obtener los valores 
% teoricos de las curvas solicitadas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   

    Iat=0:0.01*IaNom:1.25*IaNom;       % Genera un vector de corriente que comienza en cero y se incrementa 
                                       % 1.25 veces la corriente nominal en intervalos del 1 por ciento de 
                                       % la corriente nominal.
    wmt=0:0.01*wNom:1.25*wNom;         % Genera un vector de velocidad que comienza en cero y se incrementa 
                                       % 1.25 veces la velocidad nominal en intervalos del 1 por ciento de 
                                       % la velocidad nominal.
    Pdt=VtNom*Iat-(Iat.^2)*(Ra+Rs);    % Crea un vector de potencia desarrollada a partir de su definicion 
                                       % para un motor serie.
    Tdt=Pdt./wmt;                      % Crea un vector de par desarrollado a partir de su definicion.
    efft=(Pdt+Po)./(VtNom*Iat);         % Crea un vector de eficiencia a partir de los datos de potencia 
                                       % entregada y potencia consumida.
    
    figure(1)
    plot(wm,Tm,wmt,Tdt);               % Crea un grafico donde se muestran la velocidad en funcion de la 
                                       % corriente de armadura simultaneamente para el caso experimental y 
                                       % teorico calculado a partir de los parametros de la maquina.
    figure(2)
    plot(Ia,Tm,Iat,Tmt);
                                       
    case 2
        break;
    case 3
        break;
    otherwise
        break;                               
end