Pid

9
Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones Congreso 2010, Página 1 DISEÑO E IMPLEMENTACION DE UN CONTROL PID DIGITAL PARA MOTOR DC, USANDO DISPOSITIVOS EMBEBIDOS PSOC CY8C29466-24PVXi. Autores: Alexander Ramírez Montenegro, Carlos Alberto Fernández Perdomo UNIVERSIDAD DEL CAUCA COLOMBIA [email protected] , [email protected] Resumen: En este proyecto se trata de realizar un control de velocidad de un motor DC para la dosificación de unos polvos, para ello se usa un encoder para medir la velocidad y un PSOC donde ira implementada la ley de control que regirá la velocidad del motor, este trabajo se hace con fines académicos, es decir es de carácter de experiencia institucional. 1. INTRODUCCION En el presente trabajo se desarrolla un Control de velocidad en lazo cerrado de un motor DC de imán permanente aplicando el conocido algoritmo de control PID. El objetivo es mantener constante la velocidad ante variaciones de la carga (perturbaciones), de manera automática. El sistema se realizó usando un motor DC HITACHI de imán permanente de 24 voltios extraído de una fotocopiadora, el cual es controlado por un H-bridge basado en un chip L298N que permite usando la técnica PWM variar la velocidad del motor y su sentido de giro. Como unidad de realimentación, se utiliza un encoder de velocidad GP1A30R de la empresa SHARP y todo el sistema es controlado por un PSOC CY8C29466-PVXI y usando comunicación USB para enviar datos al PC con el CY7C64215. 2. MODELAMIENTO DE LA PLANTA Considerando que nuestro motor tiene un eje rígido, por medio de sus ecuaciones eléctricas y mecánicas, al relacionarlas, podemos obtener el modelo del motor en el cuál la entrada es el voltaje aplicado y la salida es la velocidad rotacional del eje, para esto es necesario conocer los diferentes parámetros de los que se encuentra compuesto: Momento de inercia del rotor J. Coeficiente de amortiguamiento del sistema mecánico (b). Constante de fuerza electromotriz K=Ke=Kt. Resistencia eléctrica (Ra). Inductancia eléctrica (La). Entrada (V): Fuente de Tensión. Salida (W): velocidad rotacional del eje. En la figura 1 se muestra es esquema base para el modelamiento del motor DC. Figura 1. Esquema base de modelamiento. Las ecuaciones diferenciales de este sistema son:

description

Implementación de un PID

