control pid y control fuzzy-montaÑo.farinango
TRANSCRIPT
AUTOMATIZACIÓN INDUSTRIAL MECATRÓNICA
CONTROL PID Y CONTROL FUZZY DE UNA PLANTA DE POSICIÓN ANGULAR EN MATLAB
Alejandro Farinango P.- Ana Montaño V.
1
CONTROL PID DE UNA PLANTA DE POSICIÓN ANGULAR
Alejandro Farinango Páez
[email protected] 0995639164
Ana Montaño Vizcaíno [email protected]
0992581399
Estudiantes de la carrera de Ingeniería Mecatrónica de la ESPE
1. RESUMEN
En el presente artículo se describe la forma
de diseñar e implementar un controlador PID
para una planta de posición angular, con la
ayuda de MATLAB, este sistema consta de
una entrada que es el set point (ángulo
deseado), en donde dependiendo del ángulo
deseado se realizará un controlador que
regule un pwm; el mismo que haga variar la
cantidad de voltaje suministrada al
ventilador.
2. ABSTRACT
This article describes how to design and
implement a PID controller for a plant
angular position with the help of MATLAB,
this system consists of an input that is the set
point (desired angle), where depending on
the desired angle will be a PWM controller
regulating one, the same amount that varies
the voltage supplied to the fan.
3. PALABRAS CLAVES
Comunicación Serial, PWM, PID, Matlab, Set point, Error.
4. INTRODUCCIÓN
4.1 Objetivo General: Diseñar e implementar un sistema de
control de posición angular,
utilizando el entorno de MATLAB y
con la ayuda de otro software como
el MIKROBASIC para la programación
del Pic 16F877A.
4.2 Objetivos Específicos:
Implementar la planta de control de posición angular.
Reconocer y Analizar el sistema.
Diseñar y desarrollar un programa que realice el controlador PID para la planta la cual se le puedan variar arbitrariamente sus constantes proporcionales, integrales y derivativas, para poder comprobar en forma real el comportamiento del sistema.
Estabilizar la planta lo más rápido que sea posible probando los diferentes constantes.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
2
5. GENERALIDADES 5.1 PID: uno de los controladores frecuentemente usados en la industria de procesos. En un controlador PID la variable de control se genera por términos proporcional al error, proporcional a la integral del error y proporcional a la derivada del error.
Figura 1: Diagrama de Bloques de un controlador PID
La figura 1 muestra el diagrama de bloques
de un clásico controlador PID en tiempo
continuo. Sintonizar el controlador involucra
ajustar los parámetros Kp, Ki y Kd para obtener
una respuesta satisfactoria. Las
características de un controlador PID son bien
conocidas y establecidas, y la mayoría de de
los controladores modernos están basadas
sobre formas PID. [1]
5.2 Sobrepico (overshoot:) Mp es la cantidad máxima que el sistema se sobrepasa en el transitorio su valor final dividido ese valor final (frecuentemente se lo da en porcentaje). [1]
5.3 Señal de salida: es la variable que se desea controlar (posición, velocidad,
presión, temperatura, etc.). También se denomina variable controlada. [1]
5.4 Tiempo de crecimiento (rise time):
tr es el tiempo que toma el sistema para alcanzar la vecindad de su nuevo set-point. [1].
5.5 Fenómeno wind-up: cuando un
actuador produce una saturación surge un salto brusco, además de que la saturación rompe el lazo de realimentación, ya que el único valor que proporciona será una constante.
A este fenómeno se le llama “wind-up”. Para evitarlo puede hacerse lo siguiente: Si el PID está implementado en código, no mediante un circuito analógico, es posible realizar una integración condicionada, es decir, solo se integra mientras no se alcance la saturación. También es relativamente facil asegurar por software que no se exigen cambios de referencia demasiado bruscos, que son los que provocan fácilmente la saturación de los actuadores. [3]
5.6 Tiempo de establecimiento (settling time): ts es el tiempo que toma el sistema para que el transitorio decaiga. [1]
5.7 Tiempo del pico (peak time): tp es el
tiempo que toma el sistema para alcanzar el máximo valor (el sobrepico). [1]
5.8 Señal de referencia: es el valor que
se desea que alcance la señal. [1]
5.9 Error: es la diferencia entre la señal de referencia y la señal de salida real. [1]
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
3
5.10 Señal de control: es la señal que produce el controlador para modificar la variable controlada de tal forma que se disminuya, o elimine, el error. [1]
5.11 Señal análoga: es una señal continua en el tiempo. [1]
5.12 Conversor análogo/digital: es un dispositivo que convierte una señal analógica en una señal digital (1 y 0). [1].
5.13 Planta: es el elemento físico que se desea controlar. [1]
6. MATERIALES Y DISEÑO DE
LA PLANTA
6.1 Materiales
Software MATLAB instalado en un PC
Cable DB9
Resistencias
Potenciómetro de 10k
Capacitores
Multímetro
PIC 16F877A
Fuente de 5VDC y 24 VDC
Optoacoplador
LCD
Ventilador de 24VDC
6.2 Diseño físico de la planta
Primero se hizo un diseño en Solid Works de
la planta con las medidas exactas de los ejes,
soportes para el potenciómetro. Los ejes se
fabricaron de balsa debido a su peso liviano,
y de madera los soportes y base. El perfil
naca como se observa en los planos en un
principio se intentó hacerle de madera pero
tras pruebas realizadas con el ventilador
resultaba muy pesado así que se optó por
ponerle un plato pequeño desechable En
anexos se adjunta los planos de la planta en
Solid works.
Figura 2: PLANTA
6.3 Circuito de potencia
Se realizó un circuito de potencia para el
ventilador usando un optoacoplador.
Figura 3: Control Potencia del ventilador
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
4
6.3 Circuito de lcd, potenciómetro,
ventilador, PIC
Figura 4: Circuito Total
6.5 Comunicación Serial
Por lo que para realizar nuestro controlador
utilizamos la herramienta MATLAB se
requiere mantener una comunicación entre
la computadora y la planta por lo que se
realizó una comunicación serial.
Se usó el protocolo RS-232, enviamos un
dato (set point) por la computadora a la
planta, esta información llega en forma de
bytes y la transmite de la misma manera a la
computadora, recibe y procesa el dato y
nuevamente transmite el dato a la planta
para esto utilizamos un conector DB9.
Figura 5: Configuración Puerto serial - Matlab
7. MODELAMIENTO DEL
SENSOR
(POTENCIÓMETRO) Se realizó el modelamiento del
potenciómetro realizando tomas de datos de
la variación del voltaje con respecto al
ángulo, esta toma de datos se la hizo en
Excel y se procedió a sacar la ecuación
respectiva del sensor.
Figura 6: Toma de datos
Figura 7 Ecuación del Sensor
8. IDENTIFICACIÓN DEL
SISTEMA Se realiza una identificación del sistema
antes una respuesta al escalón para ver el
rango óptimo de trabajo.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
5
Figura 8: Identificación del Sistema
Figura 9: Respuesta del sistema al regreso 1
Figura 10: Respuesta del sistema al regreso 2
Figura 11: Respuesta del sistema al regreso 3
9. DISEÑO DEL
CONTROLADOR
9.1 Algoritmo del controlador en Matlab
Una vez ingresadas las variables del
controlador en Matlab se procede a
programar el controlador.
Figura 12: Algoritmo Matlab
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
6
9.2 Constantes del controlador
Para el cálculo de las respectivas constantes
se utilizó el siguiente método:
Por aproximaciones – PRUEBA ERROR
Basándonos en las constantes que nos dió al
utilizar la herramienta PIDTOOL de MATLAB
pudimos tener una guía para seguir variando
las constantes a base del método prueba
error, este método resultó ser el mejor para
la selección de las constantes de control para
nuestra planta. Una vez adquiridas las
constantes con el pidtool, basándonos en
esos valores y mediante el método de
prueba error fuimos variando las constantes
kp, kd y ki hasta obtener una buena
respuesta del sistema.
Finalmente las constantes que se obtuvieron
para un buen controlador PID fueron las
siguientes:
Kp = 1.25
Ki= 0.1
Kd = 1
10. RESULTADOS A continuación se observarán las gráficas de la respuesta del sistemas para valores de ángulos bajos, medios y altos. Bajo – Ángulo de 5 grados
Figura 13: GUI de la respuesta del Sistema a 5 grados
Medios – Ángulo de 23 grados
Figura 14: GUI de la respuesta del Sistema a 23 grados
Alto – Ángulo de 40 grados
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
7
Figura 15: GUI de la respuesta del Sistema a 40 grados
10.2 Perturbaciones
Figura 16: Respuesta ante perturbaciones en rangos altos
Figura 17: Respuesta ante perturbaciones en rangos medios
Figura 18: Respuesta ante perturbaciones en rangos bajos
11. ANÁLISIS Y
CONCLUSIONES
Es muy necesario en el circuito implementar un LCD para verificar mediante el Dutty (ciclo útil de trabajo del PWM) si hay sintonía o comunicación entre la computadora y el hardaware.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
8
Para evitar los ruidos se implementó un filtro pasa bajo , un circuito RC, y capacitores de desacoplo en el microcontrolador.
Otra manera en la cual se pudo eliminar el ruido es sacar un promedio de 10 muestras tomadas.
Al realizar el modelamiento del sensor nos dimos cuenta que de 0 a 30 grados había alta impedancia lo q provocaba que exista e ese rango una zona muerta, por lo que se trabajó en el rango de 2V-4V y no de 0V-5V por lo que no fue necesario hacer una amplificación.
Se hizo un control PID por las siguientes razones:
1. Proporcional: ya que siempre necesito una ganancia, la señal de pwm es muy alta asi que necesita ser atenuada, para eso utilizo el proporcional
2. Integral: porque tengo un error en estado estacionario que hay q reducirlo, esta constante es muy pequeña ya que si fuese un valor grande le hace lento a mi sistema.
3. Derivativo: esta constante nos ayudó a hacerle mas rápido al retorno ya que en un principio se obtenían respuestas muy lentas.
Como se puede observar en las gráficas de resultados se obtuvo una mejor respuesta del controlador en rangos bajos y medios, el tiempo de respuesta es inmediata mientras que para valores altos la respuesta no era tan rápida, se hizo pruebas variando los valores de las constantes pero esta variación perjudicaba de gran manera la respuesta para los valores bajos y medios.
Es indispensable tener una planta física estable y un buen circuito para facilitar el diseño de los controladores.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
9
CONTROL FUZZY DE UNA PLANTA DE POSICIÓN ANGULAR
12. RESUMEN
En el presente artículo se describe la forma
de diseñar e implementar un controlador
FUZZY (lógica difusa) para una planta de
posición angular, con la ayuda de MATLAB,
se realiza un control Fuzzy en donde
dependiendo del ángulo deseado se realizará
un controlador que regule un pwm; el mismo
que haga variar la cantidad de voltaje
suministrada al ventilador.
13. ABSTRACT
This article describes how to design and
implement a fuzzy controller (fuzzy logic) for
a plant of angular position, with the help of
MATLAB, Fuzzy control is performed
depending on the angle where desired will
be a controller that regulates a pwm; the
same amount that varies the voltage
supplied to the fan.
14. PALABRAS CLAVES
Comunicación Serial, PWM, Fuzzy, Matlab, Función de Membresía, Set point, Error.
15. INTRODUCCIÓN
15.1 Objetivo General: Diseñar e implementar un
controlador Fuzzy para una planta de
posición angular.
15.2 Objetivos Específicos:
Reconocer y Analizar la Planta.
Desarrollar un programa que realice
el control lógico difuso a través de la
herramienta de MATLAB.
Estabilizar la planta lo más rápido
que sea posible.
16. GENERALIDADES El funcionamiento general de un controlador fuzzy es igual que otros controladores, toman los valores de las variables de entrada del sistema, y según ciertas reglas, o condiciones, que nosotros imponemos, deciden como modificar las variables de salida, afectando el comportamiento de la planta. Este sistema basado en reglas en el control fuzzy, es de la siguiente manera:
El problema de utilizar la lógica difusa, es la complejidad de representar el conocimiento en estas reglas, muchas veces esbozamos reglas con calificativos no demasiado precisos.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
10
Con respecto a la lógica, se crea nuevas alternativas a la lógica tradicional, tal y como la conocemos. Una proposición no siempre es verdadera, o falsa; sino que la misma puede tener un grado de veracidad. Observemos que lo descrito anteriormente se basa más en el comportamiento natural de las personas, y deja de aferrarse a un cierto número de ecuaciones y condiciones que usualmente se utilizan en el control 'clásico'. Al utilizar el control fuzzy, observamos que ya no procesamos ecuaciones, números o tablas, sino reglas. De esta manera se puede realizar operaciones entre palabras como, más bajo, subir un poquito, bajar un poquito, o este tipo de acciones que realizamos los humanos naturalmente para realizar un control. 6.1 Set point: es el valor objetivo que desea alcanzar un sistema de control automático. [1]. 6.2 Señal de salida: es la variable que se desea controlar (posición, velocidad, presión, temperatura, etc.). También se denomina variable controlada. [1] 6.3 Función de Membresía: la función tiene que ver con un grado de ambigüedad sobre la característica de la variable que se está midiendo pero no es una probabilidad. [2]. 6.4 Señal de referencia: es el valor que se desea que alcance la señal. [1] 6.5 Error: es la diferencia entre la señal de referencia y la señal de salida real. [1]
6.6 Señal de control: es la señal que produce el controlador para modificar la variable controlada de tal forma que se disminuya, o elimine, el error. [1] 6.7 Señal análoga: es una señal continua en el tiempo. [1] 6.8 Planta: es el elemento físico que se desea controlar. Planta puede ser: un foco, un motor, un horno, un sistema de disparo, un sistema de navegación, un tanque de combustible, etc. [1]
17. CONTROL FUZZY Para nuestro controlador realizamos 5
fuzzy‘s en cascada en el primero tenemos
como variable de entrada el ángulo muy
bajo, el segundo el ángulo bajo, en el tercero
el ángulo medio, el cuarto el ángulo alto y el
quinto el ángulo muy alto. Cada uno de ellos
tendrá la misma salida que será el PWM.
Para nuestro proceso se lo realizo de forma
cíclica que puede ser dividida en tres grupos,
de la siguiente manera.
7.1 Fuzzification
Esta es la primera parte del proceso, se
procede a determinar el grado de
pertenencia de las variables de entrada y
salida estos son los denominados fuzzy
inputs y fuzzy outputs.
Fuzzification
Evaluación de Reglas
Defuzzification
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
11
En nuestro caso, nuestra entrada (input) son
el ángulo, y la salida (output) es el pwm.
Teniendo lo siguiente:
Variable E/S
Ángulo Entrada
PWM Salida
Tabla1. Variables del Sistema
Para los 5 fuzzy’s la variable ángulo la hemos determinado 5 grupos de pertenencia: mb(muy bajo), b(bajo), m(medio), a(alto), ma(muy alto). Los rangos para cada función de membresía se obtuvieron experimentalmente variando el ángulo y verificando la respuesta en el sensor que en nuestro caso es el potenciómetro.
Figura1. Funciones de membresía de la entrada
ángulo Rangos de trabajo:
Nombre de la función de membrecía
Rango de valores (%)
mb 0-18
b 6-30
m 18-42
a 30-54
ma 42-60 Tabla2. Rango de valores de las funciones de
membresía del ángulo
Para los 5 fuzzy’s la variable PWM la hemos determinado 5 grupos de pertenencia:
mp(muy pequeño), p(pequeño), m(medio), g(grande), mg(muy grande). Los rangos para cada función de membresía se obtuvieron experimentalmente considerando la respuesta de la variación angular dependiendo del ciclo de trabajo enviado.
Figura2. Funciones de membresía de la salida
PWM Rangos de trabajo:
Nombre de la función de membrecía
Rango de valores (%)
mp 0-66
p 33-110
m 86-154
g 110-187
mg 154-220 Tabla3. Rango de valores de las funciones de
membresía del PWM
7.2 Evaluación de reglas
Una vez realizada la fuzzificacion, se está en
condiciones de evaluar en qué condición se
encuentra nuestro sistema, se obtiene el
grado de verdad o peso para estas
condiciones.
El peso de la regla estará dado, entonces, por
la veracidad de sus antecedentes.
Para el primer fuzzy las reglas son las
siguientes:
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
12
Figura3. Reglas de operación 1er fuzzy.
Para el segundo fuzzy las reglas son las siguientes:
Figura4. Reglas de operación 2do fuzzy.
Para el tercer fuzzy las reglas son las siguientes:
Figura5. Reglas de operación 3er fuzzy.
Para el cuarto fuzzy las reglas son las siguientes:
Figura6. Reglas de operación 4to fuzzy.
Para el quinto fuzzy las reglas son las siguientes:
Figura7. Reglas de operación 5to fuzzy.
7.3 Defuzzificacion
A cada fuzzy output, se le asignó el máximo valor de verdad o peso de las reglas que la mencionan como consecuente. Ahora quedan varias fuzzy outputs para cada variable de salida, cada una con un grado de aplicabilidad, pero; no se conocería el valor de la salida. Entonces, internamente, se realiza un promedio ponderado entre todas las salidas que le corresponden a una variable de salida, considerando las superficies de estas, tomando el centro de gravedad de las mismas como el nuevo valor de la variable de salida en consideración.
7.4 Control Fuzzy en MATLAB
El manejo del control fuzzy utilizando matlab es verdaderamente sencillo. Para determinar las entradas, salidas, reglas y verificar la superficie, colocamos la palabra “fuzzy” en la pantalla principal de matlab, y se abre la siguiente pantalla:
Figura8. Menú Principal del Fuzzy Toolbox, FIS
Editor
Al hacer doble click sobre el gráfico de inputs, agregamos entradas a nuestro
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
13
controlador fuzzy, de igual manera lo realizamos con las salidas. Para agregar las reglas, hacemos doble click en el cuadro central. Ahora, en nuestro código, usamos los siguientes comandos.
muybajo=readfis('rango_muybajo');
Este comando, me ayuda a 'cargar' el modelo creado con la herramienta fuzzy, en este caso nuestro modelo se llama rango_muybajo. A este lo almacenamos en una variable denominada muybajo.
ut = evalfis(angulo,muybajo) Este comando envía las entradas hacia el controlador fuzzy, en este caso enviamos el valor que leemos en el ángulo. En este comando, también se especifica el nombre del objeto que creamos anteriormente, en este caso muybajo.
La salida de este comando, es el valor de mi fuzzy output, en nuestro caso lo almacenamos en una variable llamada ut para trabajarlo y controlar el valor de nuestra señal de control PWM mediante nuestro microcontrolador.
18. ANÁLISIS Y
RESULTADOS La prioridad en la implementación de nuestro controlador fuzzy, es el de controlar el valor numérico del ángulo por medio de un pwm.
Como debe ser normal, a mayor ángulo, el pwm debe ser mayor y por ende a menor ángulo requerido el pwm debe ser el menor.
Figura9. Grafica “Desplazamiento angular vs
Tiempo” (izq), Grafica “Control vs Tiempo” (der), para un ángulo alto
En la figura anterior, podemos observar que el comportamiento de la planta es muy bueno, ya que el controlador satisface claramente con nuestras expectativas. Posee un tiempo de estabilización muy bajo, además que el sobre impulso generado no es muy alto. También podemos recalcar que no existe un cambio en la señal de control “ut” al generar un cambio a un ángulo alto, esto nos proporciona un rendimiento óptimo y constante.
Figura10. Grafica “Desplazamiento angular vs
Tiempo” para un ángulo alto
En la figura10 podemos observar que la estabilización en el setpoint marcado es la correcta, sin la existencia de picos u otras desvariantes.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
14
Figura11. Grafica “Desplazamiento angular vs
Tiempo” (izq), Grafica “Control vs Tiempo” (der), para un ángulo bajo
En la gráfica anterior podemos observar que al existir una perturbación, en este caso menor desplazamiento angular el valor que genera la señal de control reduce el valor del PWM rápidamente y se adapta al valor necesario para que cumpla con las condiciones dadas.
Figura12. Grafica “Desplazamiento angular vs
Tiempo” para un ángulo bajo.
Llegando a una estabilización optima como se muestra en figura12.
Figura13. Grafica “Desplazamiento angular vs Tiempo” (izq), Grafica “Control vs Tiempo” (der),
para un ángulo medio
En la figura13 podemos observar que al existir una perturbación, en este caso aumentar el desplazamiento angular, el valor del PWM se incrementa rápidamente y se adapta al valor necesario, llegando a estabilizarse como se muestra en la figura14.
Figura14. Grafica “Desplazamiento angular vs
Tiempo” para un ángulo medio Podemos concluir, que el control difuso es de fácil implementación, gran rapidez de respuesta, sistema inteligente y con un error muy bajo.
19. CONCLUSIONES
El control se basa en la implementación de 5 fuzzy’s tipo SISO(una entrada una salida), en todos ellos la entrada es el desplazamiento angular y la salida es el pwm. Se realizó 5 fuzzy’s debido a que al realizar solo uno, el controlador solamente controlaba con precisión los valores de ángulos medios, para mejorarlo y no tener problemas en un futuro, se optó por realizar los 5 y que cada uno este corresponda a un determinado rango de valores del ángulo a controlar.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
15
La implementación de un sistema fuzzy es muy sencillo, ya que no es necesario realizar un modelo exacto, sino que basta con entender el comportamiento de la planta. Esto ayuda sobre todo cuando tenemos un comportamiento no lineal facilitando el proceso de modelado.
Se debe considerar los rangos de operación de tal forma que sean tangibles, eficientes y confiables, esto es necesario para poder asumir intervalos de operación y estabilidad en el set point que otorgue la planta.
La ventaja del control difuso, es que el sistema reacciona rápidamente a los cambios, se adapta con facilidad. Esto dado que tiene control sobre un rango mayor de condiciones de operación.
20. DIFERENCIAS ENTRE
EL CONTROLADOR PID Y EL
FUZZY El control difuso es flexible y
bastante intuitivo: la posibilidad de usar expresiones con imprecisión genera modelos intuitivos y flexible debido a que debido a que se pueden cambiar las membresías y los grados de pertenencia de las variables, las condiciones de acuerdo a las necesidades del sistema y del usuario.
El controlador Fuzzy, en comparación con el controlador PID tiene una mejor rapidez y un reducido error en estado estable. Además de que elimina
casi en su totalidad el overshoot generado por el controlador PID.
Para que el controlador PID este en optimas condiciones había que sintonizar y calibrar sus constantes, mientras que en el controlador Fuzzy se necesitaba aplicar funciones de membresía con un rango de operación adecuado al sistema.
21. FUENTES DE
INFORMACIÓN [1] Introducción a la Implementación de Controladores PID Análogos - Juan Antonio Contreras Montes [2]http://profesores.elo.utfsm.cl/~tarredondo/info/soft-comp/Introduccion%20a%20la%20Logica%20Difusa.pdf
1. ANEXOS
ANEXO A Código utilizado en MATLAB para realizar el controlador Fuzzy. function varargout =
control_fuzzy_pos_angular(varargi
n) gui_Singleton = 1; gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton,
...
'gui_OpeningFcn',
@control_fuzzy_pos_angular_Openin
gFcn, ...
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
16
'gui_OutputFcn',
@control_fuzzy_pos_angular_Output
Fcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback =
str2func(varargin{1}); end
if nargout [varargout{1:nargout}] =
gui_mainfcn(gui_State,
varargin{:}); else gui_mainfcn(gui_State,
varargin{:}); end
function
control_fuzzy_pos_angular_Opening
Fcn(hObject, eventdata, handles,
varargin) guidata(hObject, handles);
function varargout =
control_fuzzy_pos_angular_OutputF
cn(hObject, eventdata, handles) % varargout{1} = handles.output; axes(handles.logo_espe) background =
imread('espe_logo.jpg'); axis off; imshow(background); axes(handles.logo_mct) background =
imread('logo_mct.jpg'); axis off; imshow(background); axes(handles.graf_planta) background =
imread('planta.jpg'); axis off; imshow(background);
% Función principal que se
ejecuta al presionar el ícono de
inicio function
play_ClickedCallback(hObject,
eventdata, handles) %% Configuración PUERTO SERIAL PS=instrfind; if PS~=isempty(PS) fclose(PS); delete(PS); clear PS; end PS =
serial('COM11','BaudRate',9600,'D
ataBits',8,'Parity','none','StopB
its',1); fopen(PS);
%% Inicialización de variables
globales
muestra=0; control=0; DESP_ANG=[]; TIEMPO=[]; SET=[]; ERROR=[]; SENCONTROL=[]; time=0; limitemin=0; limitemax=0; ut=0;
muybajo=readfis('rango_muybajo'); medio=readfis('rango_medio'); alto=readfis('rango_alto'); bajo=readfis('rango_bajo');
muyalto=readfis('rango_muyalto');
%% Adquisición de datos y
algoritmo de control while(1) muestra=muestra+1; time=muestra*0.3; lectura=fread(PS,1,
'char')/50; % Lectura de datos
mediante el puerto SERIAL
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
17
angulo=-
66.667*lectura+278.33;
rango=str2double(get(handles.opci
on,'string'));
if rango==6 ut = 0; end
if rango==1 ut =
evalfis(angulo,muybajo); end
if rango==2 ut =
evalfis(angulo,bajo); end
if rango==3 ut =
evalfis(angulo,medio); end
if rango==4 ut =
evalfis(angulo,alto); end
if rango==5 ut =
evalfis(angulo,muyalto); end
fwrite(PS,ut); % Se envía
el dato de control al PIC control = ut/2.55;
set(handles.dispang,'string',angu
lo);
set(handles.dispcontrol,'string',
ut);
DESP_ANG(muestra)=angulo; TIEMPO(muestra)=time;
SENCONTROL(muestra)=control;
limitemax=time; if limitemax>15 limitemin=limitemax-
10; else limitemin=0; end
axes(handles.axes1) %
Elección del TAG para graficar
DESPLAZAMIENTO ANGULAR VS. TIEMPO
plot(TIEMPO,DESP_ANG,'LineWidth',
3) axis([limitemin limitemax
0 70]) title('DESPLAZAMIENTO
ANGULAR VS. TIEMPO'); xlabel('Tiempo [s]'); ylabel('Desplazamiento
Angular [°]'); grid on
axes(handles.axes2) %
Elección del TAG para graficar
SEÑAL DE CONTROL VS. TIEMPO
plot(TIEMPO,SENCONTROL,'m','LineW
idth',3) title('SEÑAL DE CONTROL
VS. TIEMPO'); axis([limitemin limitemax
-5 105]) xlabel('Tiempo [s]'); ylabel('Control [ut]'); grid on
pause(0.05) % Tiempo de
muestreo end
function
pausa_ClickedCallback(hObject,
eventdata, handles) % Función
para el botón de pausa
pausa=get(handles.pausa,'State');
% Lectura del estado del botón
PAUSA if strcmp(pausa,'on')%
Comparación del estado del botón
PAUSA
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
18
f=helpdlg('Control de
Desplazamiento Angular en pausa.
Presione OK para CONTINUAR ','
CONTROL PID DE DESPLAZAMIENTO
ANGULAR');% vENTANA DE AYUDA waitfor(f)% eSPERA LA
ACCION
set(handles.pausa,'State','off');
% cAMBIA EL ESTADO DEL BOTON
PAUSA end
% --- Executes during object
creation, after setting all
properties. function text3_CreateFcn(hObject,
eventdata, handles) % hObject handle to text3 (see
GCBO) % eventdata reserved - to be
defined in a future version of
MATLAB % handles empty - handles not
created until after all
CreateFcns called
% --- Executes during object
creation, after setting all
properties. function
figure1_CreateFcn(hObject,
eventdata, handles) % hObject handle to figure1
(see GCBO) % eventdata reserved - to be
defined in a future version of
MATLAB % handles empty - handles not
created until after all
CreateFcns called
% --- Executes during object
creation, after setting all
properties. function
logo_mct_CreateFcn(hObject,
eventdata, handles) % hObject handle to logo_mct
(see GCBO)
% eventdata reserved - to be
defined in a future version of
MATLAB % handles empty - handles not
created until after all
CreateFcns called
% Hint: place code in OpeningFcn
to populate logo_mct
% Función para el botón CERRAR function
stop_ClickedCallback(hObject,
eventdata, handles) opc=questdlg('¿Desea cerrar
la interfaz de control?','CERRAR
INTERFAZ DE
CONTROL','Si','No','No'); if strcmp(opc, 'No') return; else clear,clc,close all end
function
reset_ClickedCallback(hObject,
eventdata, handles) opc=questdlg('¿Desea
reiniciar la interfaz de
control?','REINICIO INTERFAZ DE
CONTROL','Si','No','No'); if strcmp(opc, 'No') return; end handles.processsDataCompleted
= 0; cla(handles.axes1,'reset'); cla(handles.axes2,'reset'); cla(handles.axes3,'reset');
cla(handles.axes1,'logo_espe');
cla(handles.axes2,'logo_mct');
cla(handles.axes3,'graf_planta');
set(handles.play,'State','off') guidata(hObject,handles)
% --- Executes on button press in
r_muybajo.
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
19
function
r_muybajo_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',1); guidata(hObject,handles)
% --- Executes on button press in
r_bajo. function r_bajo_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',2); guidata(hObject,handles)
% --- Executes on button press in
r_medio. function
r_medio_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',3); guidata(hObject,handles)
% --- Executes on button press in
r_alto. function r_alto_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',4); guidata(hObject,handles)
% --- Executes on button press in
r_muyalto. function
r_muyalto_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',5); guidata(hObject,handles)
% --- Executes on button press in
r_nulo. function r_nulo_Callback(hObject,
eventdata, handles)
set(handles.opcion,'String',6); guidata(hObject,handles)
ANEXO B
Código utilizado en el micro controlador 16F877A. program potencia_ventilador const volt_ref = 5 const character as byte[8] = (14,17,17,14,0,0,0,0) dim volt, grados, porcentaje as float dim vector_volt as float[10] dim txt1 as string [3] dim txt2,txt3, txt4 as string [7] dim dato_enviar, control as word dim envio, duty as byte dim cont, gradosint as integer dim LCD_RS as sbit at RD0_bit LCD_EN as sbit at RD1_bit LCD_D4 as sbit at RD2_bit LCD_D5 as sbit at RD3_bit LCD_D6 as sbit at RD4_bit LCD_D7 as sbit at RD5_bit LCD_RS_Direction as sbit at TRISD0_bit LCD_EN_Direction as sbit at TRISD1_bit LCD_D4_Direction as sbit at TRISD2_bit LCD_D5_Direction as sbit at TRISD3_bit LCD_D6_Direction as sbit at TRISD4_bit LCD_D7_Direction as sbit at TRISD5_bit sub procedure simb_grad(dim pos_row as byte, dim pos_char as byte) dim i as byte Lcd_Cmd(64) for i = 0 to 7 Lcd_Chr_CP(character[i]) next i Lcd_Cmd(_LCD_RETURN_HOME)
CONTROLADOR PID – CONTROLADOR FUZZY DE UNA PLANTA DE POSICIONAMIENTO ANGULAR
AUTOMATIZACIÓN
INDUSTRIAL MECATRÓNICA
20
Lcd_Chr(pos_row, pos_char, 0) end sub sub procedure Iniciar_Lcd Lcd_Init() Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_LCD_CURSOR_OFF) end sub sub procedure salida_datos volt= volt_ref*(ADC_Read(0)/1023) dato_enviar=volt*50 envio=dato_enviar UART1_Write(envio) FloatToStr(volt,txt1) Lcd_Chr(1,3,txt1[0]) Lcd_Chr(1,4,txt1[1]) Lcd_Chr(1,5,txt1[2]) Lcd_Chr(1,6,txt1[3]) grados = -53.561*volt+223.72 FloatToStr(grados,txt2) Lcd_Chr(1,12,txt2[0]) Lcd_Chr(1,13,txt2[1]) Lcd_Chr(1,14,txt2[2]) Lcd_Chr(1,15,txt2[3]) end sub sub procedure entrada_datos control=UART1_Read() duty = byte(control) PWM1_Set_Duty(duty) WordToStr(control,txt3) Lcd_Chr(2,4,txt3[2]) Lcd_Chr(2,5,txt3[3]) Lcd_Chr(2,6,txt3[4]) porcentaje= control/2.55 FloatToStr(porcentaje,txt4) Lcd_Chr(2,11,txt4[0]) Lcd_Chr(2,12,txt4[1]) Lcd_Chr(2,13,txt4[2]) Lcd_Chr(2,14,txt4[3]) Lcd_Chr(2,15,txt4[4]) end sub
main: ADCON1 = 128 TRISA = 255 TRISC.2 = 0 PORTC.2 = 0
TRISC.4 = 0 PORTC.4 = 0 TRISC.5 = 0 PORTC.5 = 0 TRISB.7 = 0 PORTB.7 = 0 control = 0 volt = 0 Iniciar_Lcd Lcd_Out(1,1,"V:") Lcd_Out(1,7,"[V]") Lcd_Out(1,10,"A:") Lcd_Out(2,1,"D:") Lcd_Out(2,8,"P:") simb_grad(1,16) UART1_Init(9600) PWM1_Init(2500) PWM1_Start() while true salida_datos entrada_datos PORTB.7 = not(PORTB.7) Delay_Ms(250) wend end.