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