Está en la página 1de 108

S.E.P. S.E.I.T. D.G.I.T.

CENTRO NACIONAL DE INVESTIGACIÓN


Y DESARROLLO TECNOLÓGICO

cenidet
“DETERMINACIÓN DEL ESTADO DE CARGA DE BATERÍAS
PLOMO-ÁCIDO UTILIZANDO REDES NEURONALES”

T E S I S
PARA OBTENER EL GRADO DE:
MAESTRO EN CIENCIAS
EN INGENIERÍA ELECTRÓNICA
PRESENTA:
MIGUEL ÁNGEL CRISTÍN VALDEZ

DIRECTOR DE TESIS
DR. CESAR A. ORTEGA SÁNCHEZ

CO-DIRECTOR DE TESIS
DR. ENRIQUE QUINTERO-MÁRMOL MÁRQUEZ

CUERNAVACA, MOR. NOVIEMBRE 2004


RESUMEN

La conversión de energía solar en electricidad a través de módulos o paneles fotovoltaicos


es una alternativa atractiva para electrificar localidades remotas o respaldar sistemas de alta
disponibilidad. Para mantener el suministro eléctrico durante las noches o en días de poca
insolación, la energía que no se utiliza durante el día se almacena en bancos de baterías
recargables. Por su gran capacidad para almacenar carga, las baterías plomo-ácido (BPA)
son las que comúnmente se emplean para almacenar estos excedentes energéticos.

Para que las BPA funcionen de manera óptima es preciso mantener su nivel de carga dentro
de un rango de trabajo. Es decir, no se pueden sobrecargar ni descargar fuera del rango
establecido sin correr el riesgo de dañarlas permanentemente. Para garantizar que las BPA
se encuentren trabajando en la región segura, se utilizan circuitos electrónicos denominados
controladores de carga. Un factor crítico para realizar un adecuado control de carga de las
baterías es determinar el estado de carga de las mismas.

En esta tesis se presenta el diseño, la simulación, la implementación y las pruebas


realizadas a una red neuronal que calcula el estado de carga de baterías plomo-ácido. La red
fue implementada en un controlador de carga basado en microcontrolador y tiene como
entradas: el voltaje de la batería, la temperatura y el estado de carga anterior.

En el capítulo 1 se presenta la problemática del control de carga de baterías en sistemas


fotovoltaicos así como los antecedentes directos de este trabajo de tesis y la hipótesis que se
desea probar.

En el capítulo 2 se describen brevemente algunos métodos para la determinación del estado


de carga de baterías así como algunos trabajos previos desarrollados en otras partes del
mundo relacionados con el cálculo de estado de carga utilizando redes neuronales

En el capítulo 3 se presenta una breve introducción a la tecnología de las redes neuronales y


se describen algunos ejemplos clásicos de este tipo de redes.

En el capítulo 4 se presentan las dos topologías de red neuronal que se desarrollaron en este
trabajo. Igualmente se presentan los entrenamientos y pruebas que se realizaron a cada
topología con el fin de seleccionar la mejor para su implementación en un controlador de
carga basado en microcontrolador.

En el capítulo 5 se presentan las consideraciones que se tomaron en cuenta para la


implementación en un microcontrolador de la red seleccionada. Igualmente se presenta un
conjunto de pruebas que se realizaron para demostrar que calcular el estado de carga
utilizando una red neuronal mejora el desempeño de un controlador de carga de baterías
que utilizaba originalmente la técnica de conteo de amperes para el cálculo de estado de
carga.

En el apartado de conclusiones se presentan las ventajas, limitaciones y aportaciones de la


red neuronal desarrollada en este trabajo.
SUMMARY
Conversion of solar power into electricity using photovoltaic panels is an attractive
alternative to electrify remote communities or to backup high-availability systems. The
energy that is not used during the day is stored in banks of rechargeable batteries to supply
electricity during the nights. For her great aptitude to store charge, lead-acid batteries
(LAB) are commonly used to store these energetic surpluses.

To keep LABs operating at optimum conditions, it is necessary to maintain their level of


charge within a working-range. That is to say, they can neither be overcharged nor over-
discharged, without running the risk of damaging them permanently. Electronic charge-
controllers are used to guarantee that the LABs are used within the safe region.

A critical factor to perform a correct charge-control is to accurately determine the state of


charge of the LABs.

This thesis presents the design, simulation, implementation and tests of a neuronal network
that estimates the state of charge of lead-acid batteries. The neural network was
implemented in a charge controller based on microcontroller. It receives as inputs the
LAB´s voltage, the temperature and the previous state-of-charge.

Chapter 1 presents the problems associated to the charge-control of batteries in photovoltaic


systems as well as the direct precedents of this work and the hypothesis to be proved.

In chapter 2 some methods to determine the state of charge of batteries are described as
well as some previous works developed in other parts of the world related to the estimation
of state-of- charge using neural networks.

Chapter 3 presents a brief introduction to neural network technology and some examples
are described.

Chapter 4 presents the two neural network topologies that were developed in this thesis.
Also, the training and tests that were applied to each topology in order to select the best for
its implementation in a microcontroller-based charge-controller are presented.

Chapter 5 presents the considerations that were born in mind for the implementation in a
microcontroller of the selected neural network. Equally it presents a set of tests that were
carried out to demonstrate that estimating the state-of-charge using a neural network
improves the performance of a charge-controller that originally used Ampere-counting to
estimate state-of-charge.

The conclusions present the advantages, limitations and contributions of the neural network
developed in this work.
CONTENIDO

Lista de Tablas y Figuras...............................................................................iii

Lista de Abreviaturas......................................................................................v

1 Introducción .......................................................................................................... 1
1.1 Interacción entre módulos fotovoltaicos y baterías ............................................... 1
1.2 Baterías de plomo-ácido......................................................................................... 2
1.3 Control de Carga de Baterías en Sistemas Fotovoltaicos...................................... 3
1.4 Antecedentes ........................................................................................................... 5
1.5 Hipótesis ................................................................................................................. 6

2 Determinación del Estado de Carga de Baterías ................................7


2.1 Determinación del Estado de Carga de Baterías Utilizando Redes Neuronales ... 9

3 Introducción a las Redes Neuronales.................................................12


3.1 Modelo de Red Perceptrón ................................................................................... 14
3.1.1 Reglas de Aprendizaje del Perceptrón.......................................................... 15
3.2 El Perceptrón Multinivel ...................................................................................... 15
3.3 Redes ADALINE y MADALINE............................................................................ 17
3.3.1 Redes ADALINE (ADAptive Linear Element)............................................ 17
3.3.2 Redes MADALINE (Multiple ADALINE).................................................. 19
3.4 Red de Retropropagación..................................................................................... 19
3.4.1 La Regla Delta Generalizada........................................................................ 20
3.4.2 Funcionamiento del algoritmo...................................................................... 21
3.4.3 Adición de un momento en la regla delta generalizada................................ 22
3.4.4 Estructura y aprendizaje de la red de retropropagación ............................... 22
3.4.5 Pasos para aplicar el algoritmo de entrenamiento ........................................ 23
3.4.6 Importancia de la retropropagación.............................................................. 25
3.4.7 Dimensionamiento de la red ......................................................................... 26
3.5 Adaptive Neuro-Fuzzy Inference Systems (ANFIS) .............................................. 26
3.5.1 Arquitectura ANFIS ..................................................................................... 26

4 Diseño de la Red Neuronal para Determinar el Estado de Carga de


Baterías Plomo Ácido.....................................................................................31
4.1 Generación de los datos para el entrenamiento de la red ................................... 32
4.1.1 Generación de datos secuenciales................................................................. 33
4.1.2 Generación de datos a diferentes regímenes de carga/descarga ................... 36

i
4.2 Topologías propuestas.......................................................................................... 39
4.3 Determinación de la mejor topología................................................................... 42
4.3.1 Entrenamientos de las diferentes topologías ................................................ 42
4.3.2 Selección de la Topología............................................................................. 55
4.3.3 Simulación de la topología seleccionada...................................................... 55

5 Implementación y Pruebas..................................................................62
5.1 Implementación de la red en el controlador de carga ......................................... 63
5.2 Configuración física para las pruebas ................................................................. 69
5.3 Pruebas de validación .......................................................................................... 70
5.3.1 Prueba 1 ........................................................................................................ 71
5.3.2 Prueba 2 ........................................................................................................ 73
5.3.3 Prueba 3 ........................................................................................................ 75
5.3.4 Prueba 4 ........................................................................................................ 77
5.3.5 Prueba 5 ........................................................................................................ 79
5.3.6 Prueba 6 ........................................................................................................ 81
5.4 Resumen de Resultados ........................................................................................ 83

6 Conclusiones .........................................................................................85
6.1 Ventajas de la red Neuronal................................................................................. 86
6.2 Limitaciones de la Red Neuronal Implementada ................................................. 86
6.3 Aportaciones......................................................................................................... 87
6.4 Trabajos Futuros .................................................................................................. 87

7 Referencias............................................................................................89

ANEXO A............................................................................................................................91

ii
LISTA DE TABLAS Y FIGURAS

Figura 1.1.- Distribución de la energía a la carga en un sistema fotovoltaico. ........................................... 2


Figura 1.2.- Algoritmo de carga recomendado por Hawker Energy Products .......................................... 3
Figura 1.3.- Controlador de carga desarrollado en el IIE ...................................................................... 5
Figura 1.4.- Esquema de la estación remota....................................................................................... 6
Tabla 2.1.- Métodos de determinación del estado de carga de baterías y sus aplicaciones. .......................... 9
Figura 2.1.- Estructura de la red neuronal utilizada en [16] ................................................................ 10
Figura 2.2.- Estructura de la red neuronal utilizada en [17] ................................................................ 11
Figura 3.1.- Representación del modelo del perceptrón ..................................................................... 15
Figura 3.2.- Representación del modelo del perceptrón multinivel ....................................................... 16
Figura 3.3.- Representación de las regiones de decisión que permite el modelo del perceptrón multinivel ... 16
Figura 3.4.- El ADALINE completo .............................................................................................. 18
Figura 3.5.- Representación de una superficie de error; w representa los valores posibles de la matriz de pesos
de la red. .......................................................................................................................... 20
Figura 3.6.- Modelo difuso tipo Sugeno de primer orden con dos entradas y dos reglas ........................... 27
Figura 3.7.- Arquitectura ANFIS equivalente al modelo difuso tipo Sugeno de primer orden con dos entradas
y dos reglas. ..................................................................................................................... 28
Figura 3.8.- Función de pertenencia tipo trapecio. ............................................................................ 29
Figura 3.9.- Arquitectura ANFIS para el modelo difuso tipo Sugeno, donde la normalización de los pesos se
implementa en la última capa. .............................................................................................. 30
Figura 4.1.- Arreglo para la generación de datos secuenciales ............................................................. 33
Figura 4.2.- Datos secuenciales utilizados para el entrenamiento de la red............................................. 34
Figura 4.3.- Datos recolectados en la torre de auxilio vial utilizados para la validación de la red neuronal en la
etapa de simulación. ........................................................................................................... 35
Figura 4.4.- Datos recolectados en el ciclo de descarga /carga a corriente constante de 1 Amper ............... 36
Figura 4.5.- Datos recolectados en el ciclo de descarga/carga a corriente constante de 3 Amperes.............. 37
Figura4.6.- Datos recolectados en el ciclo de descarga a corriente constante de 5 Amperes ...................... 37
Figura 4.7.- Datos recolectados en el ciclo de descarga a corriente constante de 7 Amperes, carga a corriente
constante de 5 amperes y descarga a corriente constante de 9 Amperes......................................... 38
Figura 4.8.- Datos no secuenciales para el entrenamiento de la red conformados con los datos recolectados
durante los ciclos de carga/descarga a diferentes regímenes........................................................ 39
Figura 4.9.- Topologías propuestas con dos funciones de pertenencia trapezoidales a la entrada ................ 41
Figura 4.10.- Comportamiento del error cuadrático medio conforme se incrementa el número de épocas..... 43
Figura 4.11.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
entrenamiento con una red entrenada 50 épocas. ...................................................................... 44
Figura 4.12.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
validación con una red entrenada 50 épocas . .......................................................................... 45
Figura 4.13.- Funciones de pertenencia y parámetros de la red entrenada 50 épocas. ............................... 46
Figura 4.14.- Comportamiento del error cuadrático medio conforme se incrementa el número de épocas..... 47
Figura 4.15.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
entrenamiento con una red entrenada 160 épocas ..................................................................... 48
Figura 4.16.- Comportamiento del error cuadrático medio de la red que calcula el estado de carga cuando la
batería se esta cargando....................................................................................................... 49
Figura 4.17.- Comparación entre la salida esperada y la calculada por la red neuronal (de carga) al evaluar los
datos de validación con una red entrenada 200 épocas. .............................................................. 50

iii
Figura 4.18.- Comportamiento del error cuadrático medio de la red que calcula el estado de carga cuando la
batería se esta descargando. ................................................................................................. 51
Figura 4.19.- Comparación entre la salida esperada y la calculada por la red neuronal (de descarga) al evaluar
los datos de validación con una red entrenada 500 épocas. ......................................................... 52
Figura 4.20.- Funciones de pertenencia y parámetros de la red de carga entrenada 200 épocas. ................. 53
Figura 4.21.- Funciones de pertenencia y parámetros de la red de descarga entrenada 500 épocas. ............. 54
Figura 4.22.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar los datos de campo del mes de diciembre de 2003 completos. ..... 57
Figura 4.23.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar un rango de los datos de campo del mes de diciembre de 2003. ... 58
Figura 4.24.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar los datos de campo del mes de enero de 2004 completos. ........... 59
Figura 4.25.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar un rango de los datos de campo del mes de enero de 2004. ......... 60
Figura 5.1.- Controlador de carga desarrollado en el IIE .................................................................... 62
Figura 5.2.- Funciones de pertenencia y parámetros de la red programada en el controlador de carga. ........ 64
Tabla 5.1.- Simulación de la ejecución de la red neuronal cada segundo ............................................... 65
Figura 5.3.- Algoritmo de la red neuro-difusa implementada en el controlador de carga........................... 68
Figura 5.4.- Arreglo del equipo utilizado para realizar las pruebas de validación de la red neuronal ........... 69
Figura 5.5.- Demanda constante de 4 amperes ................................................................................. 72
Figura 5.6.- Demanda constante de 6 amperes ................................................................................. 74
Figura 5.7.- Demanda de corriente variable y aleatoria. ..................................................................... 76
Figura 5.8.- Descargas intermitentes .............................................................................................. 78
Figura 5.9.- Descargas con corrientes pequeñas ............................................................................... 80
Figura 5.10.- Descargas con corrientes altas .................................................................................... 82
Tabla 5.2.- Resumen de resultados de las pruebas ............................................................................ 83

iv
LISTA DE ABREVIATURAS

BPA BATERÍA PLOMO ÁCIDO


GCI GERENCIA DE CONTROL E INSTRUMENTACIÓN
IIE INSTITUTO DE INVESTIGACIONES ELÉCTRICAS
RNA REDES NEURONALES ARTIFICIALES
ADALINE ADAPTATIVE LINEAR ELEMENT
MADALINE MULTIPLE ADALINE
MRII REGLA II DE MADALINE
CAL COMBINADOR ADAPTABLE LINEAL
ANFIS ADAPTATIVE NEURO-FUZZY INFERENCE SYSTEM
TSK TAKAGI-SUGENO-KANG
EC ESTADO DE CARGA
ECant ESTADO DE CARGA
Temp TEMPERATURA
Vbat VOLTAJE DE BATERÍA
Ibat CORRIENTE DE BATERÍA
ECCA ESTADO DE CARGA POR CONTEO DE AMPERES
ECRNA ESTADO DE CARGA POR RED NEURONAL
CA CONTEO DE AMPERES

v
1 Introducción

La conversión de energía solar en electricidad a través de módulos o paneles fotovoltaicos


es una alternativa atractiva para electrificar localidades remotas o sistemas de alta
disponibilidad tales como centrales telefónicas o sistemas de vigilancia y seguridad. Para
mantener el suministro eléctrico durante las noches o en días de poca insolación, la energía
que no se utiliza durante el día se almacena en bancos de baterías recargables. Por su gran
capacidad para almacenar carga, las baterías plomo-ácido (BPA) son las que comúnmente
se emplean para almacenar estos excedentes energéticos.

Otra importante función de las baterías es la de proveer corriente adicional a la que el


dispositivo fotovoltaico puede entregar. Tal es el caso de un motor, que en el momento del
arranque puede demandar una corriente de 4 a 6 veces su corriente nominal durante unos
pocos segundos.

1.1 Interacción entre módulos fotovoltaicos y baterías

En un sistema fotovoltaico, normalmente el banco de baterías y los módulos fotovoltaicos


trabajan conjuntamente para alimentar las cargas.

La figura 1.1 muestra cómo se distribuye la entrega de energía a la carga a lo largo del día.
Durante la noche toda la energía demandada por la carga la provee el banco de baterías.

En horas tempranas de la mañana los módulos comienzan a generar, pero si la corriente que
entregan es menor que la exigida por la carga, la batería deberá contribuir en el aporte. A
partir de una determinada hora de la mañana la energía generada por los módulos
fotovoltaicos supera la energía promedio demandada. Los módulos no solo atenderán la

1
demanda sino que además, todo exceso se almacenará en la batería que empezará a cargarse
y a recuperarse de su descarga de la noche anterior.

Finalmente durante la tarde, la corriente generada decrece y cualquier diferencia con la


demanda la entrega a la batería. En la noche, la generación es nula y todo el consumo lo
afronta la batería.

Energía

Figura 1.1.- Distribución de la energía a la carga en un sistema fotovoltaico.

1.2 Baterías de plomo-ácido

Las baterías de plomo-ácido se aplican ampliamente en los sistemas de generación


fotovoltaicos. Dentro de la categoría plomo-ácido, las de plomo-antimonio, plomo-selenio
y plomo-calcio son las más comunes.

La unidad de construcción básica de una batería es la celda de 2 volts. Dentro de la celda, la


tensión real de la batería depende de su estado de carga, de si está cargando, descargando o
en circuito abierto.

Se puede hacer una clasificación de las baterías con base en su capacidad de


almacenamiento de energía (medido en Amperes-Hora a la tensión nominal) y a su ciclo de
vida (número de veces en que la batería puede ser descargada y cargada a fondo antes de
que se agote su vida útil). La capacidad de acumulación de energía de una batería depende
de la velocidad de descarga. La capacidad nominal que la caracteriza corresponde a un
tiempo de descarga de 10 horas. Cuanto mayor es el tiempo de descarga, mayor es la
cantidad de energía que la batería entrega. Un tiempo de descarga típico en sistemas
fotovoltaicos es 100 hs. Dentro de las baterías de plomo-ácido, las denominadas
estacionarias de bajo contenido de antimonio son una buena opción en sistemas
fotovoltaicos. Ellas poseen unos 2500 ciclos de vida cuando la profundidad de descarga es
de un 20 % (es decir que la batería estará con un 80 % de su carga) y unos 1200 ciclos
cuando la profundidad de descarga es del 50 % (batería con 50 % de su carga).

2
1.3 Control de Carga de Baterías en Sistemas Fotovoltaicos

Las BPA son dispositivos que por medio de reacciones electroquímicas reversibles pueden
proveer o almacenar carga eléctrica. Sin embargo, para que las BPA funcionen de manera
óptima es preciso mantener su nivel de carga dentro de un rango de trabajo. Es decir, no se
pueden sobrecargar ni descargar fuera del rango establecido sin correr el riesgo de dañarlas
permanentemente ya que son dispositivos sumamente delicados cuya vida útil depende
fuertemente de factores tales como: temperatura de operación, régimen de descarga,
régimen de carga y conexión con otros elementos.

El proceso de carga de baterías plomo-ácido, así como de cualquier otro tipo de baterías,
consiste en reponer la energía consumida durante la descarga. Pero como ningún proceso
físico es 100% eficiente, para cargar al 100% una batería es necesario suministrarle mas del
100% de la energía demandada durante su descarga.

Para garantizar que las BPA se encuentren trabajando en la región segura, se utilizan
circuitos electrónicos denominados controladores de carga. Su función principal es la de
desconectar la fuente de energía cuando las baterías han alcanzado su nivel máximo de
carga, y desconectar los elementos alimentados cuando la batería ha alcanzado un nivel de
carga demasiado bajo. La figura 1.2 muestra la manera en que debe ser cargada una BPA,
según recomendaciones de un fabricante [1].

Voltaje de carga por celda a 25°°C


2.60

2.45
Carga flotante
2.27
V2
V1 A B C D E

0 T1 T2 T3 T4
Tiempo de carga en horas

Figura 1.2.- Algoritmo de carga recomendado por Hawker Energy Products

La figura 1.2 muestra las 5 regiones en las que se divide un ciclo de carga típico:

REGIÓN A- Modo de corriente constante: Se aplica una corriente constante cuya magnitud
dependerá de la velocidad de carga que se desee. A mayor corriente, menor tiempo de
cargado, pero el tiempo de descargado será igualmente corto. Esta corriente se aplica hasta
que el voltaje por celda alcanza un valor entre 2.45 y 2.5 volts. T1 se anota como referencia
para el disparo de los eventos subsecuentes en el algoritmo de cargado.

3
REGIÓN B- Modo de voltaje constante: Esta región comienza en T1. Se aplica un voltaje
constante a la batería durante un tiempo igual a 1.5 veces T1. Desde el inicio de la carga
hasta el final de la región B (T2) debe transcurrir un tiempo igual a 2.5 T1.

REGIÓN C- Modo de corriente constante: Se aplica una corriente constante limitada a 0.05
veces la corriente nominal de la batería en Amperes / hora. Se permanece en este estado
durante 0.5 T1 ó una hora, el tiempo que sea más corto. Si el voltaje de la batería llegara a
2.6 Vpc, se debe pasar a un régimen de voltaje constante hasta llegar a T3 (T3 - T2 = 0.5
T1 ≤ 1 hora).

REGIÓN D- Período de descanso: Se debe dar al menos una hora de descanso a la batería
antes de pasar a la región E. Este período de descanso permite que las reacciones químicas
se homogenicen dentro de la batería, evitando puntos de mayor desgaste. Al final de este
período el electrolito debe tener una concentración de ácido homogénea.

REGIÓN E- Modo de carga flotante: Para compensar los efectos de auto-descarga que
presentan las BPA se aplica un voltaje constante de 2.27 Vpc a 25 °C. El voltaje de
flotación también sirve para compensar los efectos negativos de las descargas profundas.

Cuando la fuente de energía para las baterías es un conjunto de módulos fotovoltaicos, el


algoritmo de carga mostrado en la figura 1.2 solamente se puede lleva a cabo en
condiciones ideales ya que en una aplicación real el suministro de energía depende de las
condiciones de insolación, además de que puede haber demanda de energía durante el ciclo
de cargado. Esta situación debe ser tomada en cuenta en el diseño del cargador de baterías
que se vaya a utilizar.

En aplicaciones fotovoltaicas, el uso de controladores de carga capaces de realizar


