34
1 Desarrollo de una Plataforma Experimental para el Control de Posición de un Cilindro Neumático En este informe se describen, en forma resumida, los resultados que se obtuvieron al desarrollar el proyecto denominado Desarrollo de una Plataforma Experimental para el Control de Posición de un Cilindro Neumático, el cual fue apoyado por la Secretaria de Investigación y Posgrado del Instituto Politécnico Nacional, bajo el registro SIP 20082613. Para el desarrollo de este proyecto se contó con el apoyo de un alumno de la UPIITA, Federico Miranda Almazán, el cual participó en el Programa Institucional de Formación de Investigadores. Este informe técnico final esta organizado de la siguiente manera. En la sección 1 se da una introducción al proyecto, indicandose antecedentes bibliográficos. En la sección 2 se modela el sistema dinámico que se está estudiando. En la sección 3 se plantea el problema a resolver. En la sección 4 se describe la metodología empleada para el resolver el problema desde el punto de vista óptimo. En la sección 5 se dan los resultados que se obtienen con base al desarrollo dado en la sección 4. Finalmente, en la sección 6 se analizan y discuten los resultados obtenidos, además se plantean posibles problemas en un trabajo futuro. I. INTRODUCCION Los actuadores neumáticos ofrecen las siguientes ventajas para las aplicaciones de posicionamiento: de bajo costo, alta proporción de potencia a peso, facilidad de mantenimiento, limpieza, seguridad, disponibilidad y barata fuente de energía. Lamentablemente, estos actuadores neumáticos están sujetos a altas fuerzas de fricción, zona muerta (debido a la fricción) y tiempo muerto (debido a la compresión de aire). Estas no-linealidades hacen difícil el control de un actuador neumático. Hoy en día, es posible manejar un cilindro neumático mediante servo-válvulas proporcionales [2] o el uso de válvulas de bajo costo tipo on/off [3], [4], [1], [5]. Al principio, sólo se utilizaban servoválvulas proporcionales costosas para el control de posición. Para manejar las válvulas on/off es común utilizar la técnica por modulación por ancho de pulso (pwm, pos sus siglas

Desarrollo de una Plataforma Experimental para el Control de Posición de …sappi.ipn.mx/cgpi/archivos_anexo/20082613_5987.pdf · 2011. 11. 14. · servoválvulas proporcionales

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 1

    Desarrollo de una Plataforma Experimental para el Control de Posición de un Cilindro Neumático

    En este informe se describen, en forma resumida, los resultados que se obtuvieron al

    desarrollar el proyecto denominado Desarrollo de una Plataforma Experimental para el

    Control de Posición de un Cilindro Neumático, el cual fue apoyado por la Secretaria de

    Investigación y Posgrado del Instituto Politécnico Nacional, bajo el registro SIP 20082613.

    Para el desarrollo de este proyecto se contó con el apoyo de un alumno de la UPIITA,

    Federico Miranda Almazán, el cual participó en el Programa Institucional de Formación de

    Investigadores.

    Este informe técnico final esta organizado de la siguiente manera. En la sección 1 se da una

    introducción al proyecto, indicandose antecedentes bibliográficos. En la sección 2 se modela

    el sistema dinámico que se está estudiando. En la sección 3 se plantea el problema a

    resolver. En la sección 4 se describe la metodología empleada para el resolver el problema

    desde el punto de vista óptimo. En la sección 5 se dan los resultados que se obtienen con

    base al desarrollo dado en la sección 4. Finalmente, en la sección 6 se analizan y discuten

    los resultados obtenidos, además se plantean posibles problemas en un trabajo futuro.

    I. INTRODUCCION

    Los actuadores neumáticos ofrecen las siguientes ventajas para las aplicaciones de

    posicionamiento: de bajo costo, alta proporción de potencia a peso, facilidad de

    mantenimiento, limpieza, seguridad, disponibilidad y barata fuente de energía.

    Lamentablemente, estos actuadores neumáticos están sujetos a altas fuerzas de fricción,

    zona muerta (debido a la fricción) y tiempo muerto (debido a la compresión de aire). Estas

    no-linealidades hacen difícil el control de un actuador neumático.

    Hoy en día, es posible manejar un cilindro neumático mediante servo-válvulas proporcionales

    [2] o el uso de válvulas de bajo costo tipo on/off [3], [4], [1], [5]. Al principio, sólo se utilizaban

    servoválvulas proporcionales costosas para el control de posición. Para manejar las válvulas

    on/off es común utilizar la técnica por modulación por ancho de pulso (pwm, pos sus siglas

  • 2

    en inglés). Mediante el uso de la técnica de pwm se regula los tiempos de on/off de las

    válvulas. Aunque el uso de válvulas on/off tiene algunos problemas con respecto a su tiempo

    de vida, debido a la frecuencia de conmutación. El estudio y la aplicación de válvulas on/off

    para el control de un pistón neumático ha atraído la atención de muchos investigadores.

    En [1], se propone un algoritmo de pulso pwm válvula para manejar válvulas solenoides on/ff

    en lugar de usar servo-válvulas, con el objetivo de desarrollar un sistema de posición de

    actuador neumático que se rápido, preciso y barato.

    Una estrategia de servo control robusto se propone en [5], para el control de un cilindro

    neumático el cual está impulsado por dos válvulas on/off. En [4], el promedio de la dinámica

    del modelo del sistema se utiliza para transformar un sistema no lineal, con entrada pwm (el

    cual es discontinuo y, posiblemente, no afín en la entrada) en un sistema no lineal

    equivalente que sea continua y afín en el control de entrada. Este enfoque se aplica a un

    actuador neumático controlado por un par de válvulas solenoide de tres vías. El sistema

    neumático se transforma en su promedio equivalente, y un controlador de modos deslizantes

    se desarrolla con base en el modelo resultante

    En [3] se desarrolla una ley de control para un sistema neumático de control de movimiento

    de bajo costo, utilizando cuatro válvulas on/off y un sensor de retroalimentación de posición.

    No se usa pwm, sino control por modos deslizantes.

    La estrategia de control utilizado en [1] es interesante. El control de posición se realiza en

    dos partes. En la primera parte, se desarrolla un sistema para manejar dos válvulas on/off

    con una sola entrada de control, de manera que la relación entre el control de entrada y la

    velocidad del cilindro sea lineal; la segunda parte consiste en un controlador lineal para

    controlar el sistema simplificado. Se señala en [3] que, si se establece esta relación lineal, el

    sistema neumático no lineal será más fácil de controlar y con un mayor nivel de precisión.

    En este proyecto se considera un solo cilindro neumático, que son manejados por dos

    válvulas solenoides tipo on/off. Se calcula el nivel alto de las señales pwm que activan las

    válvulas on/off utilizando una función analítica. Esta función se construye por medio de

    splines y depende del control de entrada de u, tal que con la función se calcula el ciclo útil de

  • 3

    la señal PWM en lazo abierto. Además, los parámetros utilizados para definir los splines son

    encontrados por la optimización. Por lo que el uso de esta función origina una aproximación

    lineal óptima de la respuesta del pistón. Esto mejora el esquema pwm dado por [1]. Por lo

    tanto, el sistema neumático no lineal, que tiene dos entradas discretas, se transforma en un

    sistema lineal equivalente, con una entrada continua. Además, se puede controlar el sistema

    linealizado mediante un control en lazo cerrado.

    II. MODELO DEL SISTEMA NEUMÁTICO

    En esta sección, se describe y modela el sistema neumático que se considera en este

    documento.

    A. Descripción del sistema neumática

    En la Fig. 1 se muestra el sistema neumático que se considera en este trabajo. El sistema

    consiste de un cilindro neumático doble, con un par de válvulas 2/3 de tipo on/off las cuales

    manejan el aire suministrado a las dos cámaras, A y B. En este proyecto no se considera el

    control en lazo cerrado.

    Las presiones en las cámaras A y B se denotan por Pa y Pb, respectivamente; Pe es la

    presión de escape y Ps es la presión de suministro del aire. La longitud del cilindro se denota

    por L, la posición del pistón se denota por x y se mide desde el centro. Además, se puede

    acoplar una carga en el vástago.

    Se usa una señal pwm para manejar las válvulas on/off de una señal pwm se utiliza. La señal

    pwm se caracteriza por su período, TC, y su ciclo de trabajo se denotan por Da y Db, de las

    válvulas A y B, respectivamente. Aunque las válvulas son de velocidad de respuesta alta, no

    pueden responder al instante, por lo que existe un tiempo de retardo de TVR, que se conoce

    como tiempo de respuesta de la válvula on/off.

    Con el fin de controlar el pistón, se regula el caudal de aire que entran a un lado del cilindro,

    mientras que se regula al mismo tiempo el caudal de aire de salida del lado opuesto del

  • 4

    cilindro. El caudal de aire se regula por el ancho de la señal pwm, de modo que con nivel alto

    la válvula se encuentra activada y la presión de suministro se aplica directamente a la

    cámara, y cuando la señal pwm está en nivel bajo la válvula está desactivada y la cámara se

    conecta a la presión de salida.

    Fig. 1. Diagrama esquemático del sistema neumático completo

    B. Modelado matemático del sistema neumático

    Para aplicar la metodología propuesta es necesario obtener una descripción matemática del

    comportamiento dinámico del sistema descrito en la Sección II-A.

    El modelo dinámico del sistema neumático se puede obtener modelando matemáticamente

    las tres partes principales del sistema [5]: las válvulas de control tipo on/ff, el cilindro

    neumático y la carga mecánica. Así, los modelos individuales pueden ser acoplados para

    modelar la dinámica del sistema neumático.

    1) Modelo de las válvulas on/off de control. Con base en el supuesto de flujo isentrópico,

  • 5

    el flujo másico a través de un orificio de la válvula se describe en la Ec. 1, para una sustancia

    compresible, ya sea que se encuentre en régimen de flujo sónico (estrangulado) o

    subsónicas (no estrangulado).

    ( ) ,~, ⎟⎟⎠

    ⎞⎜⎜⎝

    ⎛=

    u

    duvoddu P

    PfT

    PACCPPm& (1)

    donde Cd es el coeficiente de descarga del orificio de la válvula, Av es el área efectiva de la

    sección transversal del orificio de la válvula, Co es una constante que depende en las

    propiedades del fluido, T es la temperatura del fluido, f~

    es una función no lineal de Pu y Pd,

    las cuales son las presiones absolutas arriba y abajo, respectivamente. La función f~ es dada

    por la Ec. 2,

    ⎪⎪⎪

    ⎪⎪⎪

  • 6

    ( ),outinc

    cc

    c

    cc mmV

    RTkPVVkP &&&

    & −+−= (3)

    donde el subíndice “c” se usa para denotar una propiedad relacionada con las cámaras A o B

    del cilindro, y outin mm && , son la razones del flujo másico que entran y salen de la cámara, respectivamente.

    3) Modelo dinámico de la carga. La dinámica del pistón se describe por la segunda ley de

    Newton,

    xmF &&=∑ (4)

    donde m incluye la masa del pistón, de los sensores y la posible carga, y x&& denota la aceleración del vástago. Las fuerzas en el sistema son la fuerza de presión neumática, Fp,

    las fuerzas de fricción, Ff, y cualquier fuerza externa aplicada al pistón, Fext, la cual se asume

    que es cero. De esta manera, la ec. 4 puede ser escrita como Ec. 5,

    fp FFxm −=&& (5)

    donde bbaap PAPAF −= , Aa y Ab denotan el área del pistón en la cámara A y B,

    respectivamente. La fuerza de fricción Ff puede ser formada por una fuerza de fricción

    estática Fs (es una fuerza transitoria que existe hasta que el pistón inicie su movimiento), por

    la fuerza de fricción de Coulomb Fc (es una fuerza constante que depende de la dirección de

    movimiento) y por la fuerza de fricción viscosa Fv. Por simplicidad, las fuerzas de fricción

    pueden ser consideradas como xBFKFKF vccss &=== ,, , tal que la fuerza de fricción total

    puede ser escrita como se indica en la Ec. 6,

    ( )( ) ( )

    ( ) ( )⎪⎩

    ⎪⎨

    >≠+≥=

  • 7

    La Ec. 6 acopla las dinámicas del vástago con las dinámicas de las cámaras A y B.

    4) Modelo del sistema interconectado. El modelo matemático del sistema completo se

    puede obtener tomando las Ecs. 3 y 5, como se muestra en la Ec. 7,

    [ ]

    ( ) ( )[ ]{ }

    ( ) ( )[ ]{ }aebboutbbsbinbb

    beaaoutaasainaa

    fbbaa

    xPPmxPPmRTPxxLkP

    xPPmxPPmRTPxxLkP

    FPAPAm

    x

    ,,

    2

    ,,

    2

    1

    __

    __

    &&&&

    &&&&

    &&

    −+Δ+−

    =

    −+−Δ++

    =

    −−=

    (7)

    donde los volúmenes de las cámaras Va y Vb se calculan como,

    ⎟⎠⎞

    ⎜⎝⎛ Δ+−=⎟

    ⎠⎞

    ⎜⎝⎛ Δ++= xLAVxLAV bbaa 2

    ,2

    , el término Δ se considera como una longitud extra

    equivalente del cilindro, y aproxima el volumen residual generado por el espacio muerto, esto

    es, los tubos de conexión y aditamentos. Las razones de flujo que entran y salen, se calculan

    usando la Ec. 1 y al considerar cero fugas. Las entradas de control xa, xb tienen dos valores

    discretos, {1,0}, los cuales indican si la válvula solenoide A, o B, está activada o desactivada.

    En la Ec. 7, se considera que la temperatura T del aire dentro del sistema es igual a la

    temperatura ambiente, esto se debe a que algunas investigaciones indican una pequeña

    diferencia en la respuesta del modelo del cilindro neumático si se asume un proceso

    isotérmico o adiabático [6].

    III. PLANTEAMIENTO DEL PROBLEMA DE CONTROL

    El uso de válvulas on/off para controlar cilindros neumáticos es una excelente alternativa

    desde el punto de vista económica con respecto al uso de válvulas serbo proporcionales. Sin

    embargo, representa un reto a la teoría de control, debido a las no linealidades que se

    generan a los flujos pulsantes y las múltiples entradas. De aquí, el problema que se

    considera es diseñar una estrategia para controlar un cilindro neumático que está actuado

    por dos válvulas on/off.

  • 8

    La solución propuesta consiste en transformar el sistema neumático de dos entradas en uno

    de una sola entrada con respuesta de velocidad lineal y óptima. Por lo que el sistema lineal

    resultante puede ser controlado controladores lineales clásicos.

    Por lo que la solución propuesta mejora el esquema de linealización propuesta en [1], tal que

    se reducen los problemas de control indicados. Los puntos principales tomados de [1] se

    describen en la Sección III-A.

    A. Antecedentes

    En [1], el control de posición se resuelve en tres etapas. En la primera etapa se obtiene una

    aproximación lineal al tomar la velocidad final del vástago, en la segunda etapa, el nuevo

    sistema lineal se modela usando un modelo ARX (en inglés, autoregressive with external

    input) en diferentes puntos de reposo; y en la tercera fase se emplea un esquema de control

    tipo PID para controlar el sistema neumático. Solo se estudia la primera etapa, debido a la

    importancia de este proyecto. En [1], se utiliza una entrada tipo pwm para manejar las dos

    válvulas on/off, el tema central es modificar su ciclo de trabajo D para obtener la respuesta

    deseada.

    Los enfoques comunes que se usan para determinar cuando activar las válvulas son los de

    métodos presurizados y no presurizados. El método no presurizado consiste en no presurizar

    una y la otra cámara se presuriza en una forma lineal, este método produce una velocidad de

    respuesta grande al igual que una banda muerta grande en la respuesta, debido a que las

    válvulas no responden si el tiempo de activación de la señal pwm es menor que el Tvr,. Con

    el método presurización una cámara se presuriza y la otra se desminuye la presión en forma

    lineal, la cual origina una zona muerta menor, pero con una pequeña velocidad de respuesta.

    El método propuesto por [1] consiste en la combinación de los métodos presurizados y no

    presurizados, y teniendo en cuenta el Tvr, donde la velocidad final es proporcional a la

    entrada u. Estos métodos se conocen como métodos pulsantes y el ancho de la señal pwm

    se calcula a partir de una función de una nueva variable de control, [ ]1,1−∈u . En la Fig. 2(a) se muestra la relación entre el ciclo útil para cada válvula, Da y Db, y la entrada de control u.

    En a Fig. 2 (b) se muestra la relación entre la velocidad final y la entrada de control u.

  • 9

    (a) (b)

    Fig. 2 Métodos pulsantes propuestos por [1]. (a) Estrategia de de ciclo útil pwm, (b)

    Comportamiento de la velocidad final

    Con base en el control en lazo cerrado, se señalan, las siguientes conclusiones. Al utilizar el

    método de no presurización la velocidad de la respuesta es la mayor pero origina una zona

    muerta muy grande produciendo un sobre paso grande en la respuesta transitoria, pero el

    método de presurización redujo significativamente el sobrepaso pero también la velocidad de

    respuesta. Sin embargo, el tercer método propuesto mejora la velocidad de respuesta con el

    sobrepaso insignificante. Por lo que se afirma la siguiente observación,

    Observación 1. Si el método pulsante reduce la zona muerta de la respuesta de

    velocidad, define una aproximación lineal y aumenta su velocidad, las características de

    la respuesta del sistema en lazo cerrado serán mejor.

    En cierto sentido, la Observación 1 complementa la observación que se hace en [3].

    IV. SOLUCIÓN PROPUESTA

    La estrategia de solución propuesta ofrece un método para simplificar el problema de control

    del cilindro neumático, que tiene dos entradas discretas, debido a las dos válvulas on/off, y a

  • 10

    los efectos no lineales (fuerzas de fricción, zona muerta, compresibilidad del aire). Este

    método representa un control en lazo abierto que calcula los ciclo útil Da y Db, de los dos

    señales pwm que manejan a las válvulas, de manera que se obtiene un sistema con

    respuesta entrada / salida de forma lineal. Para definir esta respuesta lineal se considera la

    velocidad final con respecto a la nueva salida continua del controlador.

    Los ciclos útiles Da y Db, que generan una respuesta deseada, se determinan mediante un

    procedimiento de optimización. Posteriormente se demostrará que este esquema óptimo

    ofrece una aproximación lineal, con la máxima velocidad de respuesta y zona muerta

    mínima. Por lo que, el sistema desarrollado mejora aquí los resultados dados [1].

    Una vez que el esquema óptimo linealiza en una forma de lazo abierto, se debe usar un

    control en lazo cerrado para controlar la posición del cilindro. El desempeño del sistema en

    lazo cerrado se mejora con el uso del esquema linealizante porque se reduce

    significativamente las nolinealidades.

    A. Construcción de los perfiles de control para las válvulas

    Los ciclos útiles Da y Db se construyen en función de una nueva entrada de control

    normalizada [ ]1,1−∈u , como se muestra en la Ec. 8,

    ( ) ( )ufDD ba =, (8)

    o en forma explicita, ( ) ( )ufDufD ba 21 , == , donde ( )21, fff = . Así que, Da y Db son funciones a determinarse.

    Se usan funciones tipo splines para construir las funciones ( )uf1 y ( )uf 2 . Se llama spline a cualquier función polinomial suave a tramos. Se tiene dos enfoques generales para definir

    una spline: la forma-B (usa funciones bases) y forma-pp (se usa polinomios a tramos). En

    particular, se usa la forma-pp, debido a que es fácil definirlas y su evaluación es más

    eficiente con respecto a la forma-B. Además, podría ser implementado más fácilmente en un

    microprocesador para controlar un sistema neumático físico.

  • 11

    Si se divide el intervalo [-1,1] en N intervalos suficientemente pequeños [ ]1, +jj uu , con 110 =

  • 12

    La función Db se define de manera similar.

    B. Formulation of the optimization problem

    La observación 2 indica que el ciclo útil para la válvula Da se parametriza usando (N +1)

    valores. Se usa un algoritmo de optimización para encontrar los valores Da( uj) y Db(uj).

    Por simplicidad, se definen los siguientes parámetros,

    ( ) ( ) ( )( ) ( ) ( ).,,,

    ,,,,

    121201

    1100

    NbNbNbN

    NaNaa

    uDuDuDuDuDuD===

    ===

    +++ ππππππK

    K

    Por lo que, el vector de parámetros π se define como

    [ ] 2212210 ++ ℜ∈= NNN πππππ L .

    La velocidad del pistón se puede encontrar resolviendo la Ec. 7, la cual depende del flujo

    másico que entra y sale de las cámaras. Puesto que la cantidad de flujo másico depende del

    ciclo útil de la señal pwm, se puede establecer que la velocidad final vf del cilindro está en

    relación con el ciclo útil de las señales pwm, i.e.,

    ( ) ( )πFuv f =

    Aunque por el momento la forma exacta de esta relación ( )πF no es importante, lo que es

    necesario es saber que existe y que se puede calcular numéricamente al resolver las

    ecuaciones Ec. 7.

    El comportamiento lineal de vf con respecto a la entrada de control u, se puede determinar al

    medir el error con respecto a una línea recta βα +u , donde la línea recta aproxima en algún

  • 13

    sentido los valores de vf. Es claro que α y β son la pendiente y el desvío de la línea,

    respectivamente.

    La desviación de vf con respecto a la línea recta βα +u , para cada valor de uj, donde j=0,...,N

    , se define como,

    ( ) ( )( ) ( ) ,,,0,

    ,

    NjuF

    uuve

    j

    jjfj

    K=+−=

    +−=

    βαπβα

    Si se normaliza el error total cuadrático, Te ,

    10

    2

    +=∑

    =

    N

    ee

    N

    jj

    T (12)

    Así, si se desea un comportamiento lineal de vf a medida que la entrada de control u cambia,

    se formula el siguiente problema de optimización paramétrica,

    ( ) ( ),12,,0,100

    ,,,0,..

    1min 23221

    +=

  • 14

    2. Calcular la velocidad final vf, usando la Ec. 7, para cada uj, j=0,...,N.

    3. Calcular la línea recta que aproxima los valores obtenidos en el punto 2, i.e.

    determinar α y β .

    4. Calcular el error normalizado Te , Ec. 12. 5. Resolver el problema de programación no lineal descrito Ec. 13. Actualizar el vector de

    parámetros π .

    6. Ir al paso 2 hasta que se cumpla un criterio de paro.

    Esta estrategia representa una pseudo linealización del comportamiento no lineal del sistema

    neumático, debido a que no se toma en cuenta la historia temporal de su respuesta, sólo se

    considera su velocidad final.

    V. SIMULACIÓN

    Si se aplica el algoritmo previamente dado, a un sistema neumático con los siguientes

    parámetros: 1m,LPa,106Pa,101 55 =×=×= se PP m108.0425A 2-4a ×= , m107.8A 2-6b ×= m104A 2-6v ×= ,

    1M kg= , N79K s = , N69K c = , mNs /25B = , s3vr 101T −×= . Por supuesto, se considera al aire como

    fluido, con una temperatura T=293K.

    Se diseñaron e implementaron rutinas en MatLab® para resolver el algoritmo de

    optimización. La función ode45() se uso para resolver el sistema no lineal dado por la Ec. 7,

    con un paso de integración fijo de s3105.0h −×= . Se uso un período de la señal pwm de

    s3c 104T−×= .

    Se uso la función fminsearch() del toolbox de MatLab, con los siguientes parámetros de

    simulación: sim_para = optimset('MaxFunEvals', 15000, 'MaxIter', 1500, 'TolFun', 1e-8, 'TolX',

    1e-3). Dentro de las rutinas implementadas se consideraron las restricciones sobre el vector

    de parámetros.

    No se hizo una partición simétrica para u, de tal manera que es más fina cerca del origen.

    Con el propósito de asegurar un mejor comportamiento lineal a bajas velocidades. Las

    particiones para u fueron,

    1]0.80.60.40.20.150.10.05 0 0.05- 0.1- 0.15-0.2- 0.4- 0.6-0.8- -1[u =

  • 15

    Los valores iniciales para el vector de parámetros, π, i.e. para Da y Db, se escogieron como,

    100] 90 80 70 60 57.5 55 52.5 50 47.5 45 42.5 40 30 20 10 0[Da =

    0] 10 20 30 40 42.5 45 47.5 50 52.5 55 57.5 60 70 80 90 100[Db =

    Los valores de α y β se calculan usando un ajuste por mínimos cuadrados.

    En la Fig. 3 se muestra los resultados obtenidos con los pesos w1=500, w2=1 y w3=1, donde

    el mayor peso se da al error de linealización. Además, la función costo tiene el valor óptimo

    de de J = 2.5687.

    (a) (b)

    Fig. 3 Método pulsante óptimo. (a) Estrategia del ciclo útil de pwm, (b) Comportamiento de la

    velocidad final

    La Fig. 3(a) muestra el ciclo óptimo útil de la señal en función de la entrada control u.

    Además, se puede notar que el sistema no lineal dado por la Ec.7 se linealiza usando un

    esquema en lazo cerrado.

    El error cuadrático de linealización del esquema pulsante dado en [1] fue 3105.1 −×=Te y

    para el esquema pulsante desarrollado aquí es 15 veces menor, i.e. 4100.1 −×=Te . Ver Ec. 12.

  • 16

    Se establece en [3], que si se logra una relación lineal entre la entrada de control y la

    velocidad del pistón, el sistema neumático no lineal será más fácil de controlar con un nivel

    alto de precisión.

    VI. CONCLUSIONES

    El esquema pulsante desarrollado mejora los resultados de los esquemas pulsantes dados

    en [1], debido a que da una aproximación lineal de la respuesta del pistón, reduce la zona

    muerta y da la máxima velocidad en la respuesta.

    Por supuesto es esquema pulsante se puede usar dentro un esquema de lazo cerrado para

    alcanzar un objetivo de control.

    Actualmente se tiene la estructura física del banco de pruebas, sin embargo es necesario

    aún concretar la etapa de electrónica y la programación de los algoritmos para aplicar la

    metodología mostrada.

    VII. BIBLIOGRAFÍA

    [1] R. B. van Varseveld, and G. M. Bone, “Accurate Position Control of a Pneumatic Actuator

    Using On/Off Solenoid Valves,” in IEEE/ASME Transactions on Mechatronics, vol. 2, no.3,

    pp. 195-204, september 1997.

    [2] G. M. Bone and S. Ning, “Experimental Comparison of Position Tracking Control

    Algorithms for Pneumatic Cylinder Actuators” in IEEE/ASME Transactions on Mechatronics,

    vol. 12, no.5 pp. 557-561, october 2007.

    [3] T. Nguyen, J. Leavitt, F. Jabbari and J. E. Bobrow, “Accurate Sliding-Mode Control of

    Pneumatic Systems Using Low-Cost Solenoid Valves” in IEEE/ASME Transactions on

    Mechatronics, vol. 1, no.2, pp. 216-219, april 2007.

    [4] X. Shen, J. Zhang, E. J. Barth and M. Goldfarb, “Nonlinear Model-Based Control of Pulse

    Width Modulated Pneumatic Servo Systems” in ASME Journal of Dynamic Systems,

    Measurement, and Control, vol. 128, no. 3, pp. 663-669, september 2006.

  • 17

    [5] J. Wang. and D. J. D. Wang, P. R. Moore and J. Pu, “Modelling study, analysis and robust

    servocontrol of pneumatic cylinder actuator systems”, IEEE Proceedings Control Theory

    Applications, vol. 148, no. 1, pp. 35-42, january 2001.

    [6] P.D. Henri, J. M. Hollerbach and A. Nahvi, “An analytical and experimental investigation of

    a jet pipe controlled electropneumatic actuator,” IEEE Transactions on Robotics and

    Automation, vol. 14, no. 4, pp. 601-611, august 1998.

    VIII. ANEXOS

    En este anexo se da el código de las funciones implemtadas en MatLab

    A. Función para análisis de esquemas pulsantes function cerma08

    %% Programa que permite analizar la respuesta de los 4 esquemas de linealizacion

    %% En el modelo dinamico del cilindro se calcula, pero no se usa, la dinamica de retardo

    %% de las electrovalvulas

    close all

    clear all

    clc

    parametros

    [num,den]=butter(1,100,'s');%bode(num,den);hold on

    syst=tf(num,den);

    tfin=2.5;% Si tfin=1.0, la respuesta es mas lineal

    for je=1:4, % se escoge el esquema a graficar

    disp(sprintf('\nSe esta procesando el esquema %d',je));

    u=-1:0.1:1;

    param(5)=je;

    for j=1:length(u),

    disp(sprintf('Se esta procesando u =%4.2f',u(j)));

    tic

    param(4)=u(j);

    x1o=-0.037;x2o=0;x5o=0;x6o=0;

    x3o=1e5;x4o=1e5;

    [t,x]=ode45(@dinpist,[0:h:tfin],[x1o,x2o,x3o,x4o,x5o,x6o],odeset,param);

    x1=x(:,1);

    indx1=find(abs(x1)>0.5);

  • 18

    if length(indx1)>=1,

    indx1=indx1(1);

    else

    indx1=length(t);

    end

    t=t(1:indx1);

    x1=x(1:indx1,1);x2=x(1:indx1,2);x3=x(1:indx1,3);x4=x(1:indx1,4);x5=x(1:indx1,5);x6=x(1:indx1,6);

    rdx2=0;

    for i=1:indx1,

    rdx2(i)=(1/M)*(-fuerza_fr(Aa*x3(i)-Ab*x4(i),x2(i)) + Aa*x3(i)-Ab*x4(i));

    end

    dx2=diff(x2);dx2=dx2/h;

    dx2=rdx2;

    [fdx2,t1]=lsim(syst,dx2,t(1:length(dx2)));

    [td,tp,mp,ts]=param_desem(t,x2);

    mtd(je,j)=td;mtp(je,j)=tp;mmp(je,j)=mp;mts(je,j)=ts;

    vel_final_fu(je,j)=x2(end);

    dx2=x2((end-round(0.25/h)):end);

    dx2=diff(dx2);dx2=dx2/h;

    ndx2(je,j)=sum(dx2)/length(dx2);

    disp(sprintf('La cual duro %f segundos',toc));

    end

    %%%% Se grafican la velocidad y aceleracion final

    end

    hhf=figure;

    hh(1)=subplot(221);hh(2)=subplot(222);hh(3)=subplot(223);hh(4)=subplot(224);

    for je=1:4,

    coeffvel=polyfit(u,vel_final_fu(je,:),1);

    mensa1=sprintf('Los coeficientes de la aproximacion lineal, para el esquema %d, son:: %f %f',je,coeffvel);

    disp(mensa1)

    vel_aprox=polyval(coeffvel,u);

    ut=min(u):0.01:max(u);

    velt=polyval(coeffvel,ut);

    figure(hhf)

    subplot(hh(je));plot(u,vel_final_fu(je,:),'b*',u,ndx2(je,:),'ro',ut,velt);

    set(gca,'xtick',[-u(1):0.1:u(end)]);grid;drawnow

    disp('La velocidad final es :')

    disp(vel_final_fu(je,:))

    end

  • 19

    % Se grafica el desempeño de la respuesta de velocidad, para diferentes valores de u

    %

    figure

    subplot(221)

    plot(u,mtd(1,:),'r',u,mtd(2,:),'b',u,mtd(3,:),'k',u,mtd(4,:),'y');grid

    set(gca,'xtick',[-1:0.1:1]);

    title('Tiempo de retardo, esquemas: 1) rojo 2)azul 3) negro 4)amarillo')

    subplot(222)

    plot(u,mtp(1,:),'r',u,mtp(2,:),'b',u,mtp(3,:),'k',u,mtp(4,:),'y');grid

    set(gca,'xtick',[-1:0.1:1]);

    title('Tiempo pico, esquemas: 1) rojo 2)azul 3) negro 4)amarillo')

    subplot(223)

    plot(u,mmp(1,:),'r',u,mmp(2,:),'b',u,mmp(3,:),'k',u,mmp(4,:),'y');grid

    set(gca,'xtick',[-1:0.1:1]);

    title('Max. sobreimpulso, esquemas: 1) rojo 2)azul 3) negro 4)amarillo')

    subplot(224)

    plot(u,mts(1,:),'r',u,mts(2,:),'b',u,mts(3,:),'k',u,mts(4,:),'y');grid

    set(gca,'xtick',[-1:0.1:1]);

    title('Tiempo de establ, esquemas: 1) rojo 2)azul 3) negro 4)amarillo')

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%%%%%%%%%%%%%%%%%%

    function dx=dinpist(t,x,param)%

    %global xa xb %% entradas de control para cada electrovalvula

    xp=x(1); %%

    dxp=x(2); %%

    pa=x(3); %% Presion en la camara 1

    pb=x(4); %% Presion en la camara 2

    xva=x(5); %% apertura de la electrovalvula en la camara A

    xvb=x(6); %% apertura de la electrovalvula en la camara B

    global Tresp_val Pe Ps k R Cd Co Ts long Aa Ab Av M delta Tpwm h

    %%%% Parametros del piston

    pars=k*R*Ts;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if xp>long/2,

    dxp=0;

    elseif xp

  • 20

    Vb=Ab*(long/2-xp+delta);

    d_Va=Aa*(dxp);

    d_Vb=Ab*(-dxp);

    %%%%%%% Señal de control, generada por pwm

    u=param(4);

    esq=param(5);

    knc=floor(t/Tpwm);%% Numero de intervalo o de ciclo de pwm, de duracion Tpwm, del instante actual

    tp_actual=t-knc*Tpwm; % tiempo relatiova actual, dentro del numero de periodo de pwm

    global Da Db % Sirve como memoria, para cuando no se cumple la condicion dada en el if siguiente

    if abs(tp_actual)

  • 21

    end

    dx=[d_xp;d_dxp;d_pa;d_pb;d_xva;d_xvb];

    function ff=fun_flujo(pr,pu)

    Cr=0.528;

    Ck=3.864;

    %ff=0;

    if (pr < Cr)% & (pr >= (1e5/pu))

    ff=1;

    elseif (pr Cr),

    ff=Ck*sqrt(pr^1.4286-pr^1.7143);

    else

    ff=0;

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function fr=fuerza_fr(f_emp,vel)

    global Ks Kc B_mas B_menos

    if vel > 0

    B=B_mas;

    else

    B=B_menos;

    end

    fr=B*vel+f_emp;

    if (vel==0) & (abs(f_emp)Ks)

    fr=B*vel+Kc*sign(vel);

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f

    unction [td,tp,mp,ts]=param_desem(t,x2)

    %td :: tiempo de retardo, si no existe se regresa el tiempo final

    %tp :: tiempo pico

    %mp :: maximo sobreimpulso, si es cero

    %ts :: tiempo de establecimiento, si no existe se regresa el tiempo final

    x2=abs(x2);% Para considerar los casos de respuesta negativa

    indfind=find(x2>0);

    if length(indfind)==0,

    td=NaN;%t(end);

  • 22

    else

    td=t(indfind(1));

    end

    tp=max(x2);indfind=find(x2==tp);

    tp=t(indfind(1));

    mp=x2(indfind(1))-x2(end);

    yss=x2(end);

    yss_min=0.95*yss;

    yss_max=1.05*yss;

    indfind1=find(x2yss_max);

    if (length(indfind1)==0) | (length(indfind2)==0),

    ts=NaN;%t(end);

    else

    tmin=t(indfind1(end));

    tmax=t(indfind2(end));

    ts=max([tmin tmax]);

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f

    unction salida=pwmt(tp_actual,Tcu)

    salida=0;

    if tp_actual

  • 23

    elseif u>=0

    D_a=100;

    D_b=-100*(u-1);

    end

    elseif esq==3

    D_a=50*(u+1);

    D_b=-50*(u-1);

    elseif esq==4

    u=u*100;

    dmin=(Tresp_val/Tpwm)*100;

    di=100-dmin;

    umax=100-dmin;

    ui=2*(di-50)*100/umax;

    if (u>=-ui) & (uui)

    D_a=di+(u-ui)*(100-2*dmin)/(ui);

    D_b=dmin;

    elseif (u

  • 24

    global u part_u

    par_opti=[18.2212 23.6068 23.9038 37.4860 29.5602 62.3702 87.8342 92.5512 109.3678 109.5662...

    87.4661 66.1233 68.4760 33.2675 36.2988 35.1087 27.1563 4.0777];

    par_opti=[43.1793 29.6424 35.8185 47.5000 50.0000 99.9954 60.6215 77.8221 74.6113 50.7304 66.6970...

    61.6325 52.5000 50.0000 99.9997 36.7722 21.0414 20.0752];

    par_opti=[0 12.5000 25.0000 37.4981 50.0000 62.5008 74.9968 87.4995 100.0000 100.0000 87.4993...

    74.9880 62.5013 50.0000 37.4988 25.0000 12.5000 0];

    par_opti3=[0.0001,10.2496,20.4581,29.9195,39.3648,41.4626,43.6341,43.9044,49.5185,55.4203,57.2620,58.8967,62.4120,

    68.9308,73.7889,90.3709,101.3454,104.0497,88.9726,73.3945,68.1840,62.5200,60.0657,57.1295,52.5252,51.0871,47.1883

    ,44.7519,41.4183,39.8604,30.3328,19.3146,10.0742,0.0001];

    part_u=[-1:0.2:-0.4 -0.2:0.05:0.2 0.4:0.2:1];

    u=part_u;

    graf_perf(part_u,par_opti3);

    fmodelo_validar(par_opti3,param);

    fmodelo_validar(par_opti,param)

    function graf_perf(part_u,pesos)

    % se grafica los perfiles de control de los tiempos de ciclo util del

    % piston, usando la parametrizacion ppform

    par_opti=pesos;

    ind100=find(par_opti>100);

    par_opti(ind100)=100*ones(size(ind100));

    k2=round(length(par_opti)/2);

    par_ya=par_opti(1:k2);

    par_yb=par_opti(k2+1:2*k2);

    ind25=find(par_opti

  • 25

    D_za(i)=ppformn(u(i),part_u,par_ya);

    D_zb(i)=ppformn(u(i),part_u,par_yb);

    end

    figure

    plot(u,D_za,'r',u,D_zb,'b:')

    function fobj=fmodelo_validar(par_opti,param)

    ind25=find(par_opti

  • 26

    mtd(j)=td;mtp(j)=tp;mmp(j)=mp;mts(j)=ts;

    vel_final_fu(j)=x2(end);

    %%%%% Para el calculo del tiempo de cada ciclo

    disp(sprintf('La cual duro %f segundos',toc));

    end

    disp('Las velocidades son: ')

    vel_final_fu

    disp('Los coeficientes de la linea recta son')

    coeffvel=polyfit(u,vel_final_fu,1)

    vel_aprox=polyval(coeffvel,u);

    error_vel=vel_final_fu-vel_aprox;

    disp('El error cuadratico de linealizacion es:::')

    fobj1=sum(error_vel.^2)/length(u)

    disp('La funcion objetivo relacionada con la pendiente es:::')

    fobj2=(1/coeffvel(1))^2%pendiente de la recta

    fobj3=coeffvel(2)^2;

    disp('La funcion objetivo total es::::')

    fobj=500*fobj1+fobj2+fobj3

    % Para graficar resultados, para el caso en que se use solo la funcion fobjetivo=fmodelo(par_opti,param)

    ut=min(u):0.01:max(u);

    velt=polyval(coeffvel,ut);

    figure;plot(u,vel_final_fu,'b*',ut,velt,'k');set(gca,'xtick',[-1:0.1:1]);grid;drawnow

    function optimizar

    close all

    clear all

    global Da Db Tpwm

    param(1)=0.1000000375;

    %%%% Parametros de la señal pwm

    f=250;%62.5;

    h=0.0005;

    Tpwm=1/f; %OJO cambiar tambien en function [D_a,D_b]=perfil_u(u,esq), esquema 4

    param(2)=Tpwm;

    param(3)=h;

    param(4)=0.2; % Valor de la señal de entrada u

    param(5)=2;%% Esquema de linealizacion

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    par_ya=[31.25,31.25,31.25,31.25,31.25,32.8125,36.25,39.6875,43.1250,46.5625,50.,...

    53.4375,56.875,60.3125,63.75,67.1875,72.5,79.375,86.25,93.125 100];

  • 27

    par_yb=[100,93.125,86.25,79.375,72.5,67.1875,63.75,60.3125,56.875,53.4375,50,46.5625,...

    43.1250,39.6875,36.25,32.8125,31.25,31.25,31.25,31.25,31.2500];

    par_opti=[par_ya par_yb];

    % % El resultado del sabado , funciones evaluadas 165 es:

    par_opti=[37.228910 43.182847 41.957667 43.955067 50.903407 55.842357 57.013717 59.902253 60.687825 60.899147

    60.192132 58.129329 57.381047 52.079513 43.047841 42.180242 42.106255 40.801766];

    par_opti=[0.0001 10.3161 20.0368 29.6175 38.2169 39.8031 42.6998 43.1944 49.0672 53.8748...

    56.4330 59.0550 61.4369 68.6765 76.1761 94.7269 112.0292 110.8695 92.4819 75.3753...

    68.2387 62.3785 54.5172 56.5333 50.2902 50.9750 46.6669 43.1108 40.9412 37.3978...

    29.5264 21.1738 10.1694 0.0001];

    global part_u u

    part_u=[-1:0.2:-0.4 -0.2:0.05:0.2 0.4:0.2:1];

    u=part_u;

    optio=optimset('Display','iter');

    optio = optimset(optio,'MaxFunEvals',15000,'MaxIter',1500,'TolFun',1e-8,'TolX',1e-3,'LargeScale','on');

    sol=fminsearch(@fmodelo,par_opti,optio,param)

    %sol=fmincon(@fmodelo,par_opti,[],[],[],[],zeros(size(par_opti)),100*ones(size(par_opti)),[],optio,param);

    par_opti=sol

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function fobj=fmodelo(par_opti,param)

    %% Se guardan los parametros calculados en un archivo, y se va actualizando

    %% cada vez que se llama esta funcion

    % par_opti

    direct='c:\matlab6p5\work\cerma08a.dat';

    fidw=fopen(direct,'a');

    fseek(fidw,0,'eof');

    fprintf(fidw,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f

    %f %f %f %f %f\n',par_opti);

    fclose(fidw);

    ind100=find(par_opti>100);

    par_opti(ind100)=100*ones(size(ind100));

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    k2=round(length(par_opti)/2);

    par_ya=par_opti(1:k2);

    par_yb=par_opti(k2+1:2*k2);

  • 28

    x1o=-0.037;x2o=0;x3o=1e5;x4o=1e5;x5o=0;x6o=0;

    [num,den]=butter(1,100,'s');%bode(num,den);hold on

    syst=tf(num,den);

    h=param(3);

    global u

    x1o=-0.037;x2o=0;x3o=1e5;x4o=1e5;x5o=0;x6o=0;

    param(6)=1;

    tf=2.0;

    for j=1:length(u),

    param(4)=u(j);

    [t,x]=ode45(@dinpist,[0 tf],[x1o,x2o,x3o,x4o],odeset,param,par_ya,par_yb);

    x2=x(:,2);

    x1=x(:,1);

    indx1=find(abs(x1)

  • 29

    % xva=x(5); %% apertura de la electrovalvula en la camara A

    % xvb=x(6); %% apertura de la electrovalvula en la camara B

    global Tresp_val

    Tresp_val=1e-3; %% Tiempo de abertura de las electrovalvulas

    %%%% Parametros del piston

    Pe=1e5;

    Ps=6e5;%6e5;

    k=1.40;

    R=287;

    Cd=0.8;

    Co=0.04041;

    Ts=293;

    long=1;

    Aa=8.0425e-004;%9.6211e-4;

    Ab=8.0425e-004;%8.4902e-4;

    %Ab=6.8425e-004;

    %Av=7.8e-6;%% diam=1/8=

    Av=4e-6;%param(1);

    M=1;

    delta=param(1); %Estimacion del aire residual

    %delta=0.1725;

    pars=k*R*Ts;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if xp>long/2,

    dxp=0;

    elseif xp

  • 30

    global Da Db % Sirve como memoria, para cuando no se cumple la condicion dada en el if siguiente

    if abs(tp_actual)

  • 31

    if xp>0.5,

    d_dxp=0;

    elseif xp= (1e5/pu))

    ff=1;

    elseif (pr Cr),

    ff=Ck*sqrt(pr^1.4286-pr^1.7143);

    else

    ff=0;

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%%%%%%%%%%%

    function fr=fuerza_fr(f_emp,vel)

    Ks=79;

    Kc=69;

    if vel > 0

    B=15.40;

    else

    B=43.3;

    end

    fr=B*vel+f_emp;

    if (vel==0) & (abs(f_emp)Ks)

    fr=B*vel+Kc*sign(vel);

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%%%%%%%%%%%

    function [td,tp,mp,ts]=param_desem(t,x2)

  • 32

    %td :: tiempo de retardo, si no existe se regresa el tiempo final

    %tp :: tiempo pico

    %mp :: maximo sobreimpulso, si es cero

    %ts :: tiempo de establecimiento, si no existe se regresa el tiempo final

    x2=abs(x2);% Para considerar los casos de respuesta negativa

    indfind=find(x2>0);

    if length(indfind)==0,

    td=NaN;%t(end);

    else

    td=t(indfind(1));

    end

    tp=max(x2);indfind=find(x2==tp);

    tp=t(indfind(1));

    mp=x2(indfind(1))-x2(end);

    yss=x2(end);

    yss_min=0.95*yss;

    yss_max=1.05*yss;

    indfind1=find(x2yss_max);

    if (length(indfind1)==0) | (length(indfind2)==0),

    ts=NaN;%t(end);

    else

    tmin=t(indfind1(end));

    tmax=t(indfind2(end));

    ts=max([tmin tmax]);

    end

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%%%%%%%%%%%%%

    function salida=pwmt(tp_actual,Tcu)

    salida=0;

    if tp_actual

  • 33

    elseif u>=0

    D_a=100*u;

    D_b=0;

    end

    elseif esq==2

    if u =0

    D_a=100;

    D_b=-100*(u-1);

    end

    elseif esq==3

    D_a=50*(u+1);

    D_b=-50*(u-1);

    elseif esq==4

    u=u*100;

    global Tresp_val Tpwm

    dmin=(Tresp_val/Tpwm)*100;

    di=100-dmin;

    umax=100-dmin;

    ui=2*(di-50)*100/umax;

    if (u>=-ui) & (uui)

    D_a=di+(u-ui)*(100-2*dmin)/(ui);

    D_b=dmin;

    elseif (u

  • 34

    umin=-0.2;

    umax=0.2;

    delta=0.1;

    k=floor((u-umin)/delta);

    if k>=floor((umax-umin)/delta),

    k=floor((umax-umin)/delta)-1;

    end

    uk=umin+k*delta;

    uk_1=umin+(k+1)*delta;

    yk=par_y(k+1);

    yk_1=par_y(k+2);

    D_z=((yk_1-yk)/(uk_1-uk))*(u-uk)+yk;

    function D_z=ppformn(u,part_u,par_y)

    if u>part_u(end),u=part_u(end);end

    ind_part_u=find(part_u