ALCIDES ACOSTA ORTEGA DARIO PUELLO JULIO
DISE\u00d1O DE UN CONTROLADOR DIFUSO EMBEBIDO A PARTIR DE MODELO DIFUSO INTERPRETABLE DE DATOS DE ENTRADA Y SALIDA
ALCIDES ACOSTA ORTEGA DARIO PUELLO JULIO
UNIVERSIDAD ANTONIO NARI\u00d1O FACULTAD DE INGENIER\u00cdAS PROGRAMA DE INGENIER\u00cdA ELECTR\u00d3NICA CARTAGENA D. T. Y C. 2009
DISE\u00d1O DE UN CONTROLADOR DIFUSO EMBEBIDO A PARTIR DE MODELO INTERPRETABLE DE DATOS DE ENTRADA Y SALIDA
ALCIDES ACOSTA ORTEGA DARIO PUELLO JULIO
Proyecto de Grado para optar por el t\u00edtulo de Ingeniero Electr\u00f3
Asesores: Lu\u00eds Fernando Murillo Facultad de Ingenier\u00eda Electr\u00f3nica y Biom\u00e9 Universidad Antonio Nari\u00f1o Cartagena Juan Torres Vald\u00e9s Docente c\u00e1tedra Facultad de Ingenier\u00eda Electr\u00f3nica y Biom\u00e9
UNIVERSIDAD ANTONIO NARI\u00d1O FACULTAD DE INGENIER\u00cdAS PROGRAMA DE INGENIER\u00cdA ELECTR\u00d3NICA CARTAGENA D. T. Y C. 2009
Notas de Aceptación
_________________________________ _________________________________ _________________________________ _________________________________ _________________________________ _________________________________
_________________________________ Presidente del Jurado _________________________________ Firma del Jurado _________________________________ Firma del jurado
CARTAGENA, D. T Y C, 2009.
DEDICATORIA
A mis padres Por quitarse el pan de la boca para ponerlo en la mía. Por dejar de vestir bien para darme abrigo todos los días. Por renunciar a muchas cosas para llevarme a donde estoy ahora. Por no perder la fe en que podría llegar tan lejos. Gracias por todo y que Dios los bendiga eternamente.
“Camina con paso firme y constante, con profunda fe y absoluta convicción de que alcanzarás cualquier meta que te hayas fijado y conseguirás todo lo que te propongas.” Anónimo
AGRADECIMIENTOS
A dios. A mi abuelita Al profesor luis murillo. Al profesor juan torres.
CONTENIDO Pág. Introducción Planteamiento del problema Formulación del problema Objetivos Objetivo general Objetivo especifico Justificación Marco teórico Diseño de ingeniería Conclusiones Recomendaciones Bibliografía Anexos
Lista de figuras pag
Fi g 1 Fi g 2 Fi g 3 Fi g 4
Lista de tablas pag
Tabla 1 Tabla 2 Tabla 3
Lista de anexos pag Anexo 1 Anexo 2 Anexo 3 Anexo 4
RESUMEN
El presente proyecto tiene como propósito fundamental el diseño y desarrollo un controlador difuso embebido a partir de un modelo difuso interpretable d datos de entrada y salida Este diseño es una herramienta práctica para el aprendizaje fundamental d funcionamiento de los sistemas de control difuso embebidos. Se diseñó y construyó un controlador difuso a partir de un algoritmo del controlador a partir de modelo difuso interpretable de datos de entrada y sal Se realizó la implementación de este sobre el microcontrolador Freescale MCF51QE128 con el fin de lograr cierto grado de automatización durante la realización de un proceso y evaluar su respuesta frente a un controlador PID clásico. El sistema cuenta con los componentes necesarios para su operació fuente de poder, sistema de control embebido en el microcontrolador, y un sistema de control de entrada y visualización de respuesta desarrollada con e software de instrumentación virtual LabVIEW. El diseño y desarrollo del controlador difuso embebido esta centrado en el u de un modelo difuso interpretable de datos de entrada y salida el cual será desarrollado como un algoritmo en lenguaje de alto nivel, para ser implemen en un dispositivo programable con núcleo de 32 bits, evaluar su funcionamie comparar su respuesta frente a un controlador clásico, la novedad de este
proyecto se halla en la implementación del algoritmo del controlador a partir d modelo difuso interpretable de datos de entrada y salida, y el uso de los microcontroladores de 32 bits y su aplicabilidad para el control de variable
ABSTRACT This project aims at designing and developing fundamental of a fuzzy contro embedded from an interpretable fuzzy model input and output data This design is a practical tool for learning basic operation of the embedded fuz control systems. Was designed and built a fuzzy controller from a controller algorithm for interpretable fuzzy model from data input and output. And was carried out on implementation of this MCF51QE128 Freescale microcontroller in order to achieve a degree of automation during the implementation of a process and evaluate their response to a classical PID controller. The system has the components necessary for operation, power supply, control system embedde the microcontroller and a control system input and display of response devel in LabVIEW virtual instrumentation software. The design and development of embedded fuzzy controller is centered on the of an interpretable fuzzy model input and output data which will be develope an algorithm in high-level language, to be implemented in a programmable d with 32-bit kernel, evaluate their performance and compare their response to classic controller the novelty of this project is in the controller algorithm implementation from fuzzy model interpretable data input and output, and u 32-bit microcontrollers and their applicability to control variables.
INTRODUCCION Los sistemas de control que manejan los procesos industriales están sufriend cambios significativos en el manejo de variables, modo de intervención del usuario y velocidad de respuesta…
PLANTEAMIENTO DEL PROBLEMA
DESCRIPCION DEL PROBLEMA. La lógica difusa día a día adquiere gran importancia en nuestras vidas a nive doméstico, teniendo un gran impacto en el desarrollo socio cultural y tecnológico. Una de las áreas de la lógica difusa con mayor proyección hacia e futuro es el control difuso orientado a la industria, el cual por su sencillez conceptual, su facilidad para adaptarse a casos particulares con pocas variaciones de parámetros, su habilidad para combinar en forma unificada expresiones lingüísticas con datos numéricos, y el no requerir de algoritmos sofistica fi dos para su implementación lo han convertido paulatinamente en un alternativa frente al control clásico que ha permanecido vigente estos último años como soporte de la mayoría de sistemas tanto industriales como domésticos y que poco a poco cede terreno ante los nuevos desarrollos orientados en materia del control avanzado de variables. En la actualidad la implementación de sistemas de control difuso industriale sido un reto grande, puesto que su reciente aparición en el mundo de la electrónica industrial lo ha hecho poco conocido en dicho ámbito y algunas d aplicaciones que han podido ser desarrollados presentan inconvenientes a la hora de su uso, dado que gran parte de los desarrollos hechos son modelos
difusos que funcionan utilizando una tarjeta de control y un computador para l realización del cálculo de inferencia (ver Fig.1), lo cual en un ambiente robus seria un punto de fallo.
Modelo difuso
adquisición de datos
proceso
Fig. 1 implementación de controladores difusos industrial Adicionalmente la tecnología que se requiere para realizar un controlador d embebido adecuado para el entorno industrial resulta costosa en comparació con la tecnología usada para controles difusos más básicos que no requieren módulos o capacidades más avanzadas y que sus algoritmos resultan menos complejos. Intentar hacer uso de dispositivos de baja capacidad con modelo difusos complejos se convierte en algo difícil de lograr si se desean obtener mejores respuestas del sistema. Así el uso de dispositivos más potentes es necesario. En la actualidad el boom de los equipos con “Fuzzy logic” se presenta principalmente en los equipos para el hogar tales como: lavadoras, aires acondicionados entre otros (véase fig. 2) ha conducido a mucha búsqueda e investigación en el uso de modelos difusos que ofrezcan mejores capacidade para las tecnologías que siguen avanzando con cada día que pasa.
Fig. 2 electrodomésticos con “Fuzzy Logic” Cortesía de Samsung Electronics Colombia
Investigaciones recientes han propuesto nuevos modelos difusos para el con de variables, entre estos se encuentra un modelo difuso llamado modelo interpretable de procesos dinámicos a partir de datos de entrada y salida, e
diseño pretende implementar un modelo de controlador difuso adaptivo, el cu
puede modificar sus parámetros y su estructura de forma algorítmica. Hasta e
momento sus resultados han podido ser vistos a través de implementaciones donde la computadora gestiona los cálculos y utilizando software especializa se realiza la visualización y control de las variables presentes.
FORMULACION DEL PROBLEMA ¿Cómo diseñar un controlador difuso embebido a partir de modelo interpretab de datos de entrada y salida?
OBJETIVOS. OBJETIVO GENERAL. Diseñar e implementar de un controlador difuso embebido a partir de un mod difuso interpretable de datos de entrada y salida en la universidad Antonio N mediante las técnicas apropiadas para facilitar el aprendizaje y fortalecimien competencias a los estudiantes de los programas de ingeniería electrónica, electromecánica y sistemas en esta área.
OBJETIVOS ESPECIFICOS. •
Realizar la selección del sistema embebido a usar basado en la características requeridas por el diseño y su disponibilidad.
•
Realizar la selección del proceso a simular por medio del controlador, el
propósito
de
establecer
los
parámetros
necesarios
para
su
funcionamiento y evaluación de desempeño. •
Elaborar la estructura
física de la planta del controlador, para po
evaluar los resultados del sistema. •
Diseñar la tarjeta principal del controlador y todos los módulos adicio
necesarios para su funcionamiento. •
Elaborar el algoritmo de control para la tarjeta principal.
•
Implementar el algoritmo de control con el fin de observar su puesta marcha inicial.
•
Realizar las pruebas pertinentes de todo el sistema una vez finalizad diseño. Y evaluar su rendimiento contra la implementación hecha vía PC
6. JUSTIFICACION. El propósito de este proyecto es diseñar e implementar un sistema de contro embebido desde un modelo difuso interpretable de datos de entrada y salida cual a través de las pruebas que se realizaran se evaluara su rendimiento fre a sistemas desarrollados bajo interfase con PC, beneficiando de forma directa procesos industriales complejos existentes incentivando el desarrollo del áre control difuso en las instituciones de educación superior. Los sistemas de control embebido han sido implementados con microcontroladores de baja capacidad lo que ha limitado su aplicabilidad, pe todo esto ha cambiado en vista de la reciente aparición en el mercado de microcontroladores de 32 bits que cubren muchas de las carencias que presentan los de 8 y 16 bits (mucha más memoria, funciones avanzadas, velocidades de procesamiento más altas) respectivamente, para aquel que b realizar aplicaciones donde se requieran un mejor uso de memoria y mayore velocidades de procesamiento de datos. Un punto clave en estos dispositivos el bajo costo que tienen actualmente
De muchos microcontroladores de 32 bits existentes en el mercado tales como la
familia PIC32 de la empresa Microchip, los AVR 32 de Atmel, los PICCOLO de Texas Semiconductor , se escogió para la implementación en el desarrollo de proyecto el microcontrolador COLDFIRE de la empresa Freescale Semiconductors puesto que sus especificaciones tales como tamaños de pala y memoria (Flash y SRAM), arquitectura, set de instrucciones y unidades funcionales avanzadas tales como: convertidor A/D, PWM, I2C resultan importantes y a la vez se adaptan a los requerimientos necesarios del proyec
Adicionalmente este dispositivo posee diversos modos de direccionamiento q permiten el tratamiento de los datos en forma matricial lo cual hace su selec de gran importancia para el modo de trabajo del controlador porque el esqu en que se basa su funcionamiento, hace indispensable el uso de esta característica. Este proyecto resulta viable porque en la mayoría de casos donde se ha implementado control difuso se limita al uso de un algoritmo que por medio d una interface del computador con el medio hace determinado proceso, son contados los sistemas que son manipulados de forma autónoma sin depender directamente de un PC. Así pues, como resultado final, este trabajo de investigación pretende propon una estructura general para la elaboración de nuevos mecanismos o proceso que pueden ser utilizados para implementación a una planta dándole mayor efica fi cia en su proceso de trabajo, basado en la lógica difusa.
La problemática planteada anteriormente, evidencia la necesidad d es diseñar e implementar un sistema de control embebido desde un modelo difuso interpretable de datos de entrada y salida, el cual a través de las prueb que se realizaran se evaluara su rendimiento frente a sistemas desarrollados
interface con PC, beneficiando de forma directa los procesos industriales complejos existentes incentivando el desarrollo del área del control difuso en instituciones de educación superior.
De igual forma, se determinará que el sistema de control con comunicaciónvía TCP/IP, se proyectará como una herramienta tecnológica gestora de nuevosconocimientos, en el campo de la Instrumentación Industrial. Además este proyecto, servirá de ba nuevas investigaciones tecnológicas propiciadaspor estudiantes personas comprometidas con el desarrollo de esta línea de investigación. En el mercado se encuentra una gran variedad de controladores y sistemas de instrumentación virtual, pero con precios muy elevados, por ende se hace necesario que los Ingenieros de Electrónicos participen de manera activa en la creación e implementación de estos, con la finalidad de incrementar la implantación de sistemas de monitoreo que utilicen instrumentación virtual en nuestro país. En este proyecto se pretende desarrollar un sistemas microcontrola que permita el monitoreo de las variables físicas de temperatu salinidad y nivel líquidos, brindandoasí, la posibilidad desubsanar una deficiencia que posee el centro de producción de sal marina e Empresa IFI Salinas de Galerazamba.
MARCO TEORICO
Marco teórico 9. APROXIMACION AL MARCO TEORICO.
Para entender con mayor claridad este proyecto se trabajará con los concepto más relevantes relacionados, algunos de estos son:
TEORIA DEL CONTROL: La Teoría de Control es un campo interdisciplinario de la ingeniería y las matemáticas, que trata con el comportamiento de sistema dinámicos. A la salida deseada de un sistema se la llamada referencia. Cuand una o más variables de salida de un sistema necesitan seguir cierta referencia sobre el tiempo, un controlador manipula la entrada al sistema para obtener efecto deseado en la salida del sistema.
SISTEMA DE CONTROL: Son aquellos dedicados a obtener la salida deseada de un proceso. En un sistema general se tienen una serie de entradas que provienen del sistema a controlar, llamado planta, y se diseña un sistema para que, a partir de estas entradas, modifique ciertos parámetros en el sistema planta, con lo que las señales anteriores volverán a su estado normal ante cualquier variación.
Estos se han desarrollado para manejar máquinas o procesos, de modo que se reduzcan las probabilidades de fallos y se obtengan los resultados buscados. Básicamente, existen sistemas de control abierto y de control cerrado. Los sistemas de control abierto o también llamados sistemas de control lazo abierto, en estos sistemas los cuales la salida no afecta la acción de control, e no es más que en este sistema no se mide salida ni sé realimenta para compararla con la entrada. Por tanto, a cada de referencia le corresponde u condición operativa fija; como resultado, la presión del sistema depende de la calibración.
Los sistemas de circuito cerrado o sistema de control realimentado, es un sistema que mantiene una relación prescrita entre la salida y la entrada de referencia, comparándolas y usando la diferencia como medio de control, es sistema no se limita a la ingeniería, sino que también se encuentran en diver ajenos
campos a esta.
Un sistema de control básico es mostrado en la siguiente figura:
Fig.3 Estructura de un sistema de control. Hay varias clasificaciones dentro de los sistemas de control. Atendiendo a su naturaleza son analógicos,
digitales o mixtos; atendiendo a su estructura (númer
de entradas y salidas) puede ser control clásico o control moderno; atendiend su diseño pueden ser •
On/Off: En este sistema el controlador enciende o apaga la entrada y utilizado, por ejemplo, en el
alumbrado público,
ya que éste se enciende
cuando la luz ambiental es más baja que un nivel predeterminado de luminosidad. •
Proporcional (P): En este sistema la amplitud de la señal de entrada sistema afecta directamente la salida, ya no es solamente un nivel prefija fi do sino toda la gama de niveles de entrada. Algunos sistemas automáticos de iluminación utilizan un sistema P para determinar con q
intensidad
encender
lámparas
dependiendo
directamente
de
la
luminosidad ambiental. •
Proporcional derivativo (PD): En este sistema, la velocidad de cambio d la señal de entrada se utiliza para determinar el factor de amplificació calculando la derivada de la señal.
•
Proporcional integral (PI): Este sistema es similar al anterior, solo que señal se integra en vez de derivarse.
•
Proporcional integral derivativo (PID): Este sistema combina los dos tipos anteriores. Es el más utilizado en la industria por su versatilidad facilidad de implementación.
•
Sistema experto:
Este sistema modela el proceso de
aprendizaje
semejante al ser humano para aprender a controlar la señal de salida
LOGICA DIFUSA: es una técnica de la inteligencia computacional que permite trabajar información con alto grado de imprecisión, en esto se diferencia de lógica convencional que trabaja con información bien definida y precisa. Es una metodología que proporciona una manera simple y elegante de obten una conclusión a partir de información de entrada vaga, ambigua, imprecisa ruido o incompleta, en general la lógica difusa imita como una persona toma
decisiones basada en información con las características mencionadas. Una d las ventajas de la lógica difusa es la posibilidad de implementar sistemas basados en ella tanto en hardware como en software o en combinación de ambos. El concepto de Lógica Difusa fue concebido por Lofti Zadeh un profesor de la Universidad de California en Berkeley, quien inconforme con los conjuntos clásicos (crisp sets), que solo permiten dos opciones, la pertenencia o no de u elemento a dicho conjunto la presentó como una forma de procesar informac permitiendo pertenencias parciales a unos conjuntos que en contraposición
clásicos los denominó Conjuntos Difusos (Fuzzy sets), el concepto de conjunto difuso fue expuesto por Lofti Zadeh en un papel hoy clásico en la literatura de lógica difusa en el año de 1965, el artículo se titula "Fuzzy Sets" y fue publica
en la revista Information and Control. El mismo Zadeh publica en 1971 el artícu "Quantitative Fuzzy Semantics", en donde Introduce los elementos formales acabarían componiendo el cuerpo de la doctrina de la lógica difusa y sus aplicaciones tal como se conocen en la actualidad. Algunos de los conceptos básicos de esta área son los siguientes:
Crisp Sets o conjuntos clásicos: estos son valores que el ser humano establece para clasificar objetos y conceptos. Estos se establecen en función la pertenencia o no a un grupo especifico de un elemento. (Ej.: un conjunto de prendas de vestir: suéter, camisa, pantalón.
Fuzzy Sets o conjuntos difusos: son valores que desde el punto de vista de que se aplican palabras a la definición de cualquier propiedad por ejempl mujeres altas, edificios viejos, hombres bajos, elevada inteligencia, baja velocidad, viscosidad moderada… Desde este punto de vista estos valores podrían ser definidos solo con 2 valores, 0 y 1, se ha de establecer un peso para la característica estableciendo valores intermedios (ejemplo entre 0 y tomando todos los valores intermedios, o bien estableciendo una escala d a 1 0 0 ).
Grado de pertenencia: este valor establece el punto de transición entre 0 y 1 entre las condiciones del conjunto difuso, por ejemplo si se establece que u edificio en el aspecto de lo nuevo que es tiene un valor de 7, este será el grado de pertenencia entre los nuevos edificios. Un ejemplo de uso del gr de pertenencia podría ser el siguiente, en el control de la velocidad de un vehículo, se contemplaría la pertenencia en el aspecto de velocidad exces y no existe necesidad de cambio en la velocidad. Con estos dos aspectos se podría calcular cual es la acción que se ha de llevar a cabo según los valor de entrada de estos. Variable difusa: es cualquier valor que está basado en la percepción humana más que en valores precisos de medición (Ej. un color, que está compues
en realidad por varias tintas, si la presión de la caldera es excesiva, si la temperatura del agua es la adecuada, si la cantidad de sal que lleva la tortil es excesiva, si la velocidad de un tren es elevada…) todas estas dependen la percepción.
Universo de discurso: Este es el conjunto de elementos que vamos a tener en consideración, por ejemplo si se considera que las personas de una comunidad, este universo estará formado por las personas bajas, las personas altas, los hombres con gafas… SISTEMAS DIFUSOS
Son los mecanismos que se encargan de manejar los parámetros de entra realizar los debidos cálculos y generar la acción de control correspondien figura muestra como está compuesto de un sistema difuso tal como el que s muestra en la figura.
Fig.4 Estructura básica de un sistema difuso
Fuzzificacion: es la entrada al sistema, la cual toma los valores numéricos provenientes del exterior y los convierte en valores "difusos" que pueden se procesados por el mecanismo de inferencia. Estos valores difusos son los nivele
de pertenencia de los valores de entrada a los diferentes conjuntos difusos en cuales se ha dividido el universo de discurso de las diferentes variables de entrada al sistema.
Base de reglas: La base de reglas es la manera que tiene el sistema difuso de guardar el conocimiento lingüístico que le permite resolver el problema para cual ha sido diseñado. Estas reglas son del tipo SI-ENTONCES.
Una regla de la base de reglas o base de conocimiento tiene dos partes, el antecedente consecuente como se observa en la siguiente figura:
Fig.5 Regla o condición del sistema
Inferencia difusa: Teniendo los diferentes niveles de pertenencia entregados por el fuzzificador, los mismos deben ser procesados para general una salida difu La tarea del sistema de inferencia es tomar los niveles de pertenencia y apoy en la base de reglas generar la salida del sistema difuso.
Defuzzificacion: La salida que genera el mecanismo de inferencia es una salida difusa, lo cual significa que no puede ser interpretada por un elemento extern
(por ejemplo un controlador) que solo manipule información numérica. Para lo que la salida del sistema difuso pueda ser interpretada por elementos que so procesen información numérica. En la lógica difusa los sistemas mas conocidos son: los sistemas tipo mamd que cuentan con una estructura como la mostrada mas arriba (véase fig.4).
Y los sistemas Takagi-Sugeno (ver figura 6) que cuentan con una estructura semejante al sistema mamdani pero con la diferencia de que este no requiere
defuzzificacion, debido a que la salida que entrega el mecanismo de inferencia estos sistemas arroja un consecuente en valor numérico.
Fig.6 Sistema difuso Takagi-Sugeno (5)
MODELO BORROSO INTERPRETABLE A PARTIR DE LOS DATOS(3): La novedad del método propuesto en este documento radica en la consecución d modelos borrosos interpretables con alta precisión y bajo número de paráme y a que no es un método Híbrido ya que no requiere de otras técnicas de inteligencia artificial para su entrenamiento. La metodología empleada en es trabajo es presentada en tres fases: en la primera, se emplea el error de inferencia para generar un sistema borroso interpretable y, además, detecta clases o agrupamientos posibles en los datos; en la segunda, mediante el emp de mínimos cuadrados, para ajuste de consecuentes; en la tercera, se emplea método para la identificación de procesos dinámicos.
ERROR DE INFERENCIA.
En lógica borrosa es común tratar con reglas del tipo “Si u es A, entonces y es B” donde u e y representan dos variables numéricas, A c
U y B c Y, son dos
conjuntos borrosos de entrada y salida respectivamente, definidos en los universos U e Y. La regla mencionada es equivalente a la inecuación (1) Donde uA( u ) y uB ( y ) se refie fi ren a las funciones de pertenencia de los valore lingüísticos que pueden tomar las variables u e y respectivamente. El error d inferencia , concebido como la distancia conceptual al conjunto conclusión la regla
(2) En el método propuesto, el primer paso es construir la partición de la(s) variable(s) de entrada empleando conjuntos triangulares con solapamiento e 0.5. Posteriormente se procede a generar la ubicación de los consecuentes d cada regla buscando que el error de inferencia sea nulo, según la ecuación (2 cual conllevaría a un infin fi ito número de soluciones posibles. En la búsqueda d una única solución se restringe la condición de error de inferencia nulo a la presentada en la ecuación (3) (3) Si el sistema tiene p entradas se debe representar por reglas del tipo “Si u1 e , u2 es A2 , …, up es Ap, entonces y es B”, la regla j deberá cumplir con la condición.
(4)
Donde se
representa un operador de combinación de la lógica borrosa d
clase promedio ponderado, (i) kx ,con k=1,…,p; i=1,…,N, es el vector entrada p-dimensional, con N datos p variable de entrada, y yi es el vector unidimensional de salida. Si se emplean consecuentes tipo singleton, solo se consideran los valores
modales de las funciones de pertenencia del antecedente, considerando que la ubicación del valor modal de la función de pertenencia triangular en el consecuente se puede asimilar a un singleton.
IDENTIFICACIÓN BORROSA. Estructura del Modelo Borroso
Buscando un equilibrio entre la aproximación numérica y la interpretabilida sistema borroso resultante se consideran los siguientes criterios para la sele de los parámetros
Funciones de Pertenencia La partición de los universos de las variables de entrada en el proceso de aprendizaje se hace con conjuntos triangulares normalizados con solapamie específico de 0.5. Las funciones de pertenencia triangulares permiten la
reconstrucción del valor lingüístico en el mismo valor numérico, luego de aplic un método de concreción; además, el solapamiento en 0.5 asegura que los soportes de los conjuntos borrosos sean diferentes. Los conjuntos borrosos generados para la variable de salida son tipo singleton.
Distribución de las Funciones de Pertenencia Los conjuntos borrosos triangulares de las variables de entrada se distribuye uniformemente en cada universo respectivo de manera tal que cada uno de lo elementos de los universos de discurso de cada variable debe pertenecer, al menos, a un conjunto borroso.
Operadores
Para la combinación de los antecedentes se emplea un operador de combinació de la clase OWA, cuya denominación obedece a sus siglas en inglés (Ordered Weighted Averaging operators)
Método de Inferencia El método de inferencia empleado está dado por
(5)
Donde
(6) Es el grado de la salida de la j-ésima regla de un sistema borroso tipo Mamda x
i
es la función que aproxima a la función real de salida, y- j es el val
singleton correspondiente a la regla. j A n
son los conjuntos borrosos del antecedente de la regla j activada, y L
corresponde al número de reglas activadas.
Algoritmo De Identificación Borrosa El algoritmo para generación de sistemas borrosos interpretables a partir de datos se basa en la minimización del error de inferencia. El usuario solo debe
introducir los datos de las variables de entrada y salida. El algoritmo determin los rangos de cada variable, distribuye las funciones de pertenencia en los universos de cada variable de entrada, ubica los consecuentes tipos singleto el espacio de salida, determina las reglas y ajusta la ubicación de los consecuentes, empleando mínimos cuadrados, para minimizar el error de aproximación. El algoritmo se detiene cuando se ha alcanzado una métrica d error menor a la requerida por el usuario o cuando el número de Conjuntos borrosos por variable de entrada es mayor a 9. La distribución de las funcion de pertenencia en cada universo de entrada se hace de manera uniforme para garantizar que la partición resultante sea suma 1; es decir, la suma de los gra de pertenencia de un dato en una variable de entrada será siempre igual a 1. Dado una colección de datos experimentales de entrada y salida
Con i = 1…N; k = 1…. P, donde es el vector de entrada p-dimensional
Es el vector unidimensional de salida
a.
Organización del conjunto de p variables
de entrada y una variable de salida, cada una con N datos.
Figura 1. Organización del conjunto de datos.
b. Determinación de los rangos de los universos de cada variable de acuerdo a los valores máximos y mínimos de los datos asociados. c. Distribución de las funciones de pertenencia triangulares sobre cada universo. Se tiene como condición general que el vértice con valor de pertenencia uno (valor modal) cae en el centro de la regió cubierta por la función de pertenencia mientras que los otros dos vértices, co valor de pertenencia iguales a cero, caen en los centros de las dos regiones vecinas. Para poder aproximar eficie fi ntemente los extremos inferior y superio una función representada por los datos es necesario que en la partición trian las funciones de pertenencia que cubren el inicio y final del universo coincida sus vértices con valor de pertenencia uno con sus vértices izquierdo y derech respectivamente, como se aprecia en la figura 2. Se inicia con n = 2 conjunto triangulares.
Figura 2. Partición triangular suma 1. a) Partición inicial, n =2; b) partición con n = 5
d. Cálculo de la posición de los valores modales de la(s) variable(s) de entrada, de acuerdo a:
(7) Donde ys(n)k corresponde a la proyección sobre el espacio de salida de la evaluación del dato x(i) de la k-ésima variable de entrada en el n-ésimo conjun
de la partición correspondiente. El valor de la salida correspondiente a dich proyección está dado por el valor de la i-ésima posición del vector de salida y cual se constituye en el singleton asociado a ese conjunto. De esta manera se aplica el criterio de error de inferencia nulo empleando consecuentes tipo singleton. e. Determinación de las reglas. El número máximo de reglas está determinad por el número de conjuntos de cada variable de entrada multiplicado por el número de variables; es decir igual a n × k, que es igual al número de singleto
generados en el paso anterior. Cuando existen singletons ubicados en la misma posición, se combinan los antecedentes de acuerdo a (4) en una sola regla, lo que permite reducir el número de reglas. f. Validación del modelo empleando el método de inferencia descrito por (5 donde y -j es el valor del singleton correspondiente a la regla j. g. Ajuste de los parámetros, reubicando los singletons de salida mediante el
empleo del método de mínimos cuadrados. La ecuación (5) puede expresarse d la forma.
(8) Donde (9)
La ecuación (8) puede expresarse en forma matricial como Y =Wq + E, donde Y representa los valores de salida reales, Wq representa la salida del mode
borroso, siendo W es la matriz de grados de pertenencia obtenida de (9) y q e vector de consecuentes, y E es el error de aproximación que debe ser minimizado. Es decir:
(10) Empleando la norma del error cuadrático se tiene E
2
= ( Y −Wθ )
2
= ( Y2− 2YWθ
+ ( Wθ )
2
) (11)
La solución a este problema de mínimos cuadrados está dada por: ∂Ε /∂ θ = 0 = −2 YW + 2W 2
Τ
W
θ
(12)
De donde se obtiene θ =Y W / W W = (W W)-1 Y W Τ
Τ
Τ
T
Esta solución es válida si (WTW) es no singular, lo que quiere decir que todas la reglas deben recibir suficie fi nte excitación durante el entrenamiento. En la pr esto no es siempre posible, por lo que es recomendable recurrir a la aplicació mínimos cuadrados recursivos, buscando garantizar que la adaptación solo afecte las reglas excitadas h. Terminar si la medida del error cuadrático medio MSE es n menor a una medida previamente establecida ó si el número de conjuntos por variable de entrada es mayor a 9. De otra manera, incrementar en 1 el número n de conjuntos de la variable de entrada y volver al paso c).
Con el algoritmo descrito se consigue un modelo borroso interpretable con u buena precisión y solo se requiere del ajuste de los parámetros del consecue que son tipo singleton, lo que disminuye el tiempo de entrenamiento. Es posib lograr una mayor aproximación (“ajuste fino”) si al finalizar el proceso mencionado se aplica el método del gradiente descendiente para ajustar la ubicación de los valores modales de los conjuntos triangulares del anteceden
conservando la partición suma 1 y, por lo tanto la interpretabilidad del siste
MICROCONTROLADOR: Es un dispositivo electrónico capaz de llevar a cabo procesos lógicos. Estos procesos o acciones son programados en lenguaje ensamblador por el usuario, y son introducidos en este a través de un programador. (Véase fig.7)
Fig.7 forma física de un microcontrolador Cortesía de Freescale Semiconductor
Inicialmente cuando no existían los microprocesadores las personas se ingeniaban en diseñar sus circuitos electrónicos y los resultados estaban expresados en diseños que implicaban muchos componentes electrónicos y cálculos matemáticos. Un circuito lógico básico requería de muchos elemen electrónicos basados en transistores y resistencias, lo cual desembocaba en circuitos con muchos ajustes y fallos; pero en el año 1971 apareció el primer
microprocesador el cual originó un cambio decisivo en las técnicas de diseño d la mayoría de los equipos. Al principio se creía que el manejo de un
microprocesador era para aquellas personas con un coeficiente intelectual mu alto; por lo contrario con la aparición de este circuito integrado todo sería mu más fácil de entender y los diseños electrónicos serian mucho más pequeños simplificados. Entre los microprocesadores más conocidos tenemos el popula
80 y el 8085. Los diseñadores de equipos electrónicos ahora tenían equipos q podían realizar mayor cantidad de tareas en menos tiempo y su tamaño se re considerablemente; sin embargo, después de cierto tiempo aparece una nue tecnología llamada micro controlador que simplifica aun más el diseño electrónico.
El microcontrolador MCF51QE128
DISEÑO DE INGENIERIA
DISEÑO DE INGENIERÍA El principio de funcionamiento del controlador difuso embebido se basa en la captura de una o varias variables de entrada a través del microcontrolador, e a su vez son cambiadas de señales análogas a información digital y sometida un proceso de escalizado (conversión a unidades de ingeniería), para luego se convertidas en valores difusos (grados de pertenencia), seguido esto el siste aplica un mecanismo a través del cual define los valores con los que se obtien las condiciones para obtener una posible salida (maquina de inferencia), esto valores se aplican a una base que contiene reglas definidas por el usuario qu conjunto con los valores obtenidos por el mecanismo de inferencia difusa se encargan de generar un numero especifico de valores que se operan para obtener la salida de control con respecto al valor definido por la entrada del sistema. Para iniciar la explicación del controlador, se parte de la estructura típica de sistema de control, de esta manera se facilita su comprensión puesto que se desglosa su contenido general llevándolo a términos específicos y detallados sobre su funcionamiento. El modelo general del controlador se puede aprecia la figura.
Fig. El esquema anterior, es el punto de referencia del que parte el controlador, a continuación se procederá a describir cada uno de los bloques internos, hacie énfasis en detallar lo mas posible cada uno de estos.
BLOQUE DE CONTROL En el diagrama general es el equivalente a la entrada de referencia, el sumad el bloque del controlador. Aquí se encuentra el corazón del sistema de contro cuya labor es la de tomar las entradas y realizar todas las operaciones pertinentes para obtener la salida deseada en función de las entradas ingresadas. A continuación la figura TAL muestra en términos generales la estructura int del bloque de control:
Fig. TAL
DESCRIPCIÓN GENERAL DEL CONTROLADOR El sistema de control difuso a diseñar esta fundamentado en el uso de un controlador difuso mínimo
o mamdani,
implementado en lenguaje de
programación C, el cual se puede ver con mayor claridad en la Fig. ¿ . Para la construcción de este controlador se parte de la siguiente estructura grafica fi ta como se puede apreciar en la siguiente figura.
Fig. El diagrama anterior muestra el orden de ejecución del programa, los elemen que contienen datos que se usan para las diversas operaciones de cada bloqu (funciones del programa). A continuación se explicara con más detalle la estructura lógica del controla difuso embebido función por función.
FUNCION LECTURA, CONVERSIÓN Y ESCALIZADO.
Este bloque de funciones es el encargado de tomar el valor de la entrada del sensor, realizar la conversión de valor análogo en datos digitales y proporcio un escalado para determinar el ángulo en relación con el número de bits usad
Fig. Inicialmente, el programa captura el dato presente en la entrada destinada p tal propósito, una vez se compruebe que hay un dato se procede a convertir e dato análogo en información digital utilizando para esto el convertidor inter microcontrolador. La estructura interna de esta función es la siguiente:
Fig.
PROCESO DE ESCALIZADO: esta parte de la función se encarga de tomar el valor de entrada previamente convertido y normalizarlo a unidades de ingenier Para ello se debe tener en cuenta lo siguiente. 1.
la resolución (2n) a la que va a trabajar el conversor análogo-digital, para
este caso se configura para trabajar tanto 8 como 12 bits.
la medida de unidades desde el punto mínimo hasta el máximo, la medid
2.
es tomada en grados y va desde 0° hasta 360°. . Una vez se tienen estos datos preliminares se realiza el siguiente procedimie para obtener el valor de escalado para el dato ingresado. Para hallar el valor de escalado a 8 bits consideramos las parejas ( x 1, x 2 )
(3) y
y
=
=
( 0 ,360 ) mx
b
+
(1) y
( y 1,
y
2)
=
( 0 , 255 )
(2), las ecuacionesy
−
y1
=
y 2− y 1 x2
−
x1
(4)
Reemplazando 1 y 2 en la ecuación 3 nos queda.
y
−
y
1
Pero y m
=
=
−
1 . 41
360
−
0
255
−
0
1 y
=
m
=
1 . 41
(5)
entonces de la ecuación 5 tenemos que.
(6)
Reemplazando 6 en la ecuación 4 nos queda. y
=
(1 . 41 ) x
+
b
(7)
Donde y representa el valor en grados (A), x representa el valor de la entrada e bits(n) reemplazando 7 nos queda: A
=
(1, 41 ) n
+
b
(8)
Para hallar el valor de escalado a 12 bits reemplazamos el valor obtenido de resolución 2n, (en este caso 4096) junto con el valor del Angulo máximo (360) Se reemplazan en la ecuación 3 y el resultado se reemplaza en 4, obteniendo siguiente resultado. Donde y representa el valor en grados (A), x representa e valor de la entrada en bits(n), reemplazando nos queda. A
=
( 0,0878 ) n
+
b
Estas ecuaciones obtenidas son usadas por el programa para realizar la operación de escalado con el valor previamente digitalizado, el valor resultan almacena en un registro para que pueda ser usado por el siguiente bloque de funciones del programa.
FUNCION FUZZIFICACION.
Fig.
Esta es una de las operaciones principales que realiza el programa, cuya funció es tomar el valor de entrada, evaluarlo sobre los conjuntos definidos y entreg su salida la pertenencia asociada a cada uno de estos esta bloque parte de los siguientes parámetros: 1.
variable de entrada, (la cual proviene del bloque de lectura, conversión y
escalizado) y se define como valor de tipo entero 2.
variables de entrada difusas (error [e] y derivada error [De]) con 3
conjuntos de tipo triangular (negativo, cero y positivo), los cuales se encuentran precargados en la programación del controlador como tipo dato arrays. 3.
variables declaradas para especificar Tipo y cantidad de conjuntos.
4.
array declarado para almacenar los resultados obtenidos de las
operaciones de este bloque.
La configuración usada para establecer los conjuntos de entrada (error y derro es la que se muestra a continuación, aunque esta puede variar como se vera más adelante:
Fig. El funcionamiento de esta sección del programa tiene en cuenta los datos mencionados anteriormente y un mecanismo para realizar el recorrido de los
conjuntos tomando la configuración de la Fig. y las zonas marcadas en la parte inferior del mismo. . Esto se explica a continuación.
ESTRUCTURA ALGORITMICA: Fuzzificacion (CerrorTG, dato) Int dato; Int TG; Int numC; Dato= n; TG= n;
NumC= n; Mientras (dato!=0 && TG==1&& numC!=0) haga if (dato >= array conjunto 0 pos 0) entonces P1= array conjunto 0 pos 0; Si (dato <= array conjunto 0 pos1) entonces { P2=array conjunto 0 pos 1; Pneg (dato, P1, P2) Grado pertenencia= resultado Pneg } If (dato > array conjunto 0 pos 1) entonces Grado pertenencia=0; If (dato >= array conjunto 1 pos 0) entonces P1= array conjunto 1 pos 0; If (dato <= array conjunto 1 pos1) entonces { P2=array conjunto 1 pos 1; Ppos (dato, P1, P2); Grado pertenencia= resultado Ppos; } Else P1= array conjunto 1 pos 1; Si (dato <= array conjunto 1 pos2) entonces { P2=array conjunto 1 pos 2; Pneg (dato, P1, P2);
Grado pertenencia= resultado Pneg; }
El algoritmo descrito anteriormente muestra el procedimiento seleccionado p tomar el dato de entrada proveniente de la función lectura y lo evalúa sobre e array de conjuntos siguiendo el patrón de delimitación de zonas. La explicac de su funcionamiento es la siguiente: Inicialmente se declaran todas las variables (dato, TG , numC) donde dato representa el registro que almacena el resultado entregado por la función le TG es la representación del tipo de conjunto a utilizar, en este caso triangula numC que representa el numero de conjuntos que se van a usar. Luego de esto se crea un ciclo que opera mientras se cumpla la condición
establecida (dato sea diferente de cero, TG sea igual a 1 y numC sea diferente de cero). Una vez se cumple la condición inicial el programa inicia su operació para esto hay que saber como se hace la representación de un triangulo analíticamente para su uso en el programa esto se puede apreciar en la fig
Fig. Representación de conjunto como un array y análisis Como se puede observar los conjuntos triangulares tienen tres puntos y cada u de ellos es representado por un valor (A, B y C) ubicado en las columnas de
array de la figura, el valor 0 en la fila representa el conjunto sobre el cual se e evaluando el dato.
CRITERIO DE EVALUACION DE CONJUNTOS: 1.
se pregunta si el valor a evaluar es menor o igual que el valor de la
primera posición del array (A) si es cierto el valor de pertenencia qu guarda en el array correspondiente es cero, si ocurre lo contrario, el valo
A se guarda en el registro P1 y la pertenencia comprendida por los valores menores o iguales a A se hace cero y se guarda en el array de pertenencias.
2.
Se pregunta si el valor a evaluar es menor o igual que el valor de la
segunda posición del array (B) si es cierto el valor B se guarda en el registro P2 y se llama una función que calcula la pendiente positiva una vez realizada la operación retorna con el resultado y lo guarda en el arra
de pertenencias, si ocurre lo contrario, el valor B se guarda en el registro P1 y la pertenencia comprendida por los puntos A y B se hace cero y se guarda en el array de pertenencias. 3.
Se pregunta si el valor a evaluar es menor o igual que el valor de la tercera
posición del array (C) si es cierto el valor C se guarda en el registro P2 se llama una función que calcula la pendiente negativa una vez realizad la operación retorna con el resultado y lo guarda en el array de pertenencias, si ocurre lo contrario, las pertenencias comprendidas po puntos B, C y posiciones superiores hace cero y se guarda en el array d pertenencias.
En la figura tal se tiene una información adicional de vital importancia para e funcionamiento de esta sección del programa, se trata de la representación analítica de la pendiente de un conjunto triangular, este análisis es de gran utilidad para realizar el algoritmo de evaluación de valores que se encuentre ubicados en uno o varios conjuntos. Visto desde la figura el calculo de la pendiente se presenta en dos casos diferentes, cuando el valor de entrada se ubica entre los puntos A y B de la figura (pendiente ascendente o positiva) y
cuando se encuentra entre los puntos B y C (pendiente descendente o negativa Caso # 1 Pendiente Ascendente: Haciendo referencia al punto 2 del criterio d evaluación de conjuntos, esta función (PPOS) toma los dos puntos de infle fl xió establecidos como límites (P1 y P2) y el valor de entrada, y realiza el cálculo d la pendiente positiva para obtener el valor de pertenencia en función de la ubicación del valor de entrada en esa zona. Su funcionamiento parte de la siguiente formula:
p
=
x m
− −
y
Donde p = pendiente x = valor de entrada m = punto de inflexión
y
inferior, y y = punto de inflexión superior.
El algoritmo establecido se modifica de forma que los datos utilizados por programa coincidan de manera adecuada, el resultado es el siguiente: U
dato =
P2
− −
P2 P1
Donde u= pendiente obtenida, dato= registro de valor
almacenado, p1= punto de inflexión mínimo y p2= punto de inflexión máximo. El algoritmo que detalla esta explicación es el siguiente:
PPOS (dato, p1, p2) { Int P1 Int P2 Int U P1= dato – p1; P2= p2 – p1; U= P1/P2; Return (U) } Inicialmente se declaran los valores a utilizar por esta función, P1 que es la representación del numerador en el calculo de la pendiente, P2 como representación del denominador y u como el resultado de la pendiente. Lue de esto se procede con la primera expresión que es la diferencia entre el val de la entrada y el punto de infle fl xión mínimo, y es representada como P1, después de esto se coloca la segunda expresión, que es la diferencia entre el punto de infle fl xión máximo y el punto de infle fl xión mínimo, y es representada como P2. Luego de esto se ubica la última expresión, la cual es una división entre las expresiones P1 y P2 respectivamente, de donde se obtiene el valor d la pendiente positiva que es representada por U, finalmente la función retorn la fuzzificacion este valor y lo almacena en un array para representar los grad de pertenencia del conjunto evaluado.
Caso # 2 Pendiente Descendente: Haciendo referencia al punto 2 del criterio evaluación de conjuntos, esta función (PNEG) toma los dos puntos de infle fl xió
establecidos como límites (P1 y P2) y el valor de entrada, y realiza el cálculo d
la pendiente negativa para obtener el valor de pertenencia en función de la ubicación del valor de entrada en esa zona. Su funcionamiento parte de la siguiente formula:
p
=
m
−
x
m
−
y
Donde p = pendiente x = valor de entrada m = punto de inflexión
inferior, y y = punto de inflexión superior.
El algoritmo establecido es modificado de forma que los datos utilizados por e programa coincidan de manera adecuada, el resultado es el siguiente: U
P2 =
dato
−
P2
−
P1
Donde u= pendiente obtenida, dato= registro de valor
almacenado, p1= punto de infle fl xión superior y p2= punto de infle fl xión infer El algoritmo que detalla esta explicación es el siguiente: PPOS (dato, p1, p2) { Int P1 Int P2 Int U P1= p2 - dato; P2= p2 – p1; U= P1/P2; Return (U) }
Inicialmente se declaran los valores a utilizar por esta función, P1 que es la representación del numerador en el calculo de la pendiente, P2 como representación del denominador y U como el resultado de la pendiente. Lu de esto se procede con la primera expresión que es la diferencia entre el pun de infle fl xión mínimo y el valor de la entrada, y es representada como P1, desp de esto se coloca la segunda expresión, que es la diferencia entre el punto de infle fl xión mínimo y el punto de infle fl xión máximo, y es representada como P2. Luego de esto se ubica la última expresión, la cual es una división entre las expresiones P1 y P2 respectivamente, de donde se obtiene el valor de la pendiente positiva que es representada por U, finalmente la función retorna fuzzificacion este valor y lo almacena en un array para representar los grados pertenencia del conjunto evaluado.
ALMACENAMIENTO DE LOS GRADOS DE PERTENENCIA Durante el proceso de fuzzificacion los valores resultantes del recorrido de conjuntos son almacenados dentro de estructuras tipo array que son utilizad por la maquina de inferencia y la base de reglas para establecer los lineamien necesarios en la defuzzificacion A continuación se muestra en la tabla tal la forma de almacenamiento de lo grados de pertenencia de las entradas error y Derror (GPEe y GPEd respectivamente). Fila = i columna = j Columna 0 Fila 0 Pertenencia conjunto 0 Fila 1 Pertenencia conjunto 1 Fila 2 Pertenencia conjunto 2
Tabla tal
Una vez estos arrays son definidos se llama una nueva función la cual se explica a continuación.
FUNCION MAQUINA DE INFERENCIA
Fig. Tal La figura muestra el bloque de la maquina de inferencia, Esta es una de las operaciones principales que realiza el programa, la función de bloque es tom los grados de pertenencia arrojados por el bloque de fuzzificacion, cargar la b de reglas, definir cuales de estas se encuentran activas en relación con los grados de pertenencia obtenidos en la fuzzificacion, evaluar utilizando los criterios de inferencia conocidos y entregar un valor difuso de salida que se o en el siguiente bloque funcional (defuzzificacion). Los parámetros y variables principales que gobiernan la operación de este bloqu son los siguientes:
1.
Grados de pertenencia tanto del conjunto error como la derivada del error,
estos se presentan como tipo de dato array, la forma como están organizados se puede apreciar en la tabla tal 2.
Definición de la base de reglas (Bas_reg), se presenta como tipo de dato
array donde están almacenadas las reglas que definen la salida en funció de los conjuntos de entrada 3.
Definición de reglas activas (Reg_Act), se presenta como tipo de dato
array bidimensional, donde se establecen las reglas que se encuentran activas al momento del proceso. Para obtener el valor de salida de este bloque se detalla un procedimiento qu consta de 3 etapas a seguir estas son: 1. Obtención del mínimo de los antecedentes. 2. Detección de reglas activas. 3. Aplicación del mecanismo de implicación y agregación A continuación se explica con detalle cada uno de las etapas mencionadas.
OBTENCIÓN DEL MÍNIMO DE LOS ANTECEDENTES Es la primera etapa del proceso general de la maquina de inferencias, este procedimiento se lleva a cabo con fin de obtener información sobre los valore los grados de pertenencia diferentes de cero presentes en las estructuras de datos entregadas por la fuzzificacion, Antes de iniciar esta explicación es necesario saber que existe una estructu adicional donde serán almacenados los valores obtenidos del cálculo del mínimo
entre los arrays de pertenencia, esta es la matriz de reglas activas (Reg_Ac representada como un array bidimensional. El procedimiento que se ha planteado para obtener el mínimo de los antecedentes es el que se muestra a continuación. Mínimo 1(GPEe, GPEd) Int i; Int min; For (i = 0, i <= 2, i + 1) { If (GPEe[i] &&GPEd [0]!=0) If (GPEe[i] <=0) { Min=GPEe[i]; Else Min=GPEd [0]; Min = Reg_Act [i] [0]; } Else Reg_Act [i] [0]=0; If (GPEe[i] &&GPEd [1]!=0) If (GPEe[i] <=0) { Min=GPEe[i]; Else Min=GPEd [0]; Min = Reg_Act [i] [1];
} Else Reg_Act [i] [1]=0; If (GPEe[i] &&GPEd [2]!=0) If (GPEe[i] <=0) { Min=GPEe[i]; Else Min=GPEd [0]; Min = Reg_Act [i][2]; } Else Reg_Act [i] [2]=0; I ++; } El algoritmo descrito anteriormente, muestra el planteamiento del mecanismo que realiza el recorrido de los grados de pertenencia entregados por el bloque fuzzificador, calcula el valor minimo entre estos y lo entrega a la estructura definida para las reglas activas, a continuación se explica con mas detalle el funcionamiento de esta etapa. Antes de iniciar la explicación es necesario saber que existe definida una estructura donde serán almacenados los mínimos de los antecedentes obtenidos de las operaciones entre los grados de pertenencia, esta es la matriz de reglas activas (Reg_Act), la cual es definida como un array bidimensional a donde son ingresados los mínimos resultantes, que ayudan a definir cuales son las reglas que se encuentran activas en ese momento.
Inicialmente se declaran las variables a utilizar, una variable i definida para iteraciones y una variable min para definir el minimo obtenido. Una vez hecho es se procede con el programa principal el cual inicia con un ciclo FOR que establec el recorrido de los grados de pertenencia y la matriz de reglas activas, el recorrid se realiza estableciendo un valor que cambie frente a uno fijo. En este caso GPEe será el valor cambiante representado por ( i) y GPEd incrementa en valores unitarios iniciando desde cero igualmente se utiliza este proceso con la matriz de reglas activas usando la variable de iteración, inicialmente se pregunta si los valores iniciales de los arrays de pertenencia (GPEe [i] y GPEd [0]) son diferente de cero. Si la afirma fi ción es cierta realiza el calculo del valor minimo entre estos dos y almacena el valor en la posición definida de la matriz de reglas activas (Reg_Act [i][0]), de lo contrario el valor en la posición definida de la matriz de reglas activas se hace igual a cero, este mismo procedimiento se realiza entre las siguientes posiciones de los arrays de pertenencia hasta recorrer la totalidad de estos.
CALCULO DEL MINIMO Este procedimiento es equivalente a la aplicación del operador difuso en los antecedentes. El operador aplicado en esta etapa parte del conector lógico entre antecedentes. Ejemplo: “si antecedente 1 (conector lógico) antecedente 2 entonces…” Existen dos opciones de conectores lógicos (AND y OR). Si se utiliza AND entre antecedentes, el operador difuso aplicado es el mínimo y si es OR se aplica el máximo. Para este diseño los antecedentes utilizan AND como conector lógico po lo tanto se aplica el cálculo del mínimo a los antecedentes. Esta sección del programa define el valor menor entre los dos valores operados de los grados de pertenencia y lo entrega a la matriz de reglas activas
If (GPEe[i] <=0) Min=GPEe[i]; Else Min=GPEd [0]; Esta parte del código pregunta si el valor de la posición del array de pertenencia que se esta iterando (GPEe [i]) es menor o igual a cero, si la afirma fi ción es cierta su valor es entregado como minimo a la matriz de reglas activas, de lo contrario e segundo array de pertenencia que se evalúa (GPEd [0]) pasa a ser el minimo entregado. Este procedimiento se realiza hasta recorrer las pertenencias y carga las reglas determinadas como activas en la matriz correspondiente. Gráficamente el proceso puede ser visto en la figura tal
Fig. Tal. Donde las estructuras del lado derecho representan las pertenencias y la del lado izquierdo representa la matriz de reglas activas, las pertenencias diferentes de cero se operan para obtener el mínimo y entregarlo a la siguiente etapa.
DETECCIÓN DE REGLAS ACTIVAS
Una vez obtenidos los mínimos de los antecedentes, se debe determinar a partir de estos cuales son las reglas activas, para aplicar el mecanismo de implicación – agregación y de esta forma entregar el valor resultante al bloque de defuzzificacion. Para el correcto funcionamiento de esta etapa se hace necesario definir lo siguiente:
BASE DE REGLAS Es un tipo de dato array que contiene las salidas correspondientes de las entradas definidas, generalmente una base de reglas difusas es definida en términos lingüísticos, sin embargo los lenguajes de programación manejan los datos internamente como números y se hace complejo definirlos lingüísticamente se hace uso del siguiente mecanismo para definir internamente la base de reglas, se puede observar con mas claridad en la Fig.
F ig . T a l La figura muestra en el lado izquierdo la base de reglas original, que se define al iniciar el diseño del controlador, del lado derecho se muestra el sistema implementado para la base de reglas al momento de ser declarada en el
programa. Lo que se ha hecho es relacionar cada conjunto con un valor, este valo funciona como una etiqueta que determina el subconjunto actual, las etiquetas so definidas con base a los conjuntos de salida con los números mostrados (0=N, 1=Z, 2=P), de esta manera se garantiza una representación precisa de las reglas para ser usadas en el proceso de implicación. La estructura para detección de reglas activas es la siguiente: Detección Reg_Act (Reg_Act) Int i Int j For (i=0, i=2, i+1) { For (j=0, j=2, j+1) { If (Reg_Act [i] [j] == 0) Goto incremento If (Bas_Reg [i] [j] == 0) “implicación Vneg” Else If (Bas_Reg [i] [j] ==1) “implicación Vcer” Else If (Bas_Reg [i] [j] == 2) “implicación Vpos” Else Incremento
I ++ J ++ } } En esta sección del código pregunta si la regla activa evaluada es igual a cero, si la afirma fi ción es cierta, significa que en la posición actual la regla no esta activa y salta hacia la etiqueta de incremento para continuar evaluando las reglas activas Si ocurre lo contrario, procede a preguntar por el valor almacenado en la base de reglas, si el valor es cero, se procede a realizar la implicación con el subconjunto de salida Vneg si el valor es uno, realiza la implicación con el subconjunto de salida Vcer, y si el valor es dos, lo hace con el subconjunto de salida Vpos La función de implicación y su realización completa se detalla a continuación:
MECANISMO DE IMPLICACIÓN Es el procedimiento clave para obtener valores de salida a entregar para defuzzificar. Para este controlador el mecanismo aplicado se conoce como “operador de implicación de mamdani”, este método es el más utilizado en aplicaciones puesto que posee una estructura de operaciones muy simple. La estructura operativa de este sistema de implicación consta de dos partes: 1.
calculo de la implicación (mínimo).
2.
calculo de la agregación (máximo).
Estas dos operaciones se realizan tomando el conjunto de salida (Voltaje), subconjunto por subconjunto y se evalúa cada valor establecido, en función de la pertenencia. Para explicarlo con más claridad se puede observar la Fig. TAL a continuación.
Fig. TAL La grafica fi muestra la forma en la cual se obtienen los valores de salida que utiliza El operador de implicación, la manera de evaluación se realiza discretizando los voltajes establecidos previo diseño, representados por los valores en el eje X de la grafica fi , y obteniendo su respectiva pertenencia en el eje Y tomando como referencia la función establecida para cada subconjunto (en este caso triangular). Y almacenando estos resultados en variables tipo array unidimensional que representan cada subconjunto (Vneg, Vcer y Vpos) El proceso de discretizacion conlleva a la creación de un algoritmo por cada
conjunto definido para obtener su representación, la estructura de estos algoritmo es similar a la utilizada para la fuzzifificacion. Y se muestra a continuación el algoritmo de modo general para la discretizacion de todo el conjunto de salida Voltaje [6]= {0, 1, 2, 3, 4,5} Discretiza (Voltaje) Int i; Int p0, p1, p2, p3, p4, p5, p6;
P0=Voltaje [0]; P1=Voltaje [2]; P2=Voltaje [0]; P3=Voltaje [2]; P4=Voltaje [5]; P5=Voltaje [2]; P6=Voltaje [5];
For (i=0, i=5, i+1) { If (voltaje [i] <= p0) Vneg [i]=1; Else If (voltaje [i] <= p1) Vneg [i]= Pneg; Else Vneg[i]=0; If (voltaje [i] <= p2) Vcer[i]=0; Else If (voltaje [i] <= p3) Vcer[i]=Ppos; Else If (voltaje [i] <= p4) Vcer[i]=Pneg; Else Vcer[i]=0; If (voltaje [i] <= p5) Vpos [i]=0; Else
If (voltaje [i] <= p6) Vpos [i]= Ppos; Else Vpos [i]=1; I++ } Inicialmente se ha colocado la referencia desde la que parte esta sección código, el array Voltaje que contiene todo el universo de discurso que va a ser discretizado. Se han seleccionado pocos valores para que el procedimiento sea más corto, después viene la declaración de variables, que en este caso son: la variable de iteración y los puntos de infle fl xión de todos los conjuntos, después de esto se asignan a cada punto su valor respectivo que sirve de límite para obtener los valores que se buscan. Esta sección del programa inicia evaluando los puntos p0 hasta p6 de la siguiente forma: Si el valor del conjunto a evaluar ( Voltaje [i]) es menor o igual a p0 entonces el valor que se va a almacenar en el array asignado para este subconjunto (Vneg [i]) es uno, si ocurre lo contrario pregunta si el valor del conjunto a evaluar es menor
p1 y si es cierto calcula la pendiente respectiva (Pneg) y el valor obtenido se almacena en el array Vneg. En el caso contrario el valor a almacenar es cero. Seguidamente se pregunta Si el valor del conjunto a evaluar (Voltaje [i]) es menor o igual a p2 entonces el valor que se va a almacenar en el array asignado para este subconjunto (Vcer [i]) es cero si ocurre lo contrario pregunta si el valor del conjunto a evaluar es menor a p3 y si es cierto calcula la pendiente respectiva (Ppos) y el valor obtenido se almacena en el array Vcer. En el caso contrario pregunta si el valor a evaluar es menor o igual a p4, si se cumple esto se calcula la pendiente respectiva (Pneg) en entre los puntos mencionados y el valor a evaluar, y su resultado es almacenado en el array respectivo. En el caso contrario el valor a almacenar es cero.
Después pregunta Si el valor del conjunto a evaluar ( Voltaje [i]) es menor o igual a p5 entonces el valor que se va a almacenar en el array asignado para este subconjunto (Vpos [i]) es cero, si ocurre lo contrario pregunta si el valor del conjunto a evaluar es menor o igual a p6 y si es cierto calcula la pendiente respectiva (Ppos) y el valor obtenido se almacena en el array Vpos. En el caso contrario el valor a almacenar es uno. Una vez realizado todo esto se procede con el incremento del ciclo. Hasta abarcar todos los valores de salida, con esto se ha llevado a valores discretos cada array subconjunto de salida (Vneg, Vcer y Vpos respectivamente). A partir de esto se procede con la primera parte del operador de mamdani, la implicación, cuyo procedimiento se detalla a continuación
FUNCION IMPLICACION Esta se encarga de obtener el mínimo valor entre la regla activa evaluada y la representación del subconjunto de salida determinado. Nota: El subconjunto de salida lo entrega el recorrido realizado sobre la base de
reglas y la etiqueta que se encuentre en la posición que se este leyendo (ver detección de reglas activas)
Esta función esta ligada directamente a la detección de reglas activas, dado que los valores diferentes de cero que se encuentran en la matriz de reglas activas son los que se operan con los conjuntos de salida, además la base de reglas entrega la información sobre que subconjunto se va a operar. Estas dos informaciones y la función realizan el proceso completo de implicación. A continuación se explica la estructura algorítmica planteada para la obtención de los mínimos: Implicación (Reg_Act, Subco){
Int conteo For (conteo=0, conteo=5, conteo+1) { If (Reg_Act [i] [j] <=subco [conteo]) Implica [0] [conteo]= Reg_Act[i] [j] Else Implica [0] [conteo]= subco [0] [conteo] Conteo ++ Return } } Esta función inicia declarando la variable de iteración ( conteo), después de esto se coloca un IF para evaluar si la posición en la matriz de reglas activas (Reg_Act) es menor a la posición del subconjunto de salida (subco). Si la condición se cumple significa que el valor de regla activa es menor, entonces se designa una variable de tipo array para almacenar los resultados de la implicació (Implica). Si ocurre lo contrario significa que el valor del subconjunto es menor y por lo tanto este se almacena en el array designado, este proceso se realiza hasta recorrer la totalidad de valores del subconjunto de salida. Como dato adicional ha que decir que este algoritmo aplica para los demás subconjuntos, solo basta con reemplazar el termino subc o con la variable que se haya asignado como subconjunto de salida, en este caso Vneg, Vcer o Vpos según sea el caso, y incrementar el valor fijo de la variable implica en uno por cada subconjunto.
FUNCION AGREGACION Esta se encarga de operar los valores de cada posición de salida representada, con el fin de obtener el máximo individual y almacenarlo en una única estructura
de datos que se entrega al bloque de defuzzificacion, gráficamente se representa de la siguiente forma:
Columna Columna Columna Columna Columna Columna5 Fila Fila Fila Fila
0 1 2 3
0
Imp A0 Imp B0 Imp C0 Imp D0 Max col 0
1
Imp A1 Imp B1 Imp C1 Imp D1
2 Imp Imp Imp Imp
A2 B2 C2 D2
3 Imp Imp Imp Imp
A3 B3 C3 D3
4 Imp Imp Imp Imp
A4 B4 C4 D4
Imp Imp Imp Imp
A5 B5 C5 D5
Tabla tal En la tabla tal se puede apreciar la manera como se almacena el resultado de la implicación, partiendo de esto se toma cada columna y se calcula el máximo valor de esta, se realiza individualmente este procedimiento y al final se obtiene una estructura como la mostrada en la tabla tal. Columna Columna Columna Columna Columna Columna5 Fila 0
0 1 2 Max col 0 Max col 1
3 Max col 2
4 Max col 3
Max col 4
Max col 5
Tabla tal La estructura algorítmica del procedimiento mencionado antes se muestra a continuación:
Agregación (implicación) { Int p Int n Int max Max = 0 For (p=0, p=5, p+1) { For (n=0, n=3, n+1) { If (implica[p] [n]>max) Max= implica [p] [n] N++ } Max = salida [p] P++ } } Se declaran inicialmente las variables de iteración (p y n) para el recorrido de filas y columnas, y una variable adicional para establecer el máximo inicializada en cero. Se sigue con un ciclo For externo para el recorrido de las columnas del arra de implicación y uno interno para las filas, seguido esto se pregunta si la posición a evaluar del array de implicación es mayor al máximo, Si la condición es cierta e valor evaluado es igual al máximo y se incrementa el ciclo interno. Una vez finalizado el ciclo interno el valor final de máximo se almacena en una variable de tipo array que indica la salida de este bloque el cual incrementa en función del ciclo externo, este último incrementa para evaluar la siguiente columna. Este proceso se repite hasta abarcar la totalidad de valores de la matriz de implicación con lo cual el array de salida ha sido completado y puede ser entregado al defuzzificador.
FUNCION DEFUZZIFICACION
Fig. tal La Fig. Tal muestra el bloque de defuzzificacion, Este bloque se encarga de convertir el conjunto de valores difusos entregados por la maquina de inferencia en un resultado numérico concreto que es la utilizada para definir la salida del sistema. Para la aplicación de la defuzzificacion se utilizan diversos métodos entre estos están: centro de gravedad, centro de sumas, media de máximos entre otros. El método que se aplica en este controlador es el Centro de gravedad o COG, cuya es la siguiente:
COG
∫µ ( i ) x ( i ) ∫µ ( i ) ∗
=
Donde ∫µ
(i )
∗
x
(i )
representa el momento de la funcióxn(i y) re ∫ presenta el
área de la función Sin embargo el cálculo de integrales por software (integración numérica) resulta un procedimiento relativamente complejo, es por ello que en este diseño se utiliza el método discreto para hallar el COG el cual se muestra a continuación:
COG
=
∑
Dondeµ
µ
( xi ) ∗
∑
( xi )
u ( xi
x (i )
)
x ( i ) a el representa el conjunto de valores originales de sa lid y
conjunto de consecuentes discretizado. Con esta expresión se utilizan las variables equivalentes y se obtiene la formula para hallar el centro de gravedad d la siguiente forma:
COG
=
∑
voltaje
∑
∗
salida
salida
Donde la variable voltaje es el array de valores de del universo de discurso para la salida y salida es el array de resultado de la agregación. El procedimiento algorítmico para hallar el centro de gravedad es el siguiente:
Centro _ gravedad (voltaje, salida) { Int prodn Int num Int den Int z Int COG Prodn=0 Num=0 Den=0 For (z=0, z=5, z+1) { Prodn = voltaje[z] * salida[z]
Num= num+prodn Den= den+ voltaje[z] Z++ } COG= num / den }
Esta función inicia declarando las variables necesarias para su funcionamiento (prodn, num, den, COG y z), prodn es la variable para operar el producto del numerador en el COG, num es asignada para contener la sumatoria de los productos, den es quien contiene la operación de sumatoria del denominador,
COG es la variable que guarda el resultado del centro de gravedad, y z es la variable de iteración, hecho esto se inicializan todas las variables de operación en cero y se comienza un ciclo For para recorrer los arrays que se van a operar para obtener el centro de gravedad, Estos son voltaje [z] y salida[z]. Dentro del ciclo For la variable prodn se hace igual al producto de los arrays mencionados sigue la variable num que almacena la sumatoria del producto mencionado antes, y la variable den que guarda la sumatoria del array voltaje. Se hace el respectivo incremento del ciclo y una vez sale de este los valores finales de numerador y denominador (num y den) la variable COG los opera por medio de una división y se obtiene el valor de salida para la planta a controlar.
IMPLEMENTACIÓN DEL CONTROLADOR
En este punto es donde se lleva todo el algoritmo planteado a un software compatible con las herramientas de hardware seleccionadas. En este caso el hardware seleccionado es la tarjeta de desarrollo de la empresa Freescale DEMOQE128, la cual contiene un microcontrolador de referencia MCF51QE128 Ver Fig. Tal. Este posee una estructura que parte de registros, memoria y dispositivos de E/S de gran utilidad para la implementación de este diseño.
Fig. Tal. (?) El diseño de este controlador parte inicialmente de la captura del valor de referencia utilizando un sensor y transfiriendo esa señal a un puerto especifico. Para dar inicio a un programa se trabaja con tres registros que ayudan a cumplir ese propósito, estos son: SOPT1, SCGC1 y SCGC2 de los cuales se habla a continuación.
Registro SOPT1 (registro de opciones del sistema):
este registro define
principalmente características como habilitación de reset, depuración de fondo o (BDM) y habilitación del perro guardián. Su forma interna es la que se muestra a continuación en la Fig.:
Fig. Tal De este registro solo se configuran los bits 0, 1 y 5 que son descritos a continuación:
Bit RSTPE (Habilitación de pin de reset): Este bit individual se configura para habilitar el reset por medio del pin PTA5, si se coloca en uno el reset se habilita, si esta en cero el pin funciona en configuración de entrada/salida.
Bit BKGDPE (Habilitación de modo de depuración): Este bit individual se configura para habilitar el pin del modo de depuración de fondo que se encuentra como función adicional del pin PTA4, el cual es el modo de programación utilizad en la mayoría de sistema de desarrollo de Freescale. Si se coloca en uno el BKGDP se habilita, si esta en cero el pin funciona en configuración de entrada/salida.
Bit STOPE (Habilitación de pin STOP): Este bit en conjunto con el bit WAITE activan el modo de operación a utilizar por el programa a implementar (modo Run) (¿), si no se habilitan es posible que el microcontrolador no opere correctamente. Como nota adicional, estos bits mencionados a excepción del bit WAITE solo pueden ser escritos una vez, es decir después de hacer un reset, solo la primera escritura hecha a estos bits será reconocida y almacenada.
Registro SCGC1 y SCGC2 (control de reloj de sincronización de sistema): estos registro son dos los encargados de habilitar o deshabilitar los buses de
sincronización de reloj de los módulos periféricos (ADC, SPI, I2C, real time clock , timers entre otros) Sus estructuras internas son las que se muestran a continuación en la Fig. tal
Fig. tal Con los registros anteriores se garantiza la inicialización de este microcontrolad bajo los parámetros mas básicos de operación necesarios para la implementación del código del controlador la captura de una señal del medio y el envío de datos del controlador hacia la planta se hace utilizando las entradas y salidas del microcontrolador llamadas puertos, Internamente un puerto típico (tomando de ejemplo el puerto A para efectos explicativos) de este microcontrolador funciona configurando los siguien registros:
Registro PTAD (Registro de datos): este es un registro para el almacenamiento de los datos que se leen o escriben en el puerto, contiene ocho bits que pueden
ser configurados en forma individual o completa su estructura es la que se observa en la figura tal:
Fig. Tal Dato que entra o sale es almacenado en este registro para que el programa de acuerdo a la configuración que posee disponga de ellos donde sea necesario
Registro PTADD (Registro de dirección de datos): Este registro se encarga de la dirección de datos para los bits del puerto A, es decir como se va configurar e puerto (entrada o salida), Su estructura se observa en la figura tal.
Fig. Tal La configuración interna de este registro es la siguiente: •
Si se escribe un uno este registro, el comportamiento del puerto es de entrada.
•
Si se escribe un cero este registro, el comportamiento del puerto es de salida.
También se puede configurar individualmente cada BIT para asignarlo como entrada o salida igualmente.
REGISTRO PTAPE (registro de habilitación de pull-up/down): este registro internamente habilita un dispositivo de pull-up o pull-down en cada pin del puerto A según sea el caso. En la Fig. Tal se observa su forma interna.
F ig . T a l La configuración interna de este registro es la siguiente: •
Si se escribe un uno este registro, habilita internamente los dispositivos d pull –up /down.
•
Si se escribe un cero este registro, deshabilita internamente los dispositivo
de pull –up /down.
Registro PTASE (registro de habilitación de slew rate): Este registro configura el slew rate de salida asociado a cada pin del puerto A, internamente esta dispuesto como se muestra en la Fig. tal
F ig . T a l
Internamente se configura de la siguiente forma: •
Si se escribe un uno este registro, habilita internamente el slew rate para bit n del puerto A.
•
Si se escribe un cero este registro, deshabilita internamente el slew rat
para el bit n del puerto A
El dato capturado como su naturaleza es análogo, se hace necesario que sea convertido a información digital, para ello, este microcontrolador posee un convertidor análogo digital, con el cual se puede realizar este procedimiento. Los registros asociados internamente para la conversión son los siguientes.
Registro ADCSC1: (registro de estado y control 1) es el encargado de abortar una conversión y dar inicio a una nueva, esto ocurre escribiendo los bits destinados para ese propósito, Internamente este registro esta descrito tal y como se puede ver en la figura:
Fig. Donde los bits 0-4 (ADCH) están destinados para la selección del canal de conversión, como se menciona anteriormente el MCF51QE128 cuenta con 28 canales organizados desde el 00000 hasta el 11011 para su respectivo uso como entradas analógicas, el bit 5 (ADCO) habilita conversiones continuas escribiend en este. Si se encuentra en cero solo se realizara una conversión al escribir en el registro ADCSC1, si se encuentra en 1 se realizara continuamente la conversión a escribir sobre este registro, el bit 6 (AIEN) activa la interrupción por conversión completa, esta se activa cuando el bit COCO se coloca en 1 mientras este bit se encuentre en 1, cuando se encuentra en cero la interrupción esta deshabilitada. e bit 7 (COCO) es la bandera que indica una conversión completa, este bit es de solo lectura y se aclara solo cuando este registro es escrito o cuando el registro de datos del conversor es leído.
Registro ADCSC2: (registro de estado y control 2) es el encargado controlar las funciones de comparación del modulo ADC, el disparo de conversión y la
conversión activa, Internamente este registro esta descrito tal y como se puede ve en la figura:
Fig. El conversor utiliza solo 2 bits de este registro de los cuales solo uno es configurable, este es el bit 6 (ADTRG) que indica el tipo de disparo que inicia una conversión. Si esta en cero quiere decir que la conversión inicia por software, si esta en uno la conversión se inicia por hardware, esto es escribiendo en los bits del registro ADCSC1 y adicionalmente habilitando la entrada ADHWT,El otro bit e el bit 7 (ADACT) que funciona como indicador para hacer saber si hay o no una conversión en proceso.
Registro ADCCFG: (registro de configuración) es el encargado de seleccionar el modo de operación la fuente y el divisor de reloj, también se configura para bajo consumo o periodo de muestreo largo. Internamente este registro esta descrito ta y como se puede ver en la figura:
Fig. Los bits 0-1 (ADICLK) seleccionan la fuente de reloj de entrada para generar el reloj interno ADCLK (nota al pie),Los bits 2-3 (MODE) seleccionan el modo de operación del conversor A/D sea 8,10 o 12 bits (nota al pie), El bit 4 (ADLSMP)
configura el periodo de muestreo largo, esto sirve para ajustar el periodo de muestreo para permitir que las entradas de alta impedancia sean muestreadas d forma precisa o para maximizar la velocidad de conversión para entradas de baja impedancia. Si esta en cero habilita periodos de muestreo corto, si esta en uno habilita periodos de muestreo largo., Los bits 5 y 6 (ADIV) seleccionan el divisor de reloj es decir la relación de división usada por el ADC para generar el reloj interno ADCK, El bit 7 (ADLPC) configura la velocidad y consumo del conversor, (nota al pie).
Registros ADCR: (registros de datos de resultado) estos se encargan de almacenar los datos obtenidos al realizar una conversión exitosa, se pueden usa directamente desde aquí o se pueden ubicar en otro registro para ser usados en otro momento. Se dividen en dos (ADCRL y ADCRH) tal y como se puede apreciar en la figura.
Fig. Donde el registro ADCRL almacena los 8 bits de una conversión sencilla o los primeros 8 bits de una de 10 o 12 bits y el registro ADCRH almacena los 2 últimos bits de una conversión de 10 bits o los 4 últimos de una de 12 bits respectivamente.
Registros APCTL: (registros de control de pin) la función de esto registros es deshabilitar el control de puertos E/S de los pines del microcontrolador usados
como entradas análogas. En total son 3 registros (APCTL 1, 2 y 3) Internamente estos registros están descritos tal y como se puede apreciar en la figura:
Fig. Registros APCTL 1, 2 y 3. Cada BIT de estos registros se configura de la siguiente forma, tomando como ejemplo el BIT ADPC0 del registro APCTL1. Si ADPC0 esta en cero (valor por defecto) el control de pin de E/S esta activo, esto quiere decir que el pin relacionado a este bit se comporta como entrada y salida de datos dependiendo de cómo se configure. Si ADPC0 esta en uno, el control de pin de E/S esta inactivo, a partir de este momento el pin relacionado a este bit se comporta como entrada análoga para el convertidor.
ESTRUCTURA DE PROGRAMACION
Todo el proceso de control difuso por parte algorítmica sigue un orden lógico que parte de su descripción general, de igual manera al transformar los algoritmos a código para el microcontrolador se debe seguir un orden que garantice la ejecución del programa en el orden correcto, para ello se define el siguiente orde de ejecución: •
Un programa principal que contiene las funciones necesarias para e correcto funcionamiento del controlador
•
Subrutinas que son llamadas desde el programa principal de acuerdo a modo en que hayan sido organizadas.
Todo esto va organizado en un mismo archivo debidamente ordenado para evitar confusión, la forma como queda todo esto se puede apreciar a continuación. ******************************************* Declaraciones ******************************************* Variables Tipo variable 1 Tipo variable 2 Tipo variable n ******************************************* Programa principal ******************************************* Main { Ciclo Estructura interna Llamado a funciones }
******************************************** Funciones ******************************************** Nombre función 1 Nombre función 2 Nombre función n Esta es la organización planteada y aplicada a la implementación de este código, podrá ser visto con más claridad en la siguiente parte donde son mostrados los algoritmos mencionados en el capitulo anterior ya implementados para ingresar al microcontrolador
IMPLEMENTACION EN LENGUAJE MAQUINA Para la implementación de los algoritmos en el microcontrolador designado se hi uso del lenguaje ANSI C dado su gran compatibilidad con este dispositivo y también por el hecho de a pesar de que este micro cuenta con un set de instrucciones en lenguaje ensamblador, el solo hecho de realizar un programa en este lenguaje resulta en un código extremadamente largo y mas complejo de analizar, donde el objetivo primordial de un programa es hacerlo relativamente corto y fácil de entender. A continuación se muestra la estructura inicial del programa con algunas declaraciones incluidas.
/********************************************************************************* /*Controlador difuso embebido V0.0
/********************************************************************************* /* cabecera */
# include // macro incluida para interrupciones # include "derivative.h" // macro incluida para declaracion de perifericos
/********************************************************************************* /* variables */ int i;
// variable para iteracion
int j;
// variable para iteracion
/*variables globales*/ extern int temp; extern int dato; extern int Tg;
// variable que define valor de entrada // variable que define el tipo de conjunto ( triangular)
int p1; int p2; extern int U; extern int C; extern int numC;
// variable que define el numero de conjuntos
/**************************************************************************** / /*ARRAYS */ int Cerror_Tg [3][3]={{0,5,0},{0,5,9},{0,5,9}};// array de conjuntos para Erro ( triangular) int CDerror_Tg[3][3]={{0,5,0},{0,5,9},{0,5,9}};// array de conjuntos para de error ( triangular) int Voltaje [6] = {0,1,2,3,4,6};
int GPEe [3][4]={0}; // array para almacenar grados de pertenencia de error int GPEd [3][4]={0}; // array para almacenar grados de pertenencia de deriva error int Vneg [6]={0};// array para discretizacion int Vcer [6]={0};// array para discretizacion int Vpos [6]={0};// array para discretizacion int salida [6]={0}; //array para almacenar agregación int implica[6]={0};//array para almacenar implicación /******************************************************************************************** / /*Definiciones*/ #defin fi e Disable_COP() SOPT1 &=0x3F; /***************************************************************************/ /*Funciones*/ void MCU_init(void); void ADC_init(void); void GPIO_init(void); void Fuzzificacion(void); void Delay(void); void delay(void); void P_Pos(void); void P_Neg(void); void lectconvescal(void); void mínimo(void); void detección Reg_Act(void); void discretiza (void); void implicación (void);
void agregación(void); void centro _ gravedad(void); después de esta sección se continua con el programa principal que es sencillamente el que se encarga de llamar uno a uno los bloques del controlador representados como funciones y repetir este proceso secuencialmente de forma continua. /*Programa Principal*/ Void main (void) { MCU_init (); GPIO_init (); ADC_init (); Disable_COP (); EnableInterrupts; ADCSC1_AIEN = 1; APCTL1_ADPC0 = 1; For (;;){
//deshabilita el COP //habilita interrupciones
Lectconvescal (); Fuzzificacion (); Mínimo (); Detección Reg_Act (); Implicación (); Discretiza (); Agregación (); Centro _ gravedad (); } }
DISEÑO ARQUITECTONICO Planta y sensor implementados Para la observación del controlador en funcionamiento es necesaria la utilización de un medio físico donde se pueda experimentar esto. Se hizo uso de una
pequeña planta prototipo para posicionamiento angular, esta se describe a continuación a través de la figura tal.
Fig tal
BIBLIOGRAFIA Baturone Illuminada y otros, MICROELECTRONIC DESIGN OF FUZZY LOGICBASED SYSTEMS, CRC Press, 2000 315 páginas. Jan Jantzen, FOUNDATIONS OF FUZZY CONTROL, John Wiley & Sons 2007 220p. Ahmad Ibrahim, FUZZY LOGIC FOR EMBEDDED SYSTEMS APPLICATIONS, Publicado por Newnes, 2004, 293 p. Leonid Reznik, FUZZY CONTROLLERS Publicado por Newnes, 1997 287 p.
Kevin M. Passino, Stephen Yurkovich, Fuzzy Control, Addison-Wesley 1998 475 p [1] Agenor Polo Zabaleta, Mario Esmeral Palacio, CONTROLADOR DIFUSO PARAMETRIZABLE BASADO EN UN NÚCLEO DE PROCESAMIENTO RECONFIGURABLE DESCRITO EN VHDL, INGENIERÍA & DESARROLLO Número 22 Julio-Diciembre, 2007 [2] Spartacus Gomáriz, Francesc Guinjoan, DISEÑO DE UN CONTROLADOR DIFUSO SUPERVISOR PARA LA REGULACIÓN DE UN CONVERTIDOR CONMUTADO ELEVADOR, Revista de ingeniería #28 Universidad de los Andes. Bogotá, Colombia. Noviembre de 2008 [3] Juan Contreras Montes, Roger Misa Llorca, Luís F. Murillo Fernández, OBTENCIÓN DE MODELOS BORROSOS INTERPRETABLES DE PROCESOS DINÁMICOS, Revista iberoamericana de Automática e Informática Industrial vol num. 3, julio 2008, pp. 70-77