0% encontró este documento útil (0 votos)
179 vistas78 páginas

Control Difuso en DSP para Reactores TRIGA

Este documento presenta una tesis profesional sobre la implantación de algoritmos de control difuso en DSPs. El resumen describe el objetivo de regular la potencia neutrónica en un modelo de reactor nuclear usando un algoritmo de control difuso implementado en lenguaje ensamblador en un sistema basado en DSP. El documento contiene 6 capítulos que describen la lógica difusa, la arquitectura del DSP, el modelo del reactor, el algoritmo de control en C++, la implementación en ensamblador y los resultados obtenidos.

Cargado por

Manuel Guerra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
179 vistas78 páginas

Control Difuso en DSP para Reactores TRIGA

Este documento presenta una tesis profesional sobre la implantación de algoritmos de control difuso en DSPs. El resumen describe el objetivo de regular la potencia neutrónica en un modelo de reactor nuclear usando un algoritmo de control difuso implementado en lenguaje ensamblador en un sistema basado en DSP. El documento contiene 6 capítulos que describen la lógica difusa, la arquitectura del DSP, el modelo del reactor, el algoritmo de control en C++, la implementación en ensamblador y los resultados obtenidos.

Cargado por

Manuel Guerra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

INSTITUTO TECNOLÓGICO DE TOLUCA

MX0400095

IMPLANTACIÓN DE ALGORITMOS DE
CONTROL DIFUSO EN DSPS

OPCIÓN
TESIS PROFESIONAL

QUE PARA OBTENER EL TÍTULO DE:


INGENIERO ELECTRÓNICO
PRESENTA:
BENJAMÍN PÉREZ CLAVEL
No. DE CONTROL 97270390

ASESOR:
DR. JORGE SAMUEL BENÍTEZ READ

METEPEC, MÉXICO, JUNIO DE 2003


RESUMEN
En este trabajo de tesis se presentan: a) Las características y componentes principales
utilizados en un sistema electrónico basado en un DSP orientado a aplicaciones de control
de procesos, b) La descripción de un algoritmo de control difuso cuyo objetivo es la
regulación de potencia neutrónica en un modelo de la cinética puntual de un reactor nuclear
de investigación tipo TRIGA, y c) La implantación en lenguaje ensamblador y ejecución en
tiempo real del algoritmo de control en el sistema basado en un DSP.

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.

Una breve descripción de los temas presentados en esta tesis se da a continuación. En el


capítulo 1 se presenta una descripción general de la lógica difusa y algunas de sus
aplicaciones en la industria. También se presentan las características principales de un DSP
que lo hacen distinto de un microcontrolador o un microprocesador de propósito general.

En el capitulo 2 se dan detalles de la arquitectura interna del DSP TMS32OC50 de Texas


Instruments que en el manual de usuario del mismo no son explicados con detalle. Este
capítulo tiene como objetivo entender el hardware interno del DSP que es utilizado para
realizar el programa en lenguaje ensamblador del algoritmo de control difuso para la
regulación de potencia del reactor Triga presentado en el capítulo cinco.

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.

El capítulo 4 explica la programación en lenguaje C++ del controlador difuso para la


regulación de potencia. Este programa se basa en un algoritmo desarrollado con
anterioridad en ambiente Matlab. El programa generado en C++ se utiliza como patrón de
referencia para poder evaluar los resultados obtenidos con el algoritmo implantado en el
DSP.

En el capítulo 5 se explican las modificaciones numéricas realizadas para poder manipular


la notación de punto flotante con operaciones entre números enteros. También se describe
paso a paso el desarrollo del programa en lenguaje ensamblador del controlador difuso
para la regulación de potencia del reactor Triga.

En el capítulo 6 se muestran los resultados obtenidos con el algoritmo de control


implantado en el DSP. Se utiliza el programa en C++ descrito en el capítulo cuatro para
poder realizar la comparación de resultados generados exclusivamente por las etapas que
conforman el controlador difuso. Como ya se mencionó, posterior-mente se integrará este
controlador a una PC que simulará el comportamiento del reactor.
ÍNDICE
Pág
RESUMEN--- - - - - - --- - - ---- -- - - - - - - - - - --- - - - - - - - - - - - -- 1

CAPÍTULO 1 INTRODUCCIÓN1

1.1 DISPOSITIVOS DE CONTROL ------------------------------------ - - 1


1.1.1 ELECTRÓNICA PREVIA A LA APARICIÓN DE
LOS CIRCUITOS NTEGRADOS------------------------------ - 1
1.1.2 LOS MICROPROCESADORES-------------------------------- - ~2
1.1.3 LOS MICROCONTROLADORES ---------------------- ------- ~4 -

1.1.4 LOS DSPs --------- ------------------------------------ 4


[Link] DIFERENCIAS DE UN DSP RESPECTO A UN
MICROPROCESADOR DE PROPÓSITO GENERAL----------- 5
1.2 LOGICA DIFUSA COMO HERRAMIENTA DE CONTROL ----------------- - 6
1.2.1 LA LÓGICA --------------------------------------------- 6
1.2.2 SURGIMIENTO DE LA LÓGICA DIFUSA - ----- --------- 7
1.2.3 DIFERENCIA ENTRE LÓGICA BOOLEANA Y LÓGICA DIFUSA --------- 8
1.2.4 APLICACIONES DE LA LÓGICA DIFUSA ----------------------- - 8
1.3 REFERENCIAS --------------------------------------------- - - 10

CAPÍTULO 2 ARQUITECTURA DEL DSP TMS32OC5O

2.1 INTRODUCCIÓN ------------------------------- - ----- 1


2.2 CONTROL DE PROGRAMA-------------------------------------- - - 11
2.2.1 CONTADOR DE PROGRAMA (PC)---------------------------- - 11
2.2.2 HARDWARE DEL ESTACK (PILA) - ----------------- 12
2.2.3 GENERACIÓN DE DIRECCIÓN MEMORIA DE PROGRAMA----------- 12
2.3 REGISTROS DE ESTADO Y CONTROL ------------------------------ - - 13
2.3.1 PROCESSOR MODE STATUS REGISTER (PMST) ----------------- - 13
2.3.2 REGISTROS DE ESTADO (STO YSTI) - ---------------- 13
2.4 MEMORIA --------------------------------- -------------- 14
2.5 MODOS DE DIRECCIONAMIENTO ----------------------------------- - - 15
2.5.1 DIRECCIONAMIENTO DIRECTO -------------------------------- 15
Pág.

2.5.2 DIRECCIONAMIENTO INDIRECTO - ----------------- 16


2.5.3 DIRECCIONAMIENTO INMEDIATO ----------------- - ------ 17
[Link] DIRiECCIONAMIENTO INMEDIATO DE TIPO SHORT-----------17
[Link] DIRECCIONAMIENTO INMEDIATO DE TIPO LONG --------- 17
2.6 PERIFÉRICOS INTERNOS--------------------------------------- - - 18
2.7 TIMER (TEMPORIZADOR)----------------------------------------- 19
2.7.1 REGISTROS DEL TIMER ---------------------------------- - 19
2.7.2 OPERACIÓN DEL TIMER - - - 9
2.8 INTERRUPCIONES ------------------------------------- - --------- 20
2.8.1 REGISTRO IFR.------------------------------------------- 20
2.8.2 REGISTRO IMR ------------------------------------------- 20
2.8.3 LOCALIDADES DE VECTORES DE INTERRUPCIÓN-----------------2 1
2.9 DESCRIPCIÓN DE LOS PINES DEL DSP TMS320C50 ------------------------ 21
2.10 REFERENCIAS --------------------------------------------- - - 22

CAPÍTULO 3 MODELO DE LA CINÉTICA PUNTUAL


DEL REACTOR TRI1GA MARK III 23

3.1 INTRODUCCION ----------------------------- ---- -----


- 23
3.2 REACTORES NUCLEARES -------------------------------------- - - 23
3.3 CONCEPTOS BÁSICOS----------------------------------------- - - 25
3.4 COMPORTAMIENTO DINAMICO---------------------------------- - - 26
3.4.1 ECUACIONES DINÁMICAS--------------------------------- - 26
3.4.2 ECUACIONES DE CINÉTICA PUNTUAL------------------------- - 27
3.4.3 ECUACIONES DE RETROALIMENTACIÓN DE LA REACTIVIDAD---------28
3.5 MODELO PUNTUAL DEL REACTOR TRIGA MARK III ---------------------- 29
3.6 REFERENCIAS ------------------------------------------------ 29

CAPÍTULO 4 ALGORITMO DIFUSO PARA EL CONTROL


DE POTENCIA EN UN REACTOR TRIGA 31

4.1 INTRODUCCION-----------------------------------------------3 1
Pág.

4.2 CONJUNTOS DIFUSOS ASOCIADOS AL SISTEMA ------------------------ 31


4.3 [Link]ÓN DE LA DIFUSIFICACIÓN-----------------------------33
4.4 PROGRAMACIÓN DE LA EVALUACIÓN DE REGLAS----------------------38
4.5 PROGRAMACIÓN DE LA AGREGACIÓN Y DESDIFUSIFICACIÓN------------ 40
4.6 REFERENCIAS ---------------------------------------- ~-------44

CAPÍTULO 5 IMPLANTACIÓN DEL ALGORITMO


DIFUSO DE CONTROL EN EL DSP 45

5.1 INTRODUCCIÓN ----------------------------- ------------------ 45


5.2 FORMATO NUMÉRICO UTILIZADO EN EL PROGRAMA DEL DSP ------------- 45
5.3 PROGRAMACIÓN DE LA DIFUSIFICACIÓN EN EL DSP --------------------- 49
5.4 PROGRAMACIÓN DE LA EVALUACIÓN DE REGLAS EN EL DSP--------------53
5.5 PROGRAMACIÓN DE LA AGREGACIÓN Y
DESDIFUSIFICACIÓN EN EL DSP -------------------------- ----------- -55
5.6 REFERENCIAS ----------------------------------------------- 60

CAPÍTULO 6 RESULTADOS Y CONCLUSIONES 61

6.1 INTRODUCCIÓN - --- ---------------------------------


------- -- 61

6.2 TARJETA DE DESARROLLO TMS32OC5X DSK STARTER KIT----------------61


6.2.1 SOFTWARE ASOCIADO A LA TARJETA DSK - ------------- 61
6.2.2 CARACTERíSTICAS ADICIONALES DE LA TARJETA DSK----------62
6.2.3 MEMORIA ------------------------------------------------ 62
6.3 PRUEBAS DE DIFUSIFICACIÓN---------~-------------------------- - - 63
6.4 PRUEBAS DE EVALUACIÓN DE REGLAS ---------------- -------------- 65
6.5 PRUEBAS DE AGREGACIÓN Y DESDIFUSIFICACIÓN----------------------- 66
6.6 TIEMPO DE EJECUCIÓN DEL PROGRAMA EN EL DSP------------------------ 70
6.7 CONCLUSIONES Y COMENTARIOS FINALES ------------------------- - - 71
6.8 REFERENCIAS ------------------------------------ ----------
- 72
CAPÍTULO1

INTRODUCCIÓN

1.1 DISPOSITIVOS DE CONTROL