compensación por temperatura y que se puedan adecuar a las condiciones de operación de
cada aplicación particular, redunda en una vida útil más larga de las baterías.

En general, el control de carga de baterías plomo-ácido es un tema que se reconoce difícil y


que se ha investigado por muchos años [2], [3], [4], [5], [6]. Este problema se vuelve
particularmente complicado cuando la única fuente de energía disponible es un panel
fotovoltaico [7]; en estos casos el suministro de energía no es constante ni predecible ya
que depende de las horas de buena insolación durante el día.

Se ha reportado que la vida útil de baterías utilizadas en sistemas fotovoltaicos es mucho


más corta de lo que es en otras aplicaciones. El diagnóstico de estos sistemas demuestra que
en la mayoría de los casos el control de carga no está actuando correctamente y que las
baterías están siendo expuestas a descargas demasiado profundas o a sobrecargas
demasiado frecuentes.

Un factor crítico para realizar un adecuado control de carga de las baterías, es determinar el
estado de carga de las mismas. Es decir, para tener un control de carga eficiente, es
necesario contar con un medio que permita determinar con precisión la capacidad
remanente de la batería para entregar carga, esto es, si se conoce el estado actual de la
batería se puede saber que cantidad de energía requiere para alcanzar su nivel máximo o

4
que carga máxima puede soportar antes de descargarse por completo. Este es un tema
complicado que se investiga en diferentes centros alrededor del mundo [8], [9], [10], [11],
[12].

1.4 Antecedentes

En la Gerencia de Control e Instrumentación (GCI) del Instituto de Investigaciones


Eléctricas (IIE) se desarrolló un sistema para monitoreo remoto y control de carga de
baterías en aplicaciones fotovoltaicas [13], [14], [15] que está basado en un
microcontrolador que otorga la facilidad de implementar en software diferentes técnicas
para estimar el estado de carga que se basen en mediciones eléctricas, ambientales y de
operación. En su versión actual, el estado de carga de las baterías se determina utilizando la
técnica de conteo de amperes, la cual se describe en el siguiente capítulo. En la figura 1.3 se
muestra el controlador de carga diseñado.

Figura 1.3.- Controlador de carga desarrollado en el IIE

El controlador se comunica con una estación central por medio de un enlace serial. La
estación central es una computadora personal que ejecuta un programa para administración
de baterías. El programa se desarrolló en lenguaje Visual Basic y en su versión actual se
desarrolla en LabView y ofrece las funciones de captura, análisis y despliegue gráfico de
datos.

Las funciones principales de la estación central son:

Comunicación con los controladores de carga o estaciones remotas


Concentración de la información proveniente de los controladores
Análisis de la información colectada.
Despliegue de la información colectada.

5
El elemento más importante en el sistema es el controlador de carga o estación remota (ver
figura 1.4). Cada una de las estaciones remotas realiza las siguientes funciones:

Monitoreo de la corriente entregada por el módulo fotovoltaico.


Monitoreo de la corriente recibida y entregada por la batería.
Monitoreo de la corriente entregada a la carga
Monitoreo del voltaje de la batería y del panel.
Monitoreo de temperatura ambiente.
Determinación del estado de carga de cada batería.
Control de carga de las baterías.

Panel Medición y Control


Fotovoltaico de I, V Carga

Medición y Control Micro- Memoria


de I, V controlador no Volátil

Batería Interfase
Serial

Figura 1.4.- Esquema de la estación remota.

Como se detalla más adelante, como resultado de ésta tesis se desarrolló un método para el
cálculo del estado de carga de las baterías selladas utilizando redes neuronales y se
implementó dicha red en un controlador de carga desarrollado. Con lo anterior se mejoró el
desempeño de dicho controlador de carga.

1.5 Hipótesis

En esta tesis se probará la siguiente hipótesis:

“Es posible mejorar el desempeño de un controlador de carga de baterías plomo-ácido si se


utiliza una red neuronal artificial para determinar el estado de carga de las baterías”

6
2 Determinación del Estado de Carga
de Baterías

Para realizar el control de carga de baterías de manera eficiente, es necesario contar con un
medio que permita determinar con precisión el estado de carga de las baterías. Este es un
tema complicado que se investiga en diferentes centros alrededor del mundo [8], [9], [10].
A continuación se describen brevemente las principales técnicas para determinar el estado
de carga de baterías plomo-ácido [12].

Prueba de descarga

Es la prueba más confiable para determinar el estado de carga de una batería. La prueba
consiste en cargar y descargar la batería bajo condiciones controladas. Sin embargo, este
tipo de pruebas normalmente requieren demasiado tiempo para efectuarse, lo cual hace a
esta técnica imposible de aplicar fuera del laboratorio. Además, mientras se efectúa la
prueba se interrumpe la operación de los componentes alimentados por la batería.

Conteo de amperes-hora

La experiencia ha demostrado que la manera más práctica de estimar el estado de carga de


baterías plomo-ácido selladas es realizando un balance energético, es decir, contando el
número de Amperes-hora (Ah) que se suministran a la batería y compararlos contra el
número de Ah que la batería ha suministrado. En este balance se deben tomar en cuenta las
pérdidas por disipación de potencia y en las reacciones químicas que tienen lugar en el
interior de la batería. Esta técnica se puede afinar si además de las corrientes se miden
también el voltaje de la batería y la temperatura.

7
Medición de las propiedades físicas del electrolito

En las baterías plomo-ácido el electrolito es un ácido diluido en agua, a través del cual se
llevan a cabo las reacciones químicas durante la carga y la descarga. Existe una relación
lineal entre la concentración de ácido en el electrolito y el estado de carga de una BPA, por
lo tanto midiendo la densidad del electrolito se puede determinar el estado de carga. Sin
embargo, este método únicamente se puede aplicar en BPA estacionarias con electrolito
líquido. A la fecha no existe un método para determinar la densidad del electrolito en BPA
selladas.

Voltaje de circuito abierto

Al igual que la densidad del electrolito, el voltaje de circuito abierto de una BPA varía
linealmente con el estado de carga. Este método es particularmente útil en aplicaciones que
implican largos períodos de descanso para la batería. En aplicaciones más dinámicas, el
voltaje de circuito abierto se usa para complementar alguna otra técnica que determine el
estado de carga.

Interpretación heurística de mediciones

Las siguientes técnicas infieren el estado de carga de una batería a partir de la


interpretación de sus curvas de carga y descarga. Estas técnicas parten del supuesto de que
analizando las partes de las curvas que se consideran significativas, se puede estimar el
estado de carga de una batería.

Coup de fouet. La expresión francesa coup de fouet significa literalmente latigazo. En el


contexto de las baterías plomo-ácido se refiere a la pequeña caída de voltaje que ocurre al
inicio de la primera descarga después de una carga completa. Se ha encontrado que en
particular dos parámetros del coup de fouet presentan una relación lineal con el estado de
carga: el voltaje mínimo que se alcanza durante el coup de fouet y el voltaje estable que se
alcanza al final del mismo. Este método se puede aplicar cuando se alcanza con frecuencia
la carga completa de la batería.

Modelo lineal. Con este método se trata de encontrar una ecuación lineal que represente la
relación entre el estado de carga de una batería, las mediciones eléctricas que se realizan
sobre la misma y el estado de carga anterior. Por análisis estadísticos se calculan los
coeficientes de la ecuación lineal propuesta.

Redes neuronales artificiales. La función principal de una red neuronal es establecer una
relación entre datos de entrada / salida de cualquier clase. Por lo tanto, se puede estimar el

8
estado de carga de una batería en la salida de una red neuronal artificial que reciba como
entradas las mediciones eléctricas de la batería, la temperatura y el estado de carga anterior.
Para entrenar a una red neuronal se requieren de datos de entrada / salida del fenómeno a
modelar. La calidad de los resultados entregados por la red está en relación directa con la
calidad de los datos de entrenamiento

Resumiendo los diferentes métodos de determinación del estado de carga de baterías y sus
aplicaciones obtenemos la tabla 2.1[12].

Tabla 2.1.- Métodos de determinación del estado de carga de baterías y sus aplicaciones.

TÉCNICA CAMPO DE APLICACIÓN VENTAJAS DESVENTAJAS

Todos los sistemas de baterías


Prueba De (usado para la determinación de Fácil y exacto, independiente Fuera de línea, mucho tiempo, modifica el estado
Descarga la capacidad al principio de del estado de salud de la batería, pérdida de energía.
vida)
En línea, fácil, exacto si
Necesita un modelo para las pérdidas. Sensible a las
existen suficientes puntos de
Balance De Todos los sistemas de baterías reacciones parásitas. Costo elevado para una
recalibración y si existe una
Amperes-Hora (mayoría de las aplicaciones) medición de corriente exacta. Necesidad de puntos
buena medición de la
de recalibración regulares
corriente
Errores si el ácido esta estratificado. Baja dinámica.
Propiedades En línea, proporciona
Problemas de estabilidad en los sensores del
Físicas Del Plomo, posiblemente Zn/Br información del estado
electrolito. Sensible a la temperatura y a las
Electrolito de salud
impurezas, no aplicable a baterías selladas
Baja dinámica y errores si el ácido esta
Voltaje De estratificado, y necesita largos periodos de descanso
Plomo, litio, Zn/Br En línea, económico
Circuito Abierto para los sistemas de ácido. Problemas de reacciones
parásitas.
Plomo en aplicaciones
Necesidad de datos de referencia para parámetros
Modelo Lineal fotovoltaicas, no se ha intentado En línea, fácil
de ajuste.
con otro sistemas de baterías
Red Neuronal Necesidad de datos de entrenamiento de baterías
Todos los sistemas de baterías En línea
Artificial similares.

2.1 Determinación del Estado de Carga de Baterías Utilizando Redes Neuronales

Como las baterías son dispositivos no lineales, la propiedad de no linealidad de las redes
neuronales es algo muy ventajoso, así como su aprendizaje adaptable ya que las
condiciones en las que se encuentran las baterías no son siempre predecibles. Es decir, una
de las principales ventajas de las redes neuronales es su habilidad de aprender de su medio
ambiente y que mediante un proceso de entrenamiento pueden “descubrir” la correlación
que existe entre variables de entrada y salida sin recurrir a los métodos tradicionales. Esta
capacidad les permite proporcionar el valor de salida que corresponde a un conjunto de
entradas que no se utilizaron durante el entrenamiento de la red. Otra característica
importante de las redes neuronales es su fácil inserción dentro de casi cualquier tecnología.

9
Se han reportado trabajos relacionados con el cálculo del estado de carga de baterías
utilizando redes neuronales, uno de los cuales presenta un método para la estimación de la
capacidad remanente de baterías selladas de tipo plomo-ácido, con un error máximo del
10% y error promedio de 3% [16].

Para este esquema se consideraron la importancia de la temperatura y de la impedancia lo


que significa que se pueden prevenir tanto la sobre descarga como la falla térmica.

La estructura de la red reportada en el artículo mencionado consiste en una red de tres capas
(ver figura 2.1), en la cual se tienen 4 nodos de entrada y 10 de salida para indicar el estado
de carga entre el 0 y 100% en pasos de 10%. Para esta aplicación se usaron 50 unidades
ocultas para alcanzar la exactitud necesaria y una velocidad de cómputo aceptable.

Este estudio fue realizado como una simulación en computadora, pero la posibilidad de su
implementación crea el escenario donde los diferentes patrones para diferentes tipos de
batería se guarden en una memoria, y el usuario pueda simplemente seleccionar el tipo
adecuado de batería y la red estará lista para realizar los cálculos adecuadamente.

100 – 90 %
90 – 80 %
80 – 70 %
Temperatura
70 – 60 %
Voltaje
60 – 50 %
Corriente
50 – 40 %
Impedancia
40 – 30 %
30 – 20 %
20 – 10 %
10 – 0 %

Figura 2.1.- Estructura de la red neuronal utilizada en [16]

La exactitud de este esquema todavía no compite con los otros métodos de estimación y
encontrar la forma de lograrlo es objeto de estudio actualmente.

Otro trabajo reportado sobre este tema consiste en un modelo para el cálculo de la
capacidad disponible de baterías de vehículos eléctricos a través de redes neuronales
artificiales [17]. En esta configuración, la red neuronal tiene tres capas: la capa de entrada,
la oculta y la de salida (ver figura 2.2). La capa de entrada tiene un nodo para la corriente
de descarga Id, la capa oculta tiene cuatro nodos y la capa de salida tiene un nodo para la
capacidad disponible Ca.

10
V11
W11 W12
Id V21 Ca
V31
W14 W13
V41

Figura 2.2.- Estructura de la red neuronal utilizada en [17]

Para este esquema no se consideró la influencia de la temperatura ni la historia de la batería


y si no existe una corriente de descarga no se puede conocer el estado de carga de la
batería. El objetivo principal es comparar los resultados obtenidos con la red neuronal y los
obtenidos por medio de la ecuación de Peukert:

K
Ca = ( n −1)
I d

donde las constantes n y K dependen de la temperatura, la concentración del electrolito y la


estructura de las baterías. Al realizar las comparaciones antes mencionadas, la red neuronal
arrojó una exactitud mayor que la del otro método. El método utilizado para el
entrenamiento de la red fue el de retropropagación y se utilizó la herramienta de redes
neuronales de Matlab.

Una diferencia importante entre los dos trabajos mencionados anteriormente son los
parámetros de entrada en una red y en la otra.

Uno de los factores que influye en la determinación de los parámetros de entrada a la red es
precisamente en donde va a ser implementada dicha red, es decir, si se requiere que la red
se implemente en un controlador de carga en línea es probable que no se cuente con los
mismos parámetros que una red que se utilizará solo en computadora y en la que se puede
contar con muchos mas datos que con los que se podría contar en una medición en línea.

Los trabajos mencionados anteriormente no reportan una implementación práctica de las


redes en algún controlador y todas las pruebas realizadas fueron en computadora.

Debido a lo anterior, en este trabajo se planteó la hipótesis de que si se utiliza una red
neuronal artificial para determinar el estado de carga de las baterías se puede mejorar el
desempeño de un controlador de carga de baterías plomo-ácido basado en microcontrolador
y que actualmente calcula el estado de carga utilizando el algoritmo de conteo de Amperes.
Esto es, mientras más confiable sea el cálculo del estado de carga de la batería, mejor será
el desempeño del controlador.

11
3 Introducción a las Redes Neuronales

Inspiradas en el sistema nervioso biológico, la tecnología de las Redes Neuronales


Artificiales (RNA) está siendo utilizada para solucionar una gran variedad de problemas
científicos, económico/comerciales y de ingeniería. Las redes neuronales pueden aprender,
y luego ser entrenadas para encontrar soluciones, reconocer patrones, clasificar datos y
hacer previsión de eventos futuros. Su función puede verse como la de una caja negra que
recibe un conjunto de entradas y produce una única salida para ese conjunto particular de
entradas.

En contraste a las aproximaciones clásicas en campos como la estadística y la teoría de


control, las redes neuronales no requieren de un modelo explícito. Las redes neuronales son
una herramienta muy poderosa en aplicaciones en donde el análisis formal es
extremadamente difícil, como reconocimiento de patrones e identificación de sistemas no
lineales, y control.

Existen varias definiciones de Red Neuronal, por mencionar algunas:

Darpa (1988), define una red neuronal como un sistema compuesto de muchos
elementos simples de procesamiento los cuales operan en paralelo y cuya función es
determinada por la estructura de la red y el peso de las conexiones; realizándose el
procesamiento en cada uno de los nodos o elementos de cómputo.

Según Haykin (1994), una red neuronal es un procesador paralelo masivamente


distribuido que tiene una facilidad natural para el almacenamiento de conocimiento
obtenido de la experiencia para luego hacerlo utilizable. Se parece al cerebro en dos
aspectos:

12
La red obtiene el conocimiento a través de un proceso de aprendizaje.
Para almacenar dicho conocimiento se utilizan las conexiones
interneuronales, conocidas como pesos sinápticos.

Kohoen (1998) las define como una red de elementos simples (usualmente
adaptables) masivamente interconectados en paralelo y con organización jerárquica,
las cuales intentan interactuar con los objetos del mundo real del mismo modo que
lo hace el sistema nervioso biológico.

En síntesis se puede considerar que una Red Neuronal Artificial es un sistema de


procesamiento de información que tiene ciertas características de comportamiento en
común con las redes neuronales biológicas.

Las redes neuronales artificiales han sido desarrolladas como generalizaciones de modelos
matemáticos del conocimiento humano o de la biología neuronal, con base en las siguientes
consideraciones:

El procesamiento de información se realiza en muchos elementos simples llamados


neuronas.
Las señales entre neuronas se pasan a través de enlaces de conexión
Cada enlace de conexión tiene un peso asociado, el cual, en una red neuronal típica,
multiplica la señal transmitida.
Cada neurona aplica una función de activación (usualmente no lineal) a las entradas
de la red (suma de las señales de entrada pesadas) para determinar su señal de
salida.

Las redes neuronales artificiales presentan un gran número de características semejantes a


las del cerebro. Por ejemplo, son capaces de aprender de la experiencia, de generalizar
basándose en casos anteriores, de abstraer características esenciales, etc. Esto hace que
ofrezcan numerosas ventajas:

Aprendizaje adaptable: Capacidad de aprender a realizar tareas basada en un


entrenamiento o experiencia inicial. Utilizan algoritmos de aprendizaje adaptable y
auto organización, por lo que ofrecen posibilidades de procesamiento robusto y
adaptable.
Autoorganización: Crea su propia organización de la información que recibe
mediante una etapa de aprendizaje
Procesamiento no lineal: aumenta la capacidad de la red de aproximar y clasificar
así como su inmunidad frente al ruido.
Procesamiento paralelo: normalmente se usa un gran número de células de
procesamiento con un alto nivel de interconectividad
Tolerancia a fallos: La destrucción parcial de una red conduce a una degradación de
su estructura, sin embargo, algunas capacidades se pueden retener, incluso después
de sufrir un gran daño.
Fácil inserción dentro de la tecnología existente: Se pueden obtener chips
especializados para redes neuronales que mejoran su capacidad en ciertas tareas.

13
Existen dos fases en toda aplicación de las redes neuronales: la fase de aprendizaje o
entrenamiento y la fase de prueba. En la fase de entrenamiento, se usa un conjunto de datos
o patrones de entrenamiento para determinar los pesos (parámetros de diseño) que definen
el modelo neuronal. Una vez entrenado este modelo, se pasa a la llamada fase de prueba o
funcionamiento directo, en la que se procesan los patrones de prueba que constituyen la
entrada habitual de la red, analizándose de esta manera las prestaciones definitivas de la
red.

La ventaja más importante de las RNA es la de resolver problemas que son muy complejos
para tecnologías convencionales, problemas que no tienen una solución determinística o
para los cuales una solución determinística es muy complicada. En general, por ser una
abstracción del cerebro biológico, las RNA son buenas para resolver aquellos problemas
que las personas resuelven adecuadamente, pero que las computadoras no. Estos problemas,
entre otros, incluyen reconocimiento de patrones y problemas de pronóstico (los cuales
requieren el reconocimiento de una tendencia en unos datos).

A continuación se presenta una pequeña porción de lo que es el gran universo de las redes
neuronales artificiales. Las redes feedforward más conocidas son: Perceptrón, ADALINE,
MADALINE y de Retropropagación (Backpropagation), aunque actualmente se observa
una tendencia al uso de redes neuro-difusas, las cuales combinan los sistemas de inferencia
difusos y las redes neuronales, aprovechando las características sobresalientes de cada
modelo.

3.1 Modelo de Red Perceptrón

"#
! $%&'

El modelo de red perceptrón, desarrollado por Rosenblatt en 1958, tiene la capacidad para
aprender a reconocer patrones sencillos: está formado por varias neuronas lineales para
recibir las entradas a la red y una neurona de salida, es capaz de decidir cuándo una entrada
que se presenta a la red pertenece a una de las dos clases que es capaz de reconocer.

Su única neurona de salida realiza la suma ponderada de las entradas, resta el umbral y pasa
el resultado a una función de transferencia de tipo escalón. Responde +1 si el patrón
presentado pertenece a una clase X, o –1 si pertenece a la clase Z. La salida depende de la
entrada neta y del valor de umbral θ.

Sin embargo, como solamente cuenta con una capa de entrada y otra de salida con una
única neurona, tiene una capacidad de representación bastante limitada. Únicamente es

14
capaz de discriminar patrones muy sencillos, linealmente separables y una prueba de ello es
su imposibilidad de representar la función OR-EXCLUSIVA.

Figura 3.1.- Representación del modelo del perceptrón

3.1.1 Reglas de Aprendizaje del Perceptrón

Las reglas de aprendizaje del perceptrón, son del tipo supervisado, por lo que requiere que
sus resultados sean evaluados y se realicen las modificaciones al sistema, en caso de ser
necesario.

Solo se pueden aprender clasificaciones simples, debido a que un perceptrón usa un


separador lineal como célula de decisión, con lo que solo se puede realizar una sola
separación lineal (por medio de un hiperplano).

Los pasos de la regla de aprendizaje del perceptrón son los siguientes:

a) Inicialización de los pesos y del umbral. Se asignan valores aleatorios a los pesos de
las conexiones y al umbral.
b) Presentación de un nuevo par (Entrada, Salida esperada). Se presenta un par con las
entradas. Se pasa la entrada y la salida deseada.
c) Cálculo de la salida actual.
d) Adaptación de los pesos.
e) Volver al paso b).

3.2 El Perceptrón Multinivel

El perceptrón multinivel es una red de tipo feedforward compuesta por varias capas de
neuronas entre la entrada y la salida de la misma. Permite establecer regiones de decisión
mucho más complejas que las de dos semiplanos, como el Perceptrón de un solo nivel, que

15
sólo puede establecer dos regiones separadas por una frontera lineal en el espacio de
patrones de entrada.

Figura 3.2.- Representación del modelo del perceptrón multinivel

Un Perceptrón con tres niveles de neuronas puede formar cualquier región convexa (o
cerrada) en ese espacio. Las regiones convexas se forman mediante la intersección entre las
regiones formadas por cada neurona de la segunda capa. Cada elemento se comporta como
un Perceptrón simple.

Un Perceptrón de cuatro capas puede formar regiones de decisión arbitrariamente


complejas. El proceso de separación en clases que se lleva a cabo consiste en la partición de
la región deseada en pequeños hipercubos (cuadrados para dos entradas de la red).

decisión

Figura 3.3.- Representación de las regiones de decisión que permite el modelo del perceptrón multinivel

Por lo general no se requieren más de cuatro capas en una red de tipo Perceptrón, pues,
como ya se ha visto anteriormente, puede generar regiones de decisión arbitrariamente
complejas.

Tanto en los Perceptrones de tres como en los de cuatro capas se tiene un inconveniente,
que es la selección correcta del número de neuronas de las capas ocultas. En el de tres

16
capas, este número debería ser lo suficientemente grande como para formar una región con
suficiente complejidad para la solución del problema, pero por otro lado, no es conveniente
que dicho número de nodos sea tan grande que la estimación de los pesos no sea fiable para
el conjunto de patrones de entrada disponibles.

3.3 Redes ADALINE y MADALINE