Transcript of Pid

  • Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

    Congreso 2010, Pgina 1

    DISEO E IMPLEMENTACION DE UN CONTROL PID

    DIGITAL PARA MOTOR DC, USANDO DISPOSITIVOS

    EMBEBIDOS PSOC CY8C29466-24PVXi.

    Autores: Alexander Ramrez Montenegro, Carlos Alberto Fernndez Perdomo

    UNIVERSIDAD DEL CAUCA

    COLOMBIA

    [email protected], [email protected]

    Resumen: En este proyecto se trata de realizar un control de velocidad de un motor DC para la dosificacin de

    unos polvos, para ello se usa un encoder para medir la velocidad y un PSOC donde ira implementada la ley de

    control que regir la velocidad del motor, este trabajo se hace con fines acadmicos, es decir es de carcter de

    experiencia institucional.

    1. INTRODUCCION

    En el presente trabajo se desarrolla un Control de

    velocidad en lazo cerrado de un motor DC de imn

    permanente aplicando el conocido algoritmo de

    control PID.

    El objetivo es mantener constante la velocidad ante

    variaciones de la carga (perturbaciones), de manera

    automtica.

    El sistema se realiz usando un motor DC

    HITACHI de imn permanente de 24 voltios

    extrado de una fotocopiadora, el cual es controlado

    por un H-bridge basado en un chip L298N que

    permite usando la tcnica PWM variar la velocidad

    del motor y su sentido de giro.

    Como unidad de realimentacin, se utiliza un encoder

    de velocidad GP1A30R de la empresa SHARP y

    todo el sistema es controlado por un PSOC

    CY8C29466-PVXI y usando comunicacin USB

    para enviar datos al PC con el CY7C64215.

    2. MODELAMIENTO 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 el cul 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 (Ra).

    Inductancia elctrica (La).

    Entrada (V): Fuente de Tensin.

    Salida (W): velocidad rotacional del eje.

    En la figura 1 se muestra es esquema base para el

    modelamiento del motor DC.

    Figura 1. Esquema base de modelamiento.

    Las ecuaciones diferenciales de este sistema son:

    mailto:[email protected]:[email protected]
  • 2

    = + +

    1

    = 2

    = (3)

    = 4

    Como se desconoce el valor del torque de la carga

    que se va usar, se tomar que = 0, y la funcin de

    transferencia haciendo la transformada de Laplace y

    el ordenamiento de las ecuaciones es:

    WM(t)

    v(t)=

    Kt

    La*J

    s2+s Ra*J+La*b

    La*J +

    KmKt+Ra*b

    La*J

    (5)

    3. MEDICION DE

    PARAMETROS

    Para la medicin de los parmetros que se muestran

    en la ecuacin 5, se procede a medir voltaje y

    corriente en el motor as como el nmero de vueltas

    realizadas en un cierto tiempo, tambin se midi la

    inductancia usando un inductometro conectado a las

    dos borneras del motor DC. Los datos medidos se

    muestran en la tabla 1.

    Tabla 1

    Datos medidos del motor DC

    Voltaje

    armadura

    (V)

    Corriente

    armadura

    (A)

    Vueltas/20seg Inductancia

    armadura

    (mH)

    5 8,00E-02 283 3,75

    8 9,00E-02 452 4,02

    10 9,03E-02 577 3,83

    12 1,00E-01 688 3,78

    15 1,01E-01 864 3,79

    18 1,10E-01 1055 3,79

    20 1,11E-01 1193 3,78

    22 1,20E-01 1296 4,03

    24 1,21E-01 1386 3,75

    Cabe destacar que la inductancia no se midi con el

    motor DC encendido, si no que se giraba el eje del

    motor manualmente y se miraba el valor de la

    inductancia. No se puede realizar la medida de la

    inductancia mientras esta encendida porque est

    afectando la corriente a la inductancia.

    Tambin se realizaron otras medidas de masa y radio

    del motor para estimar el momento de inercia, dichos

    datos se muestran en la tabla 2.

    Tabla 2.

    Mediciones de masa y dimetro del motor

    Masa del motor

    (gr)

    Dimetro del

    motor (cm)

    Radio motor

    (cm)

    450 3.7 1.85

    Para medir la resistencia de armadura, , se aplic

    un voltaje fijo y se bloque el eje del motor, de tal

    forma que el eje no rotara y se midi la corriente que

    estaba circulando es en instante, de esta manera la

    para el motor usado fue de = , .

    Usando los datos de la tabla 1, se puede realizar una

    estimacin de K=Km=Kt, considerando que en

    estado estable, es decir sin cargas en el eje del motor,

    se puede estimar usando las ecuaciones:

    (6)

    (7)

    As,

    (8)

    Donde el voltaje armadura, la corriente

    armadura y es la velocidad angular. Usando los

    datos de la tabla 1 se estima, promediando, que K=

    3.84E-3 voltios/RPM.

    Para estimar el momento de inercia se considera que

    el motor es un cilindro, y calcular el momento de

    inercia de un cilindro es muy fcil, y est dado por la

    siguiente ecuacin:

    =2

    2 (9)

    Donde M es la masa del motor, R el radio estimado

    del motor.

    El valor del momento de inercia para el motor DC a

    usar es de = . .

    Para estimar el coeficiente de amortiguamiento se

    busc informacin de otros motores que tenan

    caractersticas parecidas al motor DC que se iba a

    usar y tomar como valor de amortiguamiento el de

    esos motores, pues no se pudo medir este parmetro,

    como referencia se tom que = /

    .

  • Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

    Congreso 2010, Pgina 3

    De forma resumida los parmetros para el motor DC

    son los siguientes:

    Tabla 3

    Parmetros del motor DC

    Volts(V) 24

    Potencia(Watt) 21

    Ra(Ohmios) 5,25

    La(Henrios) 3,84E-03

    Km(V.Seg/rad) 5,45E-02

    Kt(N.m/A) 5,45E-02

    Jrot(Kg.m2) 8.205E-05

    b(N.m.Seg) 5E-07

    4. SIMULACION EN MATLAB

    Y DISEO DE CONTROL

    PID.

    El algoritmo de un control PID en tiempo continuo es

    de la siguiente forma:

    (9)

    En el dominio de S, el control PID se puede escribir

    de la siguiente forma:

    (10)

    La ecuacin 10 representa un control PID de

    posicion, pero tambin existe otrol control PID

    denominado PID de velocidad, donde su estructura es

    la siguiente:

    = 1 +1

    +

    1 +

    (11)

    Como ya se obtuvieron los parmetros del motor, se

    puede hacer uso de la ecuacin (5) para

    implementarla en MATLAB y mirar que parmetros

    del control PID se ajustan mejor para obtener una

    buena ley de control.

    Escogiendo los siguientes valores para el control PID

    de velocidad:

    Kp=9 Ti=5 Td=0.001 N=10

    La respuesta del sistema con un control PID con los

    parmetros elegidos anteriormente se muestra en la

    figura 2, se puede observar que con esos parmetros

    el control ms la planta se ajusta muy bien ante una

    entrada escaln.

    Figura 2. Respuesta al escaln del sistema con

    control PID.

    Por tanto los parmetro de Kp, Ti y Td del control

    PID sern los que se usaran para controlar el motor.

    5. PID DIGITAL

    Para poder realizar un control a nivel digital se debe

    discretizar la ley de control, en nuestro caso se debe

    discretizar la ley de control PID.

    Aplicando la transformada Z a la ecuacin 10, se

    obtiene:

    U(z)

    E(z)=Kp+

    Kp*T

    Ti(1-Z-1)+Kp*Td*

    1-z-1

    T (12)

    La ecuacin (11) representa la discretizacion de un

    control PID de posicin, el inters nuestro es en

    realizar un control PID digital de velocidad, entonces

    aplicando la transformada Z a la ecuacin 11, se

    obtiene:

    U(z)

    E(z)=Kp+

    Kp*T

    Ti(1-Z-1)+

    +(1 1)

    1

    + 1

    (13)

    Donde T es el periodo de muestreo elegido.

  • 4

    Ahora el paso siguiente es transformar las ecuaciones

    que estn en transformada Z en ecuaciones en

    diferencias para que podamos implementar la ley de

    control en el PSOC.

    Para ello se realiza la transformada Z inversa de la

    ecuacin 13, se obtiene:

    = _1 + + _1 + _2 14

    = . .

    = +

    +

    = +2

    =

    Ahora ya se tiene la ley de control U en ecuaciones

    en diferencias y lo que ahora toca es implementar la

    ecuacin 14 en el PSOC, ya que se tiene los

    parmetros de KP, Ti y Td. Lo que se debe elegir es

    el tiempo de muestreo T con el que se va a trabajar.

    6. SISTEMA DE LAZO

    CERRADO.

    Tal como se muestra en la figura 3, el sistema consta

    de un pequeo motor DC, cuya seccin de potencia la

    constituye un H-Bridge que permite, por un lado,

    definir la direccin de giro y por otro, controlar la

    velocidad con la aplicacin de una seal PWM. El

    lazo de control es cerrado usando un encoder de

    velocidad GP1A30R de la empresa SHARP colocado

    en el eje del motor. El encoder cuenta con un disco

    ranurado (100 ranuras en el disco)para producir as

    pulsos cuya cantidad por unidad de tiempo es

    proporcional a la velocidad de giro del motor.

    Figura 3. Sistema de lazo cerrado de control

    7. MODULACION DE ANCHO

    DE PULSO.

    Es el mecanismo utilizado para variar la velocidad de

    un motor DC. Consiste en variar la anchura de pulso

    o el dutycycle en un ciclo de PWM de manera de

    variar el average de la tensin DC aplicada al motor,

    tal como muestra la figura 4.

    Figura 4. PWM

    PWM es una manera eficiente, para simular un rango

    de valores anlogos usando circuitos digitales.

    Cambiando rpidamente entre cero voltios y el

    voltaje nominal del motor, se obtiene un valor

    promedio comprendido entre esos dos lmites. Tres

    seales son presentadas en la figura arriba, todas

    tienen la misma frecuencia, pero el ancho de los

    pulsos son diferentes.

    Variando la duracin del tiempo on, el motor puede

    ver un promedio de cualquier valor entre 0V y +V.

    Para ajustar el valor del ancho de pulso de acuerdo a

    los valores entregados por la ley de control se debe

    establecer un rango mnimo y mximo de trabaja para

    poder ajustar los valores de la ley de control a los

    valores del PWM.

    Para este proyecto se trabaj con un rango de 0 a 12

    voltios el motor, es decir que como valor mximo de

    RPM se obtendra 2064 RPM aproximadamente. El

    factor que me reajustaba los valores entregados por la

    ley de control para ya llevarlos al PWM de 8 bits,

    fue de 0.00392, el valor fue calculado sacando los

    valores mximos y mnimos que entregaba la ley de

    control y de acuerdo a ello buscaba un valor que se

    ajustar a ellos de acuerdo al PWM elegido, en este

    caso un PWM de 8 bits (255).

    8. IMPLEMENTACION EN

    PSOC DESIGNER.

    Usando la herramienta software entregada por

    CYPRESS SEMICONDUCTOR en su pgina web,

    se us PSOC DESIGNER 5.0 SP6.

  • Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

    Congreso 2010, Pgina 5

    Los parmetros globales que gobiernan el PSOC

    CY8C29466-24PVXi se muestran en la figura 5.

    Figura 5. Parmetros globales

    Para garantizar que la seal que llegaba del encoder

    GP1A30R, que son pulsos de 0v y 5v, no llevara

    ruido, se implemento un comparador de ventana

    usando los mdulos de comparadores de ventana

    programables en el PSOC denominados CMPPRG

    (Programmable Threshold Comparator), el esquema lgico para el comparador de ventana se

    muestra en la figura 6.

    Figura 6. Esquema lgico de comparador de ventana.

    Donde,

    (15)

    La ecuacin 15, representa la salida lgica booleana

    de lo que se muestran en la figura 6.

    La implementacin de esta lgica en el PSOC, se

    muestra en la figura 7, donde se usas dos mdulos

    CMPPRG, donde uno maneja una referencia alta y

    otro una referencia baja, CMPPRG_HIGH y

    CMPPRG_LOW.

    Figura 7. Mdulos de comparador para comparador

    de ventana.

    Los parmetros de configuracin se muestran en la

    figura 8.

    Figura 8. Parmetros de configuracin de los

    mdulos CMPPRG

    Ahora, se requiere implementar la lgica digital de la

    ecuacin 15, para ellos se usa los mdulos DIGBUF

    estos permiten acceder a los buffers de los

    comparadores y a acceder a lo que estos estn

    sacando.

    Figura 7. Implementacin lgica digital para

    comparador de ventana.

  • 6

    Figura 8. Configuracin de parmetros de los

    mdulos DIGBUF

    En las figuras 7 y 8 se muestra la realizacin de la

    lgica para realizar el comparador de ventana de

    acuerdo a la ecuacin 15, la salida lgica se manda

    por el GOE 6 para que sea leda por el contador de

    pulsos en GIE 6. En la figura 9 se muestra mejor

    esto.

    Figura 9. GIE y GOE

    Ahora, la seal que llega por el

    Figura 10. Resto de mdulos

    Figura 11. Configuracin de parmetros de los otros

    mdulos.

    En las figuras 10 y 11 se muestra la implementacin

    de los otros mdulos. Se usa un contador,

    CONTARPULSOS, como contador de pulsos que le

    llegan por el bus de datos GIE 6, cada vez que haya

    un cambio de un estado de bajo a alto, el periodo del

    contador se decremento en uno (1), period.

    Se usa tambin un temporizador, TIMERms, que va

    temporizar hasta 100 ms, esto es para que cada

  • Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

    Congreso 2010, Pgina 7

    100ms recoge el valor de period en el modulo

    CONTARPULSOS para saber cuntos pulsos han

    entrado por all, y as obtener el valor de las RPM del

    motor cada 100ms.

    El modulo I2CHW_ESCLAVO es para comunicar

    el PSOC CY8C29466-24PVXI con el PSOC

    CY764215 que es el que posee la comunicacin

    USB. As, se manda el valor de las RPM va I2C al

    CY764215 y este enva la informacin por USB al

    computador.

    En los anexos se muestra el cdigo en C del

    algoritmo de la ley de control y de inicializacin de

    los mdulos usados en PSOC DESIGNER.

    Para mayor informacin de lo que hace cada modulo,

    en PSOC DESIGNER estn los DATASHEET de

    cada modulo, antes de usar un modulo se recomienda

    leer los DATASHEET.

    9. RESULTADOS

    OBTENIDOS.

    Como se expres anteriormente, la ley de control

    digital implementada fue la que se muestra en la

    ecuacin 14, usando como periodo de muestreo

    T=100 ms, esta ley ya discretizada se implement en

    el PSOC CY8C29466-24PVXi.

    Los datos de la revoluciones se enviaban mediante

    comunicacin I2C al PSOC CY764215 y este era el

    encargado de enviar los datos por el puerto USB al

    computador.

    Ya en el computador se obtenan los datos de las

    RPM y se guardaban en un archivo de texto, .txt, y

    estos se graficaban con una herramienta de grafico de

    datos denominada KST.

    La respuesta del sistema con la ley de control digital

    ya implementada se muestra en la figura 12.

    Figura 12. Respuesta del sistema con control PID

    digital

    El cdigo de la ley de control fue realizado en C y se

    pone todo el cdigo en los anexos.

    10. CONCLUSIONES.

    Se obtuvo una respuesta muy buena con el sistema de

    control PID digital implementada en el PSOC pues su

    valor estaba oscilando alrededor del valor de

    referencia entre 4 y 6 RPM por encima y por debajo

    de la referencia.

    Se debe mejorar un poco usando un observador para

    tener una mayor precisin de la medida y de la ley de

    control.

    11. BIBLIOGRAFIA

    Landau Ioan, ZitoGianluca. Digital Control Systems.

    Edicion del 2005,

    KasuhikoOgata, Sistemas de control en tiempo

    discreto.

    Dogan Ibrahim, Microcontroller Based Applied

    Digital Control.Edicion 2006.

    Ess van Dave, Analog-Comparator with

    independently programmable hysteresis Thresholds.

  • 8

    ANEXOS.

    #include // part specific constants and macros

    #include

    #include

    #include "PSoCAPI.h" // PSoC API definitions for all User Modules

    #pragma interrupt_handler TIMER_ISR

    voidmandarDATO(void);

    voidconvertir(void);

    voidLeyControl(void);

    intcont=0;

    unsignedintval_seg=0,val_min=0;

    floatval_minf=0;

    unsignedintconteos=0;

    charsWriteBuffer[10]; // Buffer where Master's data is deposited

    charsTxBuffer[20];

    charsRxBuffer[20]; // Main buffer

    float ref=800.0;

    floatek=0.0,ek_1=0.0,ek_2=0.0;

    floatuk=0.0,uk_1=0.0,uk_rescalado=0;

    float a=9.27,b=9.18,c=0.090; //Para un periodo de muestreo de 100ms

    unsigned int uk_int=0;

    charsRxBufferLeyControl[15];

    void main(void)

    {

    CMPPRG_HIGH_Start(CMPPRG_HIGH_HIGHPOWER);

    CMPPRG_LOW_Start(CMPPRG_LOW_HIGHPOWER);

    CONTARPULSOS_EnableInt(); /* Habilito interrupcion para el contador */

    CONTARPULSOS_Start(); /* Inicio el contador */

    TIMERms_Start();

    TIMERms_EnableInt();

    PWM8_1_EnableInt();

    PWM8_1_Start();

    M8C_EnableGInt;

    //Start I2CHW user module

    I2CHW_ESCLAVO_Start();

    // Enable I2C Slave Operation

    I2CHW_ESCLAVO_EnableSlave();

    // Enable I2C Interrupt

    I2CHW_ESCLAVO_EnableInt();

    // Initialize I2C Read Buffer

    I2CHW_ESCLAVO_InitRamRead(sRxBuffer,10);

    // Initialize I2C Write Buffer

    I2CHW_ESCLAVO_InitWrite(sWriteBuffer,10);

    while(1)

    {

    mandarDATO();

    }

    }

    void TIMER_ISR(void)

    {

    cont++;

    if(cont==1)

    {

    CONTARPULSOS_Stop();

  • Segundo Congreso Virtual, Microcontroladores y sus Aplicaciones

    Congreso 2010, Pgina 9

    conteos=CONTARPULSOS_wReadCounter();

    val_seg=65535-conteos;

    val_minf=((((float)val_seg/(float)100)/(float)0.1)*(float)60); //calculo de RPM

    LeyControl();

    val_min=(unsignedint)val_minf;//Para mandar por la USB

    convertir();

    cont=0;

    CONTARPULSOS_WritePeriod(65535);

    CONTARPULSOS_Start();

    }

    }

    Void mandarDATO(void) //Rutina para mandar por el I2C al dispositivo USB CY764215

    {

    M8C_ClearWDT;

    if (I2CHW_ESCLAVO_bReadI2CStatus() & I2CHW_RD_COMPLETE)

    {

    I2CHW_ESCLAVO_InitRamRead(sRxBuffer,10);

    //ReInitialize Read Buffer

    I2CHW_ESCLAVO_ClrRdStatus();

    }

    }

    Void convertir(void)

    {

    utoa(sRxBuffer,val_min,10);//sRxBuffer es por donde yo voy a mandar el dato

    }

    Void LeyControl(void)

    {

    ek=ref-val_minf; //Calculo el error

    uk=uk_1+(a*ek)+(b*ek_1)+(c*ek_2); //LEY DE CONTROL

    uk_rescalado=uk*0.00392;

    uk_int=(unsignedint)uk_rescalado;//Le paso a uk_int la parte entera de uk_rescalado

    if(uk_rescalado