Imprementación de Motor en DC

Embed Size (px)

Citation preview

  • 7/25/2019 Imprementacin de Motor en DC

    1/26

    OBJETIVO GENERAL

    Disear e implementar un sistema de control digital de

    posicin para un motor DC, utilizando el microcontrolador

    PIC16F877A.

  • 7/25/2019 Imprementacin de Motor en DC

    2/26

    OBJETIVOS ESPECFICOS

    Reconocimiento y Anlisis del sistema.

    Establecer el modelo matemtico del sistema.

    Simular el sistema modelado diseando el controlador

    digital para una respuesta especfica (escoger

    overshoot y tiempo de asentamiento).

    Implementacin del sistema.

  • 7/25/2019 Imprementacin de Motor en DC

    3/26

  • 7/25/2019 Imprementacin de Motor en DC

    4/26

    deseado, enviando pulsos digitales a un integrado (L293B)

    para hacer girar el motor en el sentido indicado.

    MODELO MATEMATICO DE LA PLANTA

    Considerando que nuestro motor tiene un eje rgido, por

    medio de sus ecuaciones elctricas y mecnicas, al

    relacionarlas, podemos obtener el modelo del motor en elcul la entrada es el voltaje aplicado y la salida es la

    velocidad rotacional del eje, para esto es necesario

    conocer los diferentes parmetros de los que se encuentra

    compuesto:

    momento de inercia del rotor J.

    coeficiente de amortiguamiento del sistema mecnico

    (b).

    constante de fuerza electromotriz K=Ke=Kt.

    resistencia elctrica (R).

    inductancia elctrica (L).

    entrada (V): Fuente de Tensin.

    salida (W): velocidad rotacional del eje.

  • 7/25/2019 Imprementacin de Motor en DC

    5/26

    Las ecuaciones elctricas:

    -V+RI+LdI+e=0

    Dt

    Ecuaciones mecnicas:

    Jdw + bw=KI

    dt

    Relacionando ambas ecuaciones y expresndolas en el dominio

    s:

    Como e=Kw

    -V+RI(s)+SLI(s)+Kw(s)=0

    JSw(s)+bw(s)=KI(s)

    Obtenemos la funcin de transferencia de la velocidad del

    rotor respecto al voltaje aplicado:

    W = ___________K____________

    V (JS+b)(LS+R) + K^2

    Como nos interesa es la relacin del ngulo que se desplaza

    el rotor con respecto al voltaje aplicado integramos aambos lados de la ecuacin multiplicando por 1/s:

    )))(*)*((*/(/ 2KRLSbSJSKV +++=

    Obtenido el modelo matemtico del motor podemos disear

    nuestro controlador PID, pero para esto es necesario

    conocer el valor de los parmetros J, K, b, R, L del

    sistema los cuales desconocemos.

  • 7/25/2019 Imprementacin de Motor en DC

    6/26

    Seal de salida con ruido Seal de salida filtrada

    A continuacin se puede observar el algoritmo empleado parala adquisicin de datos por Matlab:

    clcclearclose allai=analoginput('nidaq',1);% Canal 1 voltaje de excitacin% Canal 2 voltaje generadochans=addchannel(ai,1:2);% Frecuencia de muestreofs=2000;set(ai,'SampleRate',fs);% Tiempo que dura la adquisicinduration=10;set(ai,'SamplesPerTrigger',fs*duration);% Rango de entrada adquisicin 0-10Vset(chans,'InputRange',[0 10]);disp('Pulse ENTER para dar inicio de adquisicin')pause% Inicio adquisicinstart(ai)[d1,t1]=getdata(ai);u=d1(:,1);y=d1(:,2);% Grfica de accin de controlfigure(1)plot(t1,u)xlabel('Tiempo(seg)');title('voltaje de excitacin');grid%Grfica del voltaje generadofigure(2)plot(t1,y)xlabel('Tiempo(seg)');title('voltaje generado');grid

  • 7/25/2019 Imprementacin de Motor en DC

    7/26

    %filtro pasabajos[B,A]=butter(10,0.03,'low');%filtramos seal de entadaH1=filter(B,A,u);figure(3)plot(H1)grid%filtramos seal de salidaH2=filter(B,A,y);figure(4 )plot(H2)grid

    Durante el proceso de adquisicin, se tomaron cincomuestras de entrada y salida del sistema con el fin de

    implementarlas en la IDENT, obtener diferentes modelos yas validarlos para obtener un modelo aproximado al real.

    Entrada 1 Salida 1

    Entrada 2 Salida 2

  • 7/25/2019 Imprementacin de Motor en DC

    8/26

    Salida 3Entrada 3

    Salida 4Entrada 4

    Entrada 5 Salida 5

  • 7/25/2019 Imprementacin de Motor en DC

    9/26

  • 7/25/2019 Imprementacin de Motor en DC

    10/26

    Despus se obtiene el valor de la ganancia y de los polos

    ra poder validar el sistema, se obtuvieron los cinco

    de forma que el sistema sea similar al real.

    Pamodelos de las diferentes seales adquiridas y secompararon las salidas de los modelos con cada una de lassalidas reales adquiridas para observar el porcentaje deexactitud de cada salida de los diferentes modelos con lasalida real.

    Validacin con la primera seal de salida adquirida

    Validacin con la segunda seal de salida adquirida

  • 7/25/2019 Imprementacin de Motor en DC

    11/26

    Validacin con la Quinta seal de salida adquirida

    En la siguiente tabla se puede observar el porcentaje deexactitud de la salida de cada modelo respecto a cadasalida real, adems resaltamos los porcentajes mssatisfactorios.

    SALIDAMODELO 1

    SALIDAMODELO 2

    SALIDAMODELO 3

    SALIDAMODELO 4

    SALIDAMODELO 5

    SALIDAREAL 1

    94.68% 92.37% 91.93% 90.16% 91.66%

    SALIDAREAL 2

    88.45% 91.78% 91.66% 90.55% 91.44%

    SALIDAREAL 3

    85.55% 90.72% 90.78% 90.18% 90.65%

    SALIDAREAL 4

    78.49% 87.62% 88.05% 88.24% 88.17%

    SALIDAREAL 5

    82.54% 90.99% 91.16% 90.34% 91.44%

    Tabla comparativa de los diferentes modelos

    En las grficas anteriores as como en la tablacomparativa, observamos que el modelo ms aproximado alreal, es el segundo modelo, por lo tanto, este va a ser elmodelo de nuestro motor.

  • 7/25/2019 Imprementacin de Motor en DC

    12/26

    Funcin de transferencia:

    El modelo aproximado obtenido en Matlab fue el siguiente:

    Pero este no es completamente el modelo a analizar debido aque este representa K*W(s))/ V(s) y nuestro sistema deberepresentar (s) / V(s). Para solucionar este problema,debemos agregarle un integrador al sistema ya que esteintegra W(s) y la convierte en (s)y comparar el modeloobtenido en la Ident con el modelado con el fin de obtenerlos parmetros de la planta y as identificar el modeloreal.

    Primero que todo multiplicamos el modelo matemtico por elfacto K(constante electromotriz) para que quede de laforma:

    Ahora procedemos a comparar ambos sistemas:

  • 7/25/2019 Imprementacin de Motor en DC

    13/26

    Al comparar ambos sistemas se puede observar que:

    Donde el parmetro K(constante electromotriz) es igual a laraz de 0.73482.

    Ya conocido el parmetro, K podemos expresar el sistema ofuncin de transferencia de nuestro motor:

    Otro inconveniente es que la variable teta, esta expresadaen revoluciones debido a que W en el anlisis del circuitose da en revoluciones/segundo. Para esto es necesarioconvertir teta en radianes, para mayor comodidadmultiplicando al sistema por el factor 2.

    Funcin de transferencia del motor

    Debido a que el sistema se encuentra en tiempo continuo esnecesario discretizarlo. Para el microcontrolador se empleoun oscilador XT de 4MHZ. De acuerdo con esta frecuencia ylos ciclos de mquina que efecta el microcontrolador

    durante la retroalimentacin con el encoder (300 aprox.),se obtiene el periodo de muestreo necesario para obtener laplanta en formato de Zs.

    T = 4*300------- = 0.3 milisegundos Tiempo de muestreo4000000

    Muestreamos el sistema:

    num = 5.3859;

    den =[0.0014 0.0749 1.0000 0]

  • 7/25/2019 Imprementacin de Motor en DC

    14/26

    G=Tf(num,den)Gz=c2d(G,3e-4)

    Nuestro sistema discretizado sera el siguiente:

    El las grficas siguientes se puede observar la respuestaal escaln y el lugar de las races respectivamente:

    Se puede observar que el sistema alcanza su valor mximo enaproximadamente 0.7 segundos, por lo que el tiempo deestablecimiento se debe disminuir.

    Respuesta al escaln

    En el lugar de las races se puede observar que el sistema

    tiene 3 polos; (z-1) (z-0.9923) (z-0.9917) y dos ceros(z+3.717) (z+0.2669).

  • 7/25/2019 Imprementacin de Motor en DC

    15/26

    Para el diseo del controlador PD debido a que nuestrosistema es tipo uno, se escogi un Overshoot del 16% y un

    tiempo de establecimiento de 1 segundo.

    Controlador PD

    Controlador obtenido mediante la SISOTOOL

    Sistema con controlador

  • 7/25/2019 Imprementacin de Motor en DC

    16/26

    Salida del sistema controladoDESARROLLO CON EL MICROCONTROLADOR

    El proyecto se fundamenta en el diseo de un controlador deposicin de un motor D.C basado en un PIC 16F877A. En unapantalla LCD se visualizar el set point o valor deposicin deseado, el error actual, el ciclo til,realimentacin y la constante del PID, junto con lasconstantes del controlador PID (Kp, Ki, Kd), que soningresadas por el usuario por medio de un tecladomatricial.

    Ingreso de datos:

    Al iniciar, el microcontrolador se visualiza el valordeseado de posicin y las constantes del controlador (Kp,Ki, Kd), despus de ingresar el ltimo valor de lasconstantes, el microcontrolador empieza a posicionar elmotor comparando, si el valor actual es igual al ingresado.Esto se logra por medio de un encoder que est acoplado auno de los engranes del motor (que en este caso es el demenor dimetro), este tiene la funcin de producir una

    seal cada vez que el engrane realiza dos vueltas.De estaforma se va corrigiendo la posicin actual con la deseada.

    Elementos utilizados

    - PIC16F877A- LCD- Teclado matricial- CD40106B

    -

    L293B- Encoder- Motor de corriente continua- Visualizador angular.- Fuente de alimentacin de 5V.- Oscilador de 4MHz.- Panel de visualizacin para el desplazamiento del

    motor.

  • 7/25/2019 Imprementacin de Motor en DC

    17/26

    Programa del Microcontrolador

    Para la programacin del PIC, fue necesario crear el cdigoa partir de lenguaje C, debido a que este cuenta conlibreras para el control del LCD, teclado, interrupciones,etc., que facilitan el control de estos y adems reduce laslneas de cdigo.

    Una vez que se ha realizado el programa en C, procedemos alcrear el archivo .hex, el cual es el que se guarda en lamemoria del microcontrolador, esto se realiza por medio deun compilador llamadoPCW C Compiler.

    CODIGO C

  • 7/25/2019 Imprementacin de Motor en DC

    18/26

    #include

    #fuses XT,NOWDT,PUT,BROWNOUT,NOLVP,PROTECT //Tipo //de//oscilador y frecuencia#use delay (clock = 4000000, RESTART_WDT)

    #use fast_io (A) //Configuracin de puertos digitales#use fast_io (B)#use fast_io (C)#use fast_io (D)#use fast_io (E)

    #byte porta=5#byte portb=6#byte portc=7#byte portd=8

    #byte porte=9

    #include //Librerias#include #include #include

    float kp; //Se definen las constantes del//controlador PIDfloat kd;float ki;

    float I= 0.5;

    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%float err_ant,err_ant1,err_ant2,err_ant3,A;//Definicin de variablesfloat sum_int=0;//Condicion inicialfloat integral,proporcional,derivativo,out_PID,out_PID2;signed long err_act,set_point,realimentacion;

    int32 Duty; //Se define como entero con32 caracteres de longitudint util; //Enterobyte inc,bit_ini,j;

    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    #INT_EXT //Interrupcion externasigned int pulso() //Funcion pulso valor entero

    {if(inc == 0x00){realimentacion--;}else{realimentacion++;}return(realimentacion);

    }//====================================================================//====================================================================

    void demor_1() //Retardos

    {

  • 7/25/2019 Imprementacin de Motor en DC

    19/26

    char i;for(i=0;i

  • 7/25/2019 Imprementacin de Motor en DC

    20/26

    uno=kbd_getc();} while ((uno'9'));lcd_putc(uno);

    uno-='0';ctte += uno;

    demor_1();demor_1();demor_1();

    return(ctte); //Regresa el valor de (ctte).}

    //====================================================================

    int32 aprox(float rta_controlador) //Funcion aprox{//Esta funcin aproxima el valor de la salida del controlador al entero msproximo

    float parte_entera,parte_decimal;int32 ciclo_pwm;

    parte_decimal=modf(rta_controlador,&parte_entera);if(parte_decimal>=0.5)

    {ciclo_pwm=ceil(rta_controlador);

    //aprox al entero mayor ms cercano}

    else{ciclo_pwm=floor(rta_controlador);

    //aprox al entero menor ms cercano}return (ciclo_pwm);

    //Regresa el valor de ciclo_pwm,que es} //un entero de 32 caracteres.//====================================================================//====================================================================

    void main(void){

    portb=portc=0; //Reset para los puertos

    set_tris_a(0xFF); //Configuracion de puertos(E/S)

    set_tris_b(0xFF);set_tris_c(0x08);set_tris_d(0x00);set_tris_e(0x00);

    setup_timer_2(T2_DIV_BY_16, 255, 1); //Pre=1Periodo=255 Pos=1

    setup_ccp1(CCP_PWM);//Configuracion contador PWM

    enable_interrupts(INT_EXT);//Int. sensor encoder

    ext_int_edge( L_TO_H );//Interrupcion flanco Bajo a alto

    enable_interrupts(GLOBAL);//Activar interrupciones globales

    lcd_init();

    //Inicializacion del LCD

  • 7/25/2019 Imprementacin de Motor en DC

    21/26

    lcd_putc("\f SANTO TOMAS\n");//Mensajes de inicio

    lcd_putc("CONTROL II");demor();

    lcd_putc("\f MORGAN\n");lcd_putc(" EDWING ");demor();lcd_putc("\fING\n");lcd_putc(" MECATRONICA ");

    demor();//Retardo

    lcd_putc("\f INICIANDO\n");lcd_putc(" SISTEMA");

    demor();

    lcd_putc("\f VALOR : ");set_point = get_bcd();

    //Obtiene el valor ingresadoprintf(lcd_putc,"\f set Point :%ld

    ",set_point);demor(); //Visualiza

    lcd_putc("\f 1-Kp : ");//Imprime mensaje 1-Kp en el LCD

    A=get_bcd();//Obtiene valor de Kp

    kp = 0.001*A;//Multiplica valor ingresado por 0.001

    printf(lcd_putc,"\f 1-Kp :%2.4f",kp);demor();

    lcd_putc("\f 2-Ki : ");

    A=get_bcd();ki = 0.001*A;printf(lcd_putc,"\f 2-Ki:%2.4f

    ",Ki);demor();//%demor();

    lcd_putc("\f 3-Kd : ");A=get_bcd();kd = 0.001*A;printf(lcd_putc,"\f 3-Kd :%2.4f

    ",kd);demor();//%demor();/*set_point=20;kp=1;ki=0;kd=0;*/

    err_ant= err_act= err_ant1= err_ant2= err_ant3=out_PID= integral= proporcional= derivativo= 0x00; //Condicion inicial

    realimentacion= bit_ini=0;//Bandera de inicio

    set_tris_b(0x01); //Configuraciondel puerto B

    for(;;){

    delay_ms(5);err_act = set_point - realimentacion;

    //Ecuacion para el error actual

    //------------------PROPORCIONAL--------------------------------------

  • 7/25/2019 Imprementacin de Motor en DC

    22/26

    proporcional = kp*err_act;

    //Ecuacion de parte Proporcional

    //------------------INTEGRAL------------------------------------------

    if(bit_ini==0) //Si est encondicion inicial 0

    {integral = ki*err_act; //Ecuacion

    integral

    // sum_err=err_act;sum_int=integral;bit_ini=0xFF;

    }else{

    integral = I*(err_ant+err_act);// integral += sum_err;

    integral *= ki;sum_int+=integral;

    //sum_err += err_act;err_ant =err_act;

    }

    //----------------DERIVATIVO------------------------------------------

    derivativo = 3*(err_ant1-err_ant2);derivativo += err_act;

    derivativo -= err_ant3;

    derivativo *= kd;

    err_ant3=err_ant2;//Memorizacin para la parte derivativa

    err_ant2=err_ant1;err_ant1=err_act;

    //--------------------------------------------------------------------

    out_PID = proporcional + sum_int + derivativo;

    if(out_PID < 0x00){inc=atras();} //si lasalida del PID=170;j++) //Retardo

    delay_ms(1);

    out_PID*=60;

    Duty = aprox(out_PID);

  • 7/25/2019 Imprementacin de Motor en DC

    23/26

    if(Duty>254){Duty=255;}util=Duty;set_pwm1_duty(util);

    }

    }

  • 7/25/2019 Imprementacin de Motor en DC

    24/26

    CONCLUSIONES

    Para la obtencin de modelos matemticos por medio dedatos adquiridos, es necesario la obtencin dediferentes modelos a partir de varios datos, con elfin de validarlos y as obtener un sistema quesatisfaga las caractersticas de comportamiento delsistema real.

    Los datos que se adquirieron fueron filtrados con elfin de eliminar el ruido que alteraba la seal desalida del generador.

    Para el proceso de discretizacin del modelo, lafrecuencia de funcionamiento del microcontrolador esla frecuencia de muestreo.

    El controlador que se diseo fue un PD debido a queel PID no es aconsejable implementarlo debido a que elsistema ya posee un integrador.

  • 7/25/2019 Imprementacin de Motor en DC

    25/26

    ANEXOS

  • 7/25/2019 Imprementacin de Motor en DC

    26/26

    Circuito diseado en Proteus