, -
( ) ! .
( * + $%/0

Las redes ADALINE y MADALINE fueron desarrolladas por Bernie Widrow. Sus
arquitecturas son esencialmente las mismas que las del Perceptrón. Ambas usan neuronas
con funciones de transferencia escalón. La ADALINE está limitada a una sola neurona de
salida, mientras que MADALINE puede tener varias. La diferencia fundamental respecto al
Perceptrón se refiere al mecanismo de aprendizaje. Utilizan la regla de aprendizaje
denominada regla Delta de Hidrow-Hoff, o regla del mínimo error cuadrado medio.

Pueden procesar información analógica, tanto de entrada como de salida, utilizando una
función de activación lineal o sigmoidal.

3.3.1 Redes ADALINE (ADAptive Linear Element)

La estructura de las redes ADALINE es casi idéntica a la del Perceptrón. Está formada por
un elemento denominado Combinador Adaptable Lineal (CAL), que obtiene una salida
lineal que puede ser aplicada a otro elemento de conmutación bipolar. Si la salida del CAL
es positiva, la salida de la red es +1; si es negativa, entonces la salida de la red es –1. Esta
red puede utilizarse para generar una salida analógica, utilizando un combinador sigmoidal,
en lugar de binario.

3.3.1.1 Aprendizaje de la red ADALINE

Utilizan aprendizaje OFF LINE con supervisión denominado LMS (Least Mean Squared) o
regla del mínimo error cuadrado medio. Conocida también como Regla Delta por tratar de
minimizar una delta (o diferencia) entre el valor observado y el deseado en la salida de la
red.

17
Esta regla es un método para hallar el vector de pesos W deseado, el cual deberá ser único y
asociar con éxito cada vector del conjunto de vectores o patrones de entrada con su
correspondiente valor de salida correcto (o deseado).

Figura 3.4.- El ADALINE completo


está formado por el combinador adaptable lineal, que se encuentra dentro del recuadro mayor, y por una
función bipolar de salida (recuadro menor). El combinador adaptable lineal es muy semejante al Perceptrón
general.

El entrenamiento consiste en adaptar los pesos a medida que se vayan presentando los
patrones de entrenamiento y salidas deseadas para cada uno de ellos. Para cada
combinación entrada-salida se realizan pequeños ajustes en los valores de los pesos hasta
que se obtienen salidas correctas.

La función de error es una función matemática definida en el espacio multidimensional


para un conjunto de patrones dados. Esta superficie tendrá muchos mínimos (locales y
globales), y la regla de aprendizaje busca dónde se encuentra el mínimo global.

3.3.1.2 Aplicaciones De la Red ADALINE

La principal aplicación de las redes ADALINE está en el campo del procesamiento de


señales, en forma concreta, para el diseño y realización de filtros que eliminan el ruido en
señales portadoras de información.

Como filtros adaptables, las redes ADALINE se han utilizado para varias aplicaciones,
como:
Filtros de ecualización adaptables en modems de alta velocidad.
Canceladores adaptables del eco para el filtrado de señales en comunicaciones
telefónicas de larga distancia y comunicaciones vía satélite.

Para la eliminación de ruido y predicción de la señal:


Cancelación del ruido materno de las grabaciones electrocardiográficas del latido
del corazón del feto humano.

18
3.3.2 Redes MADALINE (Multiple ADALINE)

La red MADALINE tiene una idea semejante a la expuesta del Perceptrón Multinivel,
respecto del elemental compuesto por una sola neurona.

La red MADALINE es una combinación de módulos ADALINE básicos en una estructura


de capas que supera algunas de las limitaciones de la ADALINE original.

Existe otro método, conocido como la regla II de MADALINE (MRII).

El MRII se parece a un procedimiento de acierto y error, con una inteligencia adicional en


la forma de un principio de mínima perturbación. Dado que la salida de la red es una serie
de unidades bipolares, el entrenamiento equivale a reducir el número de nodos de salida
incorrectos para cada trama de entrenamiento dada como entrada.

El principio de mínima perturbación establece que los nodos que puedan afectar al error de
salida y que sufran los cambios más pequeños en sus pesos deberían tener prioridad en el
proceso de aprendizaje.

3.4 Red de Retropropagación

1 " 5 -
6 $%'/
) 2
3 4 +

El método de retropropagación está basado en la generalización de la regla delta y, a pesar


de sus propias limitaciones, ha ampliado en forma considerable el rango de aplicaciones de
las redes neuronales.

El algoritmo de retropropagación se caracteriza principalmente por la representación


interna del conocimiento que es capaz de organizar en la capa intermedia de las células para
conseguir cualquier correspondencia entre la entrada y la salida de la red.

El funcionamiento de una red de retropopagación consiste en el aprendizaje de un conjunto


predefinido de pares de entradas-salidas dados como ejemplo, empleando un ciclo
propagación-adaptación de dos fases:

19
Primero se aplica un patrón de entrada como estímulo para la primera capa de
neuronas de la red. Este patrón se va propagando a través de todas las capas internas
hasta generar una salida, se compara el resultado obtenido en las neuronas de salida
con la salida que se desea obtener y se calcula un valor del error para cada neurona
de salida.
Luego, se transmiten estos errores hacia atrás, partiendo de la capa de salida, hacia
todas las neuronas de la capa intermedia que contribuyan directamente a la salida,
recibiendo el porcentaje de error aproximado a la participación de la neurona
intermedia en la salida original. Repitiéndose este proceso capa por capa, hasta que
todas las neuronas de la red hayan recibido un error que describa su aportación
relativa al error total. Basándose en el valor del error recibido, se reajustan los pesos
de conexión de cada neurona, de manera que en la siguiente vez que se presente el
mismo patrón, la salida se encuentre más cercana a la deseada; es decir, el error
disminuye.

3.4.1 La Regla Delta Generalizada

La regla delta, propuesta por Widrow en 1960 se ha extendido a redes con capas
intermedias (regla delta generalizada) con conexiones hacia delante (feedforward) y cuyas
células tienen funciones de activación continuas (lineales o sigmoidales), dando lugar al
algoritmo de retropropagación (backpropagation). Una función de este tipo es la sigmoidal,
a diferencia de la función escalón utilizada en el Perceptrón, ya que la última no es
derivable en el punto donde se encuentra la discontinuidad.

Este algoritmo utiliza también una función o superficie de error asociada a la red, en la que
se va buscando el estado estable de energía mínima o de mínimo error a través del camino
descendente de la superficie del error. Por esa razón, el error del sistema es realimentado
para realizar la modificación de los pesos en un valor proporcional al gradiente decreciente
de dicha función de error.

Figura 3.5.- Representación de una superficie de error; w representa los valores posibles de la matriz de pesos
de la red.

20
3.4.2 Funcionamiento del algoritmo

El método que sigue la regla delta generalizada para ajustar los pesos es exactamente el
mismo que el de la regla utilizada en ADALINE; los pesos se actualizan de forma
proporcional a la delta, o diferencia entre la salida deseada y la obtenida ( δ = salida
deseada – salida obtenida).

Dada una neurona (unidad Ui) y la salida que produce, yi, el cambio que se produce en el
peso de la conexión que una salida de dicha neurona con la unidad Uj(wji) para un patrón de
aprendizaje p determinado es:

∆w ji (t + 1) = αδ pj y pi

En donde el subíndice p se refiere al patrón de aprendizaje concreto, y α es la constante o


tasa de aprendizaje.

En redes multinivel en principio no se puede conocer la salida deseada de las neuronas


ocultas para poder determinar los pesos en la función de error cometido. Inicialmente
podemos conocer la salida deseada de las neuronas de salida. Según esto, si consideramos
la unidad Uj de salida, entonces definimos:

δ pi = (d pj − y pj ) f ' (net j )

donde dpj es la salida deseada de la neurona j para el patrón p y netj es la entrada neta que
recibe la neurona j.

Esta fórmula es como la de la regla delta, excepto a los se refiere a la derivada de la función
de transferencia. Este término representa la modificación que hay que realizar en la entrada
que recibe la neurona j. En caso de que dicha neurona no sea de salida, el error que se
produce estará en función del error que se cometa en las neuronas que reciban como
entrada la salida de dicha neurona. Esto es lo que se denomina como procedimiento de
propagación de error hacia atrás.

Según esto, en el caso de que Uj no sea una neurona de salida, el error que se produce está
en función del error que se comete en las neuronas que reciben como entrada la salida de
Uj:

δ pj = δ pk wkj f ' (net j )


k

en donde el rango de k cubre a todas las neuronas a las que está conectada la salida de Uj.
De esta forma el error que se produce en una neurona oculta es la suma de los errores que

21
se producen en las neuronas a las que está conectada la salida de ésta, multiplicado cada
uno de ellos por el peso de la conexión.

3.4.3 Adición de un momento en la regla delta generalizada

El método de retropopagación del error requiere un importante número de cálculos para


lograr el ajuste de los pesos de la red. En la implementación del algoritmo, se toma una
amplitud de paso que viene dada por la tasa de aprendizaje. A mayor tasa de aprendizaje,
mayor es la modificación de los pesos en cada iteración, con lo que el aprendizaje será más
rápido, pero por otro lado, puede dar lugar a oscilaciones. Rumelhart, Hinton y Williams
sugirieron que para filtrar estas oscilaciones se añada en la expresión de incremento de los
pesos un término (momento), β, de manera que dicha expresión quede:

w ji (t + 1) = w ji (t ) + αδ pj y pi + β (w ji (t ) − w ji (t + 1))
∆w ji (t + 1) = αδ pj y pi + β∆w ji (t )

donde β es una constante que determina el efecto t+1 del cambio de los pesos en el instante
t.

Con este momento se consigue la convergencia de la red en menor número de iteraciones,


ya que si en t el incremento de un peso era positivo y en t+1 también, entonces el descenso
por la superficie de error en t+1 es mayor. Sin embargo, si en t era positivo y en t+1 es
negativo, el paso que se da en t+1 es más pequeño, lo cual es adecuado, ya que significa
que se ha pasado por un mínimo y que los pesos deben ser menores para poder alcanzarlo.

Resumiendo, el algoritmo de retropropagación queda finalmente:

[
w ji (t + 1) = w ji (t ) + ∆w ji (t + 1) ]
w ji (t + 1) = w ji (t ) + [αδ pj y pi + β∆w ji (t )]
donde:

δ pj = (d pj − y pj ) f ' (net j ) si Uj es una neurona de salida.

δ pj = ( k
δ pk wkj ) f ' (net j ) si Uj no es una neurona de salida.

3.4.4 Estructura y aprendizaje de la red de retropropagación

En una red de retropropagación existe una capa de entrada con n neuronas y una capa de
salida con m neuronas y al menos una capa oculta de neuronas internas. Cada neurona de
una capa (excepto las de entrada) recibe entradas de todas las neuronas de la capa anterior y

22
envía su salida a todas las neuronas de la capa posterior (excepto las de salida). No hay
conexiones hacia atrás feedback ni laterales entre las neuronas de la misma capa.

La aplicación del algoritmo tiene dos fases, una hacia delante y otra hacia atrás. Durante la
primera fase el patrón de entrada es presentado a la red y propagado a través de las capas
hasta llegar a la capa de salida.

Obtenidos los valores de salida de la red, se inicia la segunda fase, comparándose éstos
valores con la salida esperada para obtener el error. Se ajustan los pesos de la última capa
proporcionalmente al error. Se pasa a la capa anterior con una retropopagación del error,
ajustando los pesos y continuando con este proceso hasta llegar a la primer capa.

De esta manera se han modificado los pesos de las conexiones de la red para cada patrón de
aprendizaje del problema, del que conocíamos su valor de entrada y la salida deseada que
debería generar la red ante dicho patrón.

La técnica de retropropagación requiere el uso de neuronas cuya función de activación sea


continua, y por lo tanto, diferenciable. Generalmente, la función utilizada será del tipo
sigmoidal.

3.4.5 Pasos para aplicar el algoritmo de entrenamiento

Paso 1

Inicializar los pesos de la red con valores pequeños aleatorios.

Paso 2

Presentar un patrón de entrada y especificar la salida deseada que debe generar la red.

Paso 3

Calcular la salida actual de la red. Para ello presentamos las entradas a la red y vamos
calculando la salida que presenta cada capa hasta llegar a la capa de salida, ésta será la
salida de la red. Los pasos son los siguientes:

Se calculan las entradas netas para las neuronas ocultas procedentes de las neuronas de
entrada. Para una neurona j oculta:

N
net hpj = whji x pi + θ jh
i =1

23
en donde el índice h se refiere a magnitudes de la capa oculta; el subíndice p, al p-ésimo
vector de entrenamiento, y j a la j-ésima neurona oculta. El término θ puede ser opcional,
pues actúa como una entrada más.

Se calculan las salidas de las neuronas ocultas: y pj = f jh net hpj . ( )


Se realizan los mismos cálculos para obtener las salidas de las neuronas de salida:
L
net opk = wkjo y pj + θ ko
j =1

y pk = f net opk
k
o
( )
Paso 4

Calcular los términos de error para todas las neuronas.

Si la neurona k es una neurona de la capa de salida, el valor de la delta es:

δ pko = (d pk − y pk ) f ko ' (net opk )

La función f debe ser derivable. En general disponemos de dos formas de función de salida:

La función lineal : f k (net jk ) = net jk

f k (net jk ) =
1
La función sigmoidal : − net jk
1+ e

La selección de la función depende de la forma que se decida representar la salida: si se


desea que las neuronas de salida sean binarias, se utiliza la función sigmoidal, en otros
casos, la lineal.

Para una función lineal, tenemos: f ko '= 1 , mientras que la derivada de una función
( )
sigmoidal es: f ko ' = f ko 1 − f ko = y pk (1 − y pk ) por lo que los términos de error para las
neuronas de salida quedan:

δ pko = (d pk − y pk ) para la salida lineal.

δ pko = (d pk − y pk )y pk (1 − y pk ) para la salida sigmoidal.

Si la neurona j no es de salida, entonces la derivada parcial del error no puede ser evaluada
directamente, por tanto se obtiene el desarrollo a partir de valores que son conocidos y otros
que pueden ser evaluados.

24
La expresión obtenida en este caso es: δ pjh = f jh ' (net hpj ) δ pko wkjo donde observamos que el
k
error en las capas ocultas depende de todos los términos de error de la capa de salida. De
aquí surge el término propagación hacia atrás.

Paso 5

Actualización de los pesos: para ello utilizamos un algoritmo recursivo, comenzando por
las neuronas de salida y trabajando hacia atrás hasta llegar a la capa de entrada, ajustando
los pesos de la siguiente forma:

Para los pesos de las neuronas de la capa de salida:

∆wij = yi * y j
∆wkjo (t + 1) = αδ pk
o
y pj

Para los pesos de las neuronas de la capa oculta:

whji (t + 1) = whji (t ) + ∆whji (t + 1)


∆whji (t + 1) = αδ pjh x pi

En ambos casos, para acelerar el proceso de aprendizaje se puede añadir un término


momento.

Paso 6
1 M 2
El proceso se repite hasta que el término de error E p = δ pk resulta aceptablemente
2 k =1
pequeño para cada uno de los patrones aprendidos.

3.4.6 Importancia de la retropropagación

La importancia del algoritmo de retropropagación radica en su capacidad de auto adaptar


los pesos de las neuronas de las capas intermedias para aprender la relación que existe entre
un conjunto de patrones dados como ejemplo y sus salidas correspondientes, la cual es
llamada capacidad de generalización, que se entiende como la facilidad de dar salidas
satisfactorias a entradas nunca antes vistas por el sistema en su fase de entrenamiento.

Las redes de retropropagación son unas de las más utilizadas en los últimos tiempos.
Pueden ser aplicadas a una amplia variedad de problemas debido a la naturaleza de su
proceso de aprendizaje, que solamente necesita de dos ecuaciones para propagar las señales
de error hacia atrás. Se elige una de las dos ecuaciones dependiendo si la unidad de proceso
es o no de salida.

25
3.4.7 Dimensionamiento de la red

No se pueden dar reglas concretas para determinar el número de neuronas o número de


capas de una red para resolver un problema concreto.

Respecto al número de capas de la red, en general tres capas son suficientes (entrada -
oculta-salida). Sin embargo, hay veces que un problema es más fácil de resolver con más de
una capa oculta. El tamaño de las capas, tanto de entrada como de salida, suelen venir
determinado por la naturaleza de la aplicación. En cambio, decidir cuántas neuronas debe
tener una capa oculta no suele ser tan evidente.

El número de neuronas ocultas interviene en la eficiencia de aprendizaje y de


generalización de la red. No hay ninguna regla que indique el número óptimo.

3.5 Adaptive Neuro-Fuzzy Inference Systems (ANFIS)

Las redes adaptables neuro-difusas combinan los sistemas de inferencia difusos y las redes
neuronales, aprovechando las características sobresalientes de cada modelo. Por un lado,
los sistemas de inferencia difusos proveen un mecanismo intuitivo y de alto nivel para
representar el conocimiento mediante la utilización de reglas IF/THEN. Por otro lado, las
redes neuronales poseen un alto grado de adaptabilidad y capacidad de aprendizaje y
generalización. La construcción de herramientas que se nutren de estas dos áreas ha
demostrado ser un mecanismo eficiente para modelar sistemas reales.

ANFIS significa Adaptive Neuro-Fuzzy Inference System y denomina al tipo de red


desarrollada por Jyh-Shing Roger Jang [18][19][20] que combina conceptos y algoritmos
de redes neuronales tipo Retropropagación junto con elementos de lógica difusa o fuzzy
logic.

Las capacidades adaptables de las redes ANFIS las hacen directamente aplicables a una
gran cantidad de áreas como control adaptable, procesamiento y filtrado de señales,
clasificación de datos y extracción de características a partir de ejemplos.

3.5.1 Arquitectura ANFIS

El modelo ANFIS es funcionalmente equivalente a los sistemas de inferencia difusos e


implementa el razonamiento que implica un proceso de defusificación algebraico en la cual
la salida de cada regla es una combinación lineal de las variables de entrada y la salida final
del sistema se obtiene como una suma ponderada, mientras que la ponderación de cada
regla es obtenida con base a la premisa de la regla.

26
La premisa consta de una serie de funciones de pertenencia asociadas a variables
lingüísticas (una por cada variable de entrada) que son evaluadas y combinadas mediante la
aplicación de una norma-T. En esta implementación se utiliza como norma-T al producto,
siendo otra norma-T usual la función min().

Los diferentes modelos de inferencia difusos, dan lugar a diferentes arquitecturas ANFIS.
El modelo que se desarrollará a continuación corresponde con el modelo de inferencia
difuso Takagi-Sugeno-Kang (TSK) debido su transparencia y eficiencia. Para arquitecturas
ANFIS correspondientes o otros modelos (Mamdani o Tsukamoto), se pueden consultar
[19][20].

Por simplicidad asumamos que el sistema de inferencia difuso a considerar tiene dos
entradas x y y y una salida z. Para un modelo difuso tipo Sugeno de primer orden
[21][22][23], un conjunto de reglas común con dos reglas del tipo IF-THEN son:

Regla uno : si x es A1 y y es B1 entonces f1=p1x+q1y+r1


Regla dos : si x es A2 y y es B2 entonces f2=p2x+q2y+r2

La figura 3.6 ilustra el mecanismo de razonamiento para un modelo tipo Sugeno, la


arquitectura ANFIS equivalente es mostrada en la figura 3.7, donde los nodos de la misma
capa tienen funciones similares. Un cuadro representa un nodo adaptable y un círculo un
nodo fijo.

A1 B1
w1 f1=p1*x+q1*y+r1

X Y w1 f1 + w2 f2
f=
w1 + w2

= w1 f1 + w2 f2
A2 B2
w2 f2=p2*x+q2*y+r2

X Y
x y
Figura 3.6.- Modelo difuso tipo Sugeno de primer orden con dos entradas y dos reglas

27
x y
A1
w1 w1 w1 f1
x
A2 Π Ν
Σ f

B1 Π Ν
w2 w2 w2 f2
y
B2
x y

Capa 1 Capa 2 Capa 3 Capa 4 Capa 5

Figura 3.7.- Arquitectura ANFIS equivalente al modelo difuso tipo Sugeno de primer orden con dos entradas
y dos reglas.

A continuación se describe cada una de las capas representadas en al figura 3.7:

Capa 1.- Cada nodo i en esta capa es un nodo adaptable con una función

O1,i = µ Ai ( x) , para i = 1, 2, o
O1,i = µ Bi − 2 ( y ) , para i = 3, 4

donde x (o y) es la entrada al nodo i y Ai(o Bi-2) es una etiqueta lingüística (como


“pequeño” o “grande”) asociado con este nodo. En otras palabras, O1,i, es el grado de
pertenencia del conjunto A ( =A1, A2, B1 o B2) y especifica el grado en que la entrada x o y
satisface al cuantificador A. Aquí la función de pertenencia para A puede ser cualquier
función de pertenencia parametrizada apropiada [3.3 sección 2.4.1], como la función
trapecio.

x−a d −x
µ A ( x ) = max min ,1, ,0
b−a d −c

donde {a, b, c, d} es el conjunto de parámetros que definen a la función y que se muestran


en la figura 3.8.

28
1

0 a b c d X

Figura 3.8.- Función de pertenencia tipo trapecio.

Conforme los valores de dichos parámetros varíen, la forma de la función trapecio variará,
obteniéndose varias formas de funciones de membresía para un conjunto difuso A. Es decir,
para especificar una función de membresía tipo trapecio basta con especificar los
parámetros {a, b, c, d} correspondientes. Los parámetros en esta capa son conocidos como
parámetros de la premisa.

En los siguientes capítulos de este trabajo utilizaremos la nomenclatura trap(a, b, c, d) para


especificar una función tipo trapecio con sus correspondientes parámetros.

Capa 2.- Cada nodo en esta capa es un nodo fijo nombrado como Π cuya salida es el
producto de todas las señales de entrada:

O2,i = wi = µ Ai ( x) µ Bi ( y ), i = 1, 2

Cada salida de nodo representa el grado de “disparo” de una regla (el peso de una regla). En
general, cualquier operador norma-T que represente un AND difuso puede ser utilizado
como la función de los nodos en este capa.

Capa 3.- Cada nodo en esta capa es un nodo fijo nombrado N. El i-ésimo nodo calcula la
relación de la “fuerza de disparo” de la i-ésima regla con la suma de todas las “fuerzas de
disparo” de todas las reglas:

wi
O3,i = wi = , i = 1, 2
w1 + w2

Por conveniencia, las salidas de esta capa son llamadas “fuerzas de disparo normalizadas”.

Capa 4.- Cada nodo i en esta capa es un nodo adaptable con una función de nodo

O4,i = wi f i = wi ( pi x + q i y + ri ), i = 1, 2

29
donde wi es una “fuerza de disparo normalizada” de la capa 3 y {pi, qi, ri} es el conjunto de
parámetros de este nodo. Los parámetros de esta capa son conocidos como los parámetros
del consecuente.

Capa 5.- El nodo en esta capa es un nodo fijo nombrado como Σ , que calcula la salida
general como la suma de todas las señales de entrada

wi f i
O5,1 = wi f i = i

i wi
i

