capÍtulo iv resultados de la investigaciÓn control de
TRANSCRIPT
52
CAPÍTULO IV
RESULTADOS DE LA INVESTIGACIÓN
Corresponde a este capítulo describir a profundidad las fases o etapas
de que constó la construcción del CONTROL DE TEMPERATURA BASADO
EN LOGICA DIFUSA CON INTERFASE DE ALTO NIVEL, se diferencian
siete etapas que a su vez constituyeron sub etapas. Se hace omisión de
aquellas incidencias que no revisten importancia de fondo limitándose solo a
describir aquellas fases o etapas fundamentales y determinantes en el
desarrollo de esta investigación.
Primera Fase. Diseño Ensamblaje y Descripción de la Tarjeta de control.
La tarjeta de control es el producto de hardware terminado y
ensamblado en sus componentes electrónicos. La tarjeta de control ó Pc
Board, como se ha denominado, se ordenó construir especialmente para
este proyecto según diseño y especificaciones de los autores. Consta, entre
otros elementos, de un termostato que contiene un resistor que se calienta
por excitación de voltaje, un potenciómetro y un termistor. El resistor es el
elemento que genera calor y el cual debe ser regulado, el termistor es el
componente que censa la temperatura del mismo.
53
El resistor, activado por una fuente de pulso modulado en amplitud
(PULSE WIDTH MODULATED, PWM), calienta el termistor adjunto. Por
medio de un potenciómetro se configura la temperatura final deseada
(SETPOINT), y el termistor mide la temperatura actual.
La tarjeta se diseñó para tres modos de funcionamiento básicos:
a. Modo de control manual: en este modo el usuario puede controlar la
temperatura del resistor configurando manualmente el ciclo de
calentamiento (DUTY CYCLE) del resistor PWM.
b. Modo de control proporcional: en este modo la tarjeta de control
determina la diferencia entre la temperatura actual y la temperatura
deseada (SETPOINT), este valor es llamado Error de Temperatura
(TE), este valor es enviado por el cable serial al Fuzzy Tech. Este
utiliza sus algoritmos de lógica difusa para asignar el Duty Cycle
apropiado al caso.
c. Modo de control proporcional derivativo: en este modo la tarjeta de
control determina el Error de Temperatura (TE) y además la diferencia
de éste en cada intervalo de tiempo. Estos dos valores son enviados
al Fuzzy Tech por medio de la interface serial para que este asigne el
Duty Cycle correspondiente.
La figura 5, ilustra el diseño de la tarjeta de control La tarjeta de control
contiene los siguientes componentes:
- Baquelita perforada.
- Potenciómetro para el control de temperatura
54
- Potenciómetro de control para el ciclo de calentamiento.
- Display de tres dígitos.
- Conector para corriente directa de 2.5 mm.
- Conector DB-9 para RS-232.
- Seis diodos emisores de luz sencillos.
- Interruptor de reinicialización (RESET)
- Interruptores de inicio (START) y alto (STOP).
- Resistor y Termistor.
- Transistor de potencia.
- Diodo emisor de luz señalizador de encendido.
- Base para el microcontrolador PIC16C71.
Figura 5. Tarjeta de Control. Circuito electrónico.
55
Para prevenir un sobrecalentamiento, si la temperatura del resistor
excede los 75 grados centígrados, el sistema de detiene y el led que indica
no operación se enciende.
Hasta este momento el control difuso para la tarjeta de control reside
íntegramente en el FuzzyTech MP – Explorer instalado en el PC. Por medio
del mencionado software se controla la temperatura que se aplicará al
resistor.
El FuzzyTech MP-Explorer simplifica el diseño de estrategias de control
ya que provee una fácil e intuitiva interfaz para resolver problemas de control;
además reduce el tiempo de desarrollo y permite a los diseñadores producir
prototipos de control en menor tiempo que cuando se usan métodos de
control convencional.
Protocolo de comunicación de la tarjeta de control.
La tarjeta de control se comunica con el FuzzyTech-MP Explorer por
medio de un cable serial a una velocidad de 9600 baudios, 8 bits de datos,
un bit de parada y sin paridad. Todas las variables de entrada y salida deben
cumplir estos requerimientos de comunicación. En el menú OPCIONES, item
TERMINAL, se pueden configurar los parámetros antes mencionados.
Al entablar una comunicación serial el software exige el siguiente
protocolo: Cada variable de entrada se leerá en formato de punto flotante
ASCII, el nombre de la variable nunca será transferido, las variables de
entrada son enviadas en orden alfabético, cada valor termina con un carácter
EOF (ctrl-z, o el código 26 en ASCII). Por ejemplo si las variables de entrada
56
son ALFA, BETA, GAMMA los valores serán transmitidos de la siguiente
manera,
<valor de ALFA><EOF><valor de BETA><EOF><valor de GAMMA>
Las variables de salida siguen el mismo protocolo.
Las reglas de comunicación son las siguientes:
a. La transmisión serial es hecha una vez cada 0.5 segundos.
b. Si una señal de recibo no es percibida, la siguiente transmisión
repetirá el paquete.
c. Tres fallos consecutivos en la comunicación son suficientes para
romper el enlace. En este caso en el display aparecerá SER,
indicando que espera reestablecer la comunicación serial.
d. Se presiona el botón STOP de la tarjeta de control mientras se
soluciona el problema de comunicación.
Definición de los modos de funcionamiento.
a. Modo de funcionamiento proporcional: Es el modo de
funcionamiento por defecto. Usando una entrada proporcional
representa el modo más simple para desarrollar una estratega de
control.
En el modo proporcional, la tarjeta de control produce como valor de
entrada el Error de Temperatura, TE, el cual representa la diferencia
entre la temperatura deseada y la temperatura actual. La tarjeta de
control envía este valor al software mediante la interfaz serial.
57
TE = TFinal – TPresente
El FuzzyTech retorna como salida el ciclo de calentamiento (Duty
Cycle). Esta señal gobierna el porcentaje de tiempo que la tarjeta de
control aplica potencia al resistor PWM.
b. Modo de funcionamiento Proporcional Derivativo: en este modo la
tarjeta de control produce dos valores de entrada, el Error de
Temperatura (TE) y la diferencia por intervalo de tiempo de dicho
Error (dTE/dt).
La temperatura de entrada (TE) representa el valor proporcional y la
diferencia del error en cada intervalo de tiempo representa el valor
derivativo.
TE = TFinal – TPresente
dTE/dt = TEn – T En - 1 tn – tn-1
La tarjeta de control calcula TE cada 0.5 segundos.
El FuzzyTech retorna una salida, el ciclo de calentamiento (Duty
Cycle).
Para habilitar el modo de funcionamiento proporcional derivativo
presione el interruptor RESET mientras mantiene presionado el
interruptor START. En el display aparecerá Pd indicando que se
activado el modo proporcional derivativo. Para abortar este modo de
funcionamiento presione el interruptor RESET.
58
c. Modo de funcionamiento manual: este modo de funcionamiento
ilustra como los humanos naturalmente operan un sistema de
control, basándose en sus decisiones y sentidos.
Este modo permite controlar manualmente el ciclo de calentamiento
(Duty Cycle) para que sea el operador humano el que controle la
temperatura, de esta manera se comprende como actúa el control
difuso.
La Tabla 1, resume las reglas que manualmente usaría un ser humano
para controlar el ciclo de calentamiento de la tarjeta de control.
Tabla 1. Resumen de reglas humanas para el control del ciclo de calentamiento Si Temperatura Presente es Cantidad de Calor a
aplicar Lejana de la temperatura final Entonces
Use Potencia Alta
Cercana a la temperatura final Entonces Use
Potencia media
Coincide con la temperatura final Entonces Use
Potencia baja (sólo para mantenerla)
Sobrepasó la temperatura final Entonces Use
Desconectar la
Potencia
.
Segunda Fase. Fusificación de los valores de entrada.
La fusificación es el proceso de conversión del valor de entrada, Error
de Temperatura (TE), a una entrada expresada en Términos Lingüísticos.
La figura 6, muestra un diagrama en bloques de los tres pasos básicos
a seguir en una estrategia de control difusa.
59
Figura 6. Tres elementos básicos del control fuzzy.
En el proceso de fusificación el FuzzyTech-MP Explorer convierte el
valor de entrada (TE) en un valor expresado en Términos Lingüísticos
basado en una función de membresía. La referida función asocia un grado de
membresía en el rango de uno a cero, ambos inclusive, con respecto a la
temperatura. En la figura 7 se muestra la función de membresía con los
términos lingüísticos CALIENTE, EN EL PUNTO, FRESCO y FRIO.
Figura 7 Función de Membresía
Fusificación Regla Base
Defusificación Entradas
Términos Lingüísticos
Salidas Difusas
Valores Físicos
Control Fuzzy
Implementación en PC (Explorer)
Función de membresía para los términos asociados con TE Calient En Fresco Frio
1
.3
.125
3 -6 - +20 ºC
Grado de Membresía
60
Como puede observarse, TE = 3 ºC posee un grado de membresía 0.3
en el término lingüístico FRESCO y 0.125 en el término lingüístico EN
PUNTO.
En el mismo orden de ideas, CALIENTE tiene un grado de membresía
cero en TE = 3 ºC. De esta manera todos los posibles valores de TE tendrá
lgún grado de membresía en cada uno de los términos lingüísticos que
expresan la variable. Allí reside el calificativo de difusa que posee la
estrategia de control.
Tercera fase. Fijación de criterios de la regla base para el control
de temperatura.
Basándose en los criterios lógicos naturales del ser humano la tabla 2
nos expresa la regla base para el CONTROL DE TEMPERATURA
FUNDAMENTADO EN LÓGICA DIFUSA o proyecto desarrollado. Esta regla
se introdujo al FuzzyTech para su procesamiento.
Regla Uno: Si el término lingüístico de entrada es Frío, entonces el Duty
Cycle es ALTO.
Regla Dos: Si el término lingüístico de entrada es Fresco, entonces el Duty
Cycle es MEDIO.
Regla Tres: Si el término lingüístico de entrada es En Punto, entonces el
Duty Cycle es POCO.
Regla Cuatro: Si el término lingüístico de entrada es Caliente, entonces el
Duty Cycle es CERO.
61
Tabla 2. Regla base del proyecto..
Regla base
Regla Error de
Temperatura (TE)
Ciclo de Calentamiento (Duty Clycle)
1 Si Frio Entonces ALTO
2 Si Fresco Entonces MEDIO
3 Si En Punto Entonces POCO
4 Si Caliente Entonces CERO
Estas reglas significan que el grado de calentamiento dependerá del grado
de pertenencia que el Error de Temperatura (TE) tenga dentro de cada
término lingüístico que lo define.
Cuarta fase. Defusificación para producir los valores del ciclo de
calentamiento (Duty Cycle).
El FuzzyTech utiliza una función de membresía de salida para
defusificar los términos lingüísticos. En la figura 8 se ilustra el proceso de
defusificación asociado a los términos lingüísticos que definen la variable
ciclo de calentamiento (Duty Cycle).
En el caso donde TE = 3 ºC, la regla #2 ofrecerá un grado de 0.125 y la
regla #3 un grado de 0.3. La regla # 2 está asociada a un Ciclo de
Calentamiento (Duty Cycle) MEDIO mientras que la regla #3 está asociada a
POCO. Una línea horizontal a la altura de 0.125 intercepta el grado en que el
valor MEDIO es activado y una línea horizontal a la altura de 0.3 intercepta el
62
grado en que POCO es activado. MEDIO esta representado por ALTURA 2
(Figura 8). Igualmente ALTURA 1 representa el grado en el cual POCO es
activado.
El método del Máximo Central es usado para determinar el valor del
Ciclo de Calentamiento (Duty Cycle). En el caso donde TE = 3 ºC el Duty
Cycle será 46%.
La regla #3 y su inferencia resultante es representada por el área
oscura de la flecha POCO, similarmente ocurre con la regla #3 y el área
oscura de la fecha MEDIO.
El cálculo de defusificación del método del máximo central es el
siguiente:
Duty Cycle = (0.3 x 40%) + (0.125 x 60%) ≈≈ 46% 0.3 x 0.125
Esta regla de inferencia se aplica a cualquier valor de entrada de TE y
genera el correspondiente valor de salida para el Ciclo de Calentamiento
(Duty Cycle), éste es el núcleo del razonamiento difuso.
Para elaborar la regla base es preciso recordar que la tarjeta de control
interactúa con el FuzzyTech-MP Explorer calculando el Error de Temperatura
(TE) y enviándola por el cable serial al computador.
Se llamará a este valor TEMP_ERROR para efectos de la
programación.
63
Figura 8. Función de membresía para la defusificación del Duty Cycle.
Quinta fase. Estructuración de la regla base.
TE = TEMP_ERROR = TFinal – TPresente
Donde
TFinal = Temperatura Final (SETPOINT)
TPresente = Temperatura actual
La figura 9 ilustra la relación entre TEMP_ERROR y la temperatura presente,
suponiendo un SETPOINT de 60 ºC.
Figura 9. Gráfica de TEMP_ERROR. Fuente: Experimental.
30 20 10 0 -10 -20
20 30 40 50 60 70 80 90
TE, ºC
Temperatura presente, ºC
TE = Temperatura Final – Temperatura Presente Temperatura Final = 60 ºC
64
La regla base representará el núcleo de la estrategia de control que se
seguirá. El software en todo caso deberá cumplir los pasos de:
- Fusificación: Traduce los valores de entrada en valores lingüísticos por
medio del cálculo de los grados de membresía de cada valor de
entrada. Este proceso constituye la parte IF (SI) de la regla. El
software asigna un grado de membresía a cada valor después de
hacer el cálculo.
- Regla de inferencia: Se determina el grado de validez de la conclusión
(THEN).
- Defusificación: Se traducen los valores de salida a su correspondiente
valor físico.
La tarjeta de control está diseñada para trabajar a temperatura ambiente
(38 ºC).
Asignando nombres a la variables lingüísticas.
La regla base asocia valores de entrada (TEMP_ERROR) generados por
la tarjeta de control a términos lingüísticos.
El primer paso lo constituye la selección de los términos lingüísticos que
limitarán el numero de variables que se utilizarán en la definición de la regla
base. En la medida en que se defina mayor número de términos lingüísticos
se requerirá mayor cantidad de memoria.
En la mayoría de las aplicaciones, el número de términos lingüísticos
oscila entre tres y siete. Menos de dos términos es improcedente ya que
65
limita demasiado la elección de pertenencia a uno de los dos grupos.
Generalmente los seres humanos manejan tres términos, uno a cada
extremo y uno en el medio. El número de términos rara vez excede de siete
ya que haría la evaluación sumamente complicada y aumentaría demasiado
los requerimientos de memoria. Las variables que poseen un valor central
determinante se manejan mejor con un número impar de términos.
Para determinar el número apropiado de términos para manejar la
temperatura del resistor de la tarjeta de control, no se utilizará la premisa
empírica de que tres términos es la cantidad ideal, sino que profundizaremos
seleccionando cuatro términos lingüísticos para definir con más precisión la
variable de entrada.
Los términos lingüísticos son los siguientes:
- FRIO, cuando TEMP_ERROR exceda de 15 ºC tiene un grado de
pertenencia de 1. Desciende linealmente hasta 0 en 10 ºC.
- FRESCO, cuando TEMP_ERROR este en 10 ºC alcanzará su valor de
pertenencia más alto (1), y desciende linealmente hasta 0 en 5 ºC y 15
ºC.
- EN PUNTO, tiene pertenencia entre 0 ºC y 10 ºC de TEMP_ERROR.
- CALIENTE, cuando TEMP_ERROR oscile entre –5 ºC a 0 ºC tiene un
grado de pertenencia de 1, en 0 ºC comienza a descender linealmente
la pertenencia hasta llegar a 0 en 5 ºC.
La figura 10 ilustra la función de pertenencia de la variable
TEMP_ERROR.
66
Como se podrá notar los términos lingüísticos son de uso cotidiano y de fácil
comprensión para el diseño de la estrategia de control.
Figura 10. Función de membresía de la variable TEMP_ERROR. Fuente: Experimental
.
Definiendo la regla base.
Cuando se escribieron las condiciones para la estructuración de la regla
base, se utilizó la sentencia IF. THEN.
Para ello FuzzyTech-MP Explorer ofrece una herramienta de estructuración
llamada SPREADSHEET RULE EDITOR. Dicha herramienta se ilustra en la
figura 11.
La regla base quedó definida de la siguiente manera:
a. Si la entrada es FRIO la salida será ALTO.
67
b. Si la entrada es FRESCO la salida es MEDIO.
c. Si la entrada es EN_PUNTO la salida es BAJO.
d. Si la entrada es CALIENTE la salida es CERO.
Figura 11. Editor de Regla Base.
Generando la estrategia de control proporcional.
Todas los pasos que a continuación se exponen se ejecutarán en el
FuzzyTech-MP Explorer:
a. Del menú principal se selecciona FILE > NEW para generar un nuevo
sistema de control. La figura 12 presenta el mensaje dado por el
sistema.
Figura 12. Generando nuevo sistema.
68
b. El sistema despliega la caja de dialogo de Generar Proyecto (Figura
13).
Figura 13. Generar Proyecto.
Inputs LVs: Variables Lingüísticas de Entrada.
Output LVs: Variables Lingüísticas de Salida.
Rule blocks: Bloques de reglas (base).
Input terms/LV: Términos (lingüísticos) de la variable lingüística de
entrada.
Output terms/LV: Términos (lingüísticos) de la variable lingüística de
salida.
c. En el cuadro de diálogo Generar Proyecto, se introduce el número de
variables lingüísticas de entrada y salida así como los respectivos
69
números de términos lingüísticos asociados. (En el caso particular una
variable de entrada, una de salida y cuatro términos por cada una).
d. Aparecerá el editor de proyectos y la ventana LV (Variables
lingüísticas) (ver Figura 14).
Figura 14. Editor de proyectos y ventana de variables lingüísticas.
e. Se selecciona del menú principal OPTIONS > GLOBAL OPTIONS y
aparecerá el respectivo cuadro de diálogo (Figura 15).
f. Se selecciona como tipo de dato para la variable base Entero de 8
Bits. Esto se debe al hecho que el microcontrolador PIC16C71 que es
la base del proyecto trabaja a 8 Bits de resolución de datos.
70
Ya está creado el marco para la estrategia de control proporcional (sólo
una entrada, ahora se está listo para la asignación de los nombres a las
variables lingüísticas de entrada y salida, y la asignación de los términos
lingüísticos que definirán a cada una de dichas variables.
Figura 15. Cuadro de dialogo de Opciones Globales.
Asignando nombres a las variables lingüísticas de entrada y salida.
a. Se selecciona In1 de la ventana de variables lingüísticas (LV) y se
hace clic derecho sobre ella.
71
b. Se selecciona del menú contextual que aparecerá la opción Atributos
y se desplegará el cuadro de dialogo Renombrar Variable. (Figura
16).
c. Se asignó el nombre a la variable TEMP_ERROR.
d. El mismo procedimiento se sigue para asignar el nombre a la variable
lingüística de salida Duty_Cycle.
Figura 16. Cuadro de dialogo Renombrar Variable.
Asignando nombres a los términos lingüísticos de entrada.
a. En la ventana LV se hace doble clic sobre TEMP_ERROR para abrir la
función de membresía de la variable. Esta ventana es conocida como
el editor de variable. TEMP_ERROR muestra inicialmente como
términos lingüísticos a term1, term2, term3 y term4 además de la
variable base (Figura 17).
Estos términos lingüísticos serán sustituidos posteriormente por
nombres comunes como se puede apreciar mas adelante, caliente, frio,
en punto, todo a discreción del programador según sea el sistema a
aplicar
72
Figura 17. Editor de variable.
b. La variable base será expresada en grados Centígrados. Se hace
doble clic sobre Base_Variable y asignamos los valores propios del
proyecto (Figura 18).
Figura 18. Cuadro de dialogo de la Variable Base.
73
c. Se observa que para los 8 bits de resolución elegidos, el rango de los
valores de código va de 0 a 255. Se asigna Grados_Centigra al
nombre de la variable base.
d. Sobre la sección SHELL VALUES, se transcriben en las casillas de
MIN y MAX los valores límite de Temperatura que la tarjeta de control
envía como señal de entrada. En el caso del proyecto desarrollado la
tarjeta tiene como especificación una valor mínimo de –5 ºC y un valor
máximo de 20 ºC. Sobre dichos valores se hará la interpolación binaria
del resto de las posibles temperaturas.
e. Se hace clic en el botón OK y se procede a asignar los nombres de los
términos lingüísticos de entrada.
f. Se hace doble clic en cada uno de los términos creados originalmente
(term1, term2, term3 y term4) y se sustituyen por los nombres
seleccionados previamente (CALIENTE, EN_PUNTO, FRESCO,
FRIO).
Asignando nombres a los términos lingüísticos de salida.
a. En la ventana LV se hace doble clic sobre Duty_Cycle para abrir la
función de membresía de la variable. Esta ventana es conocida como
el editor de variable. Duty_Cycle muestra inicialmente como términos
lingüísticos a term1, term2, term3 y term4 además de la variable base
(Figura 19).
74
Figura 19. Editor de variable.
b. La variable base será expresada en Porcentaje. Se hace doble clic
sobre Base_Variable y asignamos los valores propios del proyecto
(Figura 20).
Figura 20. Cuadro de dialogo de la Variable Base.
75
c. Se observa que para los 8 bits de resolución elegidos, el rango de los
valores de código va de 0 a 255. Se asigna Porcentaje al nombre de
la variable base.
d. Sobre la sección SHELL VALUES, se transcriben en las casillas de
MIN y MAX los valores límite de Porcentaje que la tarjeta de control
interpretará como señal de salida. En el caso del proyecto
desarrollado la tarjeta tiene como especificación un valor mínimo de
0% y un valor máximo de 100%. Sobre dichos valores se hará la
interpolación binaria del resto de los porcentajes del tiempo de
calentamiento (Duty Cycle) posibles.
e. Se hace clic en el botón OK y se procede a asignar los nombres de los
términos lingüísticos de entrada.
f. Se hace doble clic en cada uno de los términos creados originalmente
(term1, term2, term3 y term4) y se sustituyen por los nombres
seleccionados previamente (CERO, BAJO, MEDIO y ALTO).
DEFINIENDO LA REGLA BASE.
a. Se hace doble clic en la sección Bloque de Regla del Editor de
Proyectos. (Figura 21). Aparecerá la hoja de definición de reglas.
Figura 21. Bloque de Regla
76
b. Se eliminan las reglas sobrantes, dejando sólo las cuatro reglas
elementales (caso particular del proyecto desarrollado). Para eliminar
una regla se selecciona y luego se presiona la tecla DELETE. (Figura
22).
c. Se asigna el valor 1.00 al grado de soporte de las cuatro reglas
principales. Esto se hace con el propósito de indicarle al software que
cada una de las cuatro reglas está totalmente soportada.
d. La regla base debe haber queda estructurada definitivamente según lo
indica la figura 23.
Figura 22. Hoja para edición de reglas
77
Figura 23. Regla base definitiva
.
Cumplidos todos estos procedimientos se ha concluido con la quinta
fase, estructuración de la regla base. Esta fase representa el punto
fundamental en el desarrollo de una estrategia de control basada en lógica
difusa.
Sexta fase. Selección de la conexión serial y ejecución de la
estrategia de control.
Del menú principal se selecciona OPTIONS > TERMINAL para
desplegar el cuadro de dialogo TERMINAL. Inmediatamente aparecerá un
cuadro como el de la figura 24. En este cuadro se podrá configurar todos los
parámetros de comunicación serial entre el PC y la tarjeta de control.
La rata de transferencia de baudios fue ajustada en la tarjeta de control
a 9.600 baudios por lo cual debe hacerse el mismo ajuste en el FuzzyTech.
Asimismo se debe declarar un bit de parada y el tamaño del buffer
dependerá de la cantidad de memoria disponible en el PC, se recomienda
utilizar el valor por defecto. El puerto serie será seleccionado de acuerdo a la
78
disponibilidad que se tenga en el equipo. Generalmente se usa el puerto
COM2.
Establecidos ya los parámetros de comunicación se procedió a la
conexión de la tarjeta de control con el PC por medio de un cable RS-232.
Para guardar la estrategia de control se selecciona la opción FILE
>SAVE del menú principal y se procede a colocarle un nombre a la estrategia
de control.
El nombre de la estrategia de control del proyecto desarrollado es
4RULES.FTL. La extensión FTL identifica los archivos “Fuzzy Tech
Language”.
Figura 24. Cuadro de diálogo TERMINAL.
79
Para iniciar la comunicación serial se selecciona la opción del menú
principal DEBUG > SERIAL LINK, la cual abrirá una ventana llamada Debug:
Serial Link que permitirá visualizar los cambios experimentados por las
variables de entrada y salida. (Figura 25).
Figura 25. Ventana de visualización de variables lingüísticas de entrada y salida
Si la comunicación no es correcta entre la tarjeta de control y el PC se
mostrará un mensaje de error indicando que no se ha establecido la
comunicación correctamente.
Posteriormente se habilita el analizador de curvas del FuzzyTech con la
opción ANALYZER>TIME PLOT, lo cual permitirá seleccionar en un cuadro
de diálogo (Figura 26) cuales son las variables que se desean monitorear
gráficamente. En el caso del proyecto desarrollado se eligieron la variable
TEMP_ERROR y Duty_Cycle para se analizadas sus curvas. Al colocar
todas estas ventanas adecuadamente en la pantalla se está listo para iniciar
la operación de la tarjeta de control.
a. Se presiona el botón RESET de la tarjeta de control para inicializar la
misma en modo proporcional.
80
b. Se ajusta el SETPOINT a la temperatura a la que se desee estabilizar
el sistema (la tarjeta de control está diseñada para limitar está
configuración entre 40 ºC y 70 ºC).
c. Se presiona el botón START para iniciar la ejecución de la estrategia
de control. Se observará los cambios sucesivos del Duty_Cycle a
medida que la temperatura actual se va aproximando a la temperatura
deseada (SETPOINT).
A medida que se hacen corridas de la estrategia de control se pueden ir
haciendo ajuste en los parámetros de operación que permitan afinar y
optimizar los resultados obtenidos
Las curvas mostradas reflejan la efectividad de utilizar una estrategia de
Figura 26. Cuadro de diálogo de Configuración de gráficas en Tiempo real.
control basada en lógica difusa.
El desarrollo de una estrategia de control para un dispositivo
Proporcional Derivativo constituye un caso de estudio para trabajos
posteriores.
Séptima fase. Independencia de la tarjeta de control.
81
El primer paso para independizar la tarjeta de control del PC es la
compilación de la estrategia de control para el modelo de PIC deseado, en el
caso del proyecto actual se eligió el PIC16C71.
Para compilar el proyecto se seleccionó del menú principal la opción
COMPILE > to 16CXX, lo cual convertirá la estrategia de control desarrollada
en el FuzzyTech-MP Explorer en un programa fuente en lenguaje
Ensamblador. En el caso particular del proyecto se eligió el nombre
FUZRULES.ASM. Adicionalmente, de manera automática, se genera un
archivo llamado FUZRULES.VAR el cual contiene la declaración de las
variables utilizadas en las rutinas de control.
Para el manejo de la tarjeta de control se desarrolló un programa en
lenguaje Ensamblador llamado STNDALON.ASM el cual maneja los
componentes de la tarjeta de control en modo de funcionamiento manual,
proporcional y derivativo. Este programa carece del núcleo de lógica difusa
que le permita tomar las decisiones pertinentes al control de la temperatura.
A este programa se le incorporó el archivo FUZRULES.ASM para que
asimile la capacidad de control independiente.
El programa definitivo se compiló en formato hexadecimal por
intermedio del software MPLAB, herramienta esta que convierte archivos
ASM a archivos HEX.
El archivo definitivo STNDALON.HEX será bajado al microcontrolador
PIC16C71 por medio del dispositivo de “quemado” de PIC de la Marca
Microchip Technology Inc.
82
Sin embargo, antes de la independencia es preciso asegurarse que la
estrategia de control esté totalmente entonada, es decir, que responda a las
necesidades y requerimientos del sistema.
Para lograr esto se efectuaron una serie de pruebas del proyecto en modo
Serial Link, para ello se habilitó éste modo de depuración y se presionó el
botón START de la tarjeta de control para comenzar a visualizar el desarrollo
de la estrategia de control. La figura 27 muestra la corrida del proyecto en
modo de depuración con cable serial. Nótese que en la corrida se pueden
monitorear simultáneamente las dos variables lingüísticas con sus
respectivas funciones de membresía y los cambio.
Figura 27. Corrida de la estrategia de control en modo de depuración con cable serial.
83
graduales que van teniendo los grados de membresía mientras transcurre el
tiempo. Asimismo se puede observar la curva de cada variable y analizar el
comportamiento de cada una.
Todo este conjunto de recursos visuales constituye una poderosa
herramienta de depuración de las estrategias de control y al mismo tiempo
una interfaz de alto nivel para el monitoreo del sistema.
Al presionar el botón STOP de la tarjeta de control se detiene
momentáneamente la ejecución de la estrategia de control y permite al
programador ajustar los valores de las funciones de membresía para redefinir
la estrategia e ir entonando la misma. Luego de múltiples pruebas se elige la
mejor estrategia y se procede a la independencia de la misma en la tarjeta de
control.
Tomando en cuenta que la tarjeta de control se diseño para trabajar con
un oscilador de cristal de 4 megahertz y que al transferir el núcleo de lógica
difusa al PIC16C71, la ejecución del programa en modo STANDALON se
hace relativamente lenta lo cual en algunos casos afecta ligeramente la
ejecución del sistema de control. Una posible solución lo constituiría la
instalación del un cristal de mayor frecuencia de pulsos para acelerar la
operación del circuito. Las especificaciones técnicas del PIC16C71 indican
que puede trabajar a frecuencias de hasta 20 megahertz.
84
2. ANALISIS DE RESULTADOS
Se pudo demostrar que los fundamentos de la Lógica Difusa son
perfectamente aplicables en la mayoría de las estrategias de control.
También se demostró que los tiempos de repuesta son más rápidos y la
estabilización del sistema mejora notablemente.
Se logró demostrar así mismo que este producto puede ser
implementado en cualquier sistema que requiera un riguroso control de la
variable temperatura y su coste es relativamente bajo.
85
CONCLUSIONES.
Las estrategias de control convencional son útiles para proyectos a
largo plazo y su desarrollo representa un costo elevado en tiempo y dinero.
La implementación de estrategias de control fundamentadas en lógica difusa
constituye una alternativa para desarrollo rápido y económico de sistemas de
control flexibles y precisos.
Las nuevas tecnologías de programación de PICs hacen el desarrollo
de aplicaciones de control mucho más efectivo ya que permiten depurar en
modo interactivo los parámetros de operación y redefinir con facilidad los
patrones lógicos básicos.
La lógica difusa representa una tendencia de modernización en el área
de programación dejando atrás los conceptos ortodoxos de valor lógico
verdadero o falso y ampliando la gama de posibilidades de decisión,
asemejándose cada día más el esquema de desarrollo a la lógica cotidiana.
La tecnología de software apunta cada día más a la simplificación de los
procesos de desarrollo, facilitando grandemente la elaboración de proyectos
y disminuyendo las dificultades derivadas de la reestructuración y
redefinición de los lineamientos generales del sistema.
Las interfaces de alto nivel brindan un recurso eficiente en el monitoreo
y configuración de estrategias de control permitiendo supervisar en tiempo
86
real los sucesos que afectan a los sistemas, ofreciendo de esta manera las
bases para inferir nuevos parámetros de funcionamiento.
Los controles de temperatura son circuitos que generalmente manejan
situaciones críticas y riesgosas por lo que se ameritan sistemas de control
que ofrezcan respuestas oportunas ante cambios bruscos en el elemento
controlado. De allí que la lógica difusa ofrece una alternativa de alta calidad
tecnológica para resolver este tipo de problemas. La técnica proporcional
derivativa es sin duda la mejor opción en sistemas de control difusos ya que
combina el poder de los PID convencionales con los avances en tiempo de
respuesta de la lógica difusa.
El diseño de dispositivos de control basados en PIC ha simplificado la
fase de fabricación del hardware de los dispositivos de control, permitiendo al
ingeniero la posibilidad de concentrar mayores esfuerzos en el desarrollo de
las estrategias concretas de software que se integrarán a los prototipos. La
compatibilidad de estos microcontroladores con una gran gama de interfaces
seriales y paralelas ha facilitado la conexión de los dispositivos de control a
sistemas basados en PC lo que agrega el poder de las interfaces de alto
nivel y las herramientas estadísticas que optimizan el análisis de los
resultados.
87
RECOMENDACIONES
Se hace necesario desarrollar nuevas investigaciones sobre controles
difusos con sistemas derivativos. Para ello se debe proponer como tesis para
próximos semestres este tipo de proyectos.
Profundizar el estudio de la inteligencia artificial en sus diversas fases,
incorporándolo a los pensa de estudio de ingeniería.
Fomentar la integración del desarrollo de trabajos de grado entre las
diversas escuelas de la facultad de ingeniería, ya que muchos de los
fundamentos tecnológicos de este tipo de trabajos es multidisciplinario.
Explotar en mayor grado la herramienta fuzzyTECH adquirida por esta
Universidad (URBE) y promover el desarrollo de sistemas basados en la
misma, tanto a nivel de pre grado como post grado, por ejemplo, en materias
como Inteligencia Artificial se deben proponer proyectos cuya herramienta de
desarrollo sea la antes mencionada.
Implementar tecnologías basadas en lógica difusa en algunos
sistemas de la universidad, tales como, torniquetes de entrada a los bloques,
controles de temperatura ambientales, iluminación, entre otros.
88
ANEXOS
89
1. CÓDIGO FUENTE DEL PROGRAMA STNDALON.ASM
;***************************************************************** ;TITULO: Control de Temperatura para prototipo Fuzzy Logic ; ;Este programa permite independizar el prototipo de control de ;de Temperatura, manejando los componentes del mismo. ;Una vez que el algoritmo de control fue probado y entonado ;se compiló automáticamente para el microcontrolador PIC 16C71, en este caso particular. ;El programa compilado fue llamado FUZRULES.ASM y reemplaza básicamente ;la interface serial con el PC. ;En STNDALON.ASM las variables difusas son cargadas llamando las rutinas ;de FUZRULES.ASM. La diferencia entre el SetPoint y la temperatura actual es cargada ;en la variable lingüística lv0_DeltaTemp, entonces la rutina "FourRules" ;es ejecutada. La rutina retorna la variable lingüística de salida ;lv1_DutyCycle. Este valor es usado por el control PWM para calentar el resistor. ; list p=16c71,f=inhx8m ; include "stndalon.h" include "16cxx.h" include "stndalon.var" ; ; push macro movwf WBuffer ;guarda el registro w en el buffer swapf WBuffer ;ahora lo intercambia swapf _status,w ;lee el status movwf StatBuffer ;ahora lo guarda endm ; pop macro swapf StatBuffer,w ;restaura el status movwf _status ; / swapf WBuffer,w ;restaura el registro w endm ; ; org ResetVector
90
; goto Start ; ; org InterruptVector goto ServiceInterrupts ; include "display.asm" include "keypad.asm" ; Start call ClearRam call InitPorts call InitRTCC call InitAD call init4rules ;inicia el control difuso call StartDisplay call BlankDisplay bsf _ptled bsf _nopled call WhichKey ;lee la línea 1 y devuelve la temperatura btfsc _StopKey ;se presionó stop? goto SetManMode ;configurese en modo manual bsf _fuzled ;cambie el estado del led Fuzzy Logic StartContinue bcf _blankdisplay ConstantCheck btfsc _500mSOver call ServiceHalfSec btfsc _1mSOver call CheckDC btfsc _20mSOver call ServiceKP btfsc _100mSOver call ServiceDisplay goto ConstantCheck ; SetManMode bsf _manled ;enciende el led Modo Manual goto StartContinue ; ; ;Limpia la memoria del PIC desde la dirección 0x0C hasta 0x2F. ClearRam movlw 0x0c ;lee la primera dirección de memoria
91
movwf _fsr ;la carga en una dirección indirecta CR1 clrf 0 ;hace una limpieza de la dirección indirecta incf _fsr ;incrementa FSR btfss _fsr,5 ;si se configura a 5 bits entonces salta goto CR1 ;sino limpia la siguiente dirección btfss _fsr,4 ;si se configura a 4 bits entonces lo hace goto CR1 ;sino limpia la siguiente dirección return ; InitPorts clrf _portb clrf _porta bsf _ledEn ;desactiva escritura a los leds bsf _tx ;y habilita transmisión alta bsf _rp0 ;selecciona pg1 movlw 3 ;ra0-3 entrada/salida digital movwf _adcon1 ; / movlw B'00000111' ;conf. porta movwf _trisa ; / movlw B'01110001' ;conf. portb movwf _trisb ; / bcf _rp0 ;selecciona pg0 return ; InitRTCC movlw B'11000001' ;interrupción de reloj, divide entre 4 option ;interrupción por un milisegundo movlw .256 - .250 ;interrupciones rtcc movwf _rtcc ;cada milisegundo movlw B'10100000' ;habilita interrpción rtcc movwf _intcon ; / movlw .20 ; movwf _20mStmr ; movlw .5 ; movwf _100mStmr ; movwf _500mStmr return ; ; InitAD movlw B'11000000' ;selecciona reloj RC para a/d movwf _adcon0 ; / return ;
92
; ServiceInterrupts btfss _rtif ;hay interrupción rtcc? return ;sino entonces retorna de la interrupción push ;salva status del registro w movlw .256 - .250 ;vuelve a cargar rtcc movwf _rtcc bcf _rtif ;limpia bandera de interrupción bsf _1mSOver ;configura bandera para 1 milisegundo decfsz _20mStmr ;resta 20 mS al temporizador goto InterruptEnd ;si no se hace 0 entonces finaliza bsf _20mSOver ;configura bandera para 20 milisegundos movlw .20 movwf _20mStmr decfsz _100mStmr ;resta 100 mS al temporizador goto InterruptEnd ;si no se hace 0 entonces finaliza bsf _100mSOver ;configura bandera para 100 milisegundos movlw .5 movwf _100mStmr decfsz _500mStmr ;resta 500 mS al temporizador goto InterruptEnd ;si no se hace 0 entonces finaliza bsf _500mSOver ;configura bandera para 500 milisegundos movlw .5 movwf _500mStmr ;carga de nuevo el temporizador InterruptEnd pop ;restaura el status al registro w retfie ; ; ServiceKP bcf _20mSOver call GetKey ;service routine for key scan return ; ; ServiceDisplay bcf _100mSOver call CheckPeriod call GetAd ;hace conversión analógico-digital btfsc _FlashHot ;esta activo goto FlashHot ;si es así muestrelo btfsc _Flash0 ;limpie los display goto Flash0 movf lv1_DutyCycle,w ;cargar el valor del Duty Cycle
93
btfsc _dcled ;está encendido el led del duty cycle? goto LoadDC ;cargar el valor del duty cycle al registro de display movf FinalTemp,w ;Cargar el valor de la temperatura final btfsc _ftled ;está encendido el led temperatura final? goto LoadFT ;cargar el valor de la temperatura final al resgistro ;de display movf PresentTemp,w ;Cargar el valor de la temperatura presente movwf DisplayRegister ;Mostrar el registro de display call Bin8toBcd3 call ShiftLeft4 movlw .5 btfsc _pthalfvalue iorwf accd goto DisplayContinue LoadDC movwf DisplayRegister call Bin8toBcd3 DisplayContinue call Display call CheckDebounce return LoadFT movwf DisplayRegister call Bin8toBcd3 call ShiftLeft4 movlw .5 btfsc _fthalfvalue iorwf accd goto DisplayContinue ; ShiftLeft4 movlw .4 movwf temp ShiftAcccAccd bcf _c rlf accd rlf accc decfsz temp goto ShiftAcccAccd return ; ;
94
ServiceHalfSec bcf _500mSOver btfss _blankdisplay goto blank bcf _blankdisplay goto HalfSecContinue blank bsf _blankdisplay HalfSecContinue btfsc _manled ;está en modo manual? return ;entonces retorne btfss _starton ;está encendido el circuito? return ;sino salga ;******************************************************************** call FourRules ;ejecute el algoritmo difuso btfsc lv0_DeltaTemp,7 ;eliminar calentamiento previo clrf lv1_DutyCycle ; / ;******************************************************************* return ; ToggleFCLed btfss _fuzled goto FuzLedOn ;encender el led de lógica difusa bcf _fuzled return FuzLedOn bsf _fuzled return ; ; CheckDebounce btfss _debounce ;no debounce then return return btfss _dbover ;dbover? goto setdbover ;no then set flag bcf _dbover ;yes then clr all flags bcf _debounce ; / return setdbover bsf _dbover return ; ; ;El administrador de potencia (PWM) está configurado para un período de 100mS o 10 Hz.
95
;El ciclo de calentamiento (Duty Cycle) se maneja de 0 a 100% y es chequedo cada ;milisegundo CheckPeriod btfss _starton ;Si está encendido ejecutelo return movf lv1_DutyCycle,w sublw .100 ;Chequea si es mayor a 100 movf lv1_DutyCycle,w btfss _c ;sino omite (salta) movlw .100 ;en caso que si carga 100 (nunca excede) movwf DutyCycle btfsc _z ;chequea si es cero goto DopwmEnd bcf _pwm ;just stop pwm btfss _FlashHot ;si calienta de más apaga el resistor bsf _pwm DopwmEnd movwf lv1_DutyCycle return ; ; CheckDC bcf _1mSOver ;limpia bandera btfss _starton return decfsz DutyCycle ;decrementa el Duty Cycle return ;si no es 0 entonces retorna bcf _pwm return ; Flash0 call StartDisplay ;Inicializa display btfsc _blankdisplay ;display vacio? goto BlankDisplay ;limpia display clrw ;muestra en blanco call DisplayW ;el MSD movlw B'11111101' ;muestra cero en el segundo dígito call DisplayW ; / movlw B'11111100' ;muestra cero en LSD call DisplayW movf AuxDsp,w ;lee valores de los leds andlw B'11111100' ;desplaza a la izquierda dos bits call DisplayW ;muestra SendLast
96
call EndDisplay return ; BlankDisplay clrw ;muestra cero call DisplayW clrw call DisplayW clrw call DisplayW movf AuxDsp,w andlw B'11111100' call DisplayW goto SendLast ; FlashHot call StartDisplay ;inicializa display btfsc _blankdisplay ;en blanco? goto BlankDisplay ;limpielo movlw B'01101110' ;with Hot call DisplayW movlw B'00111010' ; / call DisplayW movlw B'00011110' ; / call DisplayW movf AuxDsp,w andlw B'11111100' call DisplayW goto SendLast ; ; ; include "ad.asm" include "fuzrules.asm" ; ; end ;
97
2. Programa fuente FUZRULES.ASM generado por el fuzzyTECH-
MP Explorer.
;------------------------------------------------------------------------------- ;----------------- fuzzyTECH 3.16 MP Explorer --- Preassembler ----------------- ;--- (c) 1994 by Inform Software Corp., 1840 Oak Avenue, Evanston, IL 60201 ---- ;----------- (c) 1994 by INFORM GmbH, Pascalstr. 23, D-52076 Aachen ------------ ;------------------------------------------------------------------------------- ;--------------- code generation date: Tue Jan 09 17:03:04 2001 ---------------- ;------------------------------ project: CONTROLT ------------------------------ ;------------------------------------------------------------------------------- ;------------------ slope term definition (x1, a_s, x3, d_s) ------------------- tpts DW 03400H, 03400H, 03433H, 0340AH DW 03433H, 0340AH, 03466H, 0340AH DW 03466H, 0340AH, 03499H, 0340AH DW 03499H, 0340AH, 034FFH, 03400H ;------------------------ xcom table (defuzzification) ------------------------- xcom DW 03419H, 03466H, 03499H, 034E5H ;--------------------------------- rule table ---------------------------------- rt0 DW 03404H DW 03401H,03401H, 03400H, 03404H DW 03401H,03401H, 03401H, 03405H DW 03401H,03401H, 03402H, 03406H DW 03401H,03401H, 03403H, 03407H ;-------------------------------- initcontrolt --------------------------------- ;initcontrolt init4rules movlw fuzvals + .4 movwf FSR movlw .4 movwf loopcnt movlw 0
98
initloop movwf 0 incf FSR decfsz loopcnt goto initloop return ;------------------------------------------------------------------------------- ;controlt FourRules movlw fuzvals movwf FSR clrf itptr ;-------------------------------- fuzzification -------------------------------- movlw .4 movwf itcnt movf lv0_DeltaTemp,W movwf crisp call flmss ;---------------------------------- inference ---------------------------------- LD_TBL16 rt0 call Min ;min aggregation ;------------------------------- defuzzification ------------------------------- clrf invalidflags clrf otoffset movlw fuzvals + .4 movwf FSR movlw .4 movwf otcnt call com rlf invalidflags btfsc invalidflags,0 movlw 0x001 movwf lv1_DutyCycle return include "flmss.asm" ;"FLMSS.ASM" include "Min.asm" ;"MIN.ASM" include "com.asm" ;"COM.ASM" include "mpy8_8.asm" ;"MPY8_8.ASM" include "div16_8.asm" ;"DIV16_8.ASM" ;data size knowledge base (bytes):
99
;RAM: 11 0000BH ;ROM: 37 00025H ;TOTAL: 48 00030H ;