Durante el paso de la historia de la humanidad, encontramos que el hombre siempre ha
deseado tener el control de todo lo que le rodea; esto por supuesto, lo ha logrado en partes,
ya que si bien ha podido controlar algunos fenómenos fsicos, en algunos otros ha tenido
que ser paciente para apegarse a lo que la misma naturaleza le ha impuesto.

La inquietud de muchos investigadores ha llevado a la construcción de dispositivos


electrónicos que quizás hace 100 años no se hubiese ni siquiera imaginado. El desarrollo
de la industria de los semiconductores ha sido bastante considerable en los últimos años;
esto trae como consecuencia la invención de dispositivos electrónicos cada vez más
sofisticados, rápidos y pequeños.

1.1.1 ELECTRÓNICA PREVIA A LA APARICIÓN DE LOS CIRCUITOS


INTEGRADOS
Resulta obvio decir que antes de que se llegaran a construir los bulbos, los transistores y
los chips electrónicos actuales, tuvo que haber una base sobre la cual diseñarlos. Antes de
que la electrónica se desarrollara hasta donde está ahora, la mayoría de sistemas de control
en una industria estaban basados en redes de relevadores. Estos relevadores se activaban
por pulsos eléctricos de voltajes mucho mayores a los niveles lógicos actuales. Es de
esperarse que el espacio ocupado por estos sistemas de control fuera bastante grande.

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.

1.1.2 LOS MICROPROCESADORES


Desde la aparición de los primeros microprocesadores en los inicios de la década de los
setentas, todas las áreas científicas y tecnológicas han experimentado su más acelerado
desarrollo en la historia de la humanidad. El bajo costo, confiabilidad y reducido espacio de
los sistemas digitales basados en microprocesadores les han posibilitado el incursionar en
aplicaciones que hasta antes de esa década se hallaban restringidas a sistemas de alto costo
y considerados de alta tecnología. Las industrias de la telecomunicación, automotriz,
control, aeronáutica, médica y de consumo casero, así como la educación, banca, y
empresas de servicios, son solo algunas de las áreas en las cuales el impacto de la
electrónica digital es más evidente, ya que lo palpamos en nuestro actuar cotidiano.

Un salto importante en la evolución de la electrónica y la computación lo introdujo el


microprocesador. Se trata de una unidad central de proceso contenida totalmente en un
circuito integrado. Comenzaba así la gran carrera en busca de lo más rápido y más pequeño;
rápidamente el mundo de la computadora empezó a ser accesible a pequeñas empresas e
incluso a nivel doméstico.
Se han desarrollado dos tipos de arquitecturas en cuanto a los microprocesadores:
arquitectura CISC y arquitectura RISC; el tipo de procesador depende de la forma de
procesar las instrucciones. Para entender mejor ambos conceptos, a continuación se
presenta la definición de ambos tipos de arquitectura [SITIO 1].