De esta manera se construye una red adaptable que es funcionalmente equivalente a un


modelo difuso tipo Sugeno. Nótese que la estructura de esta red adaptable no es única, se
pueden combinar las capas 3 y 4 para obtener una red equivalente con solo cuatro capas. De
la misma manera podemos calcular la normalización de pesos en la capa final, la figura 3.9
ilustra una ANFIS de este tipo.

A1
w1 w1 f1
x
A2 Π
Σwi fi
Σ
B1 Π w2 f
w2 f2 /
y
B2
Σ Σwi

Figura 3.9.- Arquitectura ANFIS para el modelo difuso tipo Sugeno, donde la normalización de los pesos se
implementa en la última capa.

30
4 Diseño de la Red Neuronal para
Determinar el Estado de Carga de
Baterías Plomo Ácido

El objetivo principal de la red neuronal diseñada es que mejore el desempeño del


controlador de carga que se desarrolló en la GCI durante 2003 y 2004.

Debido a lo anterior, se consideró como punto de referencia para el entrenamiento y la


validación de la red neuronal los cálculos proporcionados por el controlador de carga
actual. Es decir, se utilizó el controlador de carga existente para recopilar los datos de
voltajes, corrientes, temperatura y estado de carga.

El controlador de carga actual utiliza el conteo de Amperes para el cálculo de estado de


carga y cuenta con el siguiente algoritmo:

Cada 4.68 segundos toma las lecturas de las corrientes que entran y salen de la
batería
Determina si la corriente sale (+) o entra (-) a la batería.
Suma o resta esta corriente con la suma de las corrientes de las muestras anteriores.
Cuando la suma de las muestras equivale a un 1% de la capacidad total de la batería,
incrementa o decrementa el estado de carga en un grado porcentual dependiendo si
la suma es positiva o negativa.

Además del algoritmo anterior, el controlador de carga actual cuenta con un ajuste que
posiciona el valor del estado de carga a 100% cuando se detecta un voltaje de batería de

31
14.7 volts (cuando la batería es de 12 volts nominales), y se considera éste como el voltaje
que indica un estado de carga del 100%.

Ahora bien, uno de los principales problemas con que se enfrenta el diseñador de
controladores de carga es el de medir en forma correcta las corrientes que circulan por el
sistema, ya que éstas pueden ser muy bajas durante un período y muy altas en otro, y los
sensores de corriente generalmente no tienen un comportamiento lineal en todo el rango
que se maneja y no son capaces de medir corrientes bajas y altas con la misma exactitud.

Debido a lo anterior, y a que el cálculo de estado de carga que realiza el controlador está
basado principalmente en la corriente de la batería, se llegó a la conclusión que dos de los
principales requisitos que se debían cumplir durante el diseño de la red eran:

a) Que la red se pudiera programar de manera sencilla en el microcontrolador y que no


fuera muy demandante computacionalmente.

b) Que la red sea capaz de realizar el cálculo del estado de carga sin necesidad de
involucrar la medición precisa de la corriente de la batería.

4.1 Generación de los datos para el entrenamiento de la red

Existen dos métodos de recopilar los datos para el entrenamiento de la red neuronal
utilizando el controlador de carga existente:

a) En el primer método, el controlador almacena cada cinco minutos la información de


la temperatura, los voltajes de batería y del panel y las corrientes de batería y carga.
Los datos almacenados en este caso son el resultado de un promedio de 64 muestras
tomadas a lo largo de 5 minutos. El valor de estado de carga es calculado cada
período de muestreo (4.68 segundos) y únicamente se almacena el valor instantáneo
de cada hora. En este caso existe un programa auxiliar en la estación central que
permite la recuperación de los datos y almacena la información recuperada.

b) El segundo método consiste en la recopilación de datos cada segundo por medio de


un programa auxiliar que interroga al controlador y almacena en un archivo los
valores correspondientes de voltajes de batería y del panel, corrientes de batería y
carga, temperatura y estado de carga instantáneos. Los datos recopilados por este
método son valores instantáneos obtenidos cada segundo.

Para la generación de los datos de entrenamiento se realizaron varios ciclos controlados de


carga y descarga de la batería, con el fin de recolectar datos completos y confiables para el
entrenamiento de la red.

Los ciclos de carga y descarga realizados fueron diseñados con el fin de generar dos tipos
de series de datos:

32
a) El primer tipo consiste en datos “secuenciales” de voltaje, corriente, temperatura y
estado de carga, esto con el fin de contar con los estados anteriores de dichas
mediciones, principalmente con el del estado de carga anterior.

b) El segundo tipo consiste en datos que contuvieran la información de la batería a


diferentes regímenes de carga/descarga y en diferentes condiciones de operación,
esto con el fin de caracterizar el comportamiento de la batería y así no tener que
utilizar el estado anterior de las variables de entrada.

La batería utilizada para la generación de los datos de entrenamiento es una batería plomo-
ácido sellada marca Power Sonic modelo PS-12330 NB de 12 volts y 33 Amperes-hora.

4.1.1 Generación de datos secuenciales

El primer ciclo de carga y descarga de la batería consistió en conectar el controlador de


carga con su respectiva batería a un panel fotovoltaico y a una carga electrónica como se
muestra en la figura 4.1. La carga conectada fue programada para demandar 4 amperes por
un período de 2 horas y media y activarse por la noche cuando el panel no aportara
corriente. Al final del período de descarga la carga se desactiva y permite que el panel
fotovoltaico cargue la batería con la corriente que pueda generar conforme trascurre el día.
Este proceso se realizó por 9 días y los datos recopilados de voltaje, corriente y temperatura
fueron almacenados cada cinco minutos en la memoria no volátil del controlador mientras
que el valor de estado de carga fue almacenado cada hora.

Panel
Fotovoltaico

Controlador
de Carga
Carga
Electrónica
Batería

Figura 4.1.- Arreglo para la generación de datos secuenciales

Otra característica de estos datos es que el estado de carga se almacena únicamente cada
hora y esto nos proporciona muy poca información en cuanto al comportamiento del estado
de carga durante este período. Ya que si existe una corriente de carga o descarga muy

33
grande en el período de una hora existirá un incremento o decremento muy grande en el
estado de carga que se observa hasta después de una hora.

Debido a lo anterior se utilizaron los valores de la corriente almacenada para calcular el


estado de carga de la batería cada cinco minutos utilizando el mismo algoritmo que utiliza
el controlador (conteo de amperes), lo anterior con el fin de tener un juego de datos mas
completo y confiable. Además, se consideraron únicamente muestras que no presentaran
ningún ajuste al 100% de estado de carga debido al voltaje de batería. En total se
recolectaron 2437 muestras secuenciales confiables y los datos son los que se muestran en
la figura 4.2.

120 15
115 14
110 13
105 12
100 11
EC (%) / Temperatura (oC)

95 10
90 9
8

Amperes / Volts
85
80 7
75 6
70 5
4
65 3
60 2
55 1
50 0
45 -1
40 -2
35 -3
30 -4
25 -5
20 -6
15 -7
1300

1700

2100
0

200
300

700

1000
1100
1200

1400
1500
1600

1800
1900
2000

2200
2300
2400
2500
100

400
500
600

800
900

Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería
Figura 4.2.- Datos secuenciales utilizados para el entrenamiento de la red

En la figura 4.2 se observan claramente los nueve ciclos de carga/descarga realizados a la


batería. Se observa que después de las descargas de 4 amperes sigue existiendo una
pequeña descarga de la batería debida al consumo del mismo controlador. Igualmente se
observa que para el noveno ciclo de carga, la batería ya no alcanza el 100% de estado de
carga lo que nos indica que el período de insolación no fue el suficiente como para que la
batería recuperara toda la energía que necesitaba.

Para verificar y validar la red en simulación se utilizaron los datos recolectados por un
controlador de carga que se encuentra en una torre de auxilio vial de la autopista México-
Cuernavaca. Dicho controlador se encuentra en campo por lo que los datos recolectados son
en condiciones reales no controladas. Los datos con los que se realizaron las pruebas y
validaciones en la simulación de la red son los recolectados por el controlador durante los
meses de diciembre de 2003 y enero de 2004 y se muestran en la figura 4.3.

34
120 15
115 14
110
105 13
100 12
95
EC (%) / Temperatura (oC)
90 11
85 10
80

Amperes / Volts
75 9
70
65 8
60 7
55
50 6
45 5
40
35 4
30 3
25
20 2
15 1
10
5 0
0 -1
-5
-10 -2
0
20
40
60
80

360
380
400
420
440
460
480
500
520
540
560
580
600
620
640
660
100
120
140
160
180
200
220
240
260
280
300
320
340

680
700
Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

a) Datos recolectados en el mes de diciembre de 2003

130 16
120 15
110 14
13
100
EC (%) / Temperatura (oC)

12
90 11
80 10

Amperes / Volts
70 9
60 8
7
50 6
40 5
30 4
20 3
10 2
1
0 0
-10 -1
-20 -2
0
30
60
90
120
150

210
240
270
300
330
360
390
420
450
480
510
540
570
600
630
660
690
720
750
180

Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería
b) Datos recolectados en el mes de enero de 2004

Figura 4.3.- Datos recolectados en la torre de auxilio vial utilizados para la validación de la red neuronal en la
etapa de simulación.

Con los datos de validación no se realizó el ejercicio de cálculo del estado de carga cada
cinco minutos como en el caso de los datos para el entrenamiento, sino que se tomaron

35
únicamente las muestras correspondientes a cada hora esto con el fin de comparar
exactamente con los cálculos realizados por el controlador.

4.1.2 Generación de datos a diferentes regímenes de carga/descarga

Para entrenar una red que utilice como entradas el voltaje de la batería, la corriente de la
batería y la temperatura, se generaron datos de entrenamiento que permitieran conocer el
comportamiento de la batería a diferentes regímenes de carga y descarga. Para lograrlo se
realizaron cargas y descargas controladas a una batería y se registró el comportamiento de
ésta cada segundo almacenando los datos en un archivo.

Las descargas controladas se realizaron con corrientes constantes, las cuales fueron: 1, 3, 5,
7, y 9 amperes, y las cargas se realizaron utilizando una fuente de alimentación en lugar de
un panel fotovoltaico con el fin de poder limitar la corriente de carga que entra a la batería
por el tiempo que ésta demanda grandes cantidades de corriente. Las cargas se realizaron
limitando la corriente a 1, 3 y 5 amperes y se consideró que la batería estaba cargada
cuando demandaba menos de 300 mA en forma sostenida.

Las gráficas correspondientes a cada ciclo carga/descarga se muestran en las figura 4.4, 4.5,
4.6 y 4.7, en donde se pueden observar las lecturas de voltaje de la batería, corriente de la
batería, temperatura y estado de carga. Para estos casos se realizaron ciclos de carga y
descarga de la batería hasta valores de estado de carga del 60 % con la finalidad de
caracterizar el rango completo de la batería. Para lograrlo se modificó el programa del
controlador de carga original para que el corte de la carga primaria se realizara hasta el 60%
de estado de carga en vez de al 75%.

130 16
120 15
14
110 13
100 12
90 11
10
Amperes / Volts

80
9
70 8
60 7
50 6
5
40 4
30 3
20 2
10 1
0
0 -1
-10 -2
12000
15000

21000
24000

30000
33000

39000

45000
48000
51000
54000
57000
60000
63000
66000
69000
72000
75000
78000
81000
84000
87000
0
3000
6000
9000

18000

27000

36000

42000

Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

Figura 4.4.- Datos recolectados en el ciclo de descarga /carga a corriente constante de 1 Amper

36
130
14
120
EC (%) / Te mp era tura (o C) 12
110
10
100

Amperes / Volts
90 8
80 6
70 4
60 2
50 0
40 -2
30 -4
20 -6
0
2000
4000
6000
8000
10000
12000
14000
16000
18000
20000
22000
24000
26000
28000
30000
32000
34000
36000
38000
40000
42000
44000
46000
Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

Figura 4.5.- Datos recolectados en el ciclo de descarga/carga a corriente constante de 3 Amperes

120 14
115 13
110
105 12
100 11
EC (%) / Temperatura (oC)

95
90 10
85 9

Amperes / Volts
80
75 8
70 7
65
60 6
55 5
50
45 4
40 3
35
30 2
25 1
20 0
15
10 -1
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
5500
6000
6500
7000
7500
8000
8500
9000

Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

Figura4.6.- Datos recolectados en el ciclo de descarga a corriente constante de 5 Amperes

37
120 16
112 14
104 12
96
10
88
8

Amperes / Volts
80
72 6
64 4
56 2
48 0
40 -2
32
-4
24
-6
16
-8

12000

14000

16000

18000

20000

22000

24000

26000

28000

30000
0

2000

4000

6000

8000

10000

Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

Figura 4.7.- Datos recolectados en el ciclo de descarga a corriente constante de 7 Amperes, carga a corriente
constante de 5 amperes y descarga a corriente constante de 9 Amperes.

Como puede observarse en las figuras anteriores, existió ruido en la medición del voltaje y
la corriente de la batería el cual se generó durante el proceso de muestreo. Analizando el
sistema se encontró que el ruido se presentó de forma aleatoria al momento de conmutar
entre los diferentes canales de lectura y se generó por software. Debido a lo anterior fue
necesario realizar un filtrado a los datos el cual consistió en eliminar las muestras que
presentaran lecturas de corriente o voltaje fuera del contexto de la prueba. Este filtrado
resultó ser muy sencillo ya que las lecturas erróneas son fácilmente identificables.

Finalmente, de todos los datos obtenidos durante los ciclos de carga y descarga se generó
un conjunto de datos único para el entrenamiento de la red.

Este conjunto de datos se formó tomando en cuenta que para cada valor de corriente
constante de carga o de descarga se tienen registrados los parámetros de voltaje y
temperatura correspondientes a cada valor de estado de carga (del 60% al 100%). Es decir,
con los datos obtenidos con los ciclos de carga/descarga se formó una tabla ordenada
primero por el valor de “Estado de carga” y después por el valor de “Corriente de batería”.

Con la tabla resultante se observó que para cada combinación de “Estado de


carga/Corriente de batería” existían varios valores de voltaje de batería. Lo anterior se debe
a que el algoritmo de conteo de amperes solo incrementa o decrementa el valor del estado
de carga de 1% en 1%, lo que provoca que el voltaje de la batería sufra una pequeña
variación antes de que el valor del estado de carga se vea afectado. Para formar el conjunto
de datos para el entrenamiento de la red se tomaron los voltajes máximo y mínimo de cada
combinación “Estado de carga/Corriente de batería” con el fin de definir un rango de

38
valores de voltaje válido para esa combinación y que fuera tomado en cuenta por la red
neuronal.

El conjunto de datos no secuenciales utilizado para el entrenamiento de la red se muestra en


la figura 4.8.

100 30
95 27
90 24
85 21
EC (%) / Temperatura (oC)

80 18
75 15

Amperes / Volts
70 12
65 9
60 6
55 3
50
0
45
-3
40
-6
35
-9
30
25 -12
20 -15
0
40
80
120
160
200
240
280
320
360
400
440
480
520
560
600
640
680
720
Muestra
Estado de Carga Voltaje Batería
Temperatura Corriente Batería

Figura 4.8.- Datos no secuenciales para el entrenamiento de la red conformados con los datos recolectados
durante los ciclos de carga/descarga a diferentes regímenes.

Como se puede observar en la figura 4.8 el conjunto de datos fue ordenado primero por
tipo de ciclo (descarga/carga) después por el valor de estado de carga, valor de corriente de
batería y por último por los voltajes máximo y mínimo.

4.2 Topologías propuestas

Como se mencionó en el capítulo anterior, la literatura reporta el uso de redes neuronales


para el cálculo del estado de carga de baterías, donde las redes utilizadas cuentan con su
capa de entrada, capas ocultas y capa de salida con pesos configurables. Cabe aclarar que
únicamente se han reportado trabajos en simulación, y no se han implementado
prácticamente.

En nuestro caso se propuso utilizar como base el Sistema de Inferencia Neuro-Difuso


Adaptable (ANFIS) propuesto por Jyh-Shing Roger Jang [20], ya que las redes adaptables
neuro-difusas combinan los sistemas de inferencia difusos y las redes neuronales,
aprovechando las características sobresalientes de cada modelo. Por un lado, los sistemas

39
de inferencia difusos proveen un mecanismo intuitivo y de alto nivel para representar el
conocimiento mediante la utilización de reglas IF/THEN. Por otro lado, las redes
neuronales poseen un alto grado de adaptabilidad y capacidad de aprendizaje y
generalización. La construcción de herramientas que se nutren de estas dos áreas ha
demostrado ser un mecanismo eficiente para modelar sistemas reales.

Los diferentes modelos de inferencia difusos, dan lugar a diferentes arquitecturas ANFIS.
El utilizado en esta tesis corresponde a el modelo de inferencia difuso Takagi-Sugeno-Kang
(TSK) debido a su eficiencia.

Además, utilizar este tipo de redes neuro-difusas para el cálculo del estado de carga, tiene
como una de las grandes ventajas contar ya con una herramienta para el entrenamiento de la
red [24].

Otra ventaja es que se tiene acotada de alguna manera la topología de la red, es decir, se
conocen perfectamente el número de capas internas y las operaciones que se realizan en
ellas, lo que simplifica en gran medida el trabajo de dimensionamiento de la red. Lo único
que queda por determinar es el número y propiedades de las señales de entrada, así como el
tipo de funciones a programar en los nodos de entrada

Como la implementación final de la red se hizo en un microprocesador, esto marcó las


principales restricciones para el diseño de la red, las cuales fueron:

Debía ser de fácil programación para no consumir recursos excesivos del micro
Que no fuera muy demandante computacionalmente
Tener como entradas variables que sean medibles en línea o fácilmente calculadas
por el mismo controlador.

La primera restricción acotó principalmente el tipo de funciones de membresía a programar


en los nodos de entrada, ya que en el microprocesador la programación de funciones con
operaciones exponenciales, que son las que normalmente se utilizan en este tipo de redes
neuro-difusas [20], pueden ser muy complejas o demandantes, por lo que se acotaron estas
funciones a aquellas que involucraran operaciones mas sencillas como lo son las funciones
trapezoidales y triangulares. Entre ambos tipos de funciones se eligió trabajar con la
función trapezoidal ya que es la que permite mayor número de parámetros de ajuste [20] y
las operaciones involucradas son las mismas que en el caso de las funciones triangulares.

Igualmente se observó que para que la red no fuera demasiado demandante en cuanto
procesamiento, se debería considerar el menor número de reglas o combinaciones posibles.
Por ejemplo, si se consideran 4 entradas a la red con dos funciones de pertenencia cada una
se deberían programar 24 = 16 reglas mientras que si se consideraban 3 entradas con las
mismas dos funciones de pertenencia se deberían programar 23 = 8 reglas. Igualmente, si se
consideran tres funciones de pertenencia para cada entrada tendríamos 34 = 81 reglas y 33
= 27 reglas para 4 y 3 entradas respectivamente.

Por todos los puntos anteriores se propuso ocupar tres entradas a la red con dos funciones
trapezoidales cada una en los nodos de entrada y se propusieron dos topologías posibles:

40
a) Una que considera como entradas el estado de carga anterior, el voltaje de batería y
la temperatura. Esto debido a que se ve como buena aportación que no se considere
la corriente de la batería para realizar el cálculo de estado de carga
b) Y otra que considera como entradas la corriente y el voltaje de la batería y la
temperatura. Esto debido a que se cuenta con suficientes datos como para entrenar
correctamente una red que calcule el estado de carga sin involucrar condiciones
anteriores de las variables.

En la figura 4.9 se muestran las dos topologías propuestas representadas de acuerdo a la


arquitectura ANFIS descrita en la sección 3.5.1.

Reglas w8 w8*z8 Combinaciones


Lineales de las
Entradas
ECant

Suma de las
Combinaciones
Σwi*zi
Temp Lineales

Vbat Σwi*zi
= EC
w1*z1 Σwi

w1
Σwi Suma de Pesos de las
Funciones Trapezoidales Reglas

a) Entradas: Estado de Carga Anterior, Voltaje de Batería y Temperatura

Reglas w8 w8*z8 Combinaciones


Lineales de las
Entradas
Ibat

Suma de las
Combinaciones
Temp Σwi*zi
Lineales

Vbat Σwi*zi
= EC
w1*z1 Σwi

w1
Σwi Suma de Pesos de las
Funciones Trapezoidales Reglas

b) Entradas: Corriente de Batería, Voltaje de Batería y Temperatura

Figura 4.9.- Topologías propuestas con dos funciones de pertenencia trapezoidales a la entrada

41
En la figura 4.9 se observa que en ambas topologías las entradas a la red son variables que
se pueden medir o calcular en el controlador. Las funciones de pertenencia programadas en
la primera capa son funciones trapezoidales con parámetros configurables. Las reglas en la
segunda capa son todas las combinaciones posibles entre las entradas. Las salidas de la
tercera capa son el resultado de las combinaciones lineales de las entradas y finalmente se
tienen los nodos de suma y ponderación de los pesos correspondientes a cada entrada.

4.3 Determinación de la mejor topología

Con el fin de determinar la mejor topología entre las dos propuestas para su
implementación en el micro, se realizó el entrenamiento de las dos redes y se analizaron los
siguientes puntos:

Valor del error cuadrático medio y de los errores absolutos alcanzados después del
entrenamiento
Complejidad para la programación en el microcontrolador.

4.3.1 Entrenamientos de las diferentes topologías

Se realizó un programa en Matlab para realizar el entrenamiento de la red utilizando la


herramienta ANFIS.

4.3.1.1 Primera Topología (ECant, Temp, Vbat)

Primero se entrenó la red que utiliza como entradas el voltaje de la batería, la temperatura y
el estado de carga anterior, y se utilizaron como datos de entrenamiento y validación de esta
red los datos secuenciales recolectados para este fin (Figura 4.2). Se utilizaron como datos
de entrenamiento los datos impares y como datos de validación los datos pares.

En la gráfica de la figura 4.10 se muestra el error cuadrático medio calculado en cada época
de entrenamiento hasta la época 100. Para determinar el número de épocas necesarias para
el entrenamiento, se usó el criterio de detener el entrenamiento cuando se detecte el primer
periodo estable de los errores. Para este caso se observa que alrededor de la época 50 se
presenta un comportamiento muy estable de los errores, por lo que se decidió que el
entrenamiento se detendría en la época 50, en donde el error cuadrático medio calculado
para los datos de entrenamiento alcanza un valor de 0.104844 y para los datos de validación
un valor de 0.108328.

42
Figura 4.10.- Comportamiento del error cuadrático medio conforme se incrementa el número de épocas.

La gráfica de la figura 4.11a presenta los valores de salida esperados y los calculados por la
red al evaluar los datos de entrenamiento. En la grafica 4.11b se presenta el error en cada
uno de los puntos evaluados (Valor Esperado-Valor Calculado) y se observa que no se tiene
un error mayor al 1%.

a) Salidas esperada y calculada por la red neuronal al evaluar los datos de entrenamiento con una red
entrenada 50 épocas.

43
b) Error = Valor Esperado – Valor Calculado, el error absoluto no rebasa el 1%

