Control Difuso en DSP para Reactores TRIGA
Control Difuso en DSP para Reactores TRIGA
MX0400095
IMPLANTACIÓN DE ALGORITMOS DE
CONTROL DIFUSO EN DSPS
OPCIÓN
TESIS PROFESIONAL
ASESOR:
DR. JORGE SAMUEL BENÍTEZ READ
Con respecto a la implantación y ejecución del algoritmo, los alcances del proyecto se han
delimitado a lo siguiente: a) Disponibilidad de los valores de entrada al controlador en
registros específicos del sistema DSP, b) Conversión de las entradas a los formatos
numéricos con los que se obtiene el mejor desempeño del algoritmo de control,
c) Ejecución del algoritmo hasta la obtención del valor de la salida del controlador, y
d) Colocación del resultado en registros específicos del DSP para su posterior lectura por
una interfaz paralela externa. Cabe mencionar que la simulación de la cinética puntual de
un reactor tipo TRIGA en la PC y su integración con el sistema de control basado en el
DSP se tienen contemplados como continuación de este trabajo y que constituirá una de las
actividades principales en mi proyecto de tesis de maestría.
El capítulo 3 trata el modelo de la cinética puntual de un reactor TRIGA Mark III. También
se definen conceptos básicos de los reactores de fisión. Debido a los alcances de esta tesis,
las ecuaciones presentadas en este capitulo no son utilizadas en el desarrollo del
controlador dado que éstas se cubrirán en la tesis de maestría en donde se propone simular
el comportamiento dinámico del reactor en una PC, pero realizando las funciones de control
de potencia en el sistema DSP aquí desarrollado.
CAPÍTULO 1 INTRODUCCIÓN1
4.1 INTRODUCCION-----------------------------------------------3 1
Pág.
INTRODUCCIÓN
Durante el periodo de 1904 a 1947, el bulbo fue, sin duda, el dispositivo electrónico más
interesante y también el que más se desarrolló. El diodo de bulbo fue introducido por J. A.
Fleming en 1904. Poco tiempo después, en 1906, Lee De Forest le añadió un tercer
elemento al diodo al vacio, denominado rejilla de control, lo cual dio por resultado el
triodo. En los años subsecuentes, la radio y la televisión ofrecieron un gran estimulo a la
industria del bulbo. A principios de los años treinta el tubo de vacio de cuatro y cinco
elementos cobró gran importancia en la industria de los tubos electrónicos al vacío.
Sin embargo, en 1947, la industria electrónica registró la aparición de un nuevo campo de
interés y desarrollo: el transistor. El transistor fue creado por Walter H. Brattain y Joseph
Bardeen. Las ventajas de este dispositivo de estado sólido de tres terminales respecto al
bulbo se manifestaron de inmediato: era más pequeño y ligero, no tenía requerimientos de
calentamiento o disipación de calor, su construcción era resistente y era más eficiente
debido a que el mismo dispositivo consumía menos potencia, estaba disponible para
utilizarse de inmediato, no requería de un período de calentamiento y era posible utilizar
voltajes de operación más bajos. No cabe duda que la llegada del transistor fue algo que
empezó la revolución electrónica [B0Y97].
Una vez inventado el transistor, el siguiente paso fue mejorar el proceso de fabricación de
este dispositivo. A la par de este desarrollo, el diseño de circuitos transistorizados se fue
incrementando. Esto último implicaba que las placas fenólicas sobre los cuales se montaban
los transistores y demás elementos pasivos se fuera haciendo cada vez más grande. Para
evitar los grandes tamaños de circuitos, la industria de construcción de dispositivos
discretos se dio a la tarea de poner dentro de un mismo encapsulado varios transistores;
posteriormente se estudió la forma de construir elementos pasivos dentro de los mismos
encapsulados. De esta forma, se comenzó a producir y diseñar lo que hoy conocemos como
circuito integrado, lo cual significa, colocar varios dispositivos en un mismo encapsulado.
Al igual que cuando se hizo el paso de bulbos a transistores, el paso de transistores a
circuitos integrados redundó en la eficiencia del diseño de circuitos. Todo este desarrollo
comenzó a abrir paso a sistemas de control cada vez más sofisticados que la de simples
relevadores.
El siguiente paso después de los circuitos integrados son los microprocesadores, que no son
mas que dispositivos con una gran escala de integración.
RISC: Es una abreviación de Reduced Instruction Set Code", a diferencia de los CISC, los
procesadores RISC tienen un grupo de instrucciones simples requiriendo pocos ciclos de
ejecución. Estas instrucciones pueden ser utilizadas más eficientemente que la de los
procesadores CISC con el diseño de software apropiado, resultando en operaciones más
rápidas.
En forma general, ya sea que un microprocesador sea de arquitectura CISC o RISC, ambos
tienen las siguientes partes internas [ITI02]j:
Como es bien sabido, el uso de los microprocesadores está ligado con las computadoras.
Gracias a la combinación de los microprocesadores y software, se puede utilizar a una
computadora como una herramienta muy potente de control de procesos. La ventaja es que
por medio de los programas, se pueden hacer una infinidad de cambios en un sistema de
control, lo cual hace a la computadora un medio flexible para tomarla en cuenta en el
diseño de control de procesos.
1.1.3 LOS MICROCONTROLADORES
Es bueno mencionar a este dispositivo que junto a los microprocesadores, ofrece una gran
variedad de modelos y fabricantes así como posibilidades de aplicación en un sistema de
control.
Bus de Datos
uP - --- - Bus de Direcci6nes
uC ~~Entradas
1Salidas
Memnoria Controlado
Componertes Externos
a) b)
Figura 1.1 - a) Sistema basado en microprocesador;b) Sistema basado en un microcontrolador.
Sin embargo, los últimos cuarenta años han mostrado que las computadoras son
extremadamente capaces de realizar dos tareas: 1) manipulación de datos, (como
procesamiento de palabras y administración de bases de datos), y 2) cálculos matemáticos,
usados en las ciencias exactas y las ingenierías. Todos los microprocesadores pueden
desarrollar ambas tareas; sin embargo, es dificil (costoso) de lograr que un dispositivo esté
optimizado para ambas tareas. Debido a factores como el desarrollo tecnológico,
mercadotecnia, manufactura, competencia, y tiempo de vida de los dispositivos, se ha
impulsado, por un lado, el desarrollo de los microprocesadores (Pentium, AMD, Cyryx)
para la manipulación directa de datos, y por el otro, el desarrollo de los DSP para la
ejecución de cálculos matemáticos intensivos necesarios en tareas que requieren el
procesamiento digital de señales en tiempo real.
Mientras que las diferencias mostradas arriba tradicionalmente distinguen a los DSP de los
GPP/MCU, en la práctica no es importante qué clase de procesador se escoja. Lo que es
realmente importante es escoger el procesador que mejor se adecue a la aplicación que
desea realizar. Si los GPP¡MCU se adecuan mejor que los DSP, entonces se deberá optar
por los primeros. Asimismo, recientemente se nota que la diferencia existente entre los DSP
y los GPP¡MCU se van reduciendo debido a que los GPP/MCU ahora incluyen
características de los DSP y claro también los DSP ahora ofrecen características de los
microcontroladores.
1.2.1 LA LÓGICA
Etimológicamente hablando, la palabra lógica se deriva del griego clásico logos (la razón,
principio que gobierna al universo): un conjunto de reglas usadas para gestionar inferencias
creíbles. Aristóteles recomienda una lógica dicotómica, verdadero-falso. Los filósofos
orientales se inclinan más bien a usar una lógica difusa multi-valorada. Ambas técnicas se
están usando para modelar los procesos cognitivos humanos en la computadora y en el
control. El primer concepto es la lógica, tanto en su forma proposicional como predicativa.
El segundo concepto es la incertidumbre, o más exactamente, la resolución de la
incertidumbre en sentencias lógicas. Claramente, muchos conocimientos, especialmente si
se adquieren por la observación, son probabilísticos en cierta medida; es decir, uno puede
creer que algo es verdad aun admitiendo la posibilidad de un error.
Existen varias terminologías de la lógica dependiendo del área en donde se utiliza. En una
terminología científica, la lógica es el uso correcto del razonamiento o principios
involucrados en el razonamiento correcto. En programación de computadoras, lógica es la
forma es como se va realizando el algoritmo o procedimiento de decisión utilizado por un
programa. En tecnología de hardware, lógica es el conjunto de circuitos que ejecutan
6
CAPíTULO 1 INTRODUCCIÓN
funciones lógicas con niveles importantes de señales restringidas a unos valores discretos
que por lo general son 2 (1 y ). Por último, lógica matemática es la rama de las
matemáticas que formula y estudia los principios del razonamiento; incluye las teorías
axiomnáticas, el cálculo predicado, el cálculo de exponenciación, el álgebra booleana y la
lógica simbólica.
Es dificil saber cuándo y dónde se inició el estudio de la lógica, no obstante que hay una
gran cantidad de información sobre sus orígenes. Al tratar de ubicar un origen de la lógica,
se llega a la conclusión de que (como en el caso de todas las ciencias), éste ocurre durante
la aparición del hombre primitivo. En efecto, siendo la lógica una ciencia del razonamiento
y de la inferencia, es sensato pensar que con el surgimiento del primer hombre con
capacidad de razonar y obtener deducciones o inferencias, erradas o no, en ese mismo
momento apareció la semilla de la lógica. De hecho, se ha distinguido al hombre del resto
de los animales por sus capacidades de razonamiento lógico, o capacidades del
pensamiento o capacidades lógicas, esto es, razonar, deducir o inferir; tal cosa ha ocurrido
por que el hombre mismo ha establecido que es precisamente él, quien tiene la capacidad de
razonamiento más alta del reino animal [SIT1O41.
La lógica difusa nació en 1965 cuando el Dr. Zadehi publicó un articulo titulado Conjuntos
Difusos" en la revista científica "Informnation and Control". En este artículo describió a
través de la teoría matemática de conjuntos, como poder trabajar matemáticamente con
expresiones imprecisas, tal como lo hace el ser humano [KLI 95].
Según el Dr. Zadeh, no debería considerarse la teoría difusa como una simple teoría, sino
que se debería considerar el proceso de difuasificación (en inglés fzzification) como una
metodología para generalizar cualquier teoría desde su versión ordinaria (discreta) a una
nueva versión continua (difusa). Así puede hablarse de "cálculo difuso", "ecuaciones
diferenciales difusos", "autómatas difuisos"~, "sistemnas dinámicos difusos", etc.
Supongamos que hemos llegado a la conclusión de que la mediana edad son los 45 aos.
Sin embargo no podemos descartar a las personas de 35 ó 55 años como edad mediana. Por
el contrario, los menores de 30 años y los mayores de 60 tampoco se pueden considerar
radicalmente como no de mediana edad. De tal forma creamos tres círculos. El primero, el
de los jóvenes, va de los cero hasta los treinta y cinco años, el segundo el de la "ediana
edad" va de los treinta hasta los cincuenta y cinco años, y por último el de la tercera edad
que va de los cincuenta años en adelante. Podemos observar que desde el punto de vista de
los "conjuntos difusos" el período de edad de los treinta a los treinta y cinco puede
considerarse tanto dentro del círculo "joven" como el de "mediana edad". Otro tanto ocurre
entre los cincuenta y los cincuenta y cinco años que pueden concebirse dentro de la
"mediana edad" y de la "tercera edad".
ALTURA ALTURA
a) b)
Figura 1.2 - Representación gráfica de: a) lógica booleana, b) lógica difusa
8
control más efectivo que los controladores automáticos tradicionales, porque están
capacitados para tomar decisiones correctas basadas en información lingüística imprecisa.
Los sistemas de lógica difusa reúnen los conocimientos de humanos expertos en un área
específica. De esta forma los datos son recopilados y representados de una manera más
precisa como un conjunto de reglas formuladas según sentencias condicionantes con la
utilización de expresiones lingülísticas.
Las primeras aplicaciones de la teoría difusa fueron principalmente industriales, tales como
el control de procesos en cementeras. Más tarde en 1987, se puso en servicio en Sendai, al
norte del Japón, el primer metro controlado mediante lógica difusa. Los controladores
basados en esta lógica, hicieron mucho más confortables y seguros los viajes en metro,
gracias a las frenadas y aceleraciones suaves. En efecto, todo lo que debe hacer el
conductor es apretar el pulsador de marcha.
En acondicionadores de aire, la lógica difusa ahorra energía dado que comienza a enfriar
con mayor potencia solo cuando un sensor detecta la presencia de personas en la
habitación, permaneciendo hasta entonces en una situación prácticamente de "stand-by".
9
Se ha empleado en los controles de cámaras de foto y video, e incluso en sistema de gestión
financiera, en tratamientos de depuración de agua, en control de robots, en detección y
control de averías.
Los sistemas de lógica difusa hacen uso de los conjuntos difusos, y son capaces de manejar
simultáneamente datos numéricos y conocimientos lingüísticos en una forma, matemática.
Un conjunto difuso puede ser definido matemáticamente asignado a cada posible elemento
un valor representado el grado de pertenencia al conjunto difuso [SITIO6 [ITI07].
1.3 REFERENCIAS
[KLI 95] George J. Klir o Yuan, "Fuzzy Sets and Fuzzy Logic, Theory and
Applications", pp. 1-33, Prentice Hall, New Jersey, 1995
[S1T102] [Link]
[5S1TI03] [Link]
[SITI04] [Link]
[SITIO5] [Link]
[SITIO6] [Link]
[SITIO7] [Link]
CAPÍTULO2
ARQUITECTURA
DEL
DSP TMS32OC5O
2.1 INTRODUCCIÓN
Para poder implantar el algorirtmo de control difuso en el DSP, es importante conocer su
arquitectura interna. Con ello se logra tener un panorama de los recursos con los que se
cuenta y así poder optimizar la programación. Este capítulo es un extracto del manual de
usuario de la familia de DSPs TMS32OC5x; se presentan características que de alguna
forma se utilizan en la programación del algoritmo de control. Esto no pretende ser una
traducción del manual de usuario, sino una descripción de los recursos utilizados en el
desarrollo del proyecto [DSK69].
El objetivo principal de este capitulo es explicar detalles específicos del DSP que se
utilizan en el capítulo 5 ya que en los manuales se omiten algunas explicaciones detalladas
y esto origina que no se tenga una buena comprensión del harware con el que se trabaja.
El PC direcciona la memoria de programa, ya sea interna o externa, por medio del bus de
dirección de programa (PAB). Desde el PAB, una instrucción es cargada en el registro de
instrucción (IREG). Entonces el PC está listo para comenzar la siguiente instrucción. El PC
es incremnentado en un cierto número, el cual dependerá de la instrucción ejecutada.
El PC puede también ser cargado con coeficientes residentes en memoria de programa con
algunas instrucciones usadas con operaciones de repetición (RPT). En una operación de
repetición, una vez que la instrucción es repetida, el PC no es enlazado con la siguiente
instrucción y el PC puede ser usado para direccionar memoria de programa
secuencialmente. Las instrucciones de multiplicación/acumulación (MAC, MACD,
MADD, MADS, BLDD, BLPD, BLDP, TBLR y TBLW) usan esta capacidad del PC.
La pila es usada durante las interrupciones o llamadas a subrutina para salvar y restaurar el
contenido del PC. Cuando una subrutina es llamada (CALA, CALAD, CALL, CALLD, CC
O CCD) u ocurre una interrupción (interrupción de hardware, NMI, NTR o TRAP), la
dirección de regreso es automáticamente guardada en la pila (una operación PUSH).
Cuando una subrutina regresa (RET, RETC, RETCD, RETD, RETE o RETI) la dirección
de regreso es retomada de la pila y cargada al PC (operación POP).
El PMST puede ser actuado directamente sobre el CALU y el PLU. Las operaciones
CALU y PLU cambian los bits de estado durante la fase de ejecución. Las siguientes dos
instrucciones después de la actualización del registro de estado no son afectadas.
El PMST tiene un registro de pila shadow de un nivel para salvar el contexto en forma
automática cuando una interrupción es tomada. El PMST es automáticamente restaurado
cuando se regresa de una interrupción (RETI) o retorna de una interrupción interrumpida
(truncada) (RETE).
15 -11 1 10 19 18 1 7 16 1 5 1 4 ¡ 3 1 2 ¡ 1 1 0 ¡
IPTR O O O AVIS O OVLY RAM MP/MC' NDX TRM BAF1
Figura2. - Diagramadel registro PMST.
13
Note que el bit INTM en el STO y el bit YJ en el STI no son salvados en la pila o
restaurados desde la pila en un salvado automático de contexto. Esta característica permite
al pin XF ser cambiado de estado (toggIed) en una rutina de servicio de interrupción (ISR)
y también permite salvar automáticamente contextos.
Los bits INTM y OVM en el STO y los bits C, CNF, HM, SXM, TC y XF en STI pueden
ser configurados individualmente usando las instrucciones SETC y CLRC ( a 1 o
respectivamente). Los bits DP en STO pueden ser cargados usando la instrucción LDP. El
bit PM en SI puede ser cargado usando la instrucción SPM
15 -13 ¡ 12 ii lo0 9 8 ¡7 ¡ 6 15 ¡ 4 3 ¡2 ¡ 1 -0 ¡
ARB CNF TC SXM C 1 1 HM 1 XF 1 111 PM
Figura2.3 -Diagramadel registro STI.
2.4 MEORIA
El rango total de direccionamiento del 'C5x es de 224K de palabras de 16 bits. El espacio
de memoria está dividido en 4 segmentos de memoria individualmente seleccionables:
BLOQUE
1 II
TAMAÑO 1D
¡
AG
MEMORIA DEMEMORIA
~~~~~~~~~~PROGRAMA
DE
DATOS
0 (BO) 512 PALABRAS FEOOh 1 0100H-02FFh
1 (1 512 PALABRAS -1 0300h-04FFh
2 (B2) 512 PALABRAS -1 0060h-007Fh
Tabla 2.1 - Tabla de distribución de DARAM.
Los 64K de memoria de programa contienen las instrucciones a ejecutar. Los 64K de
memoria de datos locales almacenan datos usados por las instrucciones. Los 32K de datos
globales pueden compartir datos con otros procesadores en un mismo sistema o pueden
servir como un espacio adicional de datos. Los 64K de puertos de entrada/salida hacen
interfaz para periféricos externos mapeados en memoria y también pueden servir como un
14
espacio extra de almacenamiento de datos. En un ciclo de máquina dado, el ALU puede
ejecutar hasta tres operaciones de memoria concurrente.
Esta memoria interna incluye ROM en el espacio de programa, RAM de acceso simple en
el espacio de programa y/o datos (SARAM), RAM de acceso dual en el espacio de
programa yio datos (DARAM).
Todos los dispositivos 'C5x tienen 1056 palabras de DARAM configurado en tres bloques y
mapeados a iguales direcciones como se muestra en la tabla 2. 1. El bloque 0 (BO) puede
configurarse para que esté en memoria de programa o en memoria de datos. Al hacer
referencia de memoria de datos, se está haciendo referencia la espacio de memoria de datos
locales. La DARAM puede ser "leída de" y "escrita hacia" en el mismo ciclo de máquina.
Los dispositivos 'C5x tienen diferentes tamaños de SARAM el cual es dividido dentro de
2K de palabras y bloques de K de palabras que están contiguos en el espacio de datos o
programa. La SARAM requiere de un ciclo completo de máquina para hacer una lectura o
una escritura. De cualquier modo, el CPU puede leer o escribir un bloque mientras accesa
otro bloque durante el mismo ciclo de máquina.
Los dispositivos 'C5x tienen diferentes tamañlos de ROM en el espacio de programa. Esta
ROM puede ser ROM enmascarable o ROM de arranque. El ROM de arranque reside en el
espacio de programa en la dirección 0OOOh e incluye un dispositivo de prueba (para uso
interno) y código de arranque. La ROM enmascarable es también localizada en el bloque
mas bajo de memoria de programa. La ROM es habilitada o deshabilitada por el estado del
pin MP/MC al reset o manipulando el bit MP/MC en el registro PMST después del reset.
• Direccionamiento directo
• Direccionamiento indirecto
• Direccionamiento inmediato
• Direccionamiento dedicado a registros
• Direccionamiento de registros mapeados en memoria
• Direccionamniento circular
2.5.1 DIRECCIONAMIENTO DIRECTO
En el modo de direccionamiento directo, la instrucción contiene los 7 bits mas bajos de la
dirección de memoria de datos (DMA). Los 7 bits dmna son concatenados con los 9 bits del
puntero de página de memoria de datos (DP) del registro de estado para formar la
dirección de memoria de datos de 16 bits. Esta dirección de memoria de datos de 16 bits es
puesta en el bus directo de dirección de memoria de datos (DAB). El DP ubica una de las
512 páginas de memoria de datos posibles y los 7 bits de direcciones en la instrucción
ubican una de las 128 palabras dentro de la página de memoria de datos. Se puede cargar
los bits DP con la instrucción LDP. La figura 2.4 ilustra cómo es formada la dirección de
memoria de datos de 16 bits.
15 76 0 16 BITS
DP DMA
DAB
PÁGINA REGISTROS
DE 128 DEAE
PALABRAS MEMORIA Y
DARAM B2
Para seleccionar un registro auxiliar específico, se tiene que cargar el ARP (auxiliar regiter
pointer) con un valor de a 7, designando así ARO hasta AR7 respectivamente. El registro
apuntado por el ARP es referido como el registro auxiliar actual. Tu puedes cargar la
dirección en el AR usando la instrucción LAR y tu puedes cambiar el contenido de el AR
con las instrucciones ADRK, MA, SBRK. Además el contenido del AR se puede también
cambiar por medio del campo de dirección indirecta de una instrucción que soporte dicho
direccionarniento.
16
El contenido del AR actual es usado como la dirección de un operando de memoria de
datos. Después de que la instrucción usa el valor del dato, el contenido de AR puede ser
incrementado o decrementado por la unidad aritmética de registro auxiliar (ARAU) con lo
cual se implementa aritmética sin signo de 16 bits.
ADD #Offh
CÓDIGO DE
ADD OFFh
ADD #01234h
CÓDIGO DE
ADD
01234h
Figura 2.6 - Diagramaesquemático parael direccionamientoinmediato long.
17
La figura 2.6 muestra un direccionamiento inmediato de tipo long sin acceso a la memoria
de datos. La segunda palabra de la instrucción de dos palabras es sumado al acumulador por
el CALU. La figura 2.6 ilustra cómo es formada la dirección inmediata de tipo long.
Tabla 2.2 - Tabla de mapa de memoria de la página de datos O- registrosde periféricos y puertos I/O
Los circuitos periféricos son operados y controlados a través del acceso a los registros de
control y datos del mapa de memoria. Poniendo a 1 o los bits correctos se pueden
habilitar, deshabilitar, inicializar y reconfigurar dinámicamente a los periféricos. Los datos
son transferidos hacia y desde los periféricos hacia los registros de datos en el mapa de
memoria. Cuando un periférico no está en uso, el reloj interno puede ser quitados de estos
periféricos permitiendo el consumo de baja potencia cuando el dispositivo está en su modo
normal o modo sin uso.
Cuando el TIM decrementa hasta o cuando el timer es reseteado por el bit TRiB, el
contenido del PRD es cargado en el TM El bit TRB siempre es leído como O. Cuando un
1 es escrito en el TRB, el timer es reseteado, pero TRB es aun leído como [Link] valor actual
en el timer puede ser leído leyendo al TJIN; el PSC puede ser leído leyendo el TCR.
frecuencia TINT -
19
CAPITULO 2 ARQUITECTURA DEL DSP TMS320C50
2.8 INTERRUPCIONES
El CPU del 'C5x soporta 16 interrupciones (INT16'-INTI ), pero cada 'C5x no hace uso
necesariamente de las 16 interrupciones. Por ejemplo, todos los 'C5x usan solamente 9 de
esas interrupciones excepto el 'C57 que usa 10 de éstas. Las interrupciones externas son
generadas por hardware externo usando INT1'-INT4. Las interrupciones generadas por los
periféricos internos son:
Adicionalmente a esto, el C5x tiene tres instrucciones de interrupción por software las
cuales son: R1NTR, NMI y TRAP; y dos interrupciones externas no enmascaradas RS' y
NMI'. El reset (RS') tiene la más alta prioridad y la interrupción INT16' tiene la más baja
prioridad. Las interrupciones INTV -INT4' y NMI' son validos si la señal es alta durante
los dos últimos ciclos de máquina y bajo por mínimo tres ciclos de máquina. Esto es para
asegurar que la señal se trata de una interrupción y no de ruido generado por múltiples
interrupciones.
Si el CPU está en el modo IDLE2, la entrada de una interrupción debe ser alta por cuatro
ciclos de máquina y baja por un mínimo de cinco ciclos de máquina para que sean
apropiadamnente reconocidas.
Un valor 1 en un bit del IM4R habilita la interrupción correspondiente, siempre que el bit
INTM en el registro STO esté limpiado. El DAR es accesible para operaciones de lectura y
escritura.
21
ZOO CO Z, r> YImcWW
V8 5 ¡o ~~~~~~~(PO
packag.) lsN
VSS 2 (Top Vfrw> ni _
NC211 IAO(
DI 21
~~~~24 no~~~~~~~~~~~~~1
CLOLJTI
XF
03 21 TOX
02 ya e
D1 o TFSXPrFRM
TMS is CLKMD2
12C im TO
u` a Von:
NC 21u Xl
111W X2ACLKIN
DR a3 u r
FSR as de-
CLKR NC
N4C u NC
NC M* NC
si El 3 4 S5s is 061 lII U SIIBelou
l siTIU
si 71 2 731T4E 15 71 lo11 elel 320u
2.10 REFERENCIAS
22
~. CAPÍTULO3
MODELO DE LA
CINÉTICA
PUNTUAL DEL
REACTOR TRIGA
MARK III
3.1 INTRODUCCIÓN
Mediante ciertos métodos complejos se puede lograr que una partícula como el neutrón
choque contra el núcleo de un átomo y, debido a que su estructura se altera, sufra una
excitación, pudiendo llegar esta excitación a partir el núcleo en dos o más pequeños núcleos
(fragmentos de fisión). Este proceso de división del núcleo se llama fisión. Si este proceso
se repite cíclicamente, se dice que existe una reacción en cadena. A cada ciclo de la
reacción en cadena se le llama generación.
En cada una de las fisiones se produce una pequeña cantidad de energía en fonna de calor;
al producirse la reacción en cadena, se suman las energías producidas en cada fisión y se
puede obtener con este proceso una cantidad de energía considerable. Este es el origen de la
energía nuclear. Afortunadamente, se puede controlar la reacción en cadena dejando que
cierta cantidad de neutrones se escapen del sistema y que otros sean absorbidos por núcleos
que no se fisionan; con esto se logra que en promedio, sólo uno de los neutrones emitidos
en cada fisión produzca otra fisión.
23
La figura 3.2 muestra gráficamnente como es el proceso de fisión y el control de éste
mediante moderadores (barras de control). En primer lugar debe haber una fuente de
neutrones inicial que pueda originar la reacción en cadena. En el proceso, se genera calor
y nuevos neutrones que se fisionan con otros núcleos. También se obtienen subproductos
radioactivos [DEP 88].
Calor
eProd
Rayos ca-Oy
Neutron deió
Neutronesnutroe(4 ) 4I Netoe
~
N tron~ ~ ~~~~~________Nutoe áids lno
lentos Neutrones lentos________e etoe-áio Cadena
Productos leto
en cadea:
el ncolo de eco etomd po et eeeno
24
El combustible nuclear puede ser un compuesto de uranio eiquecido con el isótopo U-
235. Entre los elementos de combustible se pueden introducir barras de control fabricadas
de boro, debido a que el boro es un material capaz de absorber los neutrones libres. Al
introducir más o menos estas barras entre los elementos combustibles, se puede controlar el
número de fisiones que se producen.
El reactor que está instalado en el Centro Nuclear de México y que será el sistema a
controlar, es del tipo TRIGA Mark 11I, fabricado por General Atomic de Estados Unidos de
Norteamérica, el cual es clasificado en forma general como un reactor de investigación. Las
características principales de este reactor son su versatilidad y su seguridad intrínseca. Su
potencia máxima a nivel estable es de 1 MW y de 1500 MW en forma de pulsos repetibles
con una duración de 10 ms. Otras caracteristicas son la posibilidad de operarlo a diferentes
niveles de potencia. Existen varias alternativas de trabajo:
k -1
p=k ~~~~~~~~
3.1
De esta expresión se puede deducir que cuando el reactor está crítico, la reactividad es cero.
En un reactor subcritico la reactividad es negativa y cuando el reactor está supercrítico la
reactividad es positiva.
La reactividad [PON 80] es una propiedad integral de todo reactor y depende por lo tanto
del tanmaio del reactor, de las cantidades y densidades relativas de varios materiales, y de
las secciones transversales neutrónicas para la dispersión, absorción y fisión. Ya que estos
25
factores se alteran con la temperatura, presión y otros efectos de la fisión, la reactividad
depende de la historia del comportamiento del reactor.
Tiempo de generación de neutrones. El tiempo de generación de neutrones es el tiempo
promedio para la reproducción neutrónica y depende, principalmente, del número de
colisiones de dispersión que sufre un neutrón antes de salir del reactor (fuga) o desaparecer
en una reacción nuclear (absorción).
*Los neutrones que principalmente ocasionan las fisiones en los llamados reactores térmicos
son llamados neutrones térmicos, cuya energía es menor a 0.1 eV. Un reactor lento o
térmico se caracteriza por contener un material moderador que frena o desacelera los
neutrones hasta una velocidad en la que hallan su equilibrio térmico con sus alrededores.
at
26
En donde es la magnitud de la velocidad de los neutrones en consideración, D es el
coeficiente de difusión de neutrones, (r,t) es el flujo de neutrones térmicos, D V 0 (r,t) dV
es el número de neutrones que se difunden dentro del elemento de volumen dV alrededor
del punto r en el tiempo t, E,, y Sf son las secciones macroscópicas de absorción y fisión
respectivamente, 1Za (r,t) dV es el número de neutrones absorbidos en el elemento de
volumen d V alrededor del punto r en el tiempo t, fi es la fracción total de neutrones que son
retardados, u es el número promedio de neutrones (tanto instantáneos como retardados)
producidos por fisión, (-fi) u Ef (r,t) dV es el número de neutrones instantáneos
producidos en el elemento de volumen dV alrededor del punto r en el tiempo t, Xi es la
constante del decaimiento del i-ésimo grupo de precursores de neutrones retardados,
C, (r,t) dV es el número de precursores de neutrones retardados del -ésimo grupo en el
elemento de volumen d V alrededor del punto r en el tiempo t, E¡ ki C1 (r,t) d V es el número
de neutrones retardados producidos en el elemento de volumen dV alrededor del punto r en
el tiempo t, So es una fuente de neutrones externa al proceso de fisión, y Pi es la fracción de
neutrones que son producidos debido al decaimiento de los precursores del i-ésimo grupo
[HET 71].
d fi()
i (t i¡t)E35
dt' A
d (t) (21It)
-i ()+ Ec 3.6
dt A
27
d(t)C(t)
-,Z C=(t)
'6 n Ec 3.7
dt A
1 6
= 8 -,Ec 3.8
P¿oa¡()
=p~(t) + P¡. (O) Ec 3.9
en donde p(t) es la contribución a la reactividad total debida a causas externas, tales como
inserción o extracción de barras de combustible de control, y pt(t) es la contribución
debida a cambios en las características internas de los componentes del reactor, como son
los cambios de fase refrigerante o los cambios en la densidad de los elementos
combustibles. A los efectos que causan que pj~t) sea diferente de cero se les denomina
efectos de retroalimentación.
La reactividad interna del sistema, cuando sólo depende de los cambios de temperatura, se
puede expresar como:
Pint()-a (T - ) Ec 3.1 0
dt
28
Si T0 representa la temperatura de equilibrio a una potencia estacionaria no, entonces:
dt
d Ec. 3.13
- T = K [n (t) - no]- (T - TO)
dt
j + Pin(t)f6)fl(t) + C(t)
dt)=Pant(t) E .5
3.6 REFERENCIAS
29
[HET 71] Hetrik D.L., "Dynamics of Nuclear Reactors", The University of Chicago
Press, 1971.
[VIA 941 Viáis Juárez J., "Cálculo de los parámnetros fundamentales para el estudio
dinámnico del reactor TRIGA Mark III del Centro Nuclear de México (núcleo
mixto)". Tesis Profesional. Universidad Nacional Autónoma de México,
México, 1994.
[PER 94] Pérez V., "Control linealizador entrada-salida de un reactor nuclear". Tesis
Profesional, Instituto Tecnológico de Toluca, México, 1994.
[PON 80] Ponce M.A., "El reactor TRIGA Mark III del Centro Nuclear de México",
Serie de Divulgación, No. 5, Instituto Nacional de Investigaciones
Nucleares. México, 1980.
1~~~1~~\TM\ERCTR\CONTROLtPP
linclude <stdlib.h>
linclude <iostreao.h>
CAPÍTULO -
____________________________
linclude <i.e.h>
linclude <dos»h
enpantalla eltamaño enbytes delos datos
noid sys<l;
void inicio0);
noid conversion0l
//muestra
//inicializa las condiciones dehardware y sftware
//conwiarte los datos entrantes el formato reaue
AL O I M D.>IFUt1SO1
lido por el dsp
void concatero0; l/concatena parte alta ybajo
void escrituralintí: f/escribe datos al latch
decog que viene del dsp PARA EL CONTROL~7)ii.
...
int lectoral).f/lee datos del lacht
intlfl; //genera
void
void
int2O;
1asignada
interrupcion dedatos
envio
//genera
interrupcioea recepcion dedatos
2 asignada
DL)E' POTENCjm~ I A.'i.~
EN~?~
flnat
W~,C,£,neftf,ox3,au4; enUN
intauxlauo,flag=1,neiIinelo,nehi,[Link],tep,cog,coglo,coghi;
REACTOR TRIGA
char
resp:
maino
4.1 INTRODUCCIÓN
En el Instituto Nacional de Investigaciones Nucleares se desarrolló un algoritmo de control
usando lógica difusa cuyo objetivo es la regulación de potencia neutrónica en un modelo de
la cinética puntual del reactor TRIGA Mark III [VE1,OO] a nivel software. Los sistemas de
control en lazo cerrado usando estos algoritmos de control se han simulado en el ambiente
de análisis matemático Matlab [MAl 93]. Los resultados de las simulaciones han mostrado
el comportamiento esperado con respecto a la regulación de la potencia, manteniendo los
valores del período del reactor dentro de los lmites de seguridad para evitar un corte
innecesario debido a este parámetro. En este capítulo se presenta la implementación del
controlador difuso para la regulación de potencia neutrónica en el modelo de la cinética
puntual en lenguaje C++ que servirá como base para la programación del mismo en
lenguaje ensamblador para el DSP.
31
CR PC NR GD TI
0 ~~~T
0 3.5 10 lo 4 lo lo 7
Figura 4.1. - Conjuntos difusos asociados a la variable de entradaT.
GN MN PNID PP
01 1 ~ ~ ~ ~ ~ -ne
NP CE PQ PG
32
La variable de salida del controlador difuso es la razón de variación de la reactividad
externa, la cual determina el incremento o decremento de la potencia neutrónica del reactor.
A esto también se le puede llamar pendiente de rlho externa (p,,) [VELOO pp. 77-78]. Las
figuras 4.1, 4.2 y 4.3 muestran la distribución de los conjuntos difusos así como los valores
del universo que contendrán. En la tabla 4.1 se muestra el significado del nombre de cada
conjunto difuso [VELOO p. 102].
Base de
reglas
Entrada 1 Salida 1
Entrada 2 Sald2
Máquin Agregador- -
Difuisificador de desdifusificador
Entrada p, inferencia Salida q'
Una vez definido las variables de entrada (T y ne) y de salida (mpex)d en las secciones
posteriores se verán la programación del algoritmo así como los diagramas de flujo
utilizados.
Se observa en las figuras 4.1 y 4.2 que el valor de membresía es la altura en el eje y para
cada una de las rectas. De acuerdo con la ecuación de la pendiente de una recta (Ec 4.1),
son necesarios tanto el punto inicial como el final en el eje x como en el eje y.
M= Y2_1Ec 4.1
X2 -X
Considerando la figura 4.5 se puede obtener la ecuación para determinar la altura (valor de
membresía) para una recta en un intervalo dado. La pendiente del segmento de recta que va
del punto y hasta el punto y¡ y utilizando la ecuación 4.1 se obtiene la ecuación 4.2.
33
M = Y¡, Ec 4.2
Xi+l1
También se puede obtener la pendiente del segmento de recta que va del punto yi hasta el
punto y con lo cual, utilizando la ecuación 4.1 se obtiene la ecuación 4.3.
My- Ec 4.3
Como ambos segmentos pertenecen a la misma recta sus pendientes deben ser las mismas,
por lo que se pueden igualar las ecuaciones 4.2 y 4.3. Al realizar dicha igualación se
obtiene una expresión que permite determinar la altura en el eje y tal como lo indica la
ecuación 4.4.
yx-Y¡ xY+-Y¡
EX Xi+1 X
M xxjy
Y1 +1 .Yi+
Lxi+1 -
1
Ji
Ec 4.4
El universo de las variables de entrada está dividido en intervalos que contienen uno o dos
segmentos de recta pertenecientes a los conjuntos difusos asociados a dichas variables. Para
cada recta en cada intervalo es necesario utilizar la ecuación 4.4 y así obtener el valor de
membresía de los conjuntos difusos. De esta forma, el valor de y corresponde al valor de
membresía del conjunto difuso en un intervalo dado y x es el valor de la variable de
entrada.
Y¡
Los intervalos utilizados para la difusificación ya están definidos en las figuras 4.1 y 4.2.
El programa en C++ pide al usuario un valor de 1 y un valor de ne los cuales se utilizan
para comenzar todo el proceso de control difuso.
34
lx-xil+y
>' FOllroííFlr1í1
= 1
i+ i LíxoiLneJLTJ ne]+ = ID Ec 4.5
Ahora, considerando la recta que pertenece a PP, se tiene que y¡ =0, y¡+] =1, xi =0, x+, = y
utilizando la ecuación 4.4 se obtiene la ecuación 4.6.
y=Yi+i
y=~~~I-x 1
-~M=¡n-¡O
1j+ FÑ1 iiniP
Olre ,Fl0[1[l =P Ec 4.6
Xi, - x 1 L10 JL LlL
Para cada intervalo en el que se tengan dos rectas se deben tener en consecuencia dos
ecuaciones que determinen la membresía de los conjuntos difusos en cuestión. En el caso
en el que se encuentre una línea recta horizontal como parte de un intervalo, se asigna el
valor de membresía uno.
void difusne(
{float GN=0,N0,PN=,LD=0,PP=O; IIVariables de membresía para el valor
IIdel error de potencia ne".
if(ne>=-l10.0 && ne<=-99.5) IIMembresías del valor ne en los
{ GN=1; IIconjuntos difusos GN>Grande negativo
} II ~~~~~MN>Mediano negativo,
if(ne>-99.5 && ne<=-60.0)
{GN=l .0+((0- 1 «600--9.»*n-(9.
MIN-0.0+(( 1 «600-(9.5)(n--9.
35
-110• ne•-99.5 G~N=I1(6+95]n+95
no
-1 e •0 s NI[I1[e1
no
36
Si ~CR=1+[-I(10-3.5)j[T-3.5]
1010<T< si ~~GD
1+_-1/( 07 - 10)][T -1 O,
TI = [ (I 07 1 s)][T _10
no
CED
Figura4.7. - Diagramade flujo de la [Link]ón de la variable de entrada T
En los diagramas de flujo de las figuras 4.6 y 4.7, se observa que únicamente entrará a un
solo caso por variable de entrada. Una vez hallado el intervalo al cual pertenece la variable
de entrada, se termina la difuasificación. En caso de que la variable de entrada esté fuera de
37
rango, no se difusificará nada. En el programa final de control difuso no se contempla
ninguna protección al respecto por lo que si se introducen valores de ne y 1 fuera de los
rangos permitidos, el programa arrojará resultados no predecibles [BEN 00].
void difusT(
{ double CR=0, PC=0,NR=0,G1)=0,I=0; IIVariables de membresía para el valor
1/de] período "T"
if (T>=O && T<=3.5) IIMembresías del valor T en los
CR=l; ¡conjuntos difusos CR>Critico
} II ~~~~PC>Poco critico, NR>Normal
ifi(T>3.5 && T<= 10)
{CR= .0+((0.0- 1.0)I((10.0)-(3.5)))*(T-(3.5));
PC=0.0+((O10.0.)I((l 0.0)-(3.5)))*(T.(3 .5));
Una vez difusificadas las variables de entrada, se hace la evaluación de reglas. Para un
sistema de 2 entradas y 1 salida, las reglas se pueden escribir construyendo una matriz de
memoria asociativa difusa, esto es, de a cuerdo con la combinación de las entradas llenar
las celdas con el valor deseado. La memoria asociativa difusa también es conocida como
38
FAM o tabla de control [VELOO p. 83]. En la figura 4.8 se muestra la tabla de control
utilizada para la evaluación de reglas [VELOO p. 102].
La tabla de control mostrada en la figura 4.8 está formada por los conjuntos difusos
asociados a las variables ne y 1. Cada intersección (celda) tiene a alguno de los conjuntos
difusos asociados a la variable de salida mpX por lo que el número de reglas para este
algoritmo es de veinticinco el cual está determinado por el número de combinaciones de los
conjuntos difusos asociados a las variables de entrada ne y 1.
void evalreg(
{float CR, PC, NR, GD), TI, GN, MN, P`N, ID, PP;
¡¡conjuntos de entrada
float NP,CE,PQPG ¡Hconjuntos de salida
float NPAUX[51, CEAUX[8], PQAUX[7], 1`GAUX[6]; ¡¡arreglos auxiliares para
¡¡a evaluación de reglas
De esta forma, se pueden formar las reglas con los conjuntos difusos asociados a las
variables de entrada como antecedentes y los conjuntos difusos asociados a la variable de
salida como consecuente. Una regla es por ejemplo el siguiente enunciado:
39
Si ne es grande negativo (GN) y T es crítico (CR) entonces m,, es cero (CE)
Las reglas difusas determinadas a partir de la figura 4.8, son evaluadas con los valores de
las variables difusificadas de entrada asignados a los antecedentes, obteniendo la
membresía de cada regla la cual se determina por el mínimo de los antecedentes.
Posteriormente, cada valor difusificado de salida es determinado por el máximo de las
membresías de las reglas que lo infieren, con lo cual queda determinada la correspondiente
variable difuasificada de salida [VELOO p. 96].
NP CE PQ PG
¡ .0.8
0,¡ 0'~~~~~0,
COG (0.005)
Figura4.9. - Conjunto difi¿so agregadoy su centro de gravedad.
40
fueron activados y que no es más grande que los contornos de los mismos. En esta figura,
las membresías de los conjuntos que se activaron son NP=0.8, CE=0.3, PQ= 0.7 y PG=0.
Con estas activaciones se forma el conjunto agregado a partir del cual se hace la
desdifusificación.
float agregadesdi(
{float num=-O.O,den=0.0,inc=O.O; ¡¡condiciones iniciales
float m=-0.02; ¡¡valor de rn rho externa inicial
float NP, CE, PQ PG; ¡¡variables para claridad de programa
float auxy=0.0,auxz=0.0,auxyagrega=.0,auxzagrega=.,agrega=.,cogaux=O.O;
while (m<=0.04)
{¡f(m>=-0.02 && m<-0.01)
{agrega=NP;
ifAr>=-0.01 && m<O)
{auxy=Z-100*mr+O;
auxyagrega=min(auxy,Nl`);
auxz=100*m+1;
auxzagrega=rnin(auxz,CE);
agrega=max(auxyagrega,auxzagrega,,,,,,0);
auxl1=num;
aux2=den;
cogaux=nunm¡den;
return cogaux;
41
En el listado 4.4 se muestra la programación de la etapa de agregación y desdifusificación
en la cual se hacen ambos procesos simultáneamente, es decir, al mismo tiempo que se
genera el conjunto difuso agregado, se obtienen resultados parciales para posteriormente
realizar la desdifusificación de la variable de salida.
Existen varios métodos para realizar el proceso de desdifusificación [VELOO pp. 73-741. El
que se utiliza en este algoritmo es el de Centro de área o gravedad (COG). Ésta método en
particular necesita de un conjunto agregado del cual ya se hizo mención. La ecuación 4.7
se utiliza para obtener el centro de área del conjunto difuso agregado.
0.04
Xm, up(mi)nu
COG =i-.2nmE 0.04 den E ..
i=-0.02
En la ecuación 4.7, los límites de la sumatoria son los límites del universo de la variable de
salida mpex; mi es el valor de pendiente en el recorrido que se realiza; u (md)es la altura del
conjunto agregado en el valor de m. Para simplificar la ecuación 4.7, podemos hacer
referencia a un numerador y un denominador el cual servirá para ir acumulando el valor de
las sumas sucesivas cuando esta ecuación se programe en C++. Por simplicidad de
programación, se renombró m, como m por lo que de aquí en adelante m es equivalente a
mencionar mex;
En diagrarna de flujo de la figura 4. 10, se pide un valor de N. Este valor es llamado valor de
discretización. De acuerdo a la ecuación 4.7 se hace una sumatoria desde el límite inferior
hasta el milite superior del universo de la variable de salida M,,-,¡. De acuerdo con el listado
4.4, el valor de N se utiliza para determinar el incremento que debe hacerse al valor de m y
así recorrer todo el universo de la variable de salida en incrementos definidos por la
variable inc.
Los conjuntos difusos asociados a la variable de salida m tienen intervalos bien definidos
por lo que se puede hacer un proceso similar al de la difusificación. Esto es, en el proceso
de agregación intervienen la activación de los conjuntos difusos asociados a la variable de
salida mpxt así como las ecuaciones de las rectas que estén presenten en dicho intervalo.
Para cada intervalo en el que se tengan dos rectas se deben tener en consecuencia dos
ecuaciones que describan a los conjuntos difusos en cuestión. Para esta etapa, en vez de
igualar las pendientes de dos segmentos de recta que pertenecen a la misma trayectoria
como se hizo en la difusificación, se utiliza la ecuación de la recta mostrada en la ecuación
4.8.
y =ax+b Ec 4.8
42
Entra
valor deN
auxy=-100*m
auxyagrega min(auxy, NP)
-0.0l<m•0 ~auxz= 100*m+1
Si
no ~~~~auxzagrega = mín(auxz,CE)
agrega = max(auxyagrega, auxzagrega)
auxy = -100* m+ 1
auxyagrega = min(auxy,CE)
0< .l auxz= 100* m
no ~~~~auxzagrega = m¡in(auxz,PQ)
agrega = max(auxyagrega, auxzagrega)
auxy = -5 *m +I.5
auxyagrega = min(auxy,PQ)
0.010.03
<m• auxz=50*m-0.5
auxzagrega = mnin(auxz,PG)
agrega = max(auxyagrega, auxzagrega)
0.03
•0.04
< m agrega = PG
si
cog =num/den
(71i11111) ~
den
~~~~num
=
* agrega
num +m
den + agrega
m = m + inc
43
Una vez determinado el incremento para m, se realiza la desdifusificación al mismo tiempo
que se forma el conjunto agregado. Como se va haciendo un cálculo de agregación y
desdifuasificación por cada incremento de m, en num y den se van guardando la sumatoria
parcial. Al terminar de recorrer los valores de m posibles, se realiza la división de num y
den para obtener el valor del centro de gravedad (COG).
Para los conjuntos difusos que caen dentro del rango -0.0 1 m < 003, cada intervalo
contiene a dos rectas que pertenecen a dos conjuntos difusos distintos. Tomando como
ejemplo el intervalo -0.0 1 m • O (aquí intervienen NP y CE) primero se utiliza la recta
que pertenece a NP y se obtiene la altura de éste para el valor de m actual (se guarda en
auxy) y el resultado se compara con la activación de NP (ver listado 4.4); se toma el menor
(se guarda en auxyagrega). Después, se utiliza la recta que pertenece a CE y se obtiene la
altura de éste para el valor actual de m actual (se guarda en auxz) y el resultado se compara
con la activación de CE (ver listado 4.4); se toma el menor (se guarda en auxzagrega). Por
último, de los dos mínimos obtenidos se toma el mayor y ese es valor de p(md utilizado en
la ecuación 4.7 y que en el listado 4.4 es llamado agrega [BEN 00].
Las rutinas para obtener mínimos y máximos (min y max) fueron creadas de acuerdo a la
necesidad del algoritmo ya que C++ no tiene funciones que realicen dichas operaciones.
4.6 REFERENCIAS
[GUL 68] Gulf General Atomic, TRIGA Mark III Intrumentation Maintenance Manual
for Comisión Nacional de Energía Nuclear, México, junio 1, 1968.
[VELOO] Vélez Días Daniel, Diseño de un Controlador Basado en Lógica Difusa Para
la Regulación de Flujo Neutrónico, México, 2000.
44
CAPiIITULO5
~~ ~ ~ IMPLAINTACIÓN
DEL ALGORITMO
.. 1111w DIFUSO DE
CONTROL EN EL
5.1 INTRODUCCIÓN
Como se vio en el capítulo anterior, el conjunto de números utilizados en un control difuso
están comprendidos entre y 1, al menos hasta la etapa de evaluación de reglas. Esto
implica el uso de números fraccionarios. En lenguajes de alto nivel, esto no es ningún
problema ya que dentro de la sintaxis de éstos, están contempladas sentencias para el
manejo de números fraccionarios también llamados números de punto flotante. Más aún, la
persona que se encarga de la programación nunca se da cuenta de lo que en realidad hace el
compilador para manejar la notación numérica de punto flotante, ya que únicamente declara
variable de tipo "flotante" para el uso de números fraccionanlos.
n = e Ec 5.1
45
Puesto que hay más de una forma de representar un número dado, normalmente se escoge
una forma como estándar.
Uno de los estándares más utilizados para la representación de número de punto flotante es
el 754 de la IEEE. El estándar define tres formatos: precisión sencilla (32 bits), doble
precisión (64 bits) y precisión extendida (80 bits) [TANOO]. Los formatos tanto de precisión
sencilla como doble usan la base 2 para las fracciones y notación de exceso para los
exponentes. Gráficamente, esto se representa como se muestra en la figura 5. 1.
No está por demás mencionar que el DSP TMS32OC50 tiene instrucciones para el manejo
del punto flotante, pero su uso resulta en rutinas bastante extensas y dificiles de entender a
primera vista.
Tomando como base que el DSP usado tiene una arquitectura de registros de 16 bits, tiene
un acumulador de 32 bits y un búfer del acumulador tmbién de 32 bits, además de poder
manejar números negativos en formato de complemento a dos se plantear a continuación
como se manejan los números fraccionanlos.
Para explicar la notación a utilizar, se toma a los conjuntos difusos asociados a la variable
de entrada ne (error de potencia). Estos conjuntos se pueden ver en la figura 5.2.
GN NIN PN ID PP
01-L- 1~ ~~~~
ne
-110 -99.5 -60 -40 -1 0 1 10
Figura 5.2.- Conjuntos difusos asociados a la variable de entradane.
El rango de valores que tiene este universo de acuerdo a la figura 5.2 es de -11 0 hasta 10.
Esto implica el uso de números fraccionarios, como por ejemplo -60.35, 1.25 o 15.68. En
46
lenguajes de alto nivel, este manejo numérico es transparente al usuario debido a la sintaxis
específica con la que se cuenta para manejar estos números. Pero si hablamos de manejar
un número de punto flotante en lenguaje ensamblador, el problema ya no es tan fácil de
resolver.
Un número entero también se puede representar en una notación de punto flotante, como el
que se muestra en la ecuación 5.2. A pesar de que el número es entero, podemos
representarlo en notación de mantisa y exponente (ambos con signo).
A diferencia del estándar de la IEEE para números de punto flotante, se puede utilizar
siempre una mantisa entera y no una fracción y un exponente "normal" en vez de usar la
notación de exceso. La utilidad de utilizar este formato se puede ver mejor con número
fraccionarios como los ejemplos mostrados en las ecuaciones 5.3a, 5.3b y 5.3c.
- 99.5= 995 * 1O' -~9950O*10-2 Ee 5.3a
2
0.l25=l1.25 *0I' =2.5 *1W- =125 *10- 3 Ec. 5.3c
Donde ne es el valor del error de potencia que es procesado por el controlador difuso.
Haciendo la división se obtiene la ecuación 5.4b.
Hasta este punto todo parece concordar, sin embargo, se deben recordar algunas reglas para
la suma y multiplicación de números expresados en una mantisa y un exponente; para poder
47
sumar dos números, sus exponentes deben ser iguales y después de haber igualado sus
exponentes sus mantisas se suman; para multiplicar dos números, sus exponentes se suman
y sus mantisas se multiplican. De esta forma, el valor de ne debe de tener un e = -1 para que
pueda sumarse en forma directa. Suponiendo que el valor de ne tiene como exponente e=-
1, entonces se puede realizar la multiplicación como lo muestra la ecuación 5.4d.
El exponente resultante de la multiplicación es e =-5 por lo que para realizar la última resta,
se debe hacer que el exponente del número 1 sea e =-5 con lo que se obtiene a ecuación
5.4e.
La ecuación 5.4e es más fácil de realizar en lenguaje ensamblador que utilizar las rutinas
para punto flotante.
Sin embargo, se debe considerar los recursos con los cuales se cuenta en el
microprocesador o microcontrolador en donde queremos programar. En el DSP se cuenta
con registros de 16 bits para guardar datos. Esto da la idea de que debemos tratar de que
cualquier representación numérica sea de 16 bits. Con 16 bits se puede representar 21 6
combinaciones, esto es de a 65536; pero como se utilizan números con signo, entonces
esto reduce la representación que podemos tener, esto es de -32767 a 32768. Esto es obvio
ya que si se utilizan números negativos la representación en valor absoluto se reduce a la
mitad.
El valor más positivo que se puede representar con 16 bits es 32768. Esto significa que para
representar 00000*10-5 se necesitan más de 16 bits para representar la mantisa (18 bits
para ser más exactos). Aunque esto no es una limitante ya que la ALU soporta operaciones
de 32 bits, se incrementa la programación al tener que hacer rutinas para 32 bits en vez de
16 bits.
Con 16 bts podemos representar el número 10000, justo el número que resulta si
100000*10-5 es ajustado a 0000*10-4 el cual es equivalente. Modificando la ecuación 5.4c
se obtiene la ecuación 5.5.
Las ecuación 5.5 consideran que ne tiene un exponente e =-l. De esta forma, se pueden
hacer todas las operaciones en forma entera con 16 bits. Una de las limitantes de este
método para este ejemplo en particular, es que el valor de ne debe tener un exponente e = -
1. El exponente resultante de la Ec 5.5 es e =-4. Se debe saber que la ecuación 5.5 es válida
solo para un rango de -99.5 a -60 preestablecido por los conjuntos difusos asociados a la
variable de entrada ne, GN y MN. También se debe notar que el ajuste de exponentes
depende de la arquitectura del microprocesador.
48
5.3 PROGRAMACIÓN DE LA DIFUSIFICACIÓN EN EL DSP
Una vez definido el procedimiento para ajustar las ecuaciones de tal forma que se realicen
únicamente operaciones con números enteros, se pueden definir los formatos de todas las
ecuaciones de difusificación así como los formatos numéricos a utilizar. En las tablas 5.1 y
5.2 se muestran las ecuaciones para la difusificación de las variables de entrada (ne y 1
respectivamente) vistas en el capítulo 4, modificadas de tal forma que todos los términos
sean enteros.
-I< ne <- 1000-3 < ne 0000e-3 PN =1OOOOe -4- 0e - 1* (ne + 100e - 3)]
-1<ne•0-1000e3 <ne•000e-3 ID=10 I*(ne+1000 3)
Tanto en las ecuaciones para la difusificación de las variables de entrada ne como las de 1,
el resultado de cada ecuación puede obtenerse utilizando exclusivamente las mantisas y el
exponente de dicho resultado será e =-4. Con esto se puede evitar la manipulación de los
exponentes y enfocarse a las operaciones con las mantisas.
Los exponentes se utilizan como selectores para elegir las operaciones correctas en la
ejecución del programa y no intervienen en los cálculos. De hecho, los exponentes
únicamente son necesarios para en la etapa de difusificación.
49
Rango de T Formato de rango Ecuación de difusificación modificada
requerido de T
1 0e+
O+3 T 1 1 0e+ < < 00e+2 NR = 10000e~ 4 -[1 e-6 *(T -100e+2)]
GD = e6J 0 +2
lOO0e+3< T 1Oe+6
l 1Oe+4 <T• lOOOe+4 GI= 100e -4(- 0e -8*(T-4) )
Una vez que los valores de las variables de entrada están en el formato especificado en las
tablas 5.1 y 5.2, la primer parte del algoritmo determina cual es el exponente de la variable
de entrada para que se puedan elegir las ecuaciones correspondientes al rango de la
mantisa. El listado 5.1 muestra las instrucciones utilizadas.
difusne:
lacc #OfTeh, 15 ;para completar el negativo
or ene ;carga el valor del exponente
abs ;obtiene el valor absoluto del ene
sub #l1 ;le resta 1
bcníd primero ne,eq ;si el acc=0, comienza la difusnc
lacc #Offfeh, 15 ;para completar el negativo
or enc ;carga el valor del exponente
abs ;obtiene el valor absoluto del e_nc
sub #3 jle resta 3
bcnd quinto ne,eq ;si el acc=0, com-ienza la difuas nc
lacc #OfTeh, 15 ;para completar el negativo
or enc ;carga el valor del exponente
abs ;obtiene el valor absoluto del e_nc
sub #2 ;le resta 2
bcníd séptimo ne,eq ;si el acc=0, comienza la difusnc
b findifusí ;no se tiene el formato deseado
50
En el caso de la variable de entrada ne, de acuerdo al formato requerido, se tienen tres
posibles exponentes aunque se tengan siete intervalos por lo que en esta parte los
exponentes funcionan como una primera selección de posibles casos.
Ahora bien, para comprobar los exponentes, se realiza una operación de resta. Si se le resta
el mismo valor del exponente al exponente mismo, tendremos como resultado cero. Cuando
se llega a esto, es obvio que el exponente es igual al valor restado y así se puede determinar
qué exponente tiene la variable ne. Por ello, para ne se realizan tres restas para comprobar
los tres posibles exponentes que en este caso son -1, -3 y -2.
Para la variable de entrada T se sigue un proceso similar. En este caso se tienen 6 intervalos
y 5 posibles exponentes, por lo que se hacen restas para determinar el exponente que tiene
la variable, que para 1 pueden ser -2,1,2,4 y 6.
Una vez que se ha determinado el exponente se utiliza una operación de salto condicional
(instrucción BCND) para ir directamente a las operaciones correspondientes [DSK96A]. Si
el exponente no puede ser determinado por no ser válido, entonces se realiza un salto al
final de la difusificación de la variable en cuestión para que no realice ninguna operación.
Una vez que se determinó que el exponente es válido y se ha pasado a las operaciones de
difusificación, se debe comprobar el rango en el que se encuentra la mantisa de la variable
de entrada como se muestra en el listado 5.2.
~~~ ~si
ne>-995 & ne<=-600 (-1)
segundone:
lacc #Offleh, 15 ;prepara para completar el negativo
or m-_ne ;carga el valor de ne -~~
sacb ;carga el acc en accb
lacc 4-995 ;carga acc con -995
cnIt ;compara si acc<accb (-995<ne)
bcnd contne2_1,c *si es cierto, compara la otra condición
b tercerone ;si no se va a la otra comparación
contne2_1:
lacc #Offfeh, 15 ;prepara para completar el negativo
or m-_nc ;carga el valor de nc
sacb ;carga el acc en accb
lacc 4-600 ;carga el acc con -995
crgt ;compara acc>=accb (-600>-ne)
bcnid gnmn,c ;si ambas condiciones son verdaderas,
;salta a las operaciones correctas
b terceronc ;si alguna de las dos condiciones es
;falsa, salta a la siguiente comparación
Listado 5.2. - Verificación de mantisa para la variablene.
Para ne, en caso que el exponente sea e =-l, existen cuatro conjuntos de operaciones
distintas, uno para cada intervalo de mantisa. Con esto, se debe determinar en que intervalo
dicho valor. El listado 5.2 presenta la comparación para cuando ne >-995 y ne -600.
Existen dos instrucciones muy importantes para este procedimiento que son [Link] y CRGT
[DSKOOB] [DSKOOC]. Ambas instrucciones utilizan al acumulador (acc), al buffer del
acumulador (accb) y a una bandera denominada carry bit (c) [DSK96B] [DSK96C]. La
descripción de ambas instrucciones se muestra en la tabla 5.3.
51
Instrucción Operación realizada
CRGT ~ Si acc accb c=l
CRGT ~Si
acc <accb c0
CRU ~Si acc<accb c=1
CRLT ~Si acc accb c=O
Tabla 5.3. - operacionesrealizadaspor las instrucciones
CRGTy CRLT
Con las instrucciones mostradas en la tabla 5.3, se pueden crear estructuras equivalentes a
la instrucción f de lenguaje C++. Precisamente estas instrucciones son utilizadas para
detenninar el rango en el que se encuentra la mantisa. Se cargan los valores correctos en
acc y accb y después se hace la comparación ejecutando cualquiera de las dos instrucciones
con lo que posteriormente se checa el valor resultante de c. El valor de c se utiliza entonces
para saltar a las operaciones correspondientes de difusificación. Si el valor de mantisa no
corresponde al rango, entonces se compara para otro rango hasta terminar con todos los
posibles rangos de comparación.
En el caso de la variable 1, se utilizan de igual forma las instrucciones CRGT y [Link] para
comparar el posible rango de mantisa. Tomando nuevamente ne >-995 y ne -600 y
apoyados en las ecuaciones de la tabla 5.1, se puede proceder a realizar las operaciones
para este rango como se muestra en el listado 5.3.
gn-mn:
cali absoluto ;llama a la rutina para valor absoluto
lace #995 ;carga a ace 995
sub temp ;lJe resta a acc el valor de nc (995-ne)
sacl temp2 ;alamncena temporalmente el resultado
It temp2 ;pone en el TPREGO a temp2
mpy #25 ;multiplica TRESGO x 25
pac ;carga preg en acc
sacb ;almacena el valor de acc en accb
lacc: #l0000 ;carga 10000 a acc
sbb ;resta accb de acc
sací mngn
exar ;intercabia acc<--->accb
sací mmni
splk #0000h,mpn ;borra valor de pn
splk #0000h,mid ;borra valor de d
splk #0000h,rr¡_pp ;borra valor de pp
b fin difus1 ;termina la difusificación de ne
Las operaciones son relativamente sencillas de realizar. Se debe notar, que en el caso en el
que el rango tiene dos ecuaciones, éstas son complementarias, por lo que al hacer una de
ellas se puede obtener la otra de forma implícita. Esto se debe a que una de las ecuaciones
forma parte de la otra. Por ejemplo, siguiendo en el mismo rango de ne >-995 y ne -600,
la ecuación de MIN forma parte de la ecuación de GN (de acuerdo a la tabla 5.1) por lo que
si hacemos la operación de GN, tendremos automáticamente MIN.
Por lo tanto, al hacer las operaciones para GN tenemos (resolviendo primero lo que está en
paréntesis y colocando este resultado en accb) el valor de GN quedará en acc y el valor de
52
MN quedará en accb con lo que en primer lugar se guarda el valor de GN y posteriormente,
con la ayuda de la instrucción EXAR [DSK96D], se guarda el valor de MvN. El proceso
para todas las operaciones de difusificación de ne y 1 tienen el mismo análisis.
53
Del listado 5.4 se observa que nuevamente se utiliza la instrucción CRLT. Esta instrucción
adicionalmente a la comparación de acc y acb, hace una copia en ambos registros del
menor valor de los dos. Debido a esta característica, se puede utilizar para obtener el
mínimo de dos números. Por cada evaluación, se va guardando el mínimo de los números
en una variable auxiliar.
Una vez que ya se obtuvieron los mínimos, se llama a una rutina que obtiene el máximo de
un conjunto de 8 números. Estos 8 números son las variables auxiliares auxI-aux8 en
donde se van guardando los mínimos de cada evaluación. La rutina para obtener los
máximos se encuentra en el listado 5.5.
max:
lacc aux1 ;carga aux 1 aacc
sacb ;copia acc a accb
Iacc aux2 ;carga aux2 en acc
crgt ;obtiene el máxima
lacc aux3 ;carga aux3 aacc
crgt ;obtiene el máximo
lacc aux4 ;carga aux4 a acc
crgt: ;obtiene el máximo
lacc aux5
crgt
lacc aux6
crgt:
lacc aux7
crgt
lacc: aux8
crgt
sacl temp3 ;guarda el máximo de los 8 números
ret ;regresa de al subrutina
Listado 5.5. - Rutina para obtener el máximo de 8 nú~meros.
De la rutina del listado 5.5 se observa que se utiliza la instrucción CRGT. Esta instrucción
adicionalmente a la comparación de acc y accb, hace una copia en ambos registros del
mayor valor de los dos. De esto, en primer lugar se comparan los dos primeras variables
auxiliares y al obtener el mayor de los dos únicamente se va comparando la siguiente
variable auxiliar hasta llegar al final. A partir de la segunda evaluación, el número mayor
va guardándose en accb y en acc se carga el nuevo valor a comparar con el máximo
obtenido anteriormente. El resultado se guarda en una variable temporal que después es
recuperada al regresar de la rutina.
El proceso para la evaluación de las reglas restantes para los conjuntos difusos CE, PQ y
PG asociados a la variable de salida mpex,, es similar, utilizado instrucciones similares. Antes
de entrar a un grupo de reglas para asignar membresía a cada uno de los conjuntos difusos
de salida, se inicializan a cero las variables auxiliares utilizadas en la rutina para obtener el
máximo de 8 números (listado 5.5).
54
5.5 PROGRAMACIÓN DE LA AGREGACIÓN Y DESDIFUSIFICACIÓN EN
EL DSP
En esta etapa se hace un barrido desde el límite inferior hasta el límite superior del universo
de la variable de salida mx que comprende el rango -0.02 m~ 0.04. Esto implica que
en esta etapa, al igual que en las anteriores, se deben utilizar números fraccionarios cuestión
que se determinó evitar desde el inicio del programa.
Como primer punto, los valores de mpMX, son fraccionarios por lo que es necesario hacer un
corrimiento de punto de tal frmna que podamos expresarlo en una mantisa entera y un
exponente igualmente entero. Sin embargo, el corrimiento del punto no puede hacerse en
forma arbitraria, si no que se debe mantener la compatibilidad con los resultados de la
evaluación de reglas, ya que éstos son utilizados en esta etapa.
Las líneas del listado 5.6 que pueden ayudar a determinar el formato de mp, son las
mostradas en las ecuaciones 5.6 y 5.7. El valor de auxagrega es el mínimo de auxz y CE
(Ec 5.7).
az =l10O*m+ Ec 5.6
De la ecuación 5.6 se puede ver que el único valor que se puede modificar por ser
fraccionario es m (en el programa en C++ y en el del DSP, se utiliza el símbolo m en lugar
de me).Parapoder realizar la suma los sumandos deben tener el mismo exponente, por lo
55
que al modificar el formato de m también se debe modificar el formato del número 1 de la
expresión.
Sabiendo que el exponente resultante debe ser e 4se puede hacer que el exponente de m
sea e =-4 recorriendo el punto hacia la derecha cuatro posiciones al igual que para el
número 1 de la expresión. Con esto se obtiene la ecuación 5.8
El exponente resultante de la ecuación 5.8 es e =-4 con lo que el valor de auxz ya puede
utilizarse en la ecuación 5.7 y auxagrega tendrá como exponente resultante e =-4.
auy=(5*m100e4+5O-
auxyagrega = in(auxy, PQ
0.01 < m 0.03 1Ooe-4 <m 300e-4 auxz =(50*(m*10000)e-4)- 5000e -4
auxzagrega = min(auxz, PG)
agrega = max( auxyagrega,[Link])
56
Comparando con el valor de discretización que en lenguaje C++ puede ser definido con el
usuario, debido a las consideraciones hechas, el máximo valor de discretización que se
puede obtener es 600 incrementado en uno el valor de m cada por cada ciclo de agregación
hasta haber recorrido todo el universo de m,, por lo que el valor de discretización se
mantendrá constante a 600 puntos.
Como primer paso para la etapa de agregación, se debe determinar en qué intervalo se
encuentra el valor m. Este proceso se realiza como en la etapa de difusificación y pede
tomarse como base el listado 5.2.
En el listado 5.7 se muestra parte de la etapa de agregación que corresponde al rango -100e-
4 < m • 000e-4 y que contiene a las ecuaciones de agregación. Se observa que nuevamente
se utilizan las instrucciones CRGT y CRLT para poder obtener los mínimos y máximos
según sea el caso, además de las instrucciones de multiplicación y suma.
m2:
splk #2710Oh,cte ;10000
It m_-m ;carga al treg el valor m
mpy #Off9ch ;multiplica a m por -100
pac ;guarda el resultado en el acc:
sacl mn-auxy ;guarda el el acc en auxy
sacb ;guarda el auxy en accb
lacc m--np ;carga el valor de np en acc
crIt ;obtiene el mínimo de acc y accb
sacl m--auxya ;guarda el min(auxy,np) en auxya
It mLm ;carga al treg el valor m
mpy #64h ;multiplica a m por 100
pac ;guarda el resultado en el acc
add cte ;le suma 10000 al acc:
sací m_--auxz ;guarda el el acc en auxz
sacb ;guarda el auxz en accb
lacc m_-ce ;carga el valor de ce en acc
crIt ;obtiene el mínimo de acc y accb
sacl m_-auxza ;guarda el mín(auxz,ce) en auxza
lacc nmauxya
sacb ;guarda auxya en accb
lacc m_-auxza ;carga auxza en acc
crgt: ;obtiene el máximo de acc: y accb
sacl m--agr ;guarda el max(auxyaauxza> en agr
b oper ;salta a operaciones para num y den
Listado 5.7.- Operaciones de agregaciónpara el intervalo 100e-4 <m •0O0e-4.
El resultado de la agregación se almacena para cada ciclo en la variable agr (denominada
agrega en el programa hecho en C++) ya que se utiliza para obtener la respuesta de salida
del controlador.
57
Después de incrementar m en la unidad y realizar las operaciones de agregación de acuerdo
al intervalo establecido, es posible formar el numerador (num) y denominador (den) que
son utilizados para encontrar la salida del controlador difuso recordando que el método
usado para este fin es el del centro de gravedad (cog). Las ecuaciones 5.9 y 5. 10 se utilizan
para obtener los valores de num y den respectivamente.
oper:
It m-agr ;carga m--agr a TREGO
mpy mmn ;multiplica (magr * mrm)
pac ;carga el resultado en acc
58
El listado 5.8 muestra la programación en ensamblador para la formación de num y den. Es
necesario auxiliarse de una rutina llamada div32 para realizar el ajuste indicado en la
ecuación 5.1 1. Esta rutina necesita dos parámetros a y b indicados en la ecuación 5.12
donde a es el numerador, b el denominador y c el cociente de la división.
Al terminar el ciclo en el cual se han recorrido todos los valores de m y una vez formados
num y den, se procede a concluir la difusificación utilizando la ecuación 5.13.
a Ec 5.12
b
La rutina div32 realiza divisiones enteras. Esto significa que el valor de a de la ecuación
5.12 debe ser mayor en magnitud al valor de b. Con base en lo anterior, la rutina div32 no
se podría usar si se desea obtener el valor de cog. Para reutilizar la rutina, en vez de obtener
el valor de cog y sabiendo que num es mayor que den, invertimos la operación para obtener
el inverso del valor de cog como lo muestra la ecuación 5.14.
cog = en.1
numEc51
finc-ag:
lacc mdenhi, 16 ;carga denominador en A
or mdenlo
sacl malo
sach mahi
lacc rm_nurrhi,16 ;carga numerador en B
or mnumio
bcnd zero,eq
b nzero
zero:
splk #0000h,m-cogla
splk #0000h,rmcogh¡
b end
nzero:
sacl mblo
sach mbh¡
59
Con esto, el resultado entregado por el programa de control implantado en el DSP es el
inverso del valor de cog (Ec 5.14). Por último, debido a la estructura de la rutina div32, está
pensada para realizar divisiones enteras de 32 bits y el resultado de la ecuación 5.14 por lo
tanto puede ser de 32 bits. En el listado 5.9 se muestra como se obtiene el inverso de cog
utilizando num y den.
5.6 REFERENCIAS
60
-~ ~.CAPÍTULO6
> *1 RESULTADOS Y
04 ~~CONCLUSIONES
6.1 INTRODUCCION
En los capítulos 4 y 5, se presentó la programación del algoritmo de control en C++ y en el
ensamblador del DSP respectivamente; Sin embargo, para poder comprobar el programa en
el DSP, fue necesario utilizar una tarjeta de desarrollo.
61
.lst en el cual se da un reporte de número de líneas así como el código de maquina que se
generó con los nemónicos utilizados en el archivo asm.
Los buses de datos y direcciones pueden utilizarse externamente gracias a que en la tarjeta
existen headers interconectados a los pines del DSP y así poder utilizarlos externamente.
Los puertos seriales así como las señales de control están disponibles en los headers.
6.2.3 MEMORIA
La memoria de programa y datos es manejada en forma distinta a la mencionada en el
manual de referencia del DSP; esto es, al ser una tarjeta de desarrollo, la memoria debe
tener un espacio reservado para el programa monitor y otro espacio reservado para el
programa de usuario.
Todos los registros internos del DSP son redireccionados a nuevas posiciones por lo que se
debe tener cuidado por ejemplo, en el uso de vectores de interrupción y registros de función
especial. Con la ayuda de las directivas del compilador, no es tan necesario definir nuevas
direcciones para los vectores de interrupción o para la selección de la página de datos
utilizada. En la figura 6.1 se muestra el mapa de memoria de la tarjeta DSK.
62
PROGRAMA DATOS
OOOOh OOOOh REGISTROS
MEMORIA DE MAPEADOS
ARRANQUE EN MEMORIA
O800h OO6Oh
VECTORES DE RESERVADO
INTERRUPCIÓN PARA KiERNEL
0840h OO8Oh
KERNEL DEL RESERVADO
DEPURADOR
DE PROGRAMA OlOOh
RO
0980h 0300h
Rl1
PROGRAMA DE
USUAIO 0500h
RESERVADO
2COOh 0800h
RESERVA-DO
POR EL
DEPURADOR
ESPACIO DE
EXTERNO PROGRAMA
0980h
ESPACIO DE
USUARIO
A cada uno de los conjuntos difusos asociados a las variables de entrada se le asignó una
posición de memoria para almacenar las activaciones de éstos después de la difusificación.
Se utilizó el ejecutable dsk5d para depurar la ejecución del programa; gracias a esto se
puede visualizar el contenido de las localidades de memoria que fueron asignados a los
conjuntos asociados a las variables de entrada y así verificar los resultados o corregir
instrucciones para poder obtener el resultado deseado.
63
ne= -1.0E+-02
VALUR- 0
E3 GN Uq9 PN Dl p' GR FO NR5 GD 11 Nf GE Po FG N.4Jm ON OG %SMR
T
2 090 S 00 0 0 0 0 0 0 00 100 0 0%
TO 1 0 0 0 0 0 0 0 () 0 000%0
0 0 0 0.625 0 375 O 0 0 0 0 625 0.375 0 11661 153 905 0 007634
6 T0E.O0 O 0 0 0 6153 W 0 -. 06153 0 346 0 1197 154 732 0 007737 14
[Link]'.03 DSP 1 0 0 0 0 0 0301 0699 0 0 0 0 0301 0699 53371 231 559 0023256 48a5%
TC 1 0 10 10 10 0 0.3003 06997 0 0 O 0 003003 06997 4.7696 195.1414 0024442
300E+04
- SP
TC 1 0
0*
0 0 0
0
0 0
W0
78
077222
0
0
2
T
0 - -
o o.s 7559 226 3 0027027
01 0.777 48991 172490280
8 ooE+06 DP 1 o 10 a W o í 07
0719021 761 68 0167
TC
1 0 10 0 0 0 0 022099 0 0 09900 274 16660131
Tabla 6.].- Comparaciónde los resultados obtenidos con el programa implantado en el dsp y el
programaen C++ con ne -IOOOe-I.
ne= -[Link]+01
VALRORIGEN GN MN9 PN4 II Rp GR PC N GO Un NP GE FO PG NW. DEN CG %ERROR
2 00 P 02625 07375 0 0 0 1 0 0 0 0
0.7375 0 0 0 0 93.1075 00%
TC 0253107468 0 0 0 1 0 0 0 007468 0 0 0 0 93585 0 00
6 O-0DSP 02625 07375 0 0 0 0625 0375 00 0 0 0 0625 0375 0 11661 153905 0007634 34
TG 02531 07468 0 0 00 .6153 36 0 0 0 0 0653 >3846 0 1197 154732 007737
700OE.0 DSP 02625 07375. 0 0 0 0 0301 0699 0 ,0 0 0
.0 301 0699 53371 231559 0023256 5
TG 0.253107468 0 0 0 0 03003 06997 0 10 0 0
03003 0.69974.7696 1951414 0024442
3 0 DSP 022 7375 0 0 0 0 0 0.78 02 0 0 0 07375 54638 215 7275 0027027? .6
TG -021 746800
0 0 0 0 077022 0 0 0 7468 47508 1679001 0028409
DP 02625 07375 0 0 0 0 0o 02 07 00 006507375 55886 238 625 00238
TG 0253107468 0 0 0 0 0 0 .0 77 0 053 7468 49496 196421 0025199--
Tabla 6.2.- Comparaciónde los resultados obtenidos con el programa implantado en el dsp y el
programaen C++ con ne -700e-1.
ne= -5OOE+01
VALOR OR G14 1.94 P 13 R' GCR FC NR GD 11 N.P GO FO FO DEN.4
02 ODG %ER
2 00E00
' O 0 1 0 0 O 0 1 0 0 0 100 0 000%
TG 0 1 0 0 01 0 0 0 0 0 1 0 0 0 100 0
6 O D0
SP 0 1 0 0 0 0625 0375 0 0 0 0 0625 0375 0 11661 153 905 0007634 134%
TG 0 1 0 0 0 06153 03846 0 0 0 0 0.6153 03846 0 1197 154 732 0007737
7 O+3DSP 0 1 0 0 0 0 0301 0699 0 0 0 0 0301 0699 53371 231559 002326 485%
TG 0 0 0 0 0 03003 0 6997 01 0 0 01 030031 0 6997 4 76961195 1414 0 024442
3000E.04 DSP 0 1 0 0 0 00 0078 0 22 0 0 00785 575592630027027746%
TG 0 1 0 0o o 0 0 0 7777 0 2222~ 0 0 0 00 777 4 8991 172 4493 0 02849
800OE«0 DSP 0 1 0 0 0 0 00 0 021 0 79 a 0 00 0 79 5823 228 735 0027027 5 10%
TG 0 1 0 0 0 0 1 0 0 0 202. 0 79791 0 0 0 0 79791 4 9933 175 31685 0 02848
64
Una vez depurado el programa de tal forma que se obtuvieran resultados coherentes, se
realizó la comparación de los resultados obtenidos en el DSP con respecto al programa
patrón realizado en C++ y que fue descrito en el capítulo 4. Todos los resultados obtenidos
están concentrados de la tabla 6.1 a la tabla 6.7.
En esta etapa se utilizan rutinas de máximos y mínimos; para cada una de las rutinas es
necesario reservar espacio en memoria para guardar cada evaluación de mínimos y
posteriormente de máximos. El resultado obtenido en las operaciones de máximos es
guardado en localidades de memoria asignados conjuntos difusos asociados a la variable
de salida mpexI para guardar la activación que puedan tener.
ne= 2 OOE+01
VAOT W GN k14 RN ID 04
CR Ml
N GD Ti NP CE O PG 39
DEN&I 02< %E80R
2 OOE« 0 5 Dsp1,5 0 0 O 0 0 0 0 05 0 0 0 75 0 0
TC 0 0487105128 0 0 1 0 0 0 0 0 05128 0 0 0 762637 0 00
6 00-ffl
DSp 0 05 0.5 0 0 0625 0375 0 0 0 0 05 0375 0 11661 142
97 0008197
00.0TC 0 0487105128 0 0 06153 03846 0 0 0 0 05128 03846 0 1197 145
7911 0008211 07
70OOE.03[SP 0 05 05 0 0 0 0301 060 0 0 0 0 05 .0 5 39784 18775 0021277- 8
TC 0 0471 05128 O 0 0 03003 0697 0 0 0 05128 04871 39164 186
6065 002098 1 %
OO
- DP
39 0 05 05 0 0 0 0 078 022 0 0 0 0.5 05L 39784 75 0 021277-1
197 T
3000.04
00 0 048 51261 0 0 0 0 0777702222 0 0 0 05128 04871 396 866 008
8.0- p 0 0 0 0021 079 0 10 05 0 39 17750 127 138%
800E.06
TO 0 ~0
51281 0 1 0 0 0 0 0 0202 07979 0 0 05128047 396 18050298
Tabla 6.4. - Comparación de los resultados obtenidos con e/programa implantado en el dsp y el
programaen C++ con ne = -200e-J.
ne= -3 OOE-01
T GN kfi PN I p) CR
4 pD HR1GO n Nl
P GE O PG
R3 NU DEN ODG %EFMR
TC 00 03 0 70 1 0 0 0 0 0 07 0 0 0 91 0
6O0 OP 0 0 03 07 0 0 625 03 75000 00 625 03 0 0.9797 141435 0006944 %
TC 0 0 03 07 0 0 6153 0 346 0 0 0 0 06153 03 0 0 9885 14752 b072
7 O <0SP 0 0 03 07 0 0 0 301069900 00 699 0.3 0 0.9797 146 439 0006711 53
700.0T 0 0 3 07 0 0 0 3003 0699700 00 6997 03 10 0988f51146 4823 0006747
3.~
'TC
0
0
~0 03
0 03
07
07
0 0 0
0
0.78 0.22
07777 02222
0 0 0 699 0.3 0 0_77 14_3_0O71 3
-0 0 0 06997 03 0 0988 146 423 0006747 03
800E.0 CSP 0 10 03 07 0 0 0 0 021 79 0 69 03 0 09797 146_439 0006711 - 3
T0 0 0 03 07 00 0 0 _0202 9 79791 0 10 69971 03 0 09885 1464823 0006747 03
Tabla 6.5.- Comparación de los resultados obtenidos con el/programa implantado en el dsp y el
programa en C++ con ne = -300e-3.
65
Todos los resultados obtenidos en la evaluación de reglas están concentrados de la tabla
6.1 a la tabla 6.7. Al igual que en la difusificación, se realizó la compararon de los
resultados obtenidos en el DSP con el programa patrón en C++.
ne= 6 50E-01
VALO
OWHGNl MN' PN ID FP CR PC NR1GD TI P CE PO PG NIM EN CO %ER
O0
-. Dsp 0 O 035 0 65 1 O 0 0 O 0 65 0.35 0 0 -11426 144.2 _.-000794 0%
T1 0 0 0.35 0.65 1 0 0 0 5 031
0 O -1.149 144.2003 -0 00795
[Link] 00 0 0.35 0.65 0625 0375 00 0 0 625 0.35 0 0 -1 098 140.78 -0 00781
600E+OC- 7
___~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TC 0 0 0 0 35 0 65 0.6153, 0.3840 0 0 0 0 6153 0.35 0 0 1.0843 139 4486 -0 00778 -07
7 O+3OP 0 0 0.35 065 0 0.301 06990 0 0.65 035 0 0 -1.1426 144.2 -0 00794022
TO 0 0 0.35 0.65 0 03003 0 6997 0 0 0.65 0 35 0 0 -1.1469 144 2003 -0.00795
- sp 0 0 0 0.35 0.65 0 0 0.78 0.22 0 0.65 0.35 0 0 -11426 144.2 -0 00794
3 00E.G-94.03-.09 0 22%
10 0 0 0 0351065 0 1 0 0.7777 0.2222 0 0.65 0.35 0 0 -1.1469 1420
80E06Dp0 0 0 0.35 0.65 0 0 01 0.21 10.79 0.65 035 0 0 -1 142614 -079
T1 0 0 0.35 0.65 0 0 0 10220791 . 0 10 -1 1469 144.2003-0007925
Tabla 6.6.- Comparación de los resultados obteni¡dos con el programa implantado en el dsp y el
programaen C++ con ne = 650e-3.
ne= [Link]+0
VALO
OWHGN III R 1 D
PN ' CR 1 C NIR GO Ti NP CE PO PG N DEN COG %R
Una vez que se tuvo control sobre el número de ciclos de agregación y desdifusificación, se
siguió un esquema de programación similar al realizado en la difusificación, esto es, el
universo de la variable de salida mpext se divide en intervalos y se comprueba a que
intervalo pertenece el valor de m actual el cual se incrementa por cada ciclo; una vez
determinado el intervalo, se realizan las operaciones correspondientes.
66
de la variable de salida me¡se divide el numerador entre el denominador para obtener el
valor del centro de gravedad (COG).
De la figura 6.2 a la figura 6.8 se muestran las graficas de comparación de resultados entre
los valores obtenidos en el DSP y el programa en C++ dado un valor de entrada para ne y
para 1. Recordando que el DSP entrega como resultado COG-1, en estas gráficas se ofrece
el inverso del resultado dado por el DSP.
0.03 - - - - - - --
0.027
0.024----
0.021
0.018
0.015 CO
0.012
0.009
0.006 M
0.003
O
0.03 - --- - - - - -_ _
0.027
0.024
0.021
0.018
0.015*CG
0.012
0.009
0.006
0.003
67
COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++
0.033-
0.03-
0.027
0.024
0.02 1
0.018 _ __
0.015 nO
0.012
0.009
0.006
0.003
0.033
0.03
0.027
0.024-
0.021
0.018 CO
0.015-
0.012-
0.009
0.006o= M
0.003
68
COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++
0.008-
0.007-
0.006-
0.005-
0.004 mO
0.003
0.002
0.001
0.008-
0.007-
0.006
0.005
0.004 CO
0.003
0.002
0.001
69
COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y C++
-0.0126
-0.0124
-0.012
~ ~ ~
-0.012 ~ ~ ~ ~ ~ ~ mO
-0.0116
-0.01146
-0.0114
Se debe considerar que no todas las instrucciones del DSP se ejecutan en tiempo iguales.
Existen dos tipos de instrucciones: las que son de 16 bits y las que son de 32 bits; el tiempo
de ejecución puede variar entre 35 y 50 ns. El programa fuente (con extensión asm) tiene
1342 líneas de las cuales no todas son instrucciones ya que incluye comentarios.
Utilizando el depurador dsk5d, se puede encontrar que el programa de control implantado
en el DSP ocupa un poco más de 1 Kb (1108 bytes) de espacio en el DSP.
Esto último no significa que existan 1108 instrucciones ya que algunas ocupan 32 bits y
otras 16 bits. Como aclaración, recordando que el DSP es de una arquitectura de 16 bits, al
hacer referencia a byte, se está hablando de 16 bits y no de 8 bits. Así que, las
instrucciones de 32 bits ocupan 2 bytes y las instrucciones de 16 bits ocupan 1 byte. Se hizo
la cuenta aproximada de que en total el programa consta de 970 instrucciones.
70
6.7 CONCLUSIONES Y COMENTARIOS FINALES
De las tablas mostradas en el apartado 6.5 de este capítulo, se puede ver que existe un error
máximo de 5% y un error mínimo de -1.5% con respecto al programa en C++ que fue
utilizado como patrón de referencia. Lo deseable es que existiera 0% de error, pero
debemos tomar en cuenta de que el método utilizado y las adecuaciones hechas al programa
original utilizan redondeo como base de funcionamiento. El redondeo en las ecuaciones de
difusificación ocasiona el error generado en la etapa de agregación y desdifusificación. Se
observa también que el error se acentúa en la combinación de los tres primeros conjuntos
difusos asociados a la variable de entrada ne (CR, PC y NR) con los conjuntos difusos
asociados a la variable de entrada T; Esto posiblemente se deba al un error en el redondeo
de la ecuación 5.5 que interviene en la difusificación para estos tres conjuntos difusos ya
que en la ecuación, el factor 259e-4 pudo haber sido redondeado a 26e-3 y no a 25e-3
como se hizo en dicha ecuación.
Otro aspecto importante es el hecho de haber creado una rutina de división entera de 32
bits. El DSP tiene la capacidad de hacer divisiones de 16 bits en tan solo 16 ciclos [DSK96
Pp. 7-27/7-30], pero en la formación del denominador (den) se tienen números mayores a
los 16 bits. Por ello, y para superar esta limitante, se optó por crear una rutina de división
acorde a los números que se manejan. Es obvio que el tiempo de ejecución puede llegar a
ser muchísimo mas grande que la división que ofrece el DSP por hardware. Referente a
esto, ya se explicó que para este programa en particular, el numerador siempre es menor
que el denominador, lo que ocasionaría divisiones fraccionarias. Por ello, el programa
entrega el inverso de COG, para continuar con el esquema de manejar de punto flotante
basándose en operaciones de tipo entero.
En cuanto a los exponentes, es claro que el manejo de éstos se hizo en forma implícita. En
el programa del DSP, se reservó espacio en memoria para los exponentes aunque estos no
se utilicen más que al principio de todo el proceso (etapa de difusificación). Gracias al
análisis realizado, las operaciones se reducen a sumas, restas y multiplicaciones de números
enteros lo que facilita la programación del mismo cumpliendo así el objetivo de manejar
71
números fraccionarios pero con operaciones de tipo entero. Obviamente, puede perderse
exactitud de resultados, pero eso se podría compensar utilizando operaciones de 32 bits en
lugar de operaciones de 16 bits lo cual implicaría mayor uso en memoria de programa y
datos, mayor complejidad de operaciones así como mayor tiempo de ejecución.
6.8 REFERENCIAS
[TMS96] Texas Instruments, TMS32OC5x DSP Starter Kit User's Guide, 1996.