CISC: Es una abreviación de Complex Instruction Set Computer`. Se refiere a los


microprocesadores tradicionales que operan con grupos grandes de instrucciones de
procesador (lenguaje de máquina). Los microprocesadores INTEL 8xxx están dentro de
esta categoría (incluido el PENTIUM). Los procesadores CISC tienen un conjunto de
instrucciones complejas que por naturaleza, requieren varios a muchos ciclos para
completarse.

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:

* El encapsulado: es lo que rodea a la oblea de silicio en sí, para darle


consistencia, impedir su deterioro (por ejemplo por oxidación con el
aire) y permitir el enlace con los conectores externos que lo
acoplarán a su zócalo o a la placa base.
* La memoria caché: una memoria ultrarrápida que sirve al micro
para tener a mano ciertos datos que previsiblemente serán utilizados
en las siguientes operaciones sin tener que acudir a la memoria
RAM, reduciendo el tiempo de espera.
Es lo que se conoce como caché de primer nivel o Li; es decir, la
que está más cerca del micro, tanto que está encapsulada junto a él.
Todos los micros tipo Intel, desde el 486, tienen esta memoria,
también llamada caché interna.
* El coprocesador matemático: o, más correctamente, la FPU
(Floating Point Unit, Unidad de Punto Flotante). Parte del micro
especializado en esa clase de cálculos matemáticos; también puede
estar en el exterior del micro, en otro chip.
• El resto del micro: incluye la unidad de enteros, registros, unidad de
control y decodificador de instrucciones.

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.

Un microcontrolador es un circuito integrado programable que contiene todos los


componentes internos de un microprocesador. Se emplea para controlar el funcionamiento
de una tarea determinada y al ser de reducidas dimensiones suele ir incorporado al
dispositivo que gobierna. Al igual que un microprocesador, el microcontrolador necesita un
programa para en su caso controlar sus líneas de entrada salida.

Sería bueno identificar la principal diferencia entre un microcontrolador y un


microprocesador. Un microprocesador es un sistema abierto, esto es, se le pueden acoplar
dispositivos para obtener las características deseadas (Fig. 1.1-a).

Un microcontrolador es un sistema cerrado que contiene un computador completo y


prestaciones limitadas que no se pueden modificar (Fig. . 1-b) [SITIO31.

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.

Muchas veces, el uso de un microcontrolador o un microprocesador depende del sistema al


cual se va a controlar. La ventaja de un sistema basado en un microprocesador es que puede
tener prestaciones bastante elevadas tales como la velocidad, la cantidad de memoria,
puertos disponibles, manejo de datos. En cambio, un microcontrolador aunque no cuenta
con las mismas prestaciones de un microprocesador, tiene algunas otras ventajas tales como
el precio y la autonomía del sistema; muchas de las veces, los microcontroladores se
utilizan por que cuentan con lo "necesario" para poder hacer fncionar un sistema de
control.

1.1.4 LOS DSPs


En los 1960's se predijo que la inteligencia artificial revolucionaría el modo como los seres
humanos interactuarían con las computadoras y otras máquinas. Se creyó que para el fin del
siglo XX nosotros podríamos tener robots limpiando nuestras casas, computadoras
conduciendo nuestros autos, e interfaces de audio controlando el almacenaje y entrega de
información. Esto no sucedió así ya que aquellas tareas abstractas resultaron ser más
complicadas de lo esperado y aún más dificil de lograr con la lógica paso a paso proveída
por las computadoras digitales.

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.

[Link] DIFERENCIAS DE UN DSP RESPECTO A UN MICROPROCESADOR DE


PROPÓSITO GENERAL.
La diferencia esencial entre un DSP y un microprocesador es que un DSP tiene
características de diseño que soportan un alto desempeñio, repetibilidad en la ejecución de
tareas numéricamente intensivas. En contraste, los procesadores de propósito general (GPP)
o microcontroladores (MCU) no están especializados para una clase de aplicación
específica (en el caso de GPP), o ellos están diseñados para aplicaciones orientadas al
control (MCUs). Las características que aceleran el desempeño de los DSP incluyen:

Capacidad de ejecutar una mrultiplicación-acumulación en un ciclo de


instrucción (operación MAC) único: Algunos DSP de alto desempeño
tienen dos unidades multiplicadoras que les permite la ejecución de dos
MAC en paralelo por ciclo.
Modos de dirección especializado: Por ejemplo punteros de
direccionamiento con pre y post modificación, direccionamiento circular
(implementación de filtros digitales) y direccionamiento por bit invertido
(implementación de FF1).
Muchos DSP proveen varias configuraciones de memoria integrada y
periféricos para muchas aplicaciones: Los DSP generalmente tienen la
característica de una arquitectura que les permite múltiples accesos a
memoria, es decir, pueden ejecutar múltiples accesos a memoria por ciclo
de instrucción.
Control de ejecución especializado: Usualmente los DSP proveen
instrucciones de lazo que permiten lazos estables de repetición sin gastar
ciclos de instrucción adicionales en actualizar y verificar el contador de
lazo o para saltar de regreso al inicio del lazo.
Los procesadores DSP son conocidos por su conjunto de instrucciones
irregulares, que generalmente permiten que muchas operaciones sean
codificadas en una sola instrucción. Por ejemplo, un procesador que usa
instrucciones de 32 bits puede codificar dos sumas, dos multiplicaciones y
cuatro movimientos de datos de 16 bits en una instrucción única. En
general, los conjuntos de instrucciones de los DSP permiten movimientos
de datos en paralelo con operaciones aritméticas. Los GPP/MCU, a
diferencia, usualmente especifican una operación por instrucción.

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.

En el caso particular de algoritmos de control basados en la lógica difusa, el proceso de


obtención de los resultados en función de las entradas requiere de operaciones matemáticas
intensivas. Esto último, como ya se mencionó, es uno de los propósitos para los que fue
creado un DSP. De aquí el hecho de elegir a un DSP.

1.2 LGICA DIFUSA COMO HERRAMIENTA DE CONTROL


Cualquier dispositivo electrónico de control descrito anteriormente necesita de un programa
que le indique las operaciones a realizar. Sin un programa, un microprocesador,
microcontrolador o DSP es prácticamente inservible. Las técnicas de diseñio de programas
son muy variadas; sin embargo, cualquiera que sea la técnica utilizada debe llevar una
lógica bien establecida en todos sus procedimientos. Por lo general, siempre el primer paso
de un proceso de control es medir la o las variables que se desean controlar; como segundo
paso está el procesamiento de dichas mediciones y por último, después del procesamiento
obtener una salida que será enviada en la mayoría de los casos a un actuador.

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.

1.2.2 SURGIMIENTO DE LA LÓGICA DIFUSA


La lógica difusa es una lógica basada en la teoría de conjuntos difusos que posibilita imitar
el comportamiento de la lógica humana.

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.

Tomemos como ejemplo el concepto de "ediana edad" para entender empíricamente a la


lógica difusa. Al escuchar el trmino "ediana edad", nuestra mente asocia
automáticamente la imagen de ciertas personas o tipos de personas. Pero éste es un
concepto con límites imprecisos que no puede ser tratado por el programa de una
computadora o un dispositivo de control, que ordinariamente exige que las cosan sean
definidas. Es aquí donde entra la lógica difusa.

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".

Estas transiciones de valoración facilitan la expresión matemática de las expresiones


difusas o indefinidas, y con ello dan la posibilidad de hacer programas para ordenadores
que interpreten las expresiones humanas que normalmente' son imprecisas para la
matemática tradicional.

1.2.3 DIFERENCIA ENTRE LÓGICA BOOLEANA Y LÓGICA DIFUSA.


Mientras que la teoría de conjuntos tradicional (pertenece o no pertenece a un determinado
conjunto) define ser miembro de un conjunto como un predicado booleano, la teoría de
conjunto difusa permite representar el ser miembro de un conjunto como una distribución
de posibilidades. La lógica difusa, es una lógica matemática basada en la teoría de
conjuntos difusos que posibilita imitar el comportamiento de la lógica humana.

La lógica difusa se utiliza para representar la información imprecisa, ambigua, o vaga. Se


utiliza para realizar operaciones en los conceptos que están fuera de las definiciones de la
lógica booleana. Un tipo de lógica que reconoce valores verdaderos y falsos más que
simples. Con lógica difusa, los subconjuntos se pueden representar con grados de la verdad
y de la falsedad. Por ejemplo, la declaración, es hoy soleado, pudo ser el 100% verdad si no
hay nubes, 80% verdad si hay algunas nubes, 50% verdad si está nublado y 0% verdad si
llueve todo el día. En las siguientes figuras se puede ver gráficamente que en la lógica
booleana (Fig. 1.2-a), una sentencia "es"~o "no es", en cambio en la lógica difusa (Fig. 1.2-
b), en partes "es" y en partes no es" [SITIO51.

ALTURA ALTURA
a) b)
Figura 1.2 - Representación gráfica de: a) lógica booleana, b) lógica difusa

1.2.4 APLICACIONES DE LA LOGICA DIFUSA


El control lógico difuso emnergió con mayor fuerza en los años 1970 seguido del trabajo de
E. Mamndani y sus colegas en Inglaterra quienes desarrollaron el primer sistema de control
con lógica difusa. La solución implementada por Manmdani introdujo los conceptos
necesarios para su aplicación en áreas industriales. Su aplicación en el área de control nace
del fundamento de los operadores humanos son capaces de efectuar en muchos casos un

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.

Después de casi 30 aos de investigación, la lógica difusa ha demostrado sus posibilidades


de aplicación en ingeniería práctica.

Es ideal para el modelado y el control de sistemas no lineales debido a sus características de


am-bigüedad, (en contraste con los si/no o verdadero/falso de la lógica tradicional) que
permiten considerar grados en las características consideradas en los problemas de
ingeniería, incluso cuando no se disponga de modelos matemáticos rigurosos.

Hoy podemos encontrarla aplicada en el control de los sistemas centralizados de los


automóviles, siendo la que evita que las cámaras de video filmen las vibraciones de nuestro
brazo como nos ocurría con las cámaras antiguas; se encuentra aplicada en los sistemas de
dosificación y control de todas las lavadoras automáticas modernas.

Las grandes multinacionales de la industria automotriz, de los electrodomésticos y la óptica


la están aprovechando en sus desarrollos tras constatar sus espectaculares beneficios. La
lógica difusa se incluyo en ascensores para reducir el tiempo de espera.

A partir de 1990 se la comienza a implementar en los controles de inyección electrónica de


carburante y en los sistemas de control de guiado automático de coches, haciendo los
controles complejos más eficientes y fáciles de utilizar.

Las lavadoras difusas" tienen más de 400 ciclos preprogramados; a pesar de su


complejidad tecnológica resultan más fáciles de operar que las lavadoras tradicionales. El
usuario solo pone en marcha la lavadora, el resto queda en manos del control difuso. El
sistema evalúa automáticamente el material, el volumen, la suciedad de la ropa, elige el
ciclo óptimo de lavado, así como el caudal de agua que ha de emplear.

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

[B0Y97] L. Boylestad Robert, "Electrónica: Teoría de Circuitos", sexta edición, pp.


114-115. Prentice Hall, México, 1997.

[KLI 95] George J. Klir o Yuan, "Fuzzy Sets and Fuzzy Logic, Theory and
Applications", pp. 1-33, Prentice Hall, New Jersey, 1995

[SITIO 1] [Link] -[Link].

[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.

2.2 CONTROL DEL PROGRAMA


El control del programna sobre el 'C5x está hecho por el contador de programa (program
counter), la pila (stack), contadores de repetición (repeat counter), registros de estado
(status registrer) y el hardware relacionado con el program counter, además de diversos
mecanismos de software. Los mecanismos de software usados para el control del programa
incluyen saltos, llamadas, instrucciones condicionales, instrucciones de repetición, reset e
interrupciones.

2.2.1 CONTADOR DE PROGRAMA (PC)


El 'C5x tiene un contador de programa de 16 bits, el cual contiene la dirección de programa
interno o externo usado para buscar la instrucción siguiente.

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.

2.2.2 HARDWARE DEL STACK (PILA)


La pila, la cual es de 16 bits y tiene ocho niveles, es accesible por medio de las
instrucciones POP y PUSH. El software puede usar la pila para guardar y restaurar
contextos o para otros propósitos con las siguientes instrucciones:

• POP, el cual saca el valor de la pila hacia la parte baja del


acumulador.
* POPD, el cual saca el valor de la pila hacia una dirección de
memoria de datos.
*PSHD, el cual introduce un valor de la memoria de datos a la pila.
*PUSH, el cual mete el contenido de la parte baja del acumulador a
la pila.

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).

2.2.3 GENERACIÓN DE DIRECCIÓN DE MEMORIA DE PROGRAMA


El espacio de memoria de programa contiene el código para aplicaciones y mantiene tablas
de información y operandos inmediatos. La memoria de programa es accesada solamente
por el bus de dirección de programa (PAB). La dirección para este bus es generada por el
PC cuando las instrucciones y operandos inmediatos de tipo long son accesados. El PAB
también puede ser leído con un operando inmediato de tipo long o la parte baja del
acumulador (CAL) para transferencias de bloques, multiplicaciones/acumulaciones, lectura
y escritura de tablas, saltos y llamadas de subrutina.

El 'C5x enlaza las instrucciones metiendo el PC al PAB y lee la localidad apropiada en


memoria. Mientras la lectura es ejecutada, el PC es incrementado para el siguiente enlace.
Si ocurre una dirección de programa discontinuo (por una llamada, interrupción etc ... ) la
dirección apropiada es cargada al PC. El PC es también cargado cuando los operandos son
enlazados desde la memoria de programa.
Los operandos son enlazados desde la memoria de programa cuando el 'C5x lee desde
(TBLR) o escribe hacia (TBLW) una tabla cuando se transfieren datos hacia (BLPD) o
desde (BLDP) un espacio de datos. Algunas instrucciones (MAC, MACD, MADD, MADS)
usan el PAB para enlazar un segundo multiplicando.

2.3 REGISTROS DE ESTADO Y CONTROL


Hay cuatro registros principales de estado y control para el 'C5x. STO y STI contienen le
estado de varias condiciones y modos compatibles con otras versiones de DSPs 'C2x,
mientras que los registros PMST y CBCR contienen información extra sobre el estado y
control para el control de características mejoradas en el 'C5x. estos registros pueden ser
almacenados dentro de la memoria de datos y cargados desde memoria de datos. En esta
sección se describen unicamente los registros STO, STI y PMST debido a que de alguna
manera se utilizan en el programa del algoritmo de control.

2.3.1 PROCESSOR MODE STATUS REGISTER (PMST)


El PMST reside en el espacio de registros mapeados en memoria de la memoria de datos en
la página y puede ser salvado de la misma forma que cualquier otra localidad de
memoria de datos. El diagrama del registro PMST se muestra el la figura 2. 1.

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.

2.3.2 REGISTROS DE ESTADO (STO Y ST1)


Los registros de estado pueden ser almacenados dentro de la memoria de datos y cargados
desde la memoria de datos. Con esto se permite a estos registros del 'C5x ser salvado y
restaurados de subrutinas. La instrucción LST escribe en el STO (Fig. 2.2) y Sil (Fig. 2.3),
y la instrucción SST lee desde ellos, excepto que los bits ARP y NTM no son afectados
por la instrucción LST. A diferencia del PMST y CBCR el STO y SI no residen en le
mapa de memoria y, de esta forma, no pueden ser manejados usando las instrucciones PLU.
El STO y STI tienen asociada una pila de un solo nivel para salvar automáticamnente el
contexto cuando se toma una interrupción. Los registros son automáticamente restaurados
al regresar de la interrupción (RETI) o se regresa de una interrupción don interrupción
habilitada (RETE).

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 111 ¡10 ¡9 8- 0


ARP 0V OVM 1 INTM DP
Figura2.2 - Diagramadel registro STO.

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:

1. 64K de memoria de programa


2. 64K de memoria de datos locales
3. 64K de puertos de entrada salida
4. 32K de memoria de datos globales.

Su arquitectura paralela permite al 'C5x realizar tres operaciones de memoria en cualquier


ciclo de máquina dado: buscar una instrucción, leer un operando y estar escribiendo un
operando, todo en un solo ciclo.

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.

El 'C50 incluye 2K de palabras de ROM de arranque, 9K de palabras de SARAM de


programa/datos y 1056 palabras de DARAM. La ROM de arranque reside en el espacio de
programa en el rango de dirección 0000h-07FFh. Los 9K de palabras de SARAM pueden
ser mapeados dentro del espacio de programa de datos y reside en el rango de dirección
0800h-2BFFh en cada espacio. El siguiente esquema ejemplifica el reparto de memoria
interna.

2.5 MODOS DE DIRECCIONAMIENTO


En esta sección se describen tres de los seis modos de direccionamiento, la foarma en que se
ejecutan y algunos ejemplos. Los modos de direccionamiento son:

• 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.

DP (9) IREG (6)


9 7

15 76 0 16 BITS
DP DMA

DAB

512 PÁGINAS DE DATOS

PÁGINA PÁGINA 1 PÁGINA 510 PÁGINA 511

PÁGINA REGISTROS
DE 128 DEAE
PALABRAS MEMORIA Y
DARAM B2

Figura 2.4. - Diagramaesquemático para el direccionamiento indirecto.

2.5.2 DIRECCIONAMIENTO INDIRECTO


Ocho registros auxiliares (AR=AR7) proveen un potente y flexible direccionamiento
indirecto. En el direccionamniento indirecto, cualquier localidad de los 64K de palabras del
espacio de memoria de datos puede ser accesado usando una dirección de 16 bits contenido
en un registro auxiliar (ARx).

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.

2.5.3 DIRECCIONAMIENTO INMEDIATO


En el direccionarniento inmediato, la palabra de instrucción contiene el valor de el
operando inmediato. El C5x tiene dos tipos de instrucciones con direccionamiento
inmediato: instrucciones inmediatos de tipo short (8 bits, 9 bits y 13 bits como constantes) e
instrucciones de tipo long (16 bits constantes). La siguiente tabla muestra las instrucciones
que soportan direccionamiíento inmediato.

[Link] DIRECCIONAMIENTO INMEDIATO DE TIPO SHORT


En instrucciones inmediatas de tipo short, el operando está contenido dentro de la
instrucción del código de máquina. La siguiente figura muestra un ejemplo del tipo de
direccionamiento de tipo short. Note que en este ejemplo, los 8 bits mas bajos serán
sumados al acumulador por el CALU. La figura 2.5 ilustra cómo es formada la dirección
inmediata de tipo short.

ADD #Offh
CÓDIGO DE
ADD OFFh

CÓDIGODEMÁQUINA 10011 1000 . 1111 1111

OPERANDO . 'li 1111


Figura2.5. - Diagramaesquemáticopara el direccionamientoinmnediato sho rt.

[Link] DIRECCIONAMIENTO INMEDIATO DE TIPO LONG


En las instrucciones inmediatas de tipo long, el operando está contenido en una segunda
palabra de una instrucción de dos palabras. Hay dos modos de direccionamiento inmediato
de tipo long: instrucciones de un operando e instrucciones de dos operandos.

ADD #01234h
CÓDIGO DE
ADD

CÓDIGODEMÁQUINA 1011 1111 1001 0000


OPERANDO 0001 0010 0011 0100

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.

2.6 PERIFÉRICOS INTERNOS


Las interfaces períféricas internas conectadas al 'C5x incluyen el reloj dividido por uno, el
timer, generadores programables por software de estados de espera, pines de 1YO de
propósito general, puertos de Y/O paralelos, puertos serie puerto de interfaz host. Estos
periféricos con controlados desde registros que residen en el mapa de memoria. Los puertos
serie y timer están sincronizados vía interrupciones.

DIRECCIÓN---- NOMBRE DESCRIPCIÓN


DEC [ E
0-3 0-3 -Reservado

4-31 4-1lF -Registros de mapeo de memoria del procesador.


32 20 DRR Registro de recepción de datos
33 21 DXR Registro de transmisión de datos
34 22 SPC Registro de control del puerto serial
35 23 -Reservado

36 24 TIM Registro contador del tmer


37 25 PRD Registro de eriodo del timer
38 26 TCR Registro de control del timer
39 27 -Reservado

40 28 PDWSR Registro de estado de espera de programa/datos


41 29 IOSWR Registro de estado de espera de puertos I/O
42 2A CWSR Registro de control de estado de espera
43-47 2B-2F -Reservados para prueba/emulación
48 30 ~~TRCV Registro de recepción de datos 1DM
48 30 ~~~BDRR Registro de recepción de datos BSP
49 31 ~~TDXR Registro de transmisión de datos TDM
49 31 ~~~BDXR Registro de transmisión de datos BSP
50 32 ~~TSPC Registro de control de puerto serial TDM
50 32 ~~~BSPC Registro de control BSP
51 33 ~~TCSR Registro de selección de canal TDM
51 ~~~~~SPCE Registro de control extendido BSP
52 34 T~~RTA Registro de dirección de recepción/transmnisión. DM
52 ~~~~ ~~AXR
Registro de dirección de transmisión BSP
53 35 TRAD Registro de dirección de recepción 1DM
BKX Registro de tamaño de buffer de transisión BSP
54 36 ARR Registro de dirección de recepción BSP
55 37 B3KR Registro e tamaño de buffer de recepción BSP
56-79 38-4F1- Reservado
80-95 50-~5F PAx Puerto de I/O (PAO-PA 1 )
96-127 1 60-7F - Scratch-pad RAM (DARAM B2)

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.

Hay 28 registros de procesador, 17 registros de periféricos y 16 puertos de IPO mapeados


dentro del espacio de memoria de datos. La tabla 2.2 muestra dichos registros y su mapeo
en memoria

2.7 TIMER (TEMPORIZADOR)


El timner es un contador interno decreciente que puede ser usado periódicamente para
generar interrupciones del CPU. El timer es manejado por un pre-escalador el cual es
decrementado en 1 cada ciclo CLKOUTl1. Una interrupción de timer (IN) es generada
cada vez que el contador decrementa hasta cero. El timer provee un medio conveniente de
realizar entradas y salidas periódicas de datos u otras funciones. Cuando el timer es
detenido (TSS=1) los relojes internos del timer son apagados, permitiendo que el circuito
corra en un modo de operación de bajo consumo.

2.7.1 REGISTROS DEL TIMER


La operación del timer es controlada por medio del registro de control del timer (CR), el
registro contador del timer (IM) y el registro de periodo del timer (PRD). El diagrama del
registro PMST se muestra en la figura 2.7.

15-12 1111101 9-6 15 4 3-0


RESERVADO SOFT FREE PSC TRB TSS TDDR
Figura 2.7. - Diagrama del registro TCR

2.7.2 OPERACION DEL TIMER


Cuando el PSC decrementa hasta ó cuando el timer es reseteado por el bit TRB, el
contenido del TDDR es cargado dentro del PSC y el TIM es decrementado.

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.

El período de la interrupción ocasionada por el timer (INT) está dado por:

frecuencia TINT -

t.(c) u *v L(c) * (TDDR +1) *(PR.D +1)

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:

*El timer (TINT)


*El puerto serie (RINT, XINT, TRNT, TXNT, BRNT y BXNT)
*Interfaz de puerto host (HINT)

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.

2.8.1 REGISTRO IFR


El IFR (Fig. 2.8), es un registro mapeado en memoria localizado en la dirección 06h en el
espacio de memoria de datos. El IFR puede ser leído para identificar interrupciones internas
o externas que estén pendientes y también puede ser escrito para limpiar interrupciones.
Una interrupción activa su correspondiente bandera en el IFR hasta que la interrupción es
reconocida por el CPU. Cualquiera de los siguientes eventos limpian las banderas de
interrupción:

,* El 'C5x está en reset


• Una interrupción ha sido tomada
• Un 1 se escribió en el bit apropiado del IFR

MAS BAJA __ _ _ _ _ _ _ _ _ _ _ _ PRIORIDAD __ _ _ _ _ _ _ _ _ _ _ MÁSALTA

115-121 1 10-9 8 7 6 15 4 312 1101


- HINT RESERVADO INT4' TXNT TRNT XINT RINT TINT INT3'1 INT2' NI

Figura2.8. - Diagramadel registro IFR.

2.8.2 REGISTRO IMR


El JMR (Fig. 2.9) es un registro mapeado en memoria localizado en la dirección 04h en el
espacio de memoria de datos. El LM4R es usado para enmascarar interrupciones externas e
internas. Ni NMI' ni RS' están en el 1IMR. De esta forma, el DAMR no tiene efecto en estas
interrupciones no enmascarables.
20
115-121 11 1 10-9 1 8 1 7 ¡ 6 1 5 1 4 1 3 ¡ 2 ¡ 1 ¡1
HINT1 RESERVADO 1 14' TXNT TRNT XINT RJNT TIN4T 11413' IVNT2' INT' ~
Figura 2.9. - Diagrama del registro IMR.

2.8.3 LOCALIDADES DE VECTORES DE INTERRUPCIÓN


La tabla 2.3, muestra las localidades de los vectores de interrupción y las prioridades de
cada una de ella.

NOMBR DECIHEX1PROIA 1 FUNCIÓN


RS' 0 0 1 (la más alta) Sefñal externa de reset
11411' 2 2 3 Interrupción externa #1 de usuario
11412' 4 4 4 Interrupción externa #2 de usuario
IN13' 6 6 5 Interrupción externa #3 de usuario
TINT 8 8 6 Interrupción de timer interno
RINT 10 10 7 Interrupción de recepción del puerto senie
XlNT
12 A 8 ~~~Interrupción de transmisión del puerto
_ _ _ _ _ _ __ _ _ _ ~~~~~~~serie
TRNT 14 E 9 Interrupción de recepción del puerto 1DM
TXNT
13 10 10 Interrupción de transmisión del puerto
TXNT
13 10 10 TDM
INT4' 18 12 11 Interrupción externa #4 de usuario
20-2 3 14-17 NIA Reservado
HIiNT 24 18 -Exclusivo del 'C57
26-33 IA-21 N/A Reservado
[Link] 34 22 N/A Instrucción de software TRAP
N I' 36 24 2Iterrupción no enmascarada
38-39 26-27 N/A -Reservado ara emulación rueba
40-63 28-3F N/A Interrupciones de software

Tabla 2.3. - Tabla de localidadde vectores de interrupción y prioridades

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.

2.9 DESCRIPCIÓN DE LOS FINES DEL DSP TMS320C50


Se presenta únicamente la descripción de los pines del TMS320C50 y la ubicación de los
mismos, el fabricante de este dispositivo es Texas Instruments. La figura 2.10 muestra
fisicamnente la distribución de los pines del DSP.

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

409 > >

Figura 2. 10 - Distribuciónfisica de los pines del DSP TMS32OC50

2.10 REFERENCIAS

[DSK96] Texas Jnstruments, TMS32OC5x User's Guide, Missouri, U.S.A., 1996.

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.

3.2 REACTORES NUCLEARES


Un reactor nuclear es un sistema en el cual se controla a voluntad una reacción de fisión en
cadena. La reacción en cadena (efecto de avalancha) debe controlarse para transformar la
energía del átomo en energía útil. El control se fundamenta en capturar (por un material
absorbente) neutrones para dejar de producir fisiones y así detener las reacciones en
cadena. La cantidad de producción de neutrones se controla por el posicionamiento
adecuado de un material absorbente en el núcleo del reactor.

En la figura 3.1 se muestra la fisión de un núcleo. En este proceso se libera calor,


neutrones, se generan rayos a, 13 y y además de generarse nuevos núcleos. De esta fisión,
los neutrones liberados a su vez provocarán nuevas fisiones [DEP 88].

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ó

Neutrones liberados fso

Figura3. 1. - Fisión de un núcleo

Neutronesnutroe(4 ) 4I Netoe

~
N tron~ ~ ~~~~~________Nutoe áids lno
lentos Neutrones lentos________e etoe-áio Cadena

Productos leto

Calor Radioactivos~~~~alo Mod3:

Figurad-Racó efsó ula ncdn

en cadea:
el ncolo de eco etomd po et eeeno

Modrador Es eFmatral usado


Reain elí ncle rel eapr oea

reducir la velocidad de los neutrones a un nivel que eleve la probabilidad


de fisión.
• Refrigerante: Son lo materiales empleados para evacuar el calor de los
reactores nucleares.

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.

Los reactores pueden clasificarse, con base a su aplicación, en reactores de potencia y


reactores de investigación. El objetivo de los reactores de potencia es generar energía en
forma útil, convirtiendo el calor generado en el núcleo en alguna forma de trabajo
mecánico. El propósito primordial en los reactores de investigación es la producción de
neutrones para su uso en proyectos de investigación básica y aplicada.

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:

• En operación estable desde cero hasta 1MW de potencia con control


manual o automático.
• En operación de onda cuadrada a niveles de potencia entre 300W y 1MW
• En operación de pulsante de 10 ms. a 1500 MW.

3.3 CONCEPTOS BÁSICOS


Factor de generación. El factor de generación se define como el número de neutrones en
una generación dividido entre le número de neutrones en la generación inmediata anterior,
y es denotado por k. Si k = 1, la reacción es estable ya que el número de neutrones ni
crece ni disminuye. Si k 1, la reacción está disminuyendo. Si k > 1, la reacción está
creciendo. Cuando un reactor tiene k = 1, se dice que el reactor está critico; cuando k < 1,
se dice que el reactor está subcrítico y cuando k > 1, el reactor está supercrítico.

Reactividad. La reactividad es la desviación relativa del factor de generación de neutrones


k, con respecto a la unidad y está definida por:

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).

Neutrones retardados. Los núcleos generados en el proceso de fisión, fragmentos de


fisión, son usualmente inestables, por lo que subsecuentemente decaerán. Estas reacciones
de decaimiento producen neutrones que pueden ser usados para propagar la reacción de
fisión en cadena; estos neutrones son conocidos como neutrones de fisión. En un evento de
fisión, a los neutrones que aparecen dentro de los primeros 10-1 segundos se les conoce
como neutrones instantáneos, y como neutrones retardados a los subsecuentes. Aunque los
neutrones retardados forman una fracción muy pequeña de los neutrones de fisión, es
importante considerarlos para el control efectivo de la fisión en cadena [VIA 94].

3.4 COMPORTAMIENTO DINÁMICO


El comportamiento dinámico de la población de neutrones dentro del núcleo determina la
generación de energía, así como los cambios de temperatura que experimentan los
elementos combustibles y demás componentes del núcleo.

*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.

3.4.1 ECUACIONES DINÁMICAS


Las ecuaciones de difusión describen el comportamiento de la población de neutrones en
función de la posición y del tiempo. En la obtención de esta ecuación se utiliza la
aproximación de difusión de neutrones y se establece un balance entre la razón de
producción de neutrones y la razón de pérdida de neutrones en el elemento de volumen dV
alrededor del punto r en el tiempo t. La ecuación de difusión de neutrones, considerando
sólo el grupo térmico, está dada por:

(!}i~brt) DV 2 (r,t)-Y Y(rt)+(lr,)t)EcSO

Y la expresión para la concentración de precursores de neutrones retardados es:

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].

3.4.2 ECUACIONES DE CINETICA PUNTUAL


La separación (válida sólo si el reactor está cerca de criticidad y no se localiza una gran
perturbación) en espacio y tiempo de las funciones de potencia neutrónica y de precursores
de neutrones retardados permite suponer al núcleo del reactor como puntual; con esto se
obtienen las ecuaciones del reactor independientes de la posición y sólo en fción del
tiempo [PER 94]:

¡ Ot , ¡tn (t) + j2 1 C1 (t) +S. Ec 3.4


dt A )

para la potencia neutrónica, n(t); y

d fi()
i (t i¡t)E35
dt' A

para la concentración debida al i-ésimo grupo de precursores de neutrones retardados. En


donde p(t) es la reactividad, P3es la fracción efectiva de neutrones retardados, A es el
tiempo de generación de neutrones instantáneos, S es la fuente externa efectiva de
neutrones, y Pi es la fracción del i-ésirno grupo de neutrones retardados.

Si se agrupan los seis grupos de precursores de neutrones retardados en un solo grupo


equivalente, las ecuaciones anteriores se pueden escribir como:

d (t) (21It)
-i ()+ Ec 3.6
dt A

27
d(t)C(t)
-,Z C=(t)
'6 n Ec 3.7
dt A

en donde la constante de decaimiento equivalente estará dada por:

1 6
= 8 -,Ec 3.8

3.4.3 ECUACIÓN DE RETROALIMENTACIÓN DE LA REACTIVIDAD


En general la reactividad total de un sistema se puede expresar como:

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

En donde c es el negativo del coeficiente de reactividad por temperatura, T es la


temperatura promedio, y T es la temperatura promedio de referencia para la cual la
reactividad de retroalimentación es cero.

Debido a que la temperatura es función de la potencia del reactor, se utiliza la ley de


enfriamiento de Newton, la cual es válida para representar la variación de la temperatura
cuando se usa el modelo de cinética puntual, de la siguiente forma:

dt

En donde K es el recíproco de la cantidad calorífica del reactor (C/Watt'seg), 1 es el


tiempo promedio de transferencia de calor del combustible al refrigerante (/seg), y T c es la
temperatura promedio del refrigerante (C).

28
Si T0 representa la temperatura de equilibrio a una potencia estacionaria no, entonces:

dt

Así, restando las ecuaciones 3. 11 y 3.12

d Ec. 3.13
- T = K [n (t) - no]- (T - TO)

dt

t(t aLQ-o-pt)Ec. 3.14

La cual es la ecuación de retroalimentación de la reactividad.

3.5 MODELO PUNTUAL DEL REACTOR TRIGA MARK III


En resumen, el modelo puntual es un tratamiento aproximado [PER 94] que parte de la
suposición de que las fciones de la potencia, n(t), y de los precursores de neutrones
retardados, C(t), son separables en espacio y tiempo, lo cual es válido sólo si el reactor está
cerca de criticidad y si no se localiza una gran perturbación. Esta suposición lleva
finalmente a suponer al reactor localizado en un punto, con lo cual se obtiene el siguiente
sistema de ecuaciones diferenciales independientes de la posición y en función sólo del
tiempo.

j + Pin(t)f6)fl(t) + C(t)
dt)=Pant(t) E .5

-n(t) ()= (t+Ic1 Ec 3.15b


dt

-pin (t)-a k [n (t) -no]1- p,(t) Ec 3.15c


dt

en donde la constante de decaimiento está dada por la ecuación 3.8.

3.6 REFERENCIAS

[DEP 88] Y. Deplanche-C. Lassort-P. Saüt., "Technologie D'electrotechnique", tomo


2, pp. 204-207, Ed. educalivre, Paris 1988.

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.

4.2 CONJUNTOS DIFUSOS ASOCIADOS AL SISTEMA


El reactor nuclear TRIGA Mark III tiene distintos canales de medición para monitorear su
funcionamniento [GUL 68]. En forma general se tiene:

• Canal de razón de conteo.


* Canal de potencia lineal.
• Canal de potencia logarítmica.
• Canal de período
• Canal de porcentaje de potencia.
* Canal de monitoreo de temperatura.

Para el controlador difuso se utilizan la señal de porcentaje de error y la señal de período.


Con esto, una de las variables exactas de entrada es el periodo, 1, que representa el tiempo
que tardaría la potencia en multiplicarse en un factor e.

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

-110 -99.5 -60 -40 -1 0 1 10


Figura 4.2. - Conjuntos difusos asociados a la variable de entrada ne.

NP CE PQ PG

0.0 0.10.01 0.03 0.04 eI

Figura 4.3. - Conjuntos difusos asociados a la variable de salida m,,

VARIABLE CONJUNTOS DIFUSOS ASOCIADOS


GN Grande Negativo
ne MN Mediano Negativo
(Porcentaje de error) PN Pequeño Negativo
(Entrada) lID Ideal
PP Pequeño Positivo
CR Critico
T PC Poco Crítico
(Período) NR Normal
(Entrada) GD Grande
TI Tiende a Infinito
mpext ~NP Negativo Pequeño
(Pendiente) CE Cero
(Salida) PQ Positivo Pequeño
_______
______ ______ PG Positivo Grande
Tabla 4.1. - Significado de los conjuntos difusos utilizados.

La otra variable de entrada es la diferencia entre la potencia en el tiempo actual y la


potencia deseada (o de referencia) en relación porcentual con la diferencia entre la potencia
deseada y la potencia inicial, llamada en forma más breve como diferencia de potencia
porcentual ne.

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].

La ejecución de un algoritmo de lógica difusa en primer lugar realiza la conversión de los


valores de entrada a una descripción difusa, asignando grados de membresía en los
conjuntos difusos asociados a cada variable de entrada. Una vez que la variable de entrada
ha sido difusificada se realiza la evaluación de reglas para poder activar al los conjuntos
difusos asociados a la variable de salida. La figura 4.4 muestra el diagrama a bloques de un
controlador difuiso.

Base de
reglas
Entrada 1 Salida 1

Entrada 2 Sald2
Máquin Agregador- -

Difuisificador de desdifusificador
Entrada p, inferencia Salida q'

Figura 4.4. - Diagramaa bloques de un controladordifuso con etapa de agre-


gación y desdifusificación simultaneo.

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.

4.3 PROGRAMACIÓN DE LA DIFUSIFICACIÓN.


La función de la difusificación es convertir las variables de entrada exactas en variables
difusas. En este proceso se activan los conjuntos difusos asociados a las variables de
entrada.

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.

Figura 4.5.- Determinación de una ecuasión de dfusificación a parir del


pendiente de una recta.

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.

Tomando como ejemplo el intervalo 0< ne 1 de la variable de entrada ne, se pueden


determinar las ecuaciones de difusificación para los conjuntos difusos ID y PP.
Comenzando con la recta que pertenece a ID, se tiene que y =1, y¡+, =0, xi =0, x+¡ = y
utilizando la ecuación 4.4 se obtiene la ecuación 4.5.

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.

El listado 4.1 muestra la programación en C++ de la difusificación de la variable de entrada


ne la cual utiliza las ecuaciones de la figura 4.6 para realizar esta tarea. En el listado 4.2 se
muestra la difusificación de la variable de entrada 1 la cual utiliza las ecuaciones de la
figura 4.7.

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.

if(ne>-60 && ne<=-40) IIPN>Pequeño negativo


{MN=1; I D>Ideal
} II ~~~~~~~PP>Pequeño positivo
ifi(ne>-40 && ne<=-1)

PN#O.0+((1 .0-0)/((-1 .0)-(-40.0)))*(ne-(-40.0));

ifi(ne>-1 && ne<0-)


{PN=1 .0+((0- 1.0)I((0.0)-(- 1.0)*(ne-(- 1.0));
ID=O.0+( 1.0-0)I((0.0)-(- 1.0)))*(ne-(- 1.0));

ifi(ne>0 && ne<=1)


{ID= 1.0+((0.0- 1.0)/I((1.0)-(0.0))*(ne-(0.0));
PP=0.0+(( 1-0.0)/(( 1.0)-(0.0))*(ne-(0.0));

if(ne>I && ne<1l0)


{ PP=I1;

Listado 4.1. - Programaciónde la etapa de difusificación de la variable de


entrada ne

35
-110• ne•-99.5 G~N=I1(6+95]n+95

no

-9.< ne •-6 si MN= 1+[1 /(-1609.)][ne+99.5


MN= [/(-6+09)][ne+0.5
no

ne< ~~si P=1 11[e1


-60< ne •-40 =111[e1
MN~~~I

-4<ne •- si MD= 1+1-1(1±4)]~n+


PP = [ /(- 40)n]ne40
no

-1 e •0 s NI[I1[e1

no

36
Si ~CR=1+[-I(10-3.5)j[T-3.5]

<O4 si [PC=I+ [_-1(04 _10)][T-10]


NR = [ (1 04 1 0)j[T -1 0]

i < T<•0 i NR 1+[_-1/(10'1 _104)][T


LGD
_104]

= [ (1O0 0)][T _ 04]

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));

if(T> 10 && T<= 10e+3)


{PC= .0+((O.0-1 .0)/((10e+3)-( 10.0)))*(T-( 10.0));
NR=0.0±((1 .0-0.0)/((10e+3)-( 10.0)))*(T-( 10.0));

if(T> 10e+3 && T<= 100e+3)


{NR= 1 0+((0.0- 1.0)I(( 00e+3)-( 1Oe+3)*(T-( 1Oe+3));
GD=0. 0+(( 1.0-0. 0)I(( 00e+3)-( 1Oe+3)*(T-(JlOe+3));

if(T>1OOe+3 && T<=10e+6)


{GD= 1.0+((0.0- 1.0)I((1 0e+6)-( 100e+3)))*(T-( 10Oe+3));
TIhO.0+((1 .0-0.0)I((10Oe+6)-( 100e+3)))*(T-( 100e+3));

if(T> 10e+6 && T<=l1e+9) IIGD>Grande, TI>Tiende a infinito


{TI=1;

Listado 4.2.- Programaciónde la etapa de difusificación de la variable de


entradaT

4.4 PROGRAMACIÓN DE LA EVALUACIÓN DE REGLAS


En esta etapa se activan los conjuntos difusos asociados a la variable de salida utilizando
las reglas de control. Con ello se pretende posteriormente construir un conjunto difuso
agregado de salida.
ne
__GN MNPN ID PP
CR CE CE CE CE NP
PC PQ PQ PQ CE NP
T NR PG PG PQ CE NPmx
G1D PG PG PQ CE NP
TI PQ PGPQ CENP
Figura 4.8.- Tabla de reglas difusas de control

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

/*cada posición de los vectores vanT y varne se asignan a las variables


difusas respectivas; esto para tener mas claridad en las comparaciones*/

CR=varT[0]; PC=varT[l] ; NR=varT(j2]; 1/conjuntos de la variable T


GD=varT[3jJ;TI=varT[4];

GN=varne[O]; MN=varne[1]; PN=varne[2]; H/conjuntos de la variable ne


ID=varre[3]; PP="varne[4];

¡¡reglas para la salida NP


NPAUX[Ojj=nún(PlP,CR); NPAUX[ 1 =min(PP,PC); NPAUX[2]=min(PP,NR);
NPAUX[31=min(PlP,GD); NPAUX[4]=nún(PPTI);
NP=max(NPAUX[O],NPAUX[1 ],NPAUX[2],NPAUX[3],NPAUX[4],.,.,.0);

¡¡reglas para la salida CE


CEAUX[O]=min(GN,CR); CEAUX[11]=nmin(MN,CR); CEAUX[2]=min(PN,CR);
CEAUX[3]=min(ID,CR); CEAUX[4]=min(1ID,PC); CEAUX[5]=niin(ID,N-R);
CESAUX[6]=min(ID),G1); CEAUX[7]=nin(IDTI);
CE=max(CEAUX[O],CEAUX[1]I,CEAUX[2],CEAUX[3],CEAUX[4],CEAUX[5],CEAUX[6],CEAUX[7]);

¡¡reglas para la salida PQ


PQAUX[O]=min(GN,PC); PQAUX[ 1]=rniri(MN,PC); PQAUX[21=min(PN,PC);
PQAUX[3]=min(^NNR); PQAUX[41=min(PN,G1); PQAUX[5]=min(I`NI);
PQAUXIj6j=min(GNTI);
PQ=max(PQAUXO],PQAUX[1 ],PQAUX[2], PQAUX[31]PQAUX[4], PQAUX[5],PQAUX[6,0.0);

¡¡reglas para la salida PG


1`GAUX[]miún(GN,NR); PGAUX[l1l=rnin(MfN,NR); PGAUX[2]=n-in(GN,GD);
PGAUX[3]mrinffN,GD) PGAUX[4]=rniri(MNI);
PG=max(PGAUX[O],PGAUX[1 ],PGAUX[2],PGAUX[3],PGAUX[4],.,.0>;

Listado 4.3. - Programaciónde la etapa de 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)

Del enunciado anterior, GN y CR son los antecedentes y CE es el consecuente. De forma


similar se definen las veinticuatro reglas restantes. Nótese que cada regla se forma a partir
de la intersección de algún conjunto difuso ne con otro conjunto difuso 1.

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].

En el listado 4.3 se muestra la programación de la etapa de evaluación de reglas. En cada


bloque de asignación de membresía para cada conjunto difuso asociado a la variable de
salida m hay operaciones de mínimos y máximos. Cada celda de la tabla de control
tiene asignados dos antecedentes y un consecuente; por cada celda se debe obtener el
mínimo de sus antecedentes y así obtener el consecuente. Como en la tabla de control
existen consecuentes con el mismo nombre, después de obtener el valor del consecuente en
cada celda, se obtiene el máximo de todos los consecuentes con el mismo nombre y este
máximo es el valor final de dicho consecuente con nombre repetido [BEN 00].

4.5 PROGRAMACIÓN DE LA AGREGACIÓN Y DESDIFUSIFICACIÓN


El proceso de agregación es la combinación de los conjuntos difusos asociados a la
variable de salida que fueron activados por la etapa de evaluación de reglas para generar un
conjunto difuso único de salida.

La desdifusificación se puede ver como el proceso inverso de la difuasificación. Esto es,


tiene como entradas variables difusificadas y al dominio de la variable difusa de salida; la
salida de este proceso es un valor exacto, para la variable exacta de salida [VELOO pp. 65-
66].

NP CE PQ PG

¡ .0.8

0,¡ 0'~~~~~0,

-0.02 -0.0 1 0 0.01 0.03 0.04

COG (0.005)
Figura4.9. - Conjunto difi¿so agregadoy su centro de gravedad.

La sección sombreada de la figura 4.9 es un ejemplo de un conjunto difuso agregado. Se


puede ver que forma parte de los conjuntos difusos asociados a la variable de salida que

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;

inc=(0.04+0-.02))N; ¡¡determina el incremento para m rho externa

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);

if(m>=O && m<O.O1)


{auxy=-lOO0'rn+l;
auxyagrega=min(auxy,CE);
auxz=l00*m+O;
auxzagrega=min(auxz,PQ);
agrega=max(auxyagrega,auxzagrega,,,,,,0);

if(m>=0.01 && rn<0.03)


{auxy=-50*m+l.5;
auxyagrega='min(auxy,PQ);
auxz=50*m-0.5;
auxzagrega=m-in(auxz,PG);
agrega=max(auxyagrega,auxzagrega,,,,,,0);

if(m>=0.03 && m<=0.04)


{agrega=PG;
nurn=num+m*agrega;
den--den+agrega;
mnm+inc;

auxl1=num;
aux2=den;
cogaux=nunm¡den;
return cogaux;

Listado 4.4.- Programaciónde la etapa de agregacióny desdifusificación


de reglas.

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

En la ecuación 4.8 a es la pendiente de la recta. Se cambió la notación para que no se


confunda con la variable m que se está utilizando en el programa del listado 4.4. En
consecuencia, el valor de x es el valor de m,,,, a lo largo del recorrido que se hace.

42
Entra
valor deN

ine (0.04+ 0.02)JN


m =-0.02

-0.02 • m•-0.0í agrega = NP

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

Figura4. 10.- Diagramade flujo de la etapa de agregacióny desdifsificación

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).

Ahora bien, ya se mencionó que en la agregación y desdifusificación es necesario conocer


la altura (o activación) del conjunto agregado para cada valor de me~.Esto se realiza
auxiliándose de la ecuación 4.8, de las activaciones de los conjuntos difusos asociados a la
variable de salida y de operaciones de mínimos y máximos.

Si en la etapa de evaluación de reglas se activa alguno de los conjuntos difusos de salida de


los extremos, NP o PG, la altura del conjunto difuso agregado en ese intervalo tendrá la
altura de la activación de NP o PG. En la figura 4.9 se puede ver que la altura del conjunto
agregado en el intervalo -0.02 • m • -0.0 1 es igual al valor de la activación de NP en ese
intervalo.

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

[BEN 00] Jorge . Benítez-Read and Daniel Vélez-Díaz, cap 5, "Controlling of a


TRIGA Mark III research Nuclear Reactor with Fuzzy Adaptation of the Set
of Output Membership Functions", pp 83-114, Fuzzy Systems and Soft
Computing in Nuclear Engineering, Physica-Verlag, 2000, Germany.

[GUL 68] Gulf General Atomic, TRIGA Mark III Intrumentation Maintenance Manual
for Comisión Nacional de Energía Nuclear, México, junio 1, 1968.

[MAT 93] Matlab High-Performance Nunmeric Computation and Visualization Software,


Reference Guide, The Math Works Inc, 1993.

[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.

Debemos recordar que un número de punto flotante, no se utiliza únicamente para


representar números entre y 1, sino para números que son demasiado grandes. En este
capítulo, se verá el formato numérico utilizado en el programa ensamblador para el DSP así
como la programnación por etapas utilizado para dicho programa. 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 de hecho es una de las actividades principales en mi proyecto de tesis de maestría.

5.2 FORMATO NUMÉRICO UTILIZADO EN EL PROGRAMA DEL DSP`


Ya sean números muy pequeños o números muy grandes, existe una notación general para
la representación de cualquier número en el formato de punto flotante como lo muestra la
ecuación 5. 1, donde f es la fracción o mantisa, b es la base y e es un entero positivo o
negativo llamado exponente y la precisión está determinada por el número de dígitos de la
fracción [189].

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.

1 bit 8 bits 23 bits


signo exponente Fracción o mantisa
a) Precisión sencilla

1bit ll1bits 53 bits


signo exponente Fracción o mantisa
b) Precisión doble
Figura 5.1.- Formatodel estándarIEEEpara la representaciónde números de
punto flotante.

Desafortunadamente, lo dificil no es saber la nlotación a nivel de bits de un número de


punto flotante, sino la interpretación que se le debe dar a este formato el cual tiene muchas
consideraciones a tomar. Es por esto último, que se creó un formato específico par el uso de
números fraccionarios y se utilizó en la programación del DSP para el algoritmo de control
difuso para la regulación de la potencia neutrónica del reactor Triga.

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.36 = 23.6*10¡' -~236 *10-2 Ee 5.3b

2
0.l25=l1.25 *0I' =2.5 *1W- =125 *10- 3 Ec. 5.3c

Se puede expresar un número fraccionario como una combinación de mantisa y exponente


enteros con solo mover el punto; es obvio que si la mantisa crece en magnitud, el exponente
decrece también en magnitud y de igual forma, si la mantisa decrece en magnitud, el
exponente crece en magnitud.

Si se utiliza el corrimiento del punto, se puede programar el algoritmo de control difuso


haciendo operaciones con números enteros en vez de hacer rutinas para punto flotante. La
ecuación 5.4a es una de las operaciones que se realizan para la difusificación de la variable
de entrada ne.

GN =1+[3 (ne +99.5)] Ee 5.4a

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.

GN =1+ [(-0.0259) * (ne + 99.5)] Ec 5.4b

Utilizando el corrimiento del punto, un primer intento de modificar la ecuación anterior


para dejar toda la ecuación expresada en números enteros es la ecuación 5.4c.
GN = 1 + [ (-259 * Q04) * (ne + 995 * 10-')] Ec 5.4c

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.

GN =1 -[(259*(ne +995))*l105')] Ec 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.

GN = 100000 *105' [L(59 *(ne +995»*105')] Ec 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.

GN = 1 +[(-25* 1O3)*(ne +995*10')]


GN =10000 *10-4 _[(25 *(ne +995) *104)] Ec 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.

Rango de ne Fraode ngequrd Ecuación de difusificación modificada

-1 10•< ne -99.5 -1 100e-1 ne -995e-1 GN=1000e-4

-99.5 ne < -95e-1


60 <ne < -00e-1 GN = 1OOOOe - 4- [25e - 3 * (ne + 995e - l>]
-99.5<ne 995e1 <n • -60e-
-60 MN =Q25e-3*(ne+995e-1)

-60 < ne • -40 -600e-1 < ne • -400e-1 MN=1000e-4

-40 < ne< -40e-1


-1 < ne< -10e-1 MN =10000e- 4 - [25e--3 * (ne + 400e - )1
-40 <e •-40e-1
- <e • -0e-1 PN 25e-3*(ne+400e-1)

-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)

0 < e <000e-3 ne 100e-3 ID =10000e-4 -[10e- * nel


0<ne•10000e3<ne•100e-3 PP=10e-1*ne

1 < ne • 10 100e-2 < n • 1000e-2 PP=1000e-4

Tabla 5. 1. - Modificación de los rangosy ecuaciones para la difusificación de la variable


de entradane.

De este punto en adelante, al referir las ecuaciones de difusificación, se estará hablando de


las ecuaciones de difusificación modificadas.

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

0• T•3.5 000e-2 • T•<350e-2 CR =IOe- 4

3.5< T • 10 350e-2 < T lO100e-2 C=10e-4*(T 5e-2* -30e

10 < T < lOe+3


l+1 < T < 1000e+1 PC = 1 OOOe - 4- [1Qe--5* (T - le - 1)]
10<T• le+3 le1 <1• OOOe+1 NR=l0e-5*(T-íe-1)

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) )

Oe+6 <T le+9 lOe+6 <T lOO00e+6 TI = e- 4

Tabla 5.2.- Modificación de los rangosy ecuaciones parala difusificación de la variable


de entradaT.

Debido a que el programa en ensamblador es muy extenso, se colocarán partes que


expliquen el procedimiento general del algoritmo.

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

Listado 5.1. - determinación de exponentes para la variable ne.

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

Listado 5.3.- Operacionesde [Link]ón de ne si ne>-995 y nc -600.

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.

En general, primero se realiza la difusificación de ne y después la difusificación de T. Para


cada caso, primero se comprueban exponentes, después se verifica en qué rango de valores
se encuentra la mantisa y por último se realizan las operaciones pertinentes. Si algún valor
de exponente o mantisa no está en la forma especificada por las tablas 5.1 y 5.2 el programa
dará resultados impredecibles.

5.4 PROGRAMACIÓN DE LA EVALUACIÓN DE REGLAS EN EL DSP


Esta etapa es la que se encarga de asignar valores de membresía a los conjuntos asociados a
la variable de salida mpext Lo anterior se realiza con operaciones de máximos y mínimos
como se vio en el capítulo 4. Se mencionó en el apartado anterior que todos los resultados
de la difusificación tienen como exponente e =-4 por lo que para realizar comparaciones no
es necesario el ajuste de exponentes y se pueden hacer directamente tomando los valores
resultantes de la etapa de difusificación.

En el listado 5.4 se muestra la evaluación de reglas para NP que es un conjunto difuso


asociado a la variable de salida mp>exg.
******************reglas para la salida np
primero m:
cal limpiar
lacc m-pp ;carga pp a acc
sacb ;pone pp en accb
lacc m_-cr ;carga cr al acc
crIt ;obtiene el mínimo de pp y cr
sacl aux 1 ;guarda el mínimo en aux
lacc m-pp ;carga pp a acc
sacb ;pone pp en accb
lacc mpc ;carga pc al acc
crit ;obtiene el mínimo de pp y pc
sacl aux2 ;guarda el mínimo en aux2
lacc mpp ;carga pp a acc
sacb ;pone pp en accb
lacc mnr ;carga nr al acc
crlt ;obtiene el mínima de pp y nr
sacl aux3 ;guarda el mínimo en aux3
lacc mnpp ;carga pp a acc
sacb ;pone pp en accb
lacc mgad ;carga gd al acc
crlt ;obtiene el mínimo de pp y gd
sacl aux4 ;guarda el mínimo en aux4
lacc m-pp ;carga pp a acc
sacb ;pone pp en acc
lacc M-ti ;carga ti al acc
crIt ;obtiene el mínimo de pp y pc
sací aux5 ;guarda el mínimo en aux5
call max ;llama a la rutina de máximos
lacc temp3 ;carga temp3 en acc
sacl mn-np ;guarda el valor de np
Listado 5.4.- Evaluación de reglas para NP.

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).

Al finalizar esta etapa, los valores de NP, CE, PQ y PG tienen un exponente e -4 y un


valor de mantisa de 0 a 10000 por lo que lleva cierta compatibilidad con lo desarrollado en
la etapa de difusificación.

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.

El barrido realizado no es más que la discretización del universo de la variable de salida


(haciendo incrementos fijos en el valor de %,,) En el programa hecho en lenguaje C++ el
valor de discretización es un dato que el usuario puede definir; sin embargo, en el programa
para el DSP no se tiene dicha flexibilidad. Esto se debe a todas las consideraciones hechas
desde un principio, por lo que si al inicio se pidieron formatos específicos para el
procesamiento de los datos, en esta etapa también habrá que hacer algunas consideraciones
para tener compatibilidad con las demás etapas.

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.

Tomando como ejemplo el fragmento de programa de lenguaje C++ que se muestra en el


listado 5.6 podemos determinar cual es el formato que debe tener m,,exí.

¡f(fm>=-0.0OI && mn<O)


{ auxy- 10O*m+O;
auxyagrega7=min(auxy,NP);
auxz=100*m+1;
auxzagrega-~míin(auxz,CE);
agrega=max(auxyagrega,auxzagrega,,,,,,0);

Listado 5.6.- Fragmento de la etapa de agregacióny [Link]ón en


lenguaje C++.

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

auxagrega= min(auxz, CE) Ec 5.7

De los resultados obtenidos en la evaluación de reglas el exponente de CE es e =-4, por lo


que para poder compararlo auxz debe tener e =-4. Lo anterior nos remite a la ecuación 5.6
la cual se utiliza para obtener el valor de auxz.

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

auxz = 1OO*(m*10000)e- 4)+ 1OOOe -4 Ec 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.

Al analizar las operaciones de agregación restantes, se llega a la conclusión de que los


nuevos valores equivalentes para me, son -200e-4 mpx 400e+4. De esta forma, las
mantisas son enteras y se mantiene la compatibilidad con los resultados de la evaluación de
reglas.

Formato de rango requerido Eucoe eargcó oiiaa


Rango de m para m Eucoe eargcó oiiaa

-0.02 • m • -0.0 1 -200e-4 • m -00e-4 agrega =NP

auxy = 10*(m * 0000) e -4


auxyagrega = mn(auxy,NP)
-0.01 <m 0 -l1Ooe-4 < m •000oe-4 auxz (100*(m *10000)e- 4)+l10000e-4
auxzagrega = mun(auxz, CE)
agrega = mnax(awxyagrega, auxzagrega)

auxy = (-100 *(m * 10000)e-4)+10000e-4


auxyagrega = nmin(awxy, CE)
0 < m 0.01 000e-4 <m •lOO0e-4 auxz =100*(m 10000)e-.4
auxzagrega = m¡n(auxz, PQ)
agrega = max(auxyagrega,auxzagrega)

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])

0.03 <m 0.04 300e-4 <m • 400e-4 agrega= PG

Tabla 5.3.- Modificación de los rangosy ecuaciones para la etapa de agregación.

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.

Al igual que en la etapa de difusificación, las operaciones se realizan utilizando únicamente


las mantisas de los operandos en cada ecuación. Los exponentes en realidad no se utilizan
ya que debido al análisis, se sabe que el exponente resultante en todos los casos es e =-4.
Para ir haciendo las operaciones de agregación, se consideran intervalos definidos por la
variable m en los cuales se consideran los diferentes conjuntos difusos asociados a la
variable de salida. Los intervalos de agregación así como las operaciones para cada uno de
ellos se muestran en la tabla 5.3.

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.

num = num + (m * agrega) Ec 5.9

den = den + agrega Ee 5.10

Recordando el valor de exponentes manejados desde el inicio del programa, el exponente


de m es e =-4 y el de agrega es e -4 por lo que el exponente resultante para num de
acuerdo a la ecuación 5.9 es e =-8. El exponente de agrega es e =-4 por lo que el exponente
resultante de para den de acuerdo a la ecuación 5. 10 es e -4. Los exponentes resultantes de
num y den pueden manejarse tal y como lo indican sus ecuaciones respectivas. Sin
embargo, se puede hacer que el exponente de num sea e=-4 al dividir la parte derecha de la
igualdad de la ecuación 5.9 entre 10000 por lo que la ecuación 5.9 se modifica como se
indica en la ecuación 5.1 1. Así, el exponente de num y den será e =-4.

num = num + (m*arg)Ec 5.11


le-4
Debe quedar claro que la modificación de la ecuación 5.9 a la 5.11 es exclusivamente para
obtener un exponente e =-4.

******~~* formación del numerador ydenomiúnador * * 4

oper:
It m-agr ;carga m--agr a TREGO
mpy mmn ;multiplica (magr * mrm)
pac ;carga el resultado en acc

sacl m_-alo ;carga el número A


sach mai
splk #2710hb,m-blo ;carga el número B
splk #00h,mbhi
calI div32 ;hace una división para el exponente de
Jla multiplicación (-8) sea -4
lacc mchi,16 ;carga el cociente al acumulador
or m ClO
sacb ;guarda acc en accb
lacc mnumhi, 16 ;carga el valor de num
or mnumldo
addb ;suma acc+ accb (accb-=(mTagr*m1m)l 0OOO)
sací m_-numlo ;guarda el nuevo valor de numerador
sacb mnumhi
;hasta aqui numr=num+(m*agr)
lacc mdenhi, 16 ;carga el denominador en acc
or mdenlo
sacb ;carga acc en accb
lacc m agr ;carga m--agr en acc
addb ;suma acc+accb
sacl m_-denlo ;guarda el nuevo valor de num
sach m_-denhi
;hasta aqui den=den+magrega
Listado 5.8.- Formaciónde num y den en lenguaje ensamblador.

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

salida del controlador = cog = nmEc 5.13

El exponente resultante de la ecuación 5.13 es e =O ya que anteriormente se buscó que tanto


num como den tuvieran e =-4. También resulta obvio que la salida del controlador debe ser
un valor comprendido entre -0.02 y 0.04 (-200e-4 y 400e-4) con lo que num siempre será
más pequeño en magnitud que den.

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¡

cali div32 ;eJecuta la división

lacc mchi, 16 ;carga el cociente al acumulador


or mcia
sací mrkcoglo ;guarda el inverso del cog
sach mcoghi
Listado 5.9... Obtención del inverso de cog.

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

[DSK96A] Texas Instruments, TMS32OC5x User's Guide, 1996, pp. 4-52/4-53.

[DSK96B] Texas Instruments, TMS32OC5x User's Guide, 1996, pp. 4-87.

[DSK96C] Texas Instruments, TMS32OC5x User's Guide, 1996, pp. 4-86.

[DSK96D] Texas Instrumáents, TMS32OC5x User's Guide, 1996, pp. 4-90.

[1189] Crowell Charles, Floating-Point Arithmetic With the TMS32020 Application


Report SPRAO 1 1, Texas Instruments, 1989.

[TANOO] Taneníbaumn Andrew S., Organización de Computadoras un Enfoque


Estructurado, cuarta edición, Ed. Pearson Educación, 2000, Apéndice B pp.
646-650.

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.

En este capitulo se presenta una pequeña descripción de la tarjeta de desarrollo utilizada


así como los resultados obtenidos en la programación en cada una de las etapas del
controlador difuso.

6.2 TARJETA DE DESARROLLO TMS32OC5x DSK STARTER KIT


El DSK 'C5x es una tarjeta simple y de bajo costo, que permite experimentar con el
procesamiento en tiempo real de señales y datos. El DSK tiene un DSP TMS32OC50
para permitir la rápida verificación de código ensamblador. Otra caracteristica de ésta
tarjeta es que da la libertad para crear un software propio así como expandir el sistema de
varias formas [TMS 96].

Una tarjeta de desarrollo es un sistema mínimo en el cual es posible cargar programas de


usuario mediante un programa monitor. Este programa monitor gestiona la comunicación
entre el DSP y la PC que en este caso es de tipo serial (la tarjeta DSK tiene un conector
DB9 para conectarse al puerto serial de la PC). Normalmente una tarjeta de desarrollo se
utiliza para la depuración de programas antes de obtener el programa definitivo y cargarlo
en un sistema mínimo sin necesidad del programa monitor. Aunque este tipo de tarjetas es
muy útil, en ocasiones se tienen limitaciones impuestas por el programa monitor de la
tarjeta. La tarjeta de desarrollo DSK incluye tres programas en ms-dos para su manejo.

6.2.1 SOFTWARE ASOCIADO A LA TARJETA DSK


El primero de estos programas se llama "[Link]"; este programa permite compilar
cualquier archivo escrito en lenguaje ensamiblador del DSP (extensión asm) y así
verificar posibles de sintaxis. También el ejecutable dsk5a genera un archivo con extensión

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.

El segundo programa se llama "[Link]"; una vez compilado el archivo escrito en


lenguaje ensamblador, se genera un archivo con extensión .dsk el cual, mediante el
ejecutable dsk5l, el programa de usuario es transferido al DSP y así se puede ejecutar el
programa en el DSP. Para detener la ejecución del programa de usuario, basta con presionar
la tecla "esc". El programa dsk5l puede ejecutarse únicamente hasta la versión ME de
Windows.

El tercer programa se lama "[Link]"; este programa es un depurador. En el se pueden


monitorear todos los registros internos del DSP así como localidades de memoria. Se
pueden agregar y eliminar nemónicos en tiempo real y se puede modificar variables
inicializadas. Este depurador utiliza regularmente archivos con extensión .dsk aunque
también puede utilizar archivos con extensiones hex. Como aclaración, los archivos .dsk
contienen además del programa de usuario, código adicional que permite la comunicación
del DSP con la PC para poder realizar la depuración del programa de usuario (interactúa
con el programa monitor de la tarjeta). El programa dsk5d puede ejecutarse únicamente
hasta la versión ME de Windows.

6.2.2 CARACTERÍSTICAS ADICIONALES DE LA TARJETA DSK


La tarjeta DSK además de contener todos loe elementos necesarios para el funcionamiento
del DSP, tiene un chip denominado AIC (Analogic Interface Circuit). El AIC es un DAC-
ADC integrado en un mismo circuito; está conectado al puerto serial del DSP y
adicionalmente tiene dos conectores RCA para poder enviar y recibir datos en forma
directa.

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.

Cuenta también con una unidad de alimentación de ±5 V regulados; únicamente se


conectan 9 Volts alternos con lo que se simplifica en gran medida la fuente de alimentación
de la tarjeta.

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

FEOOh 2COOh ESPACIO

FFFFh ________FFFFh EXTERNO

Figura 6. 1. - Mapa de memoria de la tarjeta DSK.

6.3 PRUEBAS DE DIFUSIFICACIÓN


En la sección 5.3 del capítulo 5 se describió la forma de programar la etapa de
difusificación; se especificaron las ecuaciones para difusificar las variables de entrada ne y
1. La parte mas dificil de programar un algoritmo en ensamblador es corregir los errores
que no son de sintaxis tales como ciclos infinitos, colocación de operandos erróneos e
incluso no especificar la base de algún operando.

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.

Para poder observar el comportamiento del algoritmo, se tomó un número representativo


para cada conjunto difuso asociado a la variable de entrada. De esta forma, se tienen todas
las combinaciones posibles de los conjuntos difusos asociados a la variable de entrada ne
con todos los conjuntos difusos asociados a la variable de entrada 1 y se puede ver como
interactúan para activar a los conjuntos difusos asociados a la variable de salida mpexí.

6.4 PRUEBAS DE EVALUACIÓN DE REGLAS


Una vez difusificadas las variables de entrada, corresponde realizar la evaluación de reglas.
Los valores que se manejan en esta etapa corresponden a datos de 14 bits que representan 5
cifras en formato decimal (el valor máximo posible a utilizar es el 10000).

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

20- OSP O 0 0 0 1 1 0 0 0 0 1 0 0 0 -18393 150.5 -0.01235 1


-.
TC0 -0 10 0 1 0 0 0 1 0 0 0 ~~~~~~~~~-1.8433
150 5002 -0.01225
6.O-0Dp O 0 0 1 0.625350370 00.62 05 00 -1.2072 104 78 -001149 - 01
TCOE.0
-, - - … 0 … 0.-1O30 0 0 6153 0 0 0 -. 9 104.4486 -0.01147 -00
7 O-3Dp O0 0 0 1 0 0.301 06990 0 0.99 0 00 -1.3388 115 719 -001163 20
TC 0 1 0 0.3003 0.697 0 0.6997 0 0 6 -1.3493 1580 -0.01165
3.0E04 00 -0 0 1 00 0 78 0.22 0 0.7 0 000 -1.4795 125 97 -001176 42
TO
300E.04 O 0 O O T O 07777 02 0 0777? 0 0 6 1.49 125.6969 -001181 02
OE0
-. DP 1 0 0 0 1 0 0 0 1 0.211 079 0.79 0 1 0 1 0 1-1.496 127.19 -0 0119 - 2
800 0 1 0 0 0 0 1 0 0 0 10.202 079791 0179791 0 1 0 1 0 1-1.5192 11281558 -0.011861

6.5 PRUEBAS DE AGREGACIÓN Y DESDIFUSIFICACIÓN


Es ésta la etapa más crítica en cuanto a programación se refiere. Ya se mencionaron las
consideraciones de diseño en la sección 5.5 del capítulo 5. Lo primero que se realizó en
esta etapa fue el fuincionamiento del contador, es decir, hacer que el programa realizara 600
ciclos de agregación y desdifusificación a diferencia del programa en C++ que tiene la
capacidad de hacer variable los ciclos de agregación (Se utiliza la variable de
discretización N que resulta en el número de ciclos de agregación y desdifusificación).

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.

Se debe recordar que por cada ciclo de agregación y desdifusificación, se forma un


numerador (num) y un denominador (den) parciales; al finalizar el recorrido del universo

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.

COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++

0.03 - - - - - - --

0.027
0.024----
0.021
0.018
0.015 CO
0.012
0.009
0.006 M
0.003
O

Figura 6.2.- Gráfica de comparaciónde resultados correspondientea la tabla 6.1. Se compara


la salida (COG) obtenida en el dsp con el obtenido en C++ para dos entradas especficas.

COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++

0.03 - --- - - - - -_ _

0.027
0.024
0.021
0.018
0.015*CG
0.012
0.009
0.006
0.003

Figura 6.3.- Gráfica de comparación de resultados correspondiente a la tabla 6.2. Se compara


la salida (COG) obtenida en el dsp con el obtenido en C+ + para dos entradasespecíficas.

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

T [Link]+00 [Link]+00 [Link]+03 [Link]+04 [Link]+06 [Link]+08


[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01

Figura 6.4.- Gráfica de comparación de resultadoscorrespondiente a la tabla 6.3. Se compara


la salida (CQG) obtenida en el dsp con el obtenido en C++ parados entradasespecíficas.

COMPARACIóN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++

0.033
0.03
0.027
0.024-
0.021
0.018 CO
0.015-
0.012-
0.009
0.006o= M
0.003

DSP TC DSP~ TC DSP~TC DSP~TC DSPI TC DSP TC


1 [Link]+00 [Link]+00 [Link]+03 [Link]+04 [Link]+06 [Link]+08
ne -[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01 -[Link]+01

Figura 6.5.- Gráfica de comparación de resultados correspondiente a la tabla 6.4. Se compara


la salida (COG) obtenida en el dsp con el obtenido en C++para dos entradas específicas.

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

Figura 6.6. - Gráfica de comparación de resultadoscorrespondientea la tabla 6.5. Se compara


la salida (COG) obtenida en el dsp con el obtenido en C++ para dos entradas especificas.

COMPARACIÓN DE RESULTADOS OBTENIDOS EN EL DSP Y EN C++

0.008-
0.007-
0.006
0.005
0.004 CO
0.003
0.002
0.001

DSP TC DSP TC DSPI TC DSP TC DSP TC DSP TC


T [Link]+00 [Link]+00 [Link]+03 [Link]+04 [Link]+06 [Link]+08
ne -[Link]-01 -[Link]-01 -[Link]-01 -[Link]+01 -[Link]+01 -[Link]+01

Figura 6.7- Gráfica de comparación de resultados correspondiente a la tabla 6.6. Se compara


la salida (COG) obtenida en el dsp con el obtenido en C++ para dos entradas específicas.

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

Figura 6.8- Gráfica de comparación de resultados correspondiente a la tabla 6.7. Se compara


la salida (CQG) obtenida en el dsp con el obtenido en C+ + para dos entradas especficas.

6.6 TIEMPO DE EJECUCIÓN DEL PROGRAMA EN EL DSP`


Un aspecto importante es el tiempo de ejecución del programa en el DSP. No es fácil
determinar con exactitud el tiempo que le toma al DSP entregar el valor de COG-1 para un
par de valores de entradas.

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.

Tomando en cuenta de que el tiempo de ejecución de las instrucciones varía de 35 a 50 ns,


se tiene que el programa se tomaría de 33.95 i.s a 48.5pts respectivamente. Haciendo un
promedio de estos dos valores, se llega a la conclusión de que si se ejecutan todas las
instrucciones, el programa tarda 41.225 is en promedio. Sin embargo, no es verdad que se
ejecuten todas las instrucciones. Esto se debe a que existen saltos programados. Como
ejemplo, en la etapa de difusificación, de los 6 casos posibles para difiusificar la variable T,
solo uno es valido para cada par de valores de entrada y los 5 restantes no son ejecutados.
Por lo tanto, el tiempo de ejecución será menor a 41.225 jis.

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.

El error generado en la etapa de difusificación afecta en forma directa a la etapa de


evaluación de reglas. Esto es un problema que únicamente se puede eliminar posiblemente
si las operaciones realizadas en la difusificación lograran eliminar el error de redondeo.
Aún con esto, se logró no utilizar rutinas de punto flotante de la IEEE las cuales son
bastante más complejas que las logradas en el programa de control desarrollado para este
proyecto las cuales. Las operaciones realizadas en todo el algoritmo de control de potencia
se redujeron a operaciones con números enteros que llevaban implícito el manejo de punto
flotante tal como se desarrolló en el capítulo 5.

Respecto a la etapa de agregación y desdifusificación, el resultado podría tener más


exactitud si las operaciones de las etapas de difusificación y evaluación de reglas fueran de
32 bits. Esto se puede afirmar ya que la última rutina de división para obtener el COG- es
de 32 bits. Con esto se lograrían mas cifras significativas en el resultado del controlador.
Ahora bien, el error en la salida del controlador es causado únicamente por la etapa de
difusificación, por lo que sise logra eliminar el error en la difusificación, el error sería
mínimo en la salida del COG'1.

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

[DSK96] Texas Instruments, TMS32OC5x User's Guide, 1996.

[TMS96] Texas Instruments, TMS32OC5x DSP Starter Kit User's Guide, 1996.

También podría gustarte