Figura 4.11.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
entrenamiento con una red entrenada 50 épocas.

La gráfica de la figura 4.12a presenta los valores de salida esperados y los calculados por la
red al evaluar los datos de validación. . En la grafica 4.12b se presenta el error en cada uno
de los puntos evaluados y se observa que no se tiene un error mayor al 1.6%.

a) Salidas esperada y calculada por la red neuronal al evaluar los datos de validación con una red entrenada 50
épocas.

44
b) Error = Valor Esperado – Valor Calculado, el error absoluto no rebasa el 1.6%

Figura 4.12.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
validación con una red entrenada 50 épocas .

Como puede observarse al evaluar esta primera topología, tanto el error cuadrático medio,
que se observa en la figura 4.10, así como los errores absolutos que se observan en las
figuras 4.11 y 4.12 son valores relativamente pequeños lo que nos indica un buen
entrenamiento y desempeño de la red. En apartados posteriores se efectúa una simulación
de la red en Matlab donde se prueba el desempeño de la misma con datos reales de campo.

En la figura 4.13 se presentan las funciones de pertenencia de la red entrenada 50 épocas y


se especifican los parámetros (a, b, c, d) de las funciones de pertenencia trapezoidales de
los nodos de entrada (parámetros de la premisa) así como los parámetros [o, p, q, r] de las
combinaciones lineales conocidos como parámetros del consecuente. En la figura inxmfy
representa la función de pertenencia y de la entrada x.

45
in1mf1 in2mf1

in1mf2 in2mf2

in3mf1

in3mf2

Parámetros de las funciones de pertenencia inxmfy = trap(ayx, byx, cyx, dyx) en los nodos de entrada o parámetros
de la premisa:

in1mf1=trap(-10.1551,-4.1302,4.9072,10.9321);
in1mf2=trap(4.9072,10.9321,19.9695,25.9944); }Funciones de pertenencia para el Voltaje
in2mf1=trap(-25.1250,-10.3750,12.0952,31.4179);
in2mf2=trap(11.2920,27.1942,48.6250,63.3750); }Funciones de pertenencia para Temperatura
in3mf1=trap(35.5172,52.1045,79.3910,93.9664);
in3mf2=trap(73.6685,94.0938,118.4538,135.0411); }Funciones de pertenencia para EC Anterior
donde inxmfy representa la función de pertenencia y de la entrada x.

Parámetros [oi, pi, qi, ri] para las combinaciones lineales fi o parámetros del consecuente

[o1, p1, q1, r1] = [0.0020 0.0014 0.9997 0.0167];

}
[o2, p2, q2, r2] = [0 0 0 0];
[o4, p3, q3, r3] = [0 0 0 0];
[o4, p4, q4, r4] = [0 0 0 0]; fi= oi VBat + pi Temp + qi ECant + ri
[o5, p5, q5, r5] = [-0.5014 0.0118 1.0036 5.3666];
[o6, p6, q6, r6] = [ 0.9501 -0.0841 1.2384 -33.5536];
[o7, p7, q7, r7] = [ 1.4603 -0.0834 0.9915 -15.7156];
[o8, p8, q8, r8] = [ 0.7818 0.0257 0.9954 -10.9908];

Figura 4.13.- Funciones de pertenencia y parámetros de la red entrenada 50 épocas.

46
4.3.1.2 Segunda Topología (Ibat, Temp, Vbat)

En la segunda topología propuesta se utilizaron como entradas la temperatura, el voltaje y


la corriente de la batería. Para el entrenamiento de esta red se utilizó el conjunto de datos no
secuencial resultante de la combinación de los datos obtenidos durante los ciclos de carga y
descarga controlados detallados en la sección 4.1.2 (ver figura 4.8).

El primer entrenamiento realizado para esta topología consistió en utilizar los datos de
carga y descarga juntos con la finalidad de generar una sola red que nos permitiera el
cálculo del estado de carga.

En la figura 4.14 se presenta el comportamiento del error cuadrático medio calculado en


cada época hasta la época 160. Como se puede observar, en este caso el error mínimo
alcanzado es de 2.0833 que es bastante grande en comparación con el obtenido con la
topología anterior.

Figura 4.14.- Comportamiento del error cuadrático medio conforme se incrementa el número de épocas.

La gráfica de la figura 4.15a presenta los valores de salida esperados y los calculados por la
red al evaluar los datos de entrenamiento. En la grafica 4.15b se presenta el error en cada
uno de los puntos evaluados y se observa que se alcanzan errores mayores al 6%.

47
a) Salidas esperada y calculada por la red neuronal al evaluar los datos de entrenamiento con una red
entrenada 160 épocas.

b) Error = Valor Esperado – Valor Calculado, el error absoluto alcanza el 6%

Figura 4.15.- Comparación entre la salida esperada y la calculada por la red neuronal al evaluar los datos de
entrenamiento con una red entrenada 160 épocas .

48
Para disminuir el error obtenido al tratar de entrenar una sola red para el cálculo del estado
de carga se propuso manejar dos redes, una que calcule el estado de carga cuando la batería
se encuentra cargando y la segunda que lo calcule cuando se esta descargando. Con esto se
pretende reducir el error final después del entrenamiento, ya que se puede considerar que en
este caso la red cuenta en realidad con cuatro funciones de pertenencia a la entrada, dos
para cuando la corriente es negativa y dos para cuando la corriente es positiva.

En la figura 4.16 se presenta el comportamiento del error cuadrático medio para la red que
calculará el estado de carga cuando la batería se esté cargando, en donde se observa un
error final de 0.78495 después de 200 épocas de entrenamiento.

Figura 4.16.- Comportamiento del error cuadrático medio de la red que calcula el estado de carga cuando la
batería se esta cargando.

La gráfica de la figura 4.17a presenta los valores de salida esperados y los calculados por la
red al evaluar los datos de entrenamiento de la red para la carga. En la grafica 4.17b se
presenta el error en cada uno de los puntos evaluados y se observa que se alcanzan errores
mayores al 2.5%.

49
a) Salidas esperada y calculada por la red neuronal (de carga) al evaluar los datos de entrenamiento con una
red entrenada 200 épocas.

b) Error = Valor Esperado – Valor Calculado, el error absoluto alcanza el 2.5%

Figura 4.17.- Comparación entre la salida esperada y la calculada por la red neuronal (de carga) al evaluar los
datos de validación con una red entrenada 200 épocas.

En la figura 4.18 se presenta el comportamiento del error cuadrático medio para la red que
calculará el estado de carga cuando la batería se esté descargando, en donde se observa un
error final de 2.06155 después de 500 épocas de entrenamiento.

50
Figura 4.18.- Comportamiento del error cuadrático medio de la red que calcula el estado de carga cuando la
batería se esta descargando.

La gráfica de la figura 4.19a presenta los valores de salida esperados y los calculados por la
red al evaluar los datos de entrenamiento de la red para la descarga. En la grafica 4.19b se
presenta el error en cada uno de los puntos evaluados y se observa que se alcanzan errores
mayores al 5%.

a) Salidas esperada y calculada por la red neuronal (de descarga) al evaluar los datos de entrenamiento con
una red entrenada 500 épocas.

51
b) Error = Valor Esperado – Valor Calculado, el error absoluto alcanza el 6%

Figura 4.19.- Comparación entre la salida esperada y la calculada por la red neuronal (de descarga) al evaluar
los datos de validación con una red entrenada 500 épocas.

En resumen, de los resultados obtenidos y mostrados en las figuras de la 4.14 a la 4.19


concluimos que los mejores resultados se obtendrían si se consideran dos redes separadas,
una para la carga y otra para la descarga de la batería. Como se observa en la figura 4.17, la
mejoría es principalmente para el caso de la carga en donde sí se observa una disminución
del error cuadrático medio y del error absoluto. Para el caso de la descarga (figura 4.19) se
observa que la disminución en el error no es tan significativa como en el caso de la carga.

En la figura 4.20 se presentan las funciones de pertenencia de la red entrenada para calcular
el estado de carga de la batería cuando ésta se encuentra recibiendo corriente, es decir, se
está cargando. En este caso se emplearon 200 épocas de entrenamiento, que es el punto en
donde se considera que el error cuadrático medio ya alcanzó un valor estable.

En la figura 4.21 se presentan las funciones de pertenencia de la red entrenada para calcular
el estado de carga de la batería cuando ésta se encuentra entregando corriente, o lo que es lo
mismo, se está descargando. En este caso se emplearon 500 épocas de entrenamiento con el
fin de demostrar que aun aumentando el número de épocas de entrenamiento no se observa
mejoría en los resultados.

52
in1mf1 in2mf1

in1mf2 in2mf2

in3mf1

in3mf2

Parámetros de las funciones de pertenencia inxmfy = trap(ayx, byx, cyx, dyx) en los nodos de entrada o parámetros
de la premisa:

in1mf1=trap(11.4907, 12.3105, 13.6136, 13.9803);


in1mf2=trap(13.3555, 13.7744, 15.5899, 16.4097); }Funciones de pertenencia para el Voltaje
in2mf1=trap(-8.3297, -6.5069, -3.9453. -2.4164);
in2mf2=trap(-3.2294, -2.1646. 0.7843, 2.6071); }Funciones de pertenencia para Temperatura
in3mf1=trap(18.6062, 21.8313, 26.8551, 29.9560);
in3mf2=trap(25.9084, 30.0444, 34.7313, 37.9562); }Funciones de pertenencia para EC Anterior
donde inxmfy representa la función de pertenencia y de la entrada x.

Parámetros [oi, pi, qi, ri] para las combinaciones lineales fi o parámetros del consecuente

[o1, p1, q1, r1] = [6.9900 9.6496 7.5532 -180.8114];

}
[o2, p2, q2, r2] = [12.7352 -8.8688 3.1684 -250.4409];
[o4, p3, q3, r3] = [36.6809 16.6845 0.5102 -408.6821];
[o4, p4, q4, r4] = [45.5115 -3.7479 2.1098 -591.1141]; fi= oi VBat + pi Temp + qi ECant + ri
[o5, p5, q5, r5] = [-9.0962 7.9442 7.1958 34.6644];
[o6, p6, q6, r6] = [9.8073 1.6618 -0.7629 -20.9193];
[o7, p7, q7, r7] = [-0.6737 10.9324 -9.0210 357.1945];
[o8, p8, q8, r8] = [1.8605 2.9147 -3.4615 183.1739];

Figura 4.20.- Funciones de pertenencia y parámetros de la red de carga entrenada 200 épocas.

53
in1mf1 in2mf1

in1mf2 in2mf2

in3mf1

in3mf2

Parámetros de las funciones de pertenencia inxmfy = trap(ayx, byx, cyx, dyx) en los nodos de entrada o parámetros
de la premisa:

in1mf1=trap (10.4694, 11.1441, 12.1633, 12.7960);


in1mf2=trap (12.2151, 12.8435, 13.8428, 14.5175); }Funciones de pertenencia para el Voltaje
in2mf1=trap(-4.8835, -1.5453, 3.3901, 6.7072);
in2mf2=trap(3.4074, 6.7284, 11.8077, 15.1459); }Funciones de pertenencia para Corriente
in3mf1=trap(18.2813, 22.4063, 28.4941, 32.7313);
in3mf2=trap(29.3721, 32.5992, 38.9063, 43.0313); }Funciones de pertenencia de Temperatura
donde inxmfy representa la función de pertenencia y de la entrada x.

Parámetros [oi, pi, qi, ri] para las combinaciones lineales fi o parámetros del consecuente

[o1, p1, q1, r1] = [-99.1 5.6 4.2 1141.8];

}
[o2, p2, q2, r2] = [133.1 4.4 23 -2317.7];
[o3, p3, q3, r3] = [29.5592 -10.4853 -4.6851 -54.8991];
[o4, p4, q4, r4] = [56.6711 2.3263 0.3881 -635.2207]; fi= oi VBat + pi IBat + qi Temp + ri
[o5, p5, q5, r5] = [-37.3481 13.3574 -5.4316 713.9770];
[o6, p6, q6, r6] = [-210 -10. 14.4 2344.9];
[o7, p7, q7, r7] = [9.2351 10.6425 11.2906 -431.3342];
[o8, p8, q8, r8] = [-33.2 48.6 -29.6 1073.6];

Figura 4.21.- Funciones de pertenencia y parámetros de la red de descarga entrenada 500 épocas.

54
4.3.2 Selección de la Topología

Como se mencionó anteriormente para la selección de la topología a implementar en el


microcontrolador se utilizaron los siguientes criterios

Valor del error cuadrático medio y de los errores absolutos alcanzados después del
entrenamiento
Baja complejidad para la programación en el microcontrolador.

En cuanto al valor de los errores, es claro que la primera topología resulta mas conveniente,
pues su error cuadrático medio esta en el orden de 10-1 mientras que en el segundo caso no
se pudo reducir de 0.78495 y únicamente para el caso de la carga ya que para la descarga es
mucho mayor (2.06155), además de que en la segunda topología existen errores absolutos
muy grandes que afectarían considerablemente la confiabilidad del controlador.

Igualmente, al considerar la complejidad de programación en el microprocesador, la


primera topología resulta menos compleja que la segunda, ya que para poder reducir el
error en la segunda topología es necesario configurar dos redes en el microcontrolador.
Aparte de lo anterior, también es importante considerar que el manejo de datos negativos en
un microprocesador siempre complica la programación, por lo que la segunda topología
incrementa su complejidad al manejar la corriente tanto positiva como negativa.

Como ventaja adicional, en el caso de la primera topología no se utiliza la medición de la


corriente de la batería como entrada a la red, lo cual implica una gran ventaja ya que la
medición de corriente siempre implica un problema, ya sea de disipación, precisión o
complejidad del hardware. Una aportación importante de esta tesis es lograr estimar
confiablemente estados de carga sin medir la corriente.

Tomando en cuenta todas las observaciones anteriores, se concluyó que la mejor topología
de las dos propuestas es la que considera como entradas a la red: el voltaje de la batería, el
estado de carga anterior y la temperatura. Con base a lo anterior se decidió que la red a
implementar en el controlador es la mostrada en la figura 4.9a con los parámetros indicados
en la figura 4.13.

4.3.3 Simulación de la topología seleccionada

Para la simulación de la red seleccionada se programó la estructura de la red por medio de


líneas de código en Matlab, utilizando funciones de pertenencia trapezoidales y dos
funciones de pertenencia por entrada.

Como se mencionó anteriormente, para verificar y validar la red en simulación se utilizaron


los datos recolectados por un controlador de carga que se encuentra en una torre de auxilio
vial de la autopista México-Cuernavaca. Dicho controlador se encuentra en campo por lo
que los datos recolectados son en condiciones reales no controladas. Los datos con los que
se realizaron las pruebas y validaciones en la simulación de la red son los recolectados por

55
el controlador durante los meses de diciembre de 2003 y enero de 2004 y se muestran en la
figura 4.3.

La figura 4.22a muestra la comparación entre los valores de estado de carga registrados por
el controlador y los calculados por la red neuronal programada en Matlab utilizando los
datos del mes de diciembre de 2003 sin ningún tipo de filtrado.

En la gráfica 4.22b se presenta el error en cada una de las combinaciones evaluadas y se


observa que existen puntos en donde se alcanzan errores mayores al 20%.

Realizando el cálculo del error cuadrático medio (RMSE) para este caso se obtiene un valor
de 1.7803.

Si se analiza detenidamente la figura 4.22 se observa que los errores mal altos en el cálculo
del estado carga se registran cuando el algoritmo del controlador realiza un ajuste del
estado de carga al 100% debido a la lectura del voltaje en la batería de 14.7 volts.

Debido a lo anterior, y a que para el entrenamiento de la red no se consideraron estos


ajustes, una forma mas justa de evaluar el desempeño de la red simulada es considerando
un rango de datos que no involucre ningún ajuste al 100% de estado de carga debido al
voltaje de 14.7 volts. La figura 4.23a muestra la comparación entre los valores de estado de
carga registrados por el controlador y los calculados por la red neuronal programada en
Matlab utilizando un rango de datos del mes de diciembre de 2003 que no involucran
ningún ajuste al 100%. De igual manera, en la grafica 4.23b se presenta el error en cada una
de las combinaciones evaluadas y se observa que los errores no rebasan el 3%.

Realizando el cálculo del error cuadrático medio (RMSE) para este caso se obtiene un valor
de 1.0451.

a) Estado de carga registrado en el controlador y calculado por la red neuronal simulada al evaluar los datos
de campo del mes de diciembre de 2003 completos.

56
b) Error = Valor Esperado – Valor Calculado, en algunos puntos el error absoluto alcanza el 20%

Figura 4.22.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar los datos de campo del mes de diciembre de 2003 completos.

a) Estado de carga registrado en el controlador y calculado por la red neuronal simulada al evaluar un rango
sin ajustes al 100% de los datos de campo del mes de diciembre de 2003 .

57
b) Error = Valor Esperado – Valor Calculado, en algunos puntos el error absoluto alcanza el 3%

Figura 4.23.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar un rango de los datos de campo del mes de diciembre de 2003.

La figura 4.24a muestra la comparación entre los valores de estado de carga registrados por
el controlador y los calculados por la red neuronal programada en Matlab utilizando los
datos del mes de enero de 2004 sin ningún tipo de filtrado.

En la grafica 4.24b se presenta el error en cada una de las combinaciones evaluadas y se


observa que existen puntos en donde se alcanzan errores mayores al 20%.
Realizando el cálculo del error cuadrático medio (RMSE) para este caso se obtiene un valor
de 1.6487.

Si se analiza la figura 4.24 se observa el mismo fenómeno que el observado cuando se


realizó la simulación utilizando los datos del mes de diciembre de 2004, es decir, los
errores mal altos en el cálculo del estado carga se registran cuando el algoritmo del
controlador realiza un ajuste del estado de carga al 100% debido a la lectura del voltaje en
la batería de 14.7 volts.

58
a) Estado de carga registrado en el controlador y calculado por la red neuronal simulada al evaluar los datos
de campo del mes de enero de 2004 completos.

b) Error = Valor Esperado – Valor Calculado, en algunos puntos el error absoluto alcanza el 20%

Figura 4.24.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar los datos de campo del mes de enero de 2004 completos.

Debido a lo anterior, se procedió de la misma manera que en la simulación anterior y la


figura 4.25a muestra la comparación entre los valores de estado de carga registrados por el
controlador y los calculados por la red neuronal programada en Matlab utilizando un rango
de datos que no involucran ningún ajuste forzado de los datos del mes de enero de 2004. De
igual manera, en la gráfica 4.25b se presenta el error en cada una de las combinaciones
evaluadas y se observa que los errores existentes no rebasan el 3.5%.

Realizando el cálculo del error cuadrático medio (RMSE) para este caso se obtiene un valor
de 0.9569.

59
a) Estado de carga registrado en el controlador y calculado por la red neuronal simulada al evaluar un rango
sin ajustes al 100% de los datos de campo del mes de enero de 2003 .

b) Error = Valor Esperado – Valor Calculado, en algunos puntos el error absoluto alcanza el 3.5%

Figura 4.25.- Comparación entre el valor del estado de carga registrado por el controlador y el calculado por
la red neuronal simulada al evaluar un rango de los datos de campo del mes de enero de 2004.

Como puede observarse en las simulaciones realizadas, los valores de los errores absoluto y
el cuadrático medio son mas grandes que los calculados con los datos de entrenamiento y
de validación durante el entrenamiento de la red. Lo anterior se explica fácilmente
recordando un factor que debe tomarse muy en cuenta para la evaluación del
comportamiento de la red durante la simulación, y es que la red fue entrenada con datos de
cada cinco minutos en donde el comportamiento del estado de carga es mas continuo,
mientras que los datos para la simulación son datos de campo registrados cada hora, en
donde pueden observarse variaciones muy bruscas del estado de carga entre un conjunto de
datos y otro, y que a pesar de todo la red es capaz de compensar.

60
De lo observado en las simulaciones podemos concluir que a pesar de que los valores de los
errores absolutos alcanzan a ser mayores al 3% el comportamiento de la red se puede
considerar muy adecuado, ya que estos errores no son continuos y el error cuadrático medio
en ambas simulaciones es alrededor de 1% a pesar de que los datos de las simulaciones
fueron tomados cada hora.

Otro factor a tomar en cuenta para la evaluación de la red, es que no se utiliza la medición
de la corriente de la batería como entrada a la red, lo cual implica una gran ventaja ya que
la medición de corriente siempre implica un problema, ya sea de disipación, precisión o
complejidad del hardware.

61
5 Implementación y Pruebas

Una vez comprobado a través de la simulación que la red seleccionada tiene un buen
comportamiento se procedió a su implementación en el controlador de carga mostrado en la
figura 5.1 y que fue desarrollado en la Gerencia de Control e Instrumentación del IIE.
Dicho controlador está basado en un microcontrolador MSP430F147 de Texas Instruments
y para la programación de la red en el microcontrolador se utilizó el paquete “Embedded
Workbench” de IAR Systems.

Figura 5.1.- Controlador de carga desarrollado en el IIE

Para la implementación de la red se desarrolló una función en ensamblador que efectúa el


cálculo de la red neuronal y que se ejecuta a la par del algoritmo de conteo de amperes. Sin

62
embargo, durante las primeras pruebas, el controlador siguió basando sus decisiones en los
cálculos efectuados por el conteo de amperes.

Para las pruebas finales se modificó el programa original con el propósito de que el
controlador basara sus decisiones ahora en los cálculos de estado de carga realizados por la
red neuronal.

Con los resultados de las pruebas desarrolladas se realizó una comparación entre los dos
algoritmos de cálculo de estado de carga y se comprobó que el cálculo realizado por el
algoritmo de la red neuronal propuesta es más confiable que el algoritmo de conteo de
amperes original.

5.1 Implementación de la red en el controlador de carga

Para poder implementar la red neuronal en el microcontrolador fue necesario tomar en


cuenta varias consideraciones.

La primera situación a resolver fue que el microcontrolador no maneja por sí mismo


números de punto flotante. Para no perder precisión en el cálculo de estado de carga, los
términos independientes de las combinaciones lineales de salida y los parámetros de las
funciones de pertenencia trapezoidales del valor de estado carga anterior se multiplicaron
por un factor de 102 y se redondearon en su último dígito. Debido a que su valor numérico
era más pequeño, los parámetros de las funciones de pertenencia trapezoidales del voltaje y
de la temperatura así como los demás parámetros de las combinaciones lineales se
multiplicaron por un factor de 103.

Los factores anteriores fueron determinados tomando en cuenta que se decidió utilizar
únicamente variables tipo word las cuales tienen un valor máximo de 65535, siempre y
cuando no se maneje el bit de signo. La restricción de utilizar variables tipo byte se debe a
la finalidad de no complicar la programación además de cuidar la capacidad de memoria
del microcontrolador, ya que no hay que olvidar que la red es únicamente una parte de la
programación total que existe en el controlador de carga.

Claro está que al manejar los parámetros de la red multiplicados por factores de 103 y 102
las variables de entrada a la red también tienen que estar afectadas por su correspondiente
factor, por lo que las variables de voltaje de batería y temperatura se utilizan multiplicadas
por 103 y la variable estado de carga anterior por un factor de 102, el resultado final de la
red se obtiene con una precisión de 2 decimales, es decir multiplicado por un factor de 102.

Una última consideración realizada con la finalidad de simplificar la programación para


este trabajo es que en la práctica tanto el voltaje de la batería como la temperatura son
siempre positivos, por lo que los parámetros de las funciones de pertenencia del voltaje de
batería y de temperatura que son negativos se acotaron a valores muy cercanos a cero pero
positivos. La consideración de no tomar temperaturas negativas se justifica si observamos
que en los datos de entrenamiento de la red no existe en ningún caso un valor negativo de

63
temperatura por lo que se considera como un trabajo futuro el realizar un nuevo
entrenamiento de la red con datos que consideren un rango más amplio de temperatura.

Los parámetros de la red configurados en el microcontrolador son los mostrados en la


figura 5.2.

Parámetros de las funciones de pertenencia inxmfy = trap(ayx, byx, cyx, dyx) en los nodos de entrada o parámetros
de la premisa:

in1mf1 = trap(0, 1, 4907, 10932);


in1mf2 = trap(4907, 10932, 19970, 25994); }Funciones de pertenencia para el Voltaje
in2mf1 = trap(0, 1, 12095, 31418);
in2mf2 = trap(11292, 27194, 48625, 63375); }Funciones de pertenencia para Temperatura
in3mf1 = trap(3552, 5210, 7939, 9397);
in3mf2 = trap(7367, 9409, 11845, 13504); }Funciones de pertenencia para EC Anterior
donde inxmfy representa la función de pertenencia y de la entrada x.

Parámetros [oi, pi, qi, ri] para las combinaciones lineales fi o parámetros del consecuente

[o1, p1, q1, r1] = [2 1 999 2];

}
[o2, p2, q2, r2] = [0 0 0 0];
[o3, p3, q3, r3] = [0 0 0 0];
[o4, p4, q4, r4] = [0 0 0 0]; fi= oi VBat + pi Temp + qi ECant + ri
[o5, p5, q5, r5] = [-501 12 1004 537];
[o6, p6, q6, r6] = [ 950 -84 1238 -3355];
[o7, p7, q7, r7] = [ 1460 -83 992 -1572];
[o8, p8, q8, r8] = [ 782 26 995 -1099];

Figura 5.2.- Funciones de pertenencia y parámetros de la red programada en el controlador de carga.

Si bien es cierto que la red no utiliza como una de sus entradas la corriente de la batería, si
es necesario considerar esta variable, no como parámetro para el cálculo del estado de
carga, sino como una referencia para determinar la frecuencia con que se debe ejecutar la
red neuronal. Esto es, un problema a resolver durante la implementación de la red en el
controlador de carga fue determinar cada cuánto tiempo se debe ejecutar la función que
calcula la red neuronal.

El siguiente ejemplo ilustra el problema. Supongamos que la red se ejecuta cada segundo y
tomemos como entrada un juego de datos: Voltaje de batería (Vbat = 12.2798), temperatura
(Temp = 29.6875), estado de carga anterior (ECant = 85.3947). Al ejecutarse la red
tendríamos un nuevo estado de carga resultante EC = 84.3056 el cual será el estado de
carga anterior en la siguiente ejecución de la red. Si suponemos que la red se ejecuta cada
segundo, en una aplicación real tanto el voltaje de la batería como la temperatura se

64
mantienen prácticamente constantes, por lo que las nuevas entradas a la red serán los
mismos valores de voltaje y temperatura y el nuevo valor de estado de carga anterior: Vbat =
12.2798, Temp = 29.6875, ECant = 84.3056, lo que representa un conjunto de datos
distinto al inicial. Al ejecutar la red con este nuevo conjunto de datos de entrada nos da
como resultado EC = 83.2327. En la tabla 5.1 se muestran 10 ejecuciones de la red
neuronal considerando que el voltaje de la batería y la temperatura no cambian.

Tabla 5.1.- Simulación de la ejecución de la red neuronal cada segundo


suponiendo constantes el voltaje de la batería y la temperatura.

Segundo / Vbat Temp Ecant EC


Ejecución
1 12.2798 29.6875 84.3056 83.2327
2 12.2798 29.6875 83.2327 82.1777
3 12.2798 29.6875 82.1777 81.1420
4 12.2798 29.6875 81.1420 80.1268
5 12.2798 29.6875 80.1268 79.1331
6 12.2798 29.6875 79.1331 78.1604
7 12.2798 29.6875 78.1604 77.2062
8 12.2798 29.6875 77.2062 76.2729
9 12.2798 29.6875 76.2729 75.3628
10 12.2798 29.6875 75.3628 74.4784

Como puede observarse en la tabla 5.1, si bajo las condiciones anteriores ejecutamos la red
neuronal cada segundo tendríamos que después de 10 segundos el controlador
desconectaría la carga principal al detectar que la batería se encuentra a menos del 75% de
estado de carga lo que no sería correcto, ya que no hay nada que nos indique que la batería
sufrió una descarga de tal magnitud (8% en diez segundos) ya que el voltaje no tuvo
variación en este período.

En la práctica, los cambios en el valor de estado de carga implican siempre un cambio en el


valor del voltaje de la batería. En el ejemplo anterior se demuestra que la red no debe
ejecutarse en períodos tan cortos que no impliquen variaciones en el valor del voltaje de
batería. Como los datos utilizados para el entrenamiento de la red fueron registrados cada
cinco minutos esto nos hace pensar en una frecuencia de ejecución de la red de cada cinco
minutos.

Ahora, si consideramos una frecuencia de ejecución de la red de cada cinco minutos y


consideramos que durante ese período no existe corriente de la batería ni de carga ni de
descarga, es lógico pensar que el voltaje de la batería tampoco sufrirá variación alguna por
lo que se presentará el mismo problema mostrado en el ejemplo.

Por otro lado, si consideramos una frecuencia de ejecución de la red de cada cinco minutos
y consideramos que durante ese período existe una demanda muy grande de corriente a la
batería, el estado de carga real de la batería puede llegar a valores peligrosos de descarga

65
antes de que se ejecute la red neuronal y el controlador corte la demanda de corriente a la
batería.

Para resolver los problemas anteriores se decidió utilizar la lectura de la corriente para
determinar cada cuanto tiempo se debe ejecutar la red neuronal fijando rangos de corriente
y tiempos de ejecución. Para determinar dichos rangos de corriente y los tiempos de
ejecución se utilizaron los siguientes criterios:

Cuando se detecta que no existe corriente de batería, no se ejecuta la red neuronal y


se mantiene el estado de carga anterior. Ahora bien, en pruebas realizadas al
controlador actual, se ha concluido que el sensor de corriente no mide
confiablemente corrientes inferiores a 200 mili amperes y nunca presenta una
lectura de cero amperes, por lo que se tomó la decisión de que cuando se tenga una
lectura de corriente inferior o igual a 200 mA se considere que no existe corriente
de batería.
Considerando que los datos utilizados para el entrenamiento fueron obtenidos de un
registro de cada cinco minutos, y que la corriente para la carga de la batería nunca
fue superior a 3 amperes, se decidió que cuando la batería se esté cargando con una
corriente menor a 3 amperes, la red neuronal se ejecute cada 5 minutos. En caso de
que la corriente de carga de la batería sea superior a los 3 amperes, la red neuronal
se ejecutará cada 4 minutos con el fin de detectar con mayor rapidez las variaciones
de voltaje de batería.
Para el caso de la descarga se tomó el criterio básico de que mientras mayor sea la
corriente que descarga a la batería, más rápido se descarga ésta y mas rápido se ve
afectado el voltaje de la misma. Por lo que se estableció que, como en el caso de la
carga, para corrientes de descarga inferiores a 3 amperes se ejecutará la red cada 5
minutos, para corrientes de descarga entre 3 y 5 amperes la red se ejecutara cada 4
minutos y para corrientes superiores a 5 amperes la red se ejecutara cada 3 minutos.
Como puede observarse, en este caso fue necesario utilizar tres tiempos de
ejecución distintos ya que en pruebas realizadas se comprobó que para corrientes
superiores a cinco amperes la variación de voltaje de batería es muy rápida y no
alcanzaba a ser detectada adecuadamente con un tiempo de ejecución de cuatro
minutos.

Finalmente, la figura 5.3 representa el algoritmo programado en el microcontrolador el cual


es el equivalente al mostrado en la figura 3.9 pero con tres entradas y dos funciones de
pertenencia para cada entrada. En la programación se utilizó la siguiente secuencia en la
ejecución del algoritmo:

a) Se definen los parámetros (axy, bxy, cxy, dxy) correspondientes a las funciones de
pertenencia tipo trapecios de las estradas, donde x es la entrada y y es una función de
pertenencia de esa entrada.

b) Se definen los parámetros [oi, pi, qi, ri] de las combinaciones lineales de salida de la
capa 3, pero con los nombres:

66
out1mfi1 = oi
out1mfi2 = pi
out1mfi3 = qi
out1mfi4 = ri

donde i representa el número de nodo de salida de la capa 3.

c) Se lee la corriente de batería Ibat y si es menor a 250 ma no se ejecuta la red y se


mantiene el mismo valor de estado de carga.

d) Si la corriente es mayor a 250 ma, se analiza su valor y se establece la frecuencia de


ejecución de la red.

e) Se leen los valores de las variables: voltaje de batería (Vbat), temperatura (Temp) y
estado de carga anterior (ECant).

f) Se calculan los grados de pertenencia (inxmfy) de cada entrada x correspondiente a cada


función trapecio y realizando las operaciones algebraicas y de desigualdad (“mayor
que” y “menor que”) necesarias para implementar la función trapecio:

z − a xy d xy − z
in x mf y ( z ) = max min ,1, ,0
bxy − a xy d xy − c xy

Donde z es el valor que toma la variable de entrada. Para este programa x = 1


corresponde al voltaje de la batería, x = 2 corresponde a la temperatura y x = 3
corresponde al estado de carga anterior.

Esta operación corresponde a la capa 1 de la figura 5.3.

g) Se calculan los productos correspondientes a cada regla

w1hi = in1mf1*in2mf1*in3mf1
w2hi = in1mf1*in2mf1*in3mf2
w3hi = in1mf1*in2mf2*in3mf1
w4hi = in1mf1*in2mf2*in3mf2
w5hi = in1mf2*in2mf1*in3mf1
w6hi = in1mf2*in2mf1*in3mf2
w7hi = in1mf2*in2mf2*in3mf1
w8hi = in1mf2*in2mf2*in3mf2

Este paso corresponde al cálculo de la capa 2 de la figura 5.3.

h) Se calcula el factor de normalización que corresponde a la suma de todos los productos


anteriores

nor_factor = w1hi + w2hi + w3hi + w4hi + w5hi + w6hi + w7hi + w8hi

67
Este paso corresponde al nodo inferior de la capa 4 de la figura 5.3.

i) Se calculan las combinaciones lineales fi de la capa 3 de la figura 5.3.

fi = out1mfi1 * Vbat + out1mfi2 * Temp + out1mfi3 * ECant + out1mfi4

y se multiplican por las salidas wihi del inciso g). Estas operaciones corresponden a la
capa 3 de la figura 5.3. Los resultados se vuelven a almacenar en las variables wihi con
el fin de no definir más variables y ahorrar memoria.

j) Se suman todos los resultados del inciso anterior. Este paso corresponde al nodo
superior de la capa 4 de la figura 5.3.

k) Se divide el resultado del inciso anterior entre el factor de normalización nor_factor


calculado en el inciso h). Este paso corresponde a la salida de la capa 5 de la figura 5.3,
lo que nos da como resultado el valor de estado de carga actual.

Los detalles del programa se pueden consultar en el anexo A.

w1hi* (out1mf11 * Vbat + out1mf12 * Temp


+ out1mf13 * ECant + out1mfi4)
w1hi
Π
in1mf1
A1
Π
Vbat
A2 Π

B1 Π
Σ
Temp
B2 Π

Π
C1 EC
ECant Π /
C2
in3mf2
Π
w8hi
w8hi* (out1mf81 * Vbat + out1mf82 * Temp
+ out1mf83 * ECant + out1mf84)

Σ nor_factor

Capa 1 Capa 2 Capa 3 Capa 4 Capa 5

Figura 5.3.- Algoritmo de la red neuro-difusa implementada en el controlador de carga

68
5.2 Configuración física para las pruebas

Una vez implementada la red neuronal en el controlador de carga, se preparó el escenario


para realizar las pruebas de validación de la misma. Éste consiste en el esquema mostrado
en la figura 5.4.

Panel Fuente de
Fotovoltaico Alimentación

Comunicación
Serial. (RS-232)

Controlador
Estación de Carga
Central Carga
Electrónica
Batería

Figura 5.4.- Arreglo del equipo utilizado para realizar las pruebas de validación de la red neuronal

En dicho esquema el controlador de carga contiene a la red neuronal y es el que tiene el


control de la conexión o desconexión de la carga electrónica así como el control de la
corriente de carga de la batería.

Para las primeras 4 pruebas el controlador de carga siguió basando sus decisiones en el
cálculo realizado por el conteo de amperes y a su vez realizó el cálculo de estado de carga
utilizando la red neuronal. Ambos cálculos de estado de carga los envía por comunicación
serial hacia la estación central junto con los datos de: voltaje de batería, corriente de batería
y temperatura.

Como fuentes de energía externas se utilizaron un panel fotovoltaico de 75 watts y una


fuente de alimentación la cual se utilizó para reemplazar al panel en días nublados, en la
noche o cuando se requiere una corriente de carga de batería constante, es decir, la fuente
de alimentación y el panel fotovoltaico nunca operan juntos. La fuente de alimentación fue
configurada para proporcionar 15 volts con una corriente máxima de 3 amperes.

69
5.3 Pruebas de validación

El único método 100% confiable para conocer el estado de carga de una batería sellada es
descargar totalmente dicha batería y cargarla nuevamente llevando un conteo preciso de
Amperes. Este método, además de dañar la batería (lo que resulta costoso), implica mucho
tiempo de pruebas. Por lo tanto, se determinó que todas las pruebas que se realizaran para
validar la red neuronal deberían empezar en el estado de carga que se puede conocer con
mayor certeza, esto es, el 100%.

Es decir, el único estado de carga del cual se puede estar razonablemente seguro en una
batería en buen estado es el 100%, ya que cuando una batería se encuentra totalmente
cargada ésta ya no demanda corriente cuando es conectada a una fuente de alimentación.

Debido a lo anterior todas las pruebas de validación de la red neuronal se realizaron


empezando de un estado de carga del 100%, es decir, la batería no demandaba mas
corriente a la fuente, y finalizando cuando la batería, después de un ciclo de descarga y
carga, regresaba al estado de no demanda de corriente (EC=100%).

Las pruebas de validación se dividieron en dos partes, las primeras (pruebas 1 a la 4)


consistieron en validar la correcta operación de la red neuronal realizando descargas y
cargas controladas utilizando el conteo de amperes para realizar el control de la conexión y
desconexión de la carga y registrando cada segundo los estados de carga calculados por el
algoritmo actual (conteo de amperes) y por el de la red neuronal para su comparación
posterior. El segundo grupo de pruebas (pruebas 5 y 6) consistieron en validar que el
controlador realiza un correcto control sobre la conexión y desconexión de la carga
electrónica al utilizar el estado de carga calculado por la red neuronal y evita que la batería
alcance rangos de descarga peligrosos.

Durante el tiempo que duró cada una de las pruebas, se realizó cada segundo el registro de
las siguientes variables: voltaje de batería, corriente de batería, temperatura, estado de carga
por conteo de amperes y estado de carga por red neuronal. El comportamiento de cada una
de estas variables se presenta en las gráficas de resultados que se ilustran en cada prueba.

Para comparar fácilmente los resultados que arrojan los algoritmos de cálculo de estado de
carga, en las gráficas de cada prueba se presenta también la diferencia entre el estado de
carga calculado por el conteo de amperes (ECCA)y el calculado por la red neuronal
(ECRNA).

70
5.3.1 Prueba 1

Esta primera prueba consistió en demandar, por medio de la carga electrónica, una corriente
constante de 4 amperes al arreglo mostrado en la figura 5.4 el cual tenía conectado el panel
fotovoltaico. Como la corriente que puede suministrar el panel fotovoltaico a la carga
electrónica no es constante, ya que depende de las condiciones climatológicas, la corriente
que se le demanda a la batería tampoco es constante. Lo anterior hace que la prueba sea
dinámica y permite evaluar el comportamiento de la red en un rango de valores de corriente
de descarga y no en un valor único. Cuando el controlador detecta que el estado de carga de
la batería calculado por conteo de amperes llega a 75% desconecta la carga electrónica
dejando que la batería se cargue libremente utilizando el panel fotovoltaico como fuente
externa.

Debido a la hora del día en que se realizó la prueba durante el período de cargado de la
batería, fue necesario remplazar al panel fotovoltaico por la fuente de poder a las 18:38:49,
ya que el panel fotovoltaico ya no fue capaz de proporcionar energía a la batería.

La figura 5.5 muestra el comportamiento del voltaje de batería, corriente de batería,


temperatura, estado de carga por conteo de amperes y estado de carga por red neuronal
durante el desarrollo de esta prueba. Igualmente se presenta la diferencia entre el estado de
carga calculado por el conteo de amperes y el calculado por la red neuronal. Es importante
recordar que la red neuronal no utiliza el valor de la corriente de batería para realizar su
cálculo de estado de carga.

En la figura 5.5 observamos que durante el período de descarga de la batería (de 10:11:09
hrs. a 15:13:32 hrs) la diferencia máxima calculada entre los dos estados de carga es de
3.48%, mientras que en la etapa de carga la diferencia entre los dos estados de carga se
incrementa conforme la batería se va cargando llegando a alcanzar en su punto máximo un
valor de 22%.

Analizando la etapa de carga de la batería observamos que cuando el estado de carga


calculado por el conteo de amperes alcanza el 100% la batería sigue demandando una
corriente de 2.2784 amperes, lo que indica que en realidad la batería no se encuentra
totalmente cargada y esto se confirma ya que al final de la prueba según el conteo de
amperes la batería se encontraba a un 113% de estado de carga. Por otro lado, si analizamos
el cálculo del estado de carga realizado por la red neuronal concluimos que éste es mas
confiable que el del conteo de amperes, lo anterior debido a que cuando la red calcula un
estado de carga de 99.89% la batería se encuentra demandando una corriente máxima de
535 miliamperes, lo que indica que la batería se encuentra cerca de su 100% de estado de
carga.

Otro factor a considerar es que durante la descarga el cálculo de estado de carga realizado
por la red neuronal llega al 75% cuando el conteo de amperes calcula 77%, lo que nos
indica que en el peor de los casos en la descarga la red neuronal “sobreproteje” a la batería
indicando un corte de carga un 2% de estado de carga antes de lo indicado por el conteo de

71
amperes. Finalmente, cuando el conteo de amperes detecta el 75% de estado de carga la red
neuronal tiene ya un cálculo de 73.01%.

130 16
125 15
120 14
115 13
110 12
105 11
100 10
95 9

Amperes / Volts
90 8
85 7
EC (%)

80 6
75 5
70 4
65 3
60 2
55 1
50 0
45 -1
40 -2
35 -3
30 -4
25 -5
34
32
30
28
Diferencia (%) / Temp ( ºC)

26
24
22
20
18
16
14
12
10
8
6
4
2
0
-2
10:12
10:55
11:38
12:21
13:04
13:48
14:31
15:14
15:57
16:40
17:24
18:07
18:50
19:33
20:16
21:00
21:43
22:26
23:09
23:52

Hora
Voltaje Batería EC - Red Neuronal
Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA - ECRNA

Figura 5.5.- Demanda constante de 4 amperes

A partir de los resultados arrojados por esta prueba se concluye que un controlador
utilizando la red neuronal para calcular el estado de carga de la batería tendría un mejor
desempeño que el controlador que estima el estado de carga por conteo de amperes ya que
cumpliría mejor su función de protección de la batería al calcular mas confiablemente el
100% de estado de carga lo que resulta indispensable para mantener a la batería dentro de
los rangos de operación seguros.

72
5.3.2 Prueba 2

La segunda prueba consistió en demandar, con ayuda de la carga electrónica, una corriente
constante de 6 amperes al arreglo mostrado en la figura 5.4, el cual tiene conectado el panel
fotovoltaico, lo que le da a la prueba la misma dinámica que en la prueba 1. Al igual que en
la primera prueba, cuando el controlador detecta que el estado de carga de la batería
calculado por conteo de amperes llega a 75% desconecta la carga electrónica dejando que la
batería se cargue libremente utilizando el panel fotovoltaico como fuente externa.

Debido a la hora del día en que se realizó la prueba y a las buenas condiciones
climatológicas no fue necesario remplazar al panel fotovoltaico por la fuente de poder
durante el período de cargado.

En la figura 5.6 se presentan las gráficas correspondientes a esta prueba y observamos que
durante el período de descarga de la batería (de 9:30:56 hrs. a 11:48:38 hrs.) la diferencia
máxima calculada entre los dos estados de carga es de 3.71%, mientras que en la etapa de
carga la diferencia entre los dos estados de carga se incrementa conforme la batería se va
cargando llegando a alcanzar en su punto máximo un valor de 14.52%.

Analizando la etapa de carga de la batería observamos que cuando el estado de carga


calculado por el conteo de amperes alcanza el 100% la batería está demandando una
corriente de 3.957 amperes, lo que nos indica que en realidad la batería no se encuentra
totalmente cargada. Al final de la prueba la batería se encontraba, de acuerdo al conteo de
amperes, en un 106% de estado de carga. Por otro lado, el cálculo del estado de carga
realizado por la red neuronal resulta mas confiable debido a que cuando la red calcula un
estado de carga de 100% la batería se encuentra demandando una corriente máxima de
333.6 miliamperes, lo que nos indica que la batería se encuentra en realidad muy cerca del
100% de estado de carga.

En cuanto a la etapa de descarga, en esta prueba se observó un fenómeno similar al de la


primera prueba, es decir, el cálculo de estado de carga realizado por la red neuronal llega al
75% cuando el conteo de amperes calcula 78%, lo que nos indica que en la descarga la red
neuronal podría estar “sobreprotegiendo” a la batería indicando un corte de energía un 3%
de estado de carga antes de lo indicado por el conteo de amperes. Finalmente, cuando el
conteo de amperes detecta el 75% de estado de carga la red neuronal tiene ya un cálculo de
73%.

73
130 16
125 15
120 14
115 13
110 12
105 11
100 10
95 9

Amperes / Volts
90 8
85 7
EC (%)

80 6
75 5
70 4
65 3
60 2
55 1
50 0
45 -1
40 -2
35 -3
30 -4
25 -5
34
32
30
28
Diferencia (%) / Temp ( ºC)

26
24
22
20
18
16
14
12
10
8
6
4
2
0
-2
9:21
9:36
9:50
10:04
10:19
10:33
10:48
11:02
11:16
11:31
11:45
12:00
12:14
12:28
12:43
12:57
13:12
13:26
13:40
13:55
14:09
14:24
14:38
14:52
15:07
15:21
15:36
15:50
16:04
16:19
Hora

Voltaje Batería EC - Red Neuronal


Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA - ECRNA

Figura 5.6.- Demanda constante de 6 amperes

Analizando los resultados de esta prueba se concluye nuevamente que el cálculo de estado
de carga por medio de la red neuronal es más confiable que el algoritmo de conteo de
amperes ya que determina más correctamente el 100% de estado de carga de la batería. Lo
anterior resulta indispensable para un controlador de carga para mantener a dicha batería
dentro de sus rangos de operación seguros.

74
5.3.3 Prueba 3

La tercera prueba consistió en demandar al arreglo mostrado en la figura 5.4 una corriente
variable y aleatoria, con el fin de probar el comportamiento de la red neuronal bajo
condiciones no regulares y con demandas altas y bajas por períodos cortos.

Igual que en las pruebas anteriores, en esta prueba se tiene conectado el panel fotovoltaico
durante la descarga y cuando el controlador detecta que el estado de carga de la batería
calculado por conteo de amperes llega a 75% desconecta la carga dejando que la batería se
cargue libremente utilizando el panel fotovoltaico como fuente externa.

En esta prueba sí fue necesario remplazar al panel fotovoltaico por la fuente de poder
durante el período de carga de la batería (aproximadamente a las18:17), ya que el panel
fotovoltaico ya no fue capaz de proporcionar energía a la batería.

En la figura 5.7 observamos que durante el período de descarga de la batería (de 14:57:05
hrs. a 16:21:52 hrs.) la diferencia máxima calculada entre los dos estados de carga es de
3.27%, mientras que en la etapa de carga se vuelve a presentar el mismo fenómeno que en
las pruebas anteriores, es decir, la diferencia entre los dos estados de carga se incrementa
conforme la batería se va cargando llegando en esta ocasión a alcanzar en su punto máximo
un valor de 14.02%.

En esta prueba se vuelve a detectar que cuando el estado de carga calculado por el conteo
de amperes alcanza el 100% la batería aún está demandando una corriente considerable
(2.8675 amperes), lo que nos indica que en realidad la batería no se encuentra totalmente
cargada. Al final de la prueba el conteo de amperes calculó que la batería se encontraba a
un 106% de estado de carga. Por otro lado, si analizamos el cálculo del estado de carga
realizado por la red neuronal concluimos nuevamente que éste es mas confiable que el del
conteo de amperes, debido a que cuando la red calcula un estado de carga de 100% la
batería se encuentra demandando una corriente máxima de 317.4 miliamperes, lo que nos
indica que se encuentra muy cerca del 100% de estado de carga.

Al igual que en las dos pruebas anteriores, en esta prueba se observa que durante la etapa de
descarga la red neuronal llega a calcular un valor de estado de carga de 75% antes que el
algoritmo de conteo de amperes el cual calcula en ese instante un valor de 77%.
Finalmente, cuando el conteo de amperes detecta el 75% de estado de carga la red neuronal
tiene ya un cálculo de 74.19%.

75
120 16
115 15
110 14
105 13
100 12
95
90 11
85 10
80 9

Amperes / Volts
75 8
70 7
EC (%)

65 6
60
55 5
50 4
45 3
40 2
35 1
30 0
25 -1
20 -2
15
10 -3
5 -4
30
28
26
Diferencia (%) / Temp ( ºC)

24
16
14
12
10
8
6
4
2
0
-2
14:52
15:07
15:21
15:36
15:50
16:04
16:19
16:33
16:48
17:02
17:16
17:31
17:45
18:00
18:14
18:28
18:43
18:57
19:12
19:26
19:40
19:55
20:09
20:24
20:38
20:52
21:07
21:21
Hora
Voltaje Batería EC - Red Neuronal
Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA - ECRNA

Figura 5.7.- Demanda de corriente variable y aleatoria.

Los resultados de esta prueba refuerzan las conclusiones de las dos pruebas anteriores al
comprobar nuevamente que el cálculo de estado de carga por medio de la red neuronal tuvo
un mejor desempeño que el cálculo por conteo de amperes, principalmente durante la etapa
de carga de la batería al calcular más correctamente el 100% de estado de carga.

76
5.3.4 Prueba 4

La cuarta prueba consiste en realizar demandas intermitentes de corrientes altas (arriba de 7


amperes) al arreglo mostrado en la figura 5.4, con el fin de probar el comportamiento de la
red neuronal bajo condiciones de demandas similares a las existentes en las torres de
auxilio vial donde las demandas de corriente son debidas a los radios que consumen 9
amperes. Después de cada demanda se permite que la batería se cargue por un período muy
pequeño, y después se vuelve a demandar. Después de varias demandas se permite que la
batería se cargue nuevamente al 100% según el algoritmo de conteo de amperes y
posteriormente se realiza una demanda continua (de 9 y 10 amperes) hasta que el
controlador de carga detecta un estado de carga del 75% según el conteo de amperes y
desconecta la carga. Finalmente se deja cargar nuevamente a la batería hasta el 100%, es
decir hasta que no demanda mas corriente a la fuente externa.

Esta prueba fue dividida en dos días naturales, el primer día se realizó la descarga de la
batería y se utilizó como fuente externa el panel fotovoltaico, el segundo día se realizó la
carga de la batería y se utilizó el panel fotovoltaico por un período aproximado de una hora
pero debido a las condiciones climatológicas fue necesario remplazarlo por la fuente de
poder.

Para analizar los resultados mostrados en la figura 5.8 podemos dividir esta prueba en
varias etapas. La primera etapa inicia con la demanda de 8 amperes de corriente (16:03:24
hrs.), en la que observamos que ambos algoritmos detectan una disminución del estado de
carga: de 1% el conteo de amperes y de 1.28% la red neuronal. A continuación se corta la
demanda de corriente y se permite que la batería se cargue libremente utilizando el panel
fotovoltaico. Como se puede observar, el algoritmo de conteo de amperes calcula un estado
de carga del 100% cuando todavía existe un consumo de corriente de 2.5959 amperes por
parte de la batería, mientras que la red neuronal realiza un cálculo mas paulatino y llega a
un estado de carga del 100% cuando el consumo de corriente de la batería es de 624.1
miliamperes (16:24:02 hrs).

La segunda etapa inicia con la segunda demanda de corriente, la cual fue de 10 amperes
(16:32:56 hrs) y termina antes del primer período “largo” de carga de la batería (17:42:29
hrs). Durante esta etapa de demandas intermitentes de corrientes altas se observa que la
diferencia entre los dos estados de carga no rebasa el 2%.

La tercera etapa involucra los períodos “largos” de carga de la batería y es en donde se


observa que la diferencia entre los estados de carga calculados se incrementa
principalmente en los períodos de carga mientras que en el de descarga el comportamiento
es muy similar. Por ejemplo, en el primer período largo de carga de la batería (de las
17:42:29 hrs. a las 18:03:11 hrs.) se detecta un incremento del 1% en el cálculo del estado
de carga por conteo de amperes mientras que por la red neuronal no se detecta incremento
alguno.

77
110 24
100 22
90 20
80 18
70 16

Amperes / Volts
60 14
50 12
EC(%)

40 10
30 8
20 6
10 4
0 2
-10 0
-20 -2
-30 -4
34
32
30
28
Diferencia (%) / Temp (ºC)

26
24
22
20
18
16
14
12
10
8
6
4
2
0
-2
16:02
16:31
16:59
17:28
17:57
18:26
18:55
19:23
19:52
20:21
20:50
21:19

9:07
9:36
10:04
10:33
11:02
11:31
12:00
12:28
12:57
13:26
13:55
14:24
Hora
Voltaje Batería EC - Red Neuronal
Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA-ECRNA

Figura 5.8.- Descargas intermitentes

Ahora bien, realizando un análisis completo de la prueba se puede observar que cuando el
controlador detecta un estado de carga de 75% calculado por conteo de amperes y corta el
suministro de corriente a la carga, el cálculo de estado de carga realizado por la red
neuronal indica que la batería se encuentra en un 61.56% de estado de carga, lo cual ya
pone en riesgo a la batería ya que esta no debe descargarse mas allá del 60%.

Revisando el cálculo del 100% de estado de carga en la carga final, el conteo de amperes
determina que se encuentra al 100% cuando la batería esta demandando una corriente de
2.5313 amperes mientras que la red neuronal determina el 100% de estado de carga cuando
la batería demanda 301.3 miliamperes.

78
Haciendo un balance de esta prueba se concluye que el algoritmo de cálculo de estado de
carga usando la red neuronal tuvo un mejor desempeño que el algoritmo por conteo de
amperes ya que calcula más confiablemente el 100% de estado de carga durante el proceso
de carga de la batería.

El tener un cálculo confiable durante el proceso de carga resulta indispensable para


mantener a la batería dentro de los rangos de operación seguros, ya que el tener un error en
el cálculo del estado de carga durante la carga, repercute inevitablemente en el proceso de
descarga ya que se parte de un valor erróneo y esto puede llegar a dañar irremediablemente
las baterías al exponerlas a descargas muy profundas.

5.3.5 Prueba 5

El objetivo de esta prueba es validar el desempeño de la red neuronal al descargar la batería


con corrientes menores a un Amper. Además, se modificó el programa con la finalidad de
que el controlador tome sus decisiones basado en los cálculos realizados por la red
neuronal. Para probar lo anterior se realiza una descarga de la batería hasta que la red
neuronal determina un estado de carga inferior al 76%. En este punto el controlador debe
desconectar la carga electrónica y permitir la libre carga de la batería.

Para la fase de descarga de esta prueba se decidió desconectar el panel fotovoltaico con el
fin de asegurar que toda la corriente demandada fuera suministrada por la batería. Durante
los primeros instantes de esta prueba se realizaron 3 descargas con corrientes de 3 y 10
amperes por periodos muy cortos, esto con el fin de validar la correcta medición de
corriente por parte del controlador de carga.

Posteriormente, utilizando la carga electrónica, se fijo una demanda de corriente a la batería


de 940 miliamperes la cual no se modificó durante todo el periodo de descarga.

Posteriormente, en cuanto se detecto que el controlador desconectó la carga, se procedió a


conectar el panel fotovoltaico para permitir que la batería se cargara. Debido a la hora del
día en que se realizó la prueba durante el período de cargado fue necesario remplazar al
panel fotovoltaico por la fuente de poder, ya que el panel fotovoltaico no fue capaz de
proporcionar energía a la batería.

79
120 16
115 15
14
110 13
105 12
100 11
10
95 9

Amperes / Volts
90 8
85 7
EC (%) 6
80 5
75 4
70 3
65 2
1
60 0
55 -1
50 -2
-3
45 -4
40 -5
30
28
26
24
Diferencia (%) / Temp ( ºC)

22
20
18
16
14
12
10
8
6
4
2
0
-2
10:33
11:02
11:31
12:00
12:28
12:57
13:26
13:55
14:24
14:52
15:21
15:50
16:19
16:48
17:16
17:45
18:14
18:43
19:12
19:40
20:09
20:38
21:07
21:36
Hora

Voltaje Batería EC - Red Neuronal


Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA - ECRNA

Figura 5.9.- Descargas con corrientes pequeñas

Analizando los resultados de esta prueba mostrados en la figura 5.9 observamos lo


siguiente:

Existe un error en la medición de la corriente baja demandada a la batería ya que la


demanda constante fue de 940 miliamperes mientras que el controlador registró una lectura
media de 450 miliamperes. Este error, como es de esperarse, repercute fuertemente en el
cálculo de estado de carga por conteo de amperes, y esto se refleja en la diferencia entre
este estado de carga y el calculado por la red neuronal, la cual se va incrementando
conforme se va descargando la batería. Finalmente, cuando la red neuronal ha detectado ya
un estado de carga del 75.82% el conteo de amperes lleva un cálculo de 91%.

Para verificar el estado de carga real se conectó el panel fotovoltaico con el fin de permitir
que la batería se cargara, pero como se puede observar conforme fue transcurriendo la tarde
el panel suministró menos corriente, y esto se comprueba ya que al conectar la fuente de
alimentación (18:23:13 hrs) la batería demandó una corriente de 2.3887 amperes.

80
Analizando la etapa de carga de la batería observamos que cuando el estado de carga
calculado por el conteo de amperes alcanza el 100% la batería está demandando una
corriente de 2.5985 amperes, lo que nos indica que en realidad la batería no se encuentra
totalmente cargada. Al final de la prueba el conteo de amperes indicaba que la batería se
encontraba a un 107% de estado de carga. Por otro lado, si analizamos el cálculo del estado
de carga realizado por la red neuronal concluimos que éste es mas confiable que el del
conteo de amperes, debido a que cuando la red calcula un estado de carga de 100% la
batería se encuentra demandando una corriente máxima de 365.8 miliamperes, lo que nos
indica que la batería se encuentra cerca del 100% de estado de carga.

Haciendo un balance de esta prueba, se concluye que la red neuronal tuvo un mucho mejor
desempeño que el cálculo por conteo de amperes ya que no se ve afectada por los errores en
la medición de corrientes pequeñas lo que le permite cumplir mejor su función de
protección de la batería al calcular mas confiablemente el 75% de estado de carga durante
el proceso de descarga lo que resulta indispensable para mantener a la batería dentro de los
rangos de operación seguros.

En lo referente a la prueba de desconexión de la carga electrónica, el algoritmo de cálculo


de estado de carga utilizando la red neuronal tiene una resolución de 2 decimales y al
calcular un 75.82% de estado de carga el controlador desconecta la carga electrónica lo cual
es correcto ya que es un valor inferior al 76%.

5.3.6 Prueba 6

El objetivo de esta prueba es validar el desempeño de la red neuronal al descargar la batería


con corrientes mayores a 4 amperes. En esta prueba, al igual que la anterior, se dejó que el
controlador tomara sus decisiones basado en los cálculos realizados por la red neuronal, por
lo que se realiza una demanda a la batería hasta que la red determine un estado de carga
inferior al 76%. El controlador debe desconectar la carga electrónica y permitir la libre
carga de la batería.

Para la fase de descarga de esta prueba se desconectó el panel fotovoltaico y se conectó la


fuente de alimentación como fuente externa, esto con el fin de tener un control completo
sobre la corriente demandada a la batería y no tener un transitorio de “no corriente” cuando
el controlador corte la carga. Posteriormente, durante el período de carga, se reemplazó la
fuente por el panel fotovoltaico con la finalidad de observar el comportamiento del fin de
carga de la batería con el panel fotovoltaico.

En la figura 5.10 se muestra que durante el período de descarga de la batería (de 13:05:12
hrs. a 14:30:26 hrs.) la diferencia máxima calculada entre los dos estados de carga es
inferior a 4.5%, mientras que en la etapa de carga la diferencia entre los dos estados de
carga se incrementa conforme la batería se va cargando llegando a alcanzar en su punto
máximo un valor de 12.72%.

81
120 16
115 15
110 14
105 13
100 12
95 11
90 10
9

Amperes / Volts
85
80 8
7
EC (%)

75 6
70 5
65 4
60 3
55 2
50 1
45 0
40 -1
35 -2
30 -3
25 -4
30
29
28
Diferencia (%) / Temp ( ºC)

27
26
25
24
12
10
8
6
4
2
0
-2
12:43
12:57
13:12
13:26
13:40
13:55
14:09
14:24
14:38
14:52
15:07
15:21
15:36
15:50
16:04
16:19
16:33
16:48
17:02
17:16
17:31
17:45
18:00
18:14
18:28
18:43
18:57
Hora
Voltaje Batería EC - Red Neuronal
Corriente Batería EC - Conteo de Amperes
Temperatura Diferencia ECCA - ECRNA

Figura 5.10.- Descargas con corrientes altas

Analizando la etapa de carga de la batería observamos que cuando el estado de carga


calculado por el conteo de amperes alcanza el 100% la batería está demandando una
corriente de 1.9556 amperes. Al final de la prueba la batería se encontraba a un 104% de
estado de carga de acuerdo al conteo de amperes. Por otro lado, si analizamos el cálculo del
estado de carga realizado por la red neuronal concluimos que éste es mas confiable que el
del conteo de amperes, debido a que cuando la red calcula un estado de carga de 100% la
batería se encuentra demandando una corriente máxima de 199.1 miliamperes, lo que nos
indica que la batería se encuentra muy cerca del 100% de estado de carga.

Otro factor a considerar es que durante la descarga el cálculo de estado de carga realizado
por la red neuronal llega al 75.12% cuando el conteo de amperes calcula 79%, lo que nos
indica que en el peor de los casos en la descarga la red neuronal “sobreproteje” a la batería
indicando un corte de carga un 3.88% de estado de carga antes de lo indicado por el conteo
de amperes.

Haciendo un balance de esta prueba, se concluye que la red neuronal tuvo un mejor
desempeño que el cálculo por conteo de amperes ya que cumple mejor su función de

82
protección de la batería al calcular más confiablemente el 100% de estado de carga lo que
resulta indispensable para mantener a la batería dentro de los rangos de operación seguros.
Además de que el controlador sí realizó el corte de la carga al detectar un estado de carga
menor al 76%.

5.4 Resumen de Resultados

En la tabla 5.2 se muestra un resumen de las pruebas realizadas y reportadas en este


capítulo así como las observaciones y conclusiones obtenidas en cada una de ellas

Tabla 5.2.- Resumen de resultados de las pruebas

Corriente al alcanzar
EC = 100 %
Prueba Condiciones Observaciones Conclusiones
Conteo de Red Neuro-
Amperes Difusa
Demanda continua a la Cuando el CA calcula Mas confiabilidad en
batería no mayor de 4 EC = 75% el cálculo del 100%
1 2.27 amp 535 ma
Amperes. El control se la RNA calcula un de estado de carga
hace por CA. EC = 73.01% utilizando la RNA
Demanda continua a la Cuando el CA calcula Mas confiabilidad en
batería no mayor de 6 EC = 75% el cálculo del 100%
2 3.957 amp 333.6 ma
Amperes. El control se la RNA calcula un de estado de carga
hace por CA. EC = 73 % utilizando la RNA
Demandas continuas con
Cuando el CA calcula Mas confiabilidad en
corrientes aleatorias no
EC = 75% el cálculo del 100%
3 mayores a 10 Amperes. 2.8675 amp 317.4 ma
la RNA calcula un de estado de carga
El control se hace por
EC = 74.19 % utilizando la RNA
CA.
Demandas intermitentes Cuando el CA calcula Mas confiabilidad en
con corrientes superiores 2.5959 amp 624.1 ma EC = 75% el cálculo del 100%
4
a 7 Amperes. El control 2.5313 amp 301.3 ma la RNA calcula un de estado de carga
se hace por CA. EC = 61.56% utilizando la RNA
Mejor protección
contra sobre
descargas al utilizar
Demanda a la batería con La RNA calcula RNA cuando se
corriente constante de EC< 76% cuando el demanda corrientes
5 2.5985 amp 365.8 ma
940 ma. El control se CA calcula un pequeñas.
hace por RNA. EC = 91%. Mas confiabilidad en
el cálculo del 100%
de estado de carga
utilizando la RNA.
Demanda continua a la La RNA calcula Mas confiabilidad en
batería mayor de 4 EC< 76% cuando el el cálculo del 100%
6 1.9556 amp 199.1 ma
amperes. El control se CA calcula un de estado de carga
hace por RNA. EC = 79%. utilizando la RNA.

83
Las pruebas fueron diseñadas para que se cubriera todo el rango de corriente que soporta el
controlador de carga en el cual se implementó la red neuronal.

En todas las pruebas se observa que el método de conteo de amperes calcula un estado de
carga del 100% cuando la batería aún esta demandando corrientes del orden de amperes,
mientras que la red calcula un estado de carga del 100% cuando la corriente demandada por
la batería es del orden de miliamperes. De los resultados anteriores se concluye que la red
neuronal nos proporciona un método más confiable para calcular el estado de carga del
100%.

En la prueba 5 se demostró que la red no es sensible a los errores de medición de corriente,


por lo que nos proporciona un cálculo de estado de carga más confiable cuando las
corrientes de descarga son pequeñas y así evita sobre-descargas a la batería.

Con los resultados de las pruebas anteriores se demuestra que el controlador de carga
mejora su desempeño al utilizar la red neuronal para calcular el estado de carga.

84
6 Conclusiones

Como resultado de esta tesis se obtuvo una red neuronal que permite calcular el estado de
carga de una batería plomo-ácido sellada y se implementó en un controlador de carga
diseñado en la GCI del IIE. Se encontró que el controlador que utiliza la red neuronal para
calcular el estado de carga de las baterías presenta un mejor desempeño que el que utiliza
conteo de amperes.

La mejoría en el desempeño del controlador de carga se logra al tener un mejor método


para el cálculo del estado de carga, lo que redunda directamente en un mejor control del
corte y conexión de la energía a la carga, siempre con el fin de cuidar y alargar la vida útil
de la batería.

Al no utilizar la corriente de la batería como una entrada a la red neuronal se mejoró de


forma importante el desempeño del controlador de carga. La razón principal es porque de
esta manera el cálculo de la red neuronal no se ve afectado por los errores de medición en
corrientes pequeñas. Aunque bien no se pudo eliminar totalmente la medición de la
corriente de batería, esta medición no requiere ser exacta ya que solo se ocupa para definir
rangos y tiempos de ejecución de la red neuronal.

A pesar de que la red neuronal fue entrenada utilizando datos proporcionados por el
controlador de carga original, la red neuronal resultante es capaz de detectar de manera más
confiable el 100% de estado de carga de la batería. Esto debido principalmente a que
ningún proceso físico o químico es 100% eficiente y la corriente que se necesita suministrar
a la batería para cargarla es mayor que la corriente que se le demandó durante la descarga.
Como la red neuronal utiliza como entrada el voltaje de la batería, es capaz de detectar el
estado de carga sin importar la cantidad de corriente que se la haya suministrado o
demandado a la batería.

85
La topología ANFIS seleccionada para el desarrollo de la red neuronal resultó ser muy
conveniente ya que simplificó en buena medida el diseño de la misma así como su
entrenamiento, simulación e implementación. El haber elegido este esquema de red neuro-
difusa permitió desarrollar un programa modular fácilmente configurable.

6.1 Ventajas de la red Neuronal

A continuación se resumen la principales ventajas observadas al utilizar la red neuronal


para el cálculo del estado de carga:

No requiere de mucha precisión en la medición de la corriente ya que solo ocupa


rangos de operación.

No se ve afectada por el error en la medición de corrientes pequeñas el cual puede


causar un daño de la batería al utilizar la técnica de conteo de amperes.

Realiza un cálculo de estado de carga con una precisión de 2 decimales lo que


permite detectar con mayor precisión los puntos de conexión y desconexión
definidos por el algoritmo de control de carga.

No requiere tener el proceso corriendo constantemente ya que solo se ejecuta cada


determinado tiempo, lo que libera tiempo de procesamiento para otras tareas.

El software generado para el microprocesador es fácilmente configurable y permite


modificar los parámetros de la red de una manera sencilla, lo que ahorrara mucho
tiempo en los trabajos futuros.

6.2 Limitaciones de la Red Neuronal Implementada

Las principales limitaciones de la red neuronal implementada podrían resumirse de la


siguiente manera:

Sigue necesitando de la medición de la corriente aunque solo utiliza rangos de


operación ya que la frecuencia a la cual se ejecuta la red depende de cuanta
corriente se le demanda a la batería.

La red esta entrenada y probada para baterías plomo-ácido de 12 volts.

La red está entrenada y probada para corrientes de descarga no mayores a 10


amperes y para corrientes de carga no mayores a 4 amperes.

La red no reconoce temperaturas bajo cero en grados centígrados.

86
6.3 Aportaciones

El resultado y aportación final de este trabajo de investigación y desarrollo constituye una


solución muy satisfactoria al problema tecnológico planteado y puede resumirse en los
siguientes puntos:

Se implementó una red neuro-difusa que calcula el estado de carga de baterías


plomo-ácido selladas de una manera más confiable que el método de conteo de
amperes utilizado originalmente.

La red neuro difusa implementada tiene una característica propia, original e inédita
y es el que no utiliza la corriente de batería como una entrada, lo que le permite no
verse afectada por los errores en la medición de la corriente.

Se demuestra que la estructura de la red neuro-difusa tipo ANFIS sí tiene la


capacidad de mejorar el cálculo de estado de carga de las baterías. En la literatura
estudiada, se emplean redes neuronales “normales” y sus resultados se obtienen a
través de simulación mientras que con la red tipo ANFIS fue posible la
implementación práctica en el controlador de carga del IIE.

Se generó un software para la ejecución de la red neuronal en un microprocesador.


Dicho software se configura fácilmente y permite modificar los parámetros de la red
de una manera sencilla. Lo anterior da la posibilidad de que en un futuro se pueda
experimentar con algoritmos de cálculo de estado de carga mucho mas complejos
para calcular los datos de entrenamiento y así poder entrenar y configurar la red en
el controlador sin necesidad de modificar el programa.

Los resultados de esta tesis tienen su aplicación inmediata en la mejora del producto
obtenido en un proyecto de la GCI del IIE lo cual incrementa su posibilidad de
comercialización.

6.4 Trabajos Futuros

Gracias a que el resultado de este trabajo constituye una solución muy satisfactoria al
problema tecnológico planteado, surgen como paso natural sugerencias de trabajos de
complemento y mejora entre los cuales destacan los siguientes:

a) Como complemento a las pruebas realizadas en este trabajo se puede realizar un


experimento en el que se cargue y descargue una batería nueva de manera controlada y en
repetidas ocasiones utilizando el controlador de carga con la red neuronal. Esto con la
finalidad de probar si la red neuronal es capaz de detectar el envejecimiento natural de la
batería al detectar variaciones de voltaje más bruscas con la misma demanda de corriente.
Si esta prueba resulta positiva, la aportación de la red desarrollada sería aún mayor ya que

87
el método de conteo de amperes no puede detectar el envejecimiento de la batería. Esta
prueba no se realizó en el presente trabajo debido al tiempo requerido para el desarrollo de
la misma.

b) Para generalizar la aplicación de la red a todo tipo de baterías plomo-ácido (no


únicamente de 12 volts) se podría normalizar la entrada “voltaje de batería” y así hacer
independiente a la red de la capacidad de la batería.

c) Para que la red sea capaz de considerar temperaturas inferiores a cero grados centígrados
se deberán considerar datos de entrenamiento que incluyan bajas temperaturas, para lo cual
se propone realizar cargas y descargas controladas de la betería dentro de una cámara
térmica. También es posible entrenar a la red con temperaturas en grados Kelvin con el fin
de no utilizar el bit de signo en la variables tipo word del microcontrolador.

d) Como el programa generado en este trabajo es modular, se pueden proponer otras


señales de entrada a la red con el fin de probar nuevas topologías y así experimentar con
algoritmos de cálculo de estado de carga mas completos para generar los datos de
entrenamiento.

e) Durante el desarrollo de este trabajo, en la GCI del IIE se generó una nueva versión de
hardware del controlador de estado de carga con sus correspondientes modificaciones en el
software, por lo cual el trabajo inmediato consiste en adecuar el programa de la red a la
nueva versión. En las nuevas versiones se pretende que el controlador maneje corriente más
altas por lo que es necesario generar datos de entrenamiento con este tipo de corrientes y así
poder entrenar a la red adecuadamente.

88
7 Referencias
[1] Jana K., “Charging pure lead-tin batteries: A guide for Cyclon and Genesis batteries”,
Hawker Energy, 1999

[2] Alzieu J. Smimite H. and Glaize C., “Improvement of intelligent battery controller:
state-of-charge indicator and associated functions”, J. of Power Sources, Vol.67, 1997,
pp.157-161

[3] Catherino H., Burgel J., Rusek A. and Feres F., “Modelling and simulation of lead-acid
battery charging”, J. of Power Sources, Vol.80, 1999, pp.17-20

[4] Copetti J. and Chenlo F., “Lead/acid batteries for photovoltaic applications. Test results
and modeling”, J. of Power Sources, Vol.47, 1994, pp.109-118

[5] Fleming F., Shumard P. and Dickinson B., “Rapid recharge capability of valve-
regulated lead-acid batteries for electric vehicle and hybrid electric vehicle applications”, J.
of Power Sources, Vol.78, 1999, pp.237-243

[6] Huacuz J. and Urrutia M. (Eds.), Controladores de carga para sistemas fotovoltaicos de
elctrificación rural, Taller RIER-IIE, Instituto de Investigaciones Eléctricas, Cuernavaca,
México, Julio 1998

[7] Urbina A., Paez T., O’Gorman C., Barney P., Jungst R and Ingersoll D., “Reliability of
rechargeable batteries in a photovoltaic power supply system”, J. of Power Sources, Vol.80,
1999, pp.30-38

[8] Ehret C., Piller S., Schroer W. and Jossen A., “State-of-Charge determination for lead-
acid batteries in PV-applications”, in Procs. 16th European Photovoltaic Solar Energy
Conference, Glasgow, May 2000, pp.2486-2489

[9] Salkind A., Fennie C., Singh P., Atwater T. and Reisner D., “Determination of state-of-
charge and state-of-health of batteries by fuzzy logic methodology”, J. of Power Sources,
Vol.80, 1999, pp.293-300

[10] Wagner R., Sauer D., “Charge strategies for valve-regulated lead/acid batteries in solar
power applications”, J. of Power Sources, Vol.95, 2001, pp.141-152

[11] Huet F., “A review of impedance measurements for determination of the state-of-
charge or state-of-health of secondary batteries”, J. of Power Sources, Vol.70, 1998, pp.59-
69

[12] Piller S., Perrin M., Jossen A., “Methods for state-of-charge determination and their
applications”, J. of Power Sources, Vol.96, 2001, pp.113-120

89
[13] Ortega C., González A., Cristín M.A., “Sistema para monitoreo remoto y control de
carga de baterías en aplicaciones fotovoltaicas”, 26 Semana Nacional de Energía Solar

[14] Ortega C., Orozco J, Pacheco J., Cristín M.A. y Rivera A. “Monitoreo De Celdas
Independientes En Arreglos Para Respaldo De Energía”, Gerencia de Control e
Instrumentación, Instituto de Investigaciones Eléctricas

[15] Rivera A., Ortega C., Orozco J, Pacheco J. "Sistema Para Almacenar Y Analizar Los
Datos Provenientes De Un Sistema De Monitoreo De Celdas Individuales En Bancos De
Baterías”. Gerencia de Control e Instrumentación, Instituto de Investigaciones Eléctricas

[16] Yamazaki T., Sakurai K., Muramoto K., “Estimation of the residual capacity of sealed
lead-acid batteries by neural network”, 1998 IEEE, pp. 210-214

[17] Chan C.C, Weixiang S. “The available capacity computational model based on
artificial neural network for lead-acid batteries in electric vehicles”, J. Of Power Sources,
Vol.87, 2000, pp. 201-204

[18] Jyh-Shing Roger Jang. Neuro-Fuzzy Modeling: Architectures, Analyses and


Applications. PhD thesis, University of California, 1992.

[19] J.S. Jang. ANFIS: Adaptive-network-based fuzzy inference systems. IEEE Trans. on
Systems, Man, and Cybernetics, 23(03) pp.665-685, 1993.

[20] J.S. Jang, C.T. Sun, E. Mizutani. Neuro-fuzzy and Soft Computing. Math-Lab
Curriculum Series. Prentice Hall. 1997.

[21] M. Sugeno and G.T. Kang. Structure identification of fuzzy model. Fuzzy Sets and
Systems, 28:15, 33, 1988

[22] T. Takagi and M. Sugeno. Derivation of fuzzy control rules from human operator’s
control actions. Proccedings of the IFAC Symposium on Fuzzy Information, Knowledge
Representation and Decision Analysis, pages 55-60, July 1983

[23] T. Takagi and M. Sugeno. Fuzzy identification of systems and its applications to
modeling and control. IEEE Transactions on Systems, Man, and Cybernetics, 15:116-132,
1985.

[24] MATLAB The Lenguage of Technical Compuiting. The Math Works Inc. Versión 6.0
Septiembre 22 de 2000

90
ANEXO A
La función para el cálculo del estado de carga utilizando redes neuronales implementada en
el microcontrolador es la mostrada a continuación.

; ******************************************************************
; Subrutinas para el calculo del Estado de Carga
; utilizando Redes Neuronales
;
; Desarrollo : Miguel Angel Cristin Valdez
;
; Entradas : &inst_IBat
; &Fact_Ibat
; &Fact_Ibatneg
; &inst_VBat
; &Fact_Vbat
; &inst_Temp
;
; Salida : rrnhi
;
; ******************************************************************

red_neuro

mov #wdt_arst_250,&wdtctl ; reinicio de watchdog.


mov #0,sig_cor
mov &inst_IBat,&mpy ; por default se considera positiva la Ibat
mov &Fact_Ibat,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #100,IROP1
call #DIVIDE
mov IRACL,Ibat_inst ; Corriente positiva de Bat Instantanea por 10^3
bit #0F000h,&inst_IBat ;si es negativa se continua si no se salta
jz IBAT_POS ; a Ibat_pos

mov &inst_IBat,x
and #0FFFh,x ; se limpian los bits de signo de la corriente
mov x,&mpy
mov &Fact_Ibatneg,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #100,IROP1
call #DIVIDE
mov IRACL,Ibat_inst ; Corriente negativa de Bat Instantanea por 10^3
mov #1,sig_cor

cmp #200,Ibat_inst
jlo FINAL1

cmp #700,Ibat_inst
jlo MTEJEC
mov #300,t_ejec ;Para un tiempo de ejecución cada 5 minutos
cmp #3000,Ibat_inst
jlo CALCULO
mov #240,t_ejec ;Para un tiempo de ejecucion de 4 minutos
cmp #5000,Ibat_inst
jlo CALCULO
mov #180,t_ejec ;Para un tiempo de ejecución de 3 minutos
jmp CALCULO

MTEJEC mov #330,t_ejec


jmp CALCULO

91
IBAT_POS cmp #250,Ibat_inst
jlo FINAL1

cmp #500,Ibat_inst
jlo MTEJEC2
mov #480,t_ejec
cmp #1000,Ibat_inst
jlo CALCULO
mov #300,t_ejec ;Para un tiempo de ejecución cada 5 minutos
cmp #3000,Ibat_inst
jlo CALCULO
mov #240,t_ejec ;Para un tiempo de ejecucion de 4 minutos
cmp #5000,Ibat_inst
jlo CALCULO
mov #180,t_ejec ;Para un tiempo de ejecución de 3 minutos
jmp CALCULO
MTEJEC2 mov #600,t_ejec

CALCULO mov &inst_VBat,&mpy


mov &Fact_Vbat,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #100,IROP1
call #DIVIDE
mov IRACL,voltinst ; Voltaje de Bat Instantaneo por 10^3

mov &inst_Temp,&mpy
mov #1000,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #16,IROP1
call #DIVIDE
mov IRACL,temp ; Temperatura Instantanea por 10^3

cmp #256,soc_ant ; No realiza calculo alguno hasta


jeq FINAL1 ; que se tenga el valor del SOC inicial

CALCULO_SOC

; ******* Grados de pertenencia *************

mov voltinst, x
mov x,y
mov #a11, a
mov #d11, d
mov #ba11,b
mov #dc11,cc
call #gp_trap
mov gp,in1mf1

mov voltinst, x
mov x,y
mov #a12, a
mov #d12, d
mov #ba12,b
mov #dc12,cc
call #gp_trap
mov gp,in1mf2

mov temp, x
mov x,y
mov #a21, a
mov #d21, d
mov #ba21,b
mov #dc21,cc
call #gp_trap

92
mov gp,in2mf1

mov temp, x
mov x,y
mov #a22, a
mov #d22, d
mov #ba22,b
mov #dc22,cc
call #gp_trap
mov gp,in2mf2

mov soc_ant, x
mov x,y
mov #a31, a
mov #d31, d
mov #ba31,b
mov #dc31,cc
call #gp_trap
mov gp,in3mf1

mov soc_ant, x
mov x,y
mov #a32, a
mov #d32, d
mov #ba32,b
mov #dc32,cc
call #gp_trap
mov gp,in3mf2

;****************REGLA #1 *** w1 = in1mf1*in2mf1*in3mf1 ***********

mov in1mf1,a
mov in2mf1,b
mov in3mf1,cc
call #REGLAS
mov x,w1hi

;****************REGLA #2 *** w2 = in1mf1*in2mf1*in3mf2; ***********

mov in1mf1,a
mov in2mf1,b
mov in3mf2,cc
call #REGLAS
mov x,w2hi

;****************REGLA #3 *** w3 = in1mf1*in2mf2*in3mf1; ***********

mov in1mf1,a
mov in2mf2,b
mov in3mf1,cc
call #REGLAS
mov x,w3hi

;****************REGLA #4 *** w4 = in1mf1*in2mf2*in3mf2 ***********


mov in1mf1,a
mov in2mf2,b
mov in3mf2,cc
call #REGLAS
mov x,w4hi

;****************REGLA #5 *** w5 = in1mf2*in2mf1*in3mf1 ***********


mov in1mf2,a
mov in2mf1,b
mov in3mf1,cc
call #REGLAS
mov x,w5hi

;****************REGLA #6 *** w6 = in1mf2*in2mf1*in3mf2 ***********


mov in1mf2,a
mov in2mf1,b

93
mov in3mf2,cc
call #REGLAS
mov x,w6hi

;****************REGLA #7 *** w7 = in1mf2*in2mf2*in3mf1 ***********


mov in1mf2,a
mov in2mf2,b
mov in3mf1,cc
call #REGLAS
mov x,w7hi

;****************REGLA #8 *** w8 = in1mf2*in2mf2*in3mf2 ***********


mov in1mf2,a
mov in2mf2,b
mov in3mf2,cc
call #REGLAS
mov x,w8hi
;********************************************************************
clr nor_factor
add w1hi,nor_factor
add w2hi,nor_factor
add w3hi,nor_factor
add w4hi,nor_factor
add w5hi,nor_factor
add w6hi,nor_factor
add w7hi,nor_factor
add w8hi,nor_factor
jmp COMB_LIN

FINAL1 jmp FINAL

COMB_LIN

; ********************************************************************
; Combinaciones Lineales
; ********************************************************************
mov #wdt_arst_250,&wdtctl ; reinicio de watchdog.
mov #out1mf11,a
mov #out1mf12,b
mov #out1mf13,cc
mov #out1mf14,d
mov #sign1,y
mov w1hi,gp
call #COMBINACION
mov x,w1hi

mov #out1mf21,a
mov #out1mf22,b
mov #out1mf23,cc
mov #out1mf24,d
mov #sign2,y
mov w2hi,gp
call #COMBINACION
mov x,w2hi

mov #out1mf31,a
mov #out1mf32,b
mov #out1mf33,cc
mov #out1mf34,d
mov #sign3,y
mov w3hi,gp
call #COMBINACION
mov x,w3hi

mov #out1mf41,a
mov #out1mf42,b
mov #out1mf43,cc
mov #out1mf44,d
mov #sign4,y
mov w4hi,gp

94
call #COMBINACION
mov x,w4hi

mov #out1mf51,a
mov #out1mf52,b
mov #out1mf53,cc
mov #out1mf54,d
mov #sign5,y
mov w5hi,gp
call #COMBINACION
mov x,w5hi

mov #out1mf61,a
mov #out1mf62,b
mov #out1mf63,cc
mov #out1mf64,d
mov #sign6,y
mov w6hi,gp
call #COMBINACION
mov x,w6hi

mov #out1mf71,a
mov #out1mf72,b
mov #out1mf73,cc
mov #out1mf74,d
mov #sign7,y
mov w7hi,gp
call #COMBINACION
mov x,w7hi

mov #out1mf81,a
mov #out1mf82,b
mov #out1mf83,cc
mov #out1mf84,d
mov #sign8,y
mov w8hi,gp
call #COMBINACION
mov x,w8hi
;********************************************************************
clr x
add w1hi,x
add w2hi,x
add w3hi,x
add w4hi,x
add w5hi,x
add w6hi,x
add w7hi,x
add w8hi,x
;********************************************************************
mov x,&mpy
mov #10000,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov nor_factor,IROP1
call #DIVIDE
mov IRACL,rrnhi ; Resultado del calculo del SOC por Red Neuronal por 10^2

cmp #6000,rrnhi
jhs CON1
mov #6000,rrnhi

CON1 cmp #10000,rrnhi


jlo FINAL2
mov #10000,rrnhi

FINAL2 cmp #1,sig_cor


jlo FINAL3
cmp rrnhi,soc_ant
jlo FINAL3
mov soc_ant,rrnhi

95
FINAL3 mov rrnhi,soc_ant
mov voltinst,voltinst_ant
mov temp,temp_ant
FINAL

ret ; fin de red_neuro

; *************************************************************************
; Funcion 'gp_trap' para el calculo de grados de pertenencia trapezoidales
; el resultado es por 10 ^4
; *************************************************************************

gp_trap
clr gp

cmp.w x,a ;
jhs NEGATIVO ;a>x?
cmp.w d,x ;
jhs NEGATIVO ;x>d?

sub.w a,x ; x-a en x


sub.w y,d ; d-x en d

mov x,&mpy
mov #10000,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov b,IROP1
call #DIVIDE
jc MENOR_16_1
cmp #10000,IRACL ;
jlo LIM1 ;10000>IRACL?

MENOR_16_1 mov #10000,IRACL

LIM1 mov IRACL,x ;x representa a lim1

mov d,&mpy
mov #10000,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov cc,IROP1
call #DIVIDE
jc MENOR_16_2
cmp #10000,IRACL ;
jlo LIM2 ;10000>IRACL?

MENOR_16_2 mov #10000,IRACL

LIM2 mov IRACL,gp ;gp representa a gp

cmp.w gp,x
jhs GP_MENOR ;x>gp?
mov x,gp
jmp GP_MENOR

NEGATIVO mov #0,gp ;pone cero en gp

GP_MENOR

ret ; fin de gp_trap

; *****************************************************************
; Calculo de producto de tres terminos con factor 10^4,
; el resultado es tambien 10^4.
; *****************************************************************

96
REGLAS
mov a,&mpy
mov b,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #10000,IROP1 ;DIVISOR
call #DIVIDE
mov IRACL,x

mov x,&mpy
mov cc,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #10000,IROP1 ;DIVISOR
call #DIVIDE
mov IRACL,x

ret ; fin de reglas

;**************************************************************
; Funcion de combinacion lineal
; Producto de dos factores por 10^3
; el SOC_ant esta en 10^2
; el resultado final es 10^2
;**************************************************************

COMBINACION
mov a,&mpy
mov voltinst,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #10000,IROP1 ;DIVISOR 10^4
call #DIVIDE
mov IRACL,a

mov b,&mpy
mov temp,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #10000,IROP1 ;DIVISOR 10^4
call #DIVIDE
mov IRACL,b

mov cc,&mpy
mov soc_ant,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #1000,IROP1 ;DIVISOR 10^3
call #DIVIDE
mov IRACL,cc

cmp #00h,y
jne CASO1
jmp SUMA

CASO1 cmp #01h,y


jne CASO2
inv a
add #1,a
jmp SUMA

CASO2 cmp #02h,y


jne CASO3
inv b
add #1,b
jmp SUMA

CASO3 cmp #03h,y

97
jne CASO4
inv a
add #1,a
inv b
add #1,b
jmp SUMA

CASO4 cmp #04h,y


jne CASO5
inv cc
add #1,cc
jmp SUMA

CASO5 cmp #05h,y


jne CASO6
inv a
add #1,a
inv cc
add #1,cc
jmp SUMA

CASO6 cmp #06h,y


jne CASO7
inv b
add #1,b
inv cc
add #1,cc
jmp SUMA

CASO7 cmp #07h,y


jne CASO8
inv a
add #1,a
inv b
add #1,b
inv cc
add #1,cc
jmp SUMA

CASO8 cmp #08h,y


jne CASO9
inv d
add #1,d
jmp SUMA

CASO9 cmp #09h,y


jne CASOA
inv a
add #1,a
inv d
add #1,d
jmp SUMA

CASOA cmp #0Ah,y


jne CASOB
inv b
add #1,b
inv d
add #1,d
jmp SUMA

CASOB cmp #0Bh,y


jne CASOC
inv a
add #1,a
inv b
add #1,b
inv d
add #1,d
jmp SUMA

98
CASOC cmp #0Ch,y
jne CASOD
inv d
add #1,d
inv cc
add #1,cc
jmp SUMA

CASOD cmp #0Dh,y


jne CASOE
inv a
add #1,a
inv cc
add #1,cc
inv d
add #1,d
jmp SUMA

CASOE cmp #0Eh,y


jne CASOF
inv b
add #1,b
inv cc
add #1,cc
inv d
add #1,d
jmp SUMA

CASOF cmp #0Fh,y


jne SUMA
inv a
add #1,a
inv b
add #1,b
inv cc
add #1,cc
inv d
add #1,d

SUMA clr x
add a,x
add b,x
add cc,x
add d,x

mov x,&mpy
mov gp,&op2
mov reshi,IROP2M
mov reslo,IROP2L
mov #10000,IROP1 ;DIVISOR
call #DIVIDE
mov IRACL,x

ret ; fin de Combinacion

; ****************************************************************
; Division de 32 bits entre 16 y el resultado es en 16 bits
; ****************************************************************

DIVIDE
CLR IRACL ; CLEAR RESULT
MOV #17,IRBT ; INITIALIZE LOOP COUNTER
DIV1 CMP IROP1,IROP2M ;
JLO DIV2
SUB IROP1,IROP2M
DIV2 RLC IRACL
JC DIV4 ; Error: result > 16 bits
DEC IRBT ; Decrement loop counter

99
JZ DIV3 ; Is 0: terminate w/o error
RLA IROP2L
RLC IROP2M
JNC DIV1
SUB IROP1,IROP2M
SETC
JMP DIV2
DIV3 CLRC ; No error, C = 0
DIV4 RET ; Error indication in C fin de DIVIDE

; *********************************************************************
; Fin de subrutinas para redes neuronales
; *********************************************************************

100

También podría gustarte