SISTEMA DE CONTROL ELECTRÓNICO DE UN …oa.upm.es/45913/1/TFG_PABLO_MEDRANO_GASTAÑAGA.pdf330412...
Transcript of SISTEMA DE CONTROL ELECTRÓNICO DE UN …oa.upm.es/45913/1/TFG_PABLO_MEDRANO_GASTAÑAGA.pdf330412...
SISTEMADECONTROLELECTRÓNICODEUNSISTEMADEPILADECOMBUSTIBLEPEMDEBAJAPOTENCIAENCONFIGURACIÓNHÍBRIDACONBATERÍAS
FEBRERO 2017
Pablo Medrano Gastañaga
DIRECTOR DEL TRABAJO FIN DE GRADO:
Félix Moreno González
TRABAJO FIN DE GRADO PARA LA OBTENCIÓN DEL TÍTULO DE
GRADUADO EN INGENIERÍA EN TECNOLOGÍAS INDUSTRIALES
ESCUELA TÉCNICA SUPERIOR DE INGENIEROS INDUSTRIALES
UNIVERSIDAD POLITÉCNICA DE MADRID
TRABAJO DE FIN DE GRADO
SISTEMA DE CONTROL ELECTRÓNICO DE UN SISTEMA DE PILA DE COMBUSTIBLE PEM DE
BAJA POTENCIA EN CONFIGURACIÓN HÍBRIDA CON BATERÍAS
Pablo Medrano Gastañaga
Tutor: Félix Moreno González
Cotutor: David Aledo Ortega
Cotutora: Mónica Villaverde San José
MADRID. FEBRERO 2017
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 3
AGRADECIMIENTOS
Quiero agradecer en primer lugar a la Escuela por la formación recibida durante estos cuatro años y la por la oportunidad de realizar este Trabajo de Fin de Grado.
También quiero agradecer a mi tutor Félix Moreno por la oportunidad de participar en este proyecto.
Igualmente a los cotutores, David Aledo por su dedicación y paciencia conmigo, y a Mónica Villaverde por su gran ayuda para la consecución del trabajo.
Por último, agradecer tanto a mis amigos como a mi familia el apoyo incondicional que me han dado a lo largo de los cuatro años del grado y el que se que siempre me seguirán dando.
Agradecimientos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 4
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 5
RESUMEN EJECUTIVO
Este Trabajo de Fin de Grado se enmarca dentro del primer proyecto llevado a cabo por la empresa Española de Pilas de Hidrógeno S.A. (EPHISA) cuyo objetivo es desarrollar un prototipo de pila de combustible de hidrógeno para una aplicación vehicular.
EPHISA ha contratado al Centro de Electrónica Industrial (CEI) de la Escuela Técnica Superior de Ingenieros Industrial de la Universidad Politécnica de Madrid para que realice la parte electrónica del proyecto.
El cometido de este trabajo dentro del proyecto mencionado anteriormente es el de implementar en código C el control desarrollado por el CEI de la pila de combustible en Simulink.
Los objetivos principales del trabajo son que este código esté parametrizado de manera que sea fácil de modificar para EPHISA aun cuando no poseen conocimientos especializados en electrónica ni en programación.
Para poder realizar el control de la pila de combustible habrá que gestionar una serie de entradas y salidas tanto analógicas como digitales.
El funcionamiento de la pila de combustible está fijado por la empresa en el diagrama de bloques mostrado en la Figura 9 aunque, posteriormente, sufrió alguna pequeña modificación realizada por el CEI para mejorar dicho funcionamiento.
El control de la pila de combustible se basa en el cálculo del estado de carga de las baterías mediante el método “Coulomb Counting” a partir de un estado de carga anterior y la integral en el tiempo de la intensidad que están proporcionando las baterías.
La pila de combustible deberá proporcionar una potencia proporcional a dicho estado de carga de las baterías para mantenerlo entre unos puntos establecidos.
Se calculará la intensidad teórica que debería proporcionar la pila en función de la potencia exigida por el estado de carga de las baterías y mediante la curva V-I de la pila de combustible se obtendrá la tensión teórica de la pila de combustible. A partir de esta tensión se calculará un duty cycle que debería ser el aplicado a un convertidor de corriente continua para mandar la corriente debida desde la pila a las baterías.
Previamente, el valor de este duty cycle será modificado levemente por un regulador PID aplicado al error entre la intensidad teórica de la pila calculada a partir del estado de carga de la batería y la intensidad real que está proporcionando la batería en ese momento.
El microprocesador para el que hay que desarrollar el código es un PIC32MX795F512L de la marca Microchip incluido en un placa desarrollada por el CEI específicamente para este proyecto.
La propia marca Microchip proporciona un IDE de programación gratuito llamado MPLAB X en el que se desarrolla el código de este proyecto.
Una vez escrito el código hay que realizar la comprobación de su funcionamiento primero en el simulador incluido en MPLAB X y posteriormente sobre la placa tanto con MPLAB X como con una fuente de tensión y un osciloscopio.
Resumen ejecutivo
Escuela Técnica Superior de Ingenieros Industriales (UPM) 6
Cuando se ha comprobado su funcionamiento con éxito los siguientes pasos a seguir en el proyecto, que ya quedan fuera de este trabajo, son la comprobación del funcionamiento en el sistema real del carrito de golf y el ajuste de los parámetro del PID.
Por lo tanto, el resultado de este Trabajo de Fin de Grado es el código completo para el control de la pila de combustible parametrizado, como se comentaba al inicio, de forma que sirva EPHISA para este primer prototipo como para futuros proyectos aun cuando se cambien sensores, puntos de funcionamiento o la propia pila de combustible y que ellos mismos puedan realizar los cambios pertinentes en el código.
PALABRAS CLAVE
Pila de combustible de hidrógeno, batería, microprocesador, control, señales, simulación.
CÓDIGOS UNESCO
330412 – Dispositivos de control.
330603 – Motores eléctricos.
331107 – Instrumentos electrónicos.
331108 – Equipo de laboratorio.
331702 – Automóviles.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 7
ÍNDICE
AGRADECIMIENTOS ........................................................................................................... 3 RESUMEN EJECUTIVO ....................................................................................................... 5 ÍNDICE ..................................................................................................................................... 7 1. INTRODUCCIÓN ........................................................................................................... 9
1.1. COMBUSTIBLES EN LA ACTUALIDAD. .......................................................................... 9 1.2. EL HIDRÓGENO COMO COMBUSTIBLE ........................................................................ 11 1.3. LA PILA DE COMBUSTIBLE DE HIDRÓGENO ................................................................ 13 1.4. COMPARACIÓN ENTRE EL COCHE ELÉCTRICO Y EL COCHE CON PILA DE COMBUSTIBLE DE HIDRÓGENO ...................................................................................................................... 15 1.5. EPHISA ................................................................................................................... 17
2. OBJETIVOS ................................................................................................................... 19 3. METODOLOGÍA .......................................................................................................... 21
3.1. CONFIGURACIONES ................................................................................................... 22 3.1.1. Configuración del reloj del microprocesador y bibliotecas. ........................... 22 3.1.2. Señales de entrada analógicas ......................................................................... 24 3.1.3. Señales de entrada digitales ............................................................................ 29 3.1.4. Señales de salida digitales ............................................................................... 32
3.2. FUNCIONAMIENTO .................................................................................................... 36 3.3. CONTROL .................................................................................................................. 40 3.4. ESCRITURA EN MEMORIA FLASH ............................................................................... 45 3.5. SIMULACIONES Y PRUEBAS EN LA PLACA .................................................................. 46
4. RESULTADOS Y CONCLUSIONES ......................................................................... 51 5. LÍNEAS FUTURAS ....................................................................................................... 53 6. ANÁLISIS TEMPORAL Y ECONÓMICO ................................................................ 55
6.1. ANÁLISIS TEMPORAL ................................................................................................. 55 6.2. ANÁLISIS ECONÓMICO ............................................................................................... 58
6.2.1. Coste de personal ............................................................................................. 58 6.2.2. Ordenador ........................................................................................................ 58 6.2.3. Software ........................................................................................................... 58 6.2.4. Material ............................................................................................................ 59 6.2.5. Componentes .................................................................................................... 59 6.2.6. Fabricación ...................................................................................................... 59
7. REFERENCIAS ............................................................................................................. 61 8. ANEXOS ......................................................................................................................... 67
8.1. CÓDIGO MAIN.C ........................................................................................................ 67 8.2. CÓDIGO CONTROL.C .................................................................................................. 74 8.3. CÓDIGO CONTROL.H .................................................................................................. 80 8.4. CÓDIGO SENSORES_ANALÓGICOS_ADC.C ................................................................ 83 8.5. CÓDIGO SENSORES_ANALÓGICOS_ADC.H ................................................................ 90 8.6. CÓDIGO TIMERS.C ..................................................................................................... 92 8.7. CÓDIGO TIMERS.H ..................................................................................................... 94 8.8. CÓDIGO SEÑALES_DIGITALES_ENTRADA.C ............................................................... 96 8.9. CÓDIGO SEÑALES_DIGITALES_SALIDA.C ................................................................. 102
Índice
Escuela Técnica Superior de Ingenieros Industriales (UPM) 8
8.10. CÓDIGO PWM.C ................................................................................................... 106 8.11. CÓDIGO ESCRIBIR_MEMORIA.C ........................................................................... 109
9. ÍNDICE DE FIGURAS ................................................................................................. 63 10. ÍNDICE DE FÓRMULAS ............................................................................................. 65
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 9
1. INTRODUCCIÓN
1.1. Combustibles en la actualidad.
En la actualidad hay una gran preocupación por le medioambiente, el calentamiento global y la contaminación en las ciudades. Una gran culpa de este agravamiento de la contaminación la tienen los combustibles.
Según un estudio realizado por el Eurobarómetro, en la Europa de los 28 el coche es el transporte más utilizado, por el 54% de la población, en un día normal con una gran diferencia respecto al transporte público. El siguiente más usado, como se puede ver en la Figura 1, es el transporte público.
Figura 1: Uso del transporte en un día normal en la Europa de los 28. [1]
Esto lleva a que la contaminación en las grandes ciudades sea uno de los problemas a los que se enfrenta la sociedad de hoy en día y se están empezando a ver políticas por parte los gobiernos de veto a los coches antiguos más contaminantes e incluso a los que consumen combustible diésel aunque sean más modernos.
Introducción
Escuela Técnica Superior de Ingenieros Industriales (UPM) 10
Las opciones actualmente más viables a la hora de sustituir los automóviles diésel y gasolina por otros menos contaminantes son los vehículos híbridos y los eléctricos. Los vehículos híbridos pueden llegar a no producir emisiones cuando funcionan únicamente con el motor eléctrico, lo que hace que sus emisiones medias sean menores que las de los diésel o gasolina.
En cuanto a los eléctricos, hay dos posturas a la hora de considerar sus emisiones. Por un lado, se habla de que las emisiones locales si son cero pero, por otro lado, habría que tener en cuenta las emisiones que aparecen en la producción de la energía eléctrica que utilizan este tipo de vehículos y que depende cada año del porcentaje de la producción que cubran las energías renovables. De utilizar este punto de vista, las emisiones de los vehículos diésel y gasolina también serían mayores ya que, en las que se suelen manejar, no se incluyen las emisiones procedentes de la producción de estos combustibles.
Por último, también existen vehículos con pila de combustible que utilizan el hidrógeno como combustible. Este tipo de vehículos está menos extendido que los eléctricos o los híbridos aunque ya hay alguno a la venta y en funcionamiento como el Toyota Mirai en Japón. [2]
Al igual que los vehículos eléctricos, los vehículos con pila de combustible se consideran que producen cero emisiones a nivel local. Sin embargo, habría que considerar todo el ciclo de vida del vehículo en el que se incluirían las emisiones producidas en la obtención del hidrógeno que se genera utilizando gas natural aunque es cierto que también se podría conseguir a partir de energías renovables. Actualmente es demasiado caro para competir en precio con el resto de vehículos.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 11
1.2. El hidrógeno como combustible
El combustible de hidrógeno es un combustible de cero emisiones locales, como se ha comentado anteriormente, que se usa mediante celdas electroquímicas o mediante combustión en motores de combustión interna para propulsar vehículos y en dispositivos electrónicos. También es usado en la propulsión de naves espaciales.
Pese a ser el elemento más abundante del universo, no se puede obtener de forma natural ya es demasiado ligero para que la gravedad terrestre lo retenga escapándose a la atmósfera.
Esto lleva a la necesidad de tener que producirlo industrialmente lo que es uno de los mayores inconvenientes de este combustible.
En la actualidad hay varias técnicas de obtención de hidrógeno que usan carbón o gas natural generando CO2 de manera inevitable. Estos procesos también pueden realizarse mediante el uso de biomasa como materia prima resultando el proceso mucho más limpio.
Otro método de producción de hidrógeno es la electrólisis que consiste en descomponer el agua en hidrógeno y oxígeno aplicando una corriente eléctrica. Si esta energía eléctrica es generada mediante formas de energía renovable el hidrógeno producido no tendrá casi emisiones.
El otro gran obstáculo que debe superar el sector del hidrógeno para potenciar el uso en vehículos es su transporte y distribución. Actualmente los costes de distribución son mucho mas altos que los de la gasolina y el diésel y solo es rentable si el hidrógeno se produce cerca o incluso en el mismo sitio donde va a ser utilizado.
Una posible solución sería la de crear una infraestructura global de tuberías similar a los gasoductos pero requeriría una tremenda inversión. De hecho, se está probando usar la infraestructura del gas natural inyectando el hidrógeno en los gasoductos y separándolos en el destino permitiendo transportar hasta un 20% del hidrógeno respecto al total de gas natural.
Una vez en el destino surge el problema del almacenamiento ya que se requieren grandes presiones para poder almacenarlo de entre 250 y 700 bares o temperaturas muy bajas de unos -253ºC. Además conseguir estas temperaturas tan bajas se calcula que consumiría en torno al 30% de la energía que se podría producir con ese hidrógeno. [3]
Aunque se ha estado hablando del uso del hidrógeno como combustible, en la actualidad es un uso completamente minoritario a pesar de que ya existe una gran producción de hidrógeno a nivel industrial. Este hidrógeno se utiliza mayoritariamente para la producción de amoniaco, en la hidrogenación de la grasa y aceites, hidroalquilaciones, hidrosulfuraciones, hidrocraking y en la producción de metanol entre otros. [4] [5]
En la Figura 2 se puede observar los tipos de combustibles utilizados para la producción del hidrógeno así como sus usos.
Introducción
Escuela Técnica Superior de Ingenieros Industriales (UPM) 12
Figura 2: Producción y uso mundial de hidrógeno. [6]
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 13
1.3. La pila de combustible de hidrógeno
La pila de combustible es un dispositivo electroquímico en el cual un flujo continuo de combustible y oxidante sufren una reacción química que da lugar a unos productos y suministra una corriente eléctrica a un circuito externo.
En concreto en las pilas de combustible de hidrógeno, el combustible utilizado es el hidrógeno, de ahí su nombre, y el oxidante el oxígeno, por ello tiene unas emisiones mínimas ya que el producto resultante de esta reacción es agua. En la Figura 3 se puede ver un esquema de este funcionamiento.
El funcionamiento de una pila de combustible, por tanto, es muy parecido al de las baterías tradicionales ya que en ambos casos se obtiene electricidad a partir de sustancias que reaccionan entre sí. La principal diferencia se encuentra en que, mientras que en las baterías tradicionales tienen una capacidad de almacenamiento de energía limitada, la pila de combustible permite un abastecimiento continuo de los reactivos, de manera que si este abastecimiento no está limitado no tendrá que recargarse como la batería.
Además la eficiencia de las pilas de combustible se encuentra entre un 40 y un 60% aunque se puede aumentar hasta un 85-90% en cogeneración si se utiliza el calor residual para su uso superando a los motores de combustión interna donde esta eficiencia se ve limitada por las temperaturas de trabajo según el ciclo de Carnot.
Hay diferentes tipos de pilas de combustible pero, en este proyecto en concreto, se va a utilizar una pila de combustible de membrana de intercambio protónico también conocida como Proton Exchange Membrane (PEM).
Las PEM operan a temperaturas relativamente bajas, entre 80 y 95ºC, tienen una alta densidad de potencia y pueden variar rápidamente su potencia de salida para adaptarse a la demanda del sistema en el que se están utilizando. En cuanto a las potencias que manejan las pilas de combustible tipo PEM existen desde unos pocos vatios hasta varios kilovatios siendo la máxima potencia instalada en una planta de energía estacionaria de 1MW de la marca Honda.
Estas características hacen que este tipo de pilas se puedan utilizar en vehículos. [7]
Introducción
Escuela Técnica Superior de Ingenieros Industriales (UPM) 14
Figura 3: Esquema de funcionamiento de una pila de combustible tipo PEM. [7]
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 15
1.4. Comparación entre el coche eléctrico y el coche con pila de combustible de hidrógeno
El principal competidor actualmente del coche con pila de combustible de hidrógeno sería el coche eléctrico por las características de cero emisiones y motor eléctrico y se pretende hacer una comparación entre las ventajas y desventajas de cada uno.
• Ventajas del coche eléctrico:
− Menor precio.
− Mayor eficiencia.
− Menores emisiones globales.
− Coste por km inferior.
− Mayor potencia.
− Mejor y más accesible infraestructura.
• Desventajas del coche eléctrico:
− Menor autonomía.
− Más tiempo de recarga.
− Temperaturas extremas afectan a la autonomía.
− Menor potencia con bajo estado de carga de la batería.
− La vida útil de la batería limita la del coche.
• Ventajas del coche con pila de combustible de hidrógeno:
− Mayor autonomía.
− Repostaje rápido.
− Temperaturas extremas no afectan tanto a la autonomía.
• Desventajas del coche con pila de combustible de hidrógeno:
− Mayor precio.
− Menor eficiencia.
− Mayores emisiones globales.
Introducción
Escuela Técnica Superior de Ingenieros Industriales (UPM) 16
− Coste por km mayor.
− Menor potencia.
− Poco viable en coches pequeños.
− Pérdida de espacio en el maletero.
− Infraestructura compleja, escasa y costosa.
− Hidrógeno muy volátil e inflamable.
− La vida útil de la pila y los tanques de hidrógeno limitan la del coche.
Viendo las ventajas y desventajas de cada uno, parece claro que el coche eléctrico es una mejor opción que el coche con pila de combustible de hidrógeno. Sin embargo, es verdad que las empresas aun no han apostado tanto en la pila de combustible como en el coche eléctrico por lo que aun tiene bastante margen de mejora para conseguir paliar las desventajas que se han comentado. [8]
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 17
1.5. EPHISA
Con el fin de acercar los beneficios de la tecnología de las pilas de combustible de hidrógeno se crea Española de Pilas de Hidrógeno S.A. (EPHISA), cuyos objetivos empresariales se basan en el desarrollo de sistemas de pilas de combustible para aplicaciones estacionarias y móviles, que incorporen elementos innovadores de investigación científica y de desarrollo tecnológico relevantes.
EPHISA es una empresa constituida en Madrid en diciembre de 2013, cuya estrategia de negocio y objetivos se basan en conseguir desarrollar una tecnología propia optimizando las funcionalidades y los costes en el ámbito de la pila de hidrógeno.
En concreto, su primer proyecto trata de realizar un primer prototipo de pila de combustible y realizar las primeras pruebas en un vehículo que se trata de de un carrito de golf. [9]
Introducción
Pablo Medrano Gastañaga 18
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 19
2. OBJETIVOS
El objetivo de mi Trabajo de Fin de Grado está enmarcado dentro de la empresa Española de Pilas de Pilas de Hidrógeno S.A. (EPHISA) como se ha comentado su primer proyecto, del que ha formado parte mi trabajo, trata de desarrollar un primer prototipo de pila de hidrógeno de baja potencia para una aplicación vehicular. En concreto, mi objetivo era el de implementar en código C el control de esta pila de hidrógeno, desarrollado previamente en un modelo de Simulink por el Centro de Electrónica Industrial (CEI) de la ETSII que aparece en la Figura 4, en una placa que incluía un microprocesador PIC32MX795F512L.
Figura 4: Modelo en Simulink de la pila de hidrógeno. [10]
En esta Figura 4 se ve como están modelizados como bloques de Simulink la pila de hidrógeno, la batería y el convertidor de corriente continua-continua y de las que habrá que manejar algunas de las entradas y salidas que aparecen en este modelo además de algunas otras que no figuran en él.
Por lo tanto, el control de la pila se realiza básicamente con los bloques situados dentro del círculo rojo de la Figura 4. El control a realizar se determinó, previamente, mediante distintos ensayos. Se consideró que lo mejor, por las características de las pilas de hidrógeno, era que fuese de tipo proporcional en función de la carga de la batería como se comentará en un futuro apartado de este trabajo. El control proporcional hará que la pila trate de mantener el estado de carga de la batería por encima de un cierto nivel determinado, para lo que proporcionará más potencia cuanto menor sea la carga de la batería y menos cuando la carga supere ese límite establecido por encima del cual la pila de combustible proporcionará una potencia mínima con la intención de que se apague.
Para poder realizar esta parte del control, el microprocesador deberá gestionar como entradas la intensidad que proporciona la batería al motor con la que se calculará de forma aproximada
Objetivos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 20
su estado de carga y con él, a su vez, la intensidad teórica que debería proporcionar de la pila de hidrógeno que se comparará con la intensidad real que está dando.
Además existirán otras entradas y salidas que serán necesarias para poder realizar el control completo de todo el sistema de la pila de combustible de hidrógeno como, por ejemplo, una electroválvula, sensor de temperatura de la pila, posiciones de una llave y algunos leds.
Estas señales no se encuentran reflejadas en Simulink ya que no eran necesarias para realizar el modelado del funcionamiento de la pila de combustible de hidrógeno con la batería y el control que se quería desarrollar pero, sí son necesarias en el sistema real.
Uno de los objetivos del código a desarrollar era que no fuese simplemente un código para una aplicación concreta sino que fuese parametrizable. De esta forma será fácil modificar ciertos valores característicos del prototipo utilizado en caso de que en un futuro cambiasen, algo que es muy probable por el hecho mismo de ser este proyecto solo un prototipo. Se pretende con ello que el código sirva igualmente para versiones futuras en las que podrían variar la potencia, los puntos óptimos de funcionamiento, parámetros tanto de la pila como del resto de sensores, etc.
Además, se pretendía realizar un código simplificado realizando funciones de más alto nivel que la configuración de registros del microprocesador para que el personal de EPHISA, sin un conocimiento exhaustivo de la electrónica ni de la programación, pudiese realizar modificaciones en caso de ser estas necesarias.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 21
3. METODOLOGÍA
Para la implementación del código en C que realiza el control de la pila se han utilizado las siguientes señales:
− Entradas analógicas:
• Intensidad de la batería.
• Intensidad que da la pila de hidrógeno.
• Sensor de temperatura.
• Sensor de hidrógeno.
− Entradas digitales:
• Señal de la llave en posición 1.
• Señal de la llave en posición 2.
• Sensor de hidrógeno.
− Salidas digitales:
• Led Verde.
• Led Rojo.
• Pulso de interruptor para el encendido de la pila de hidrógeno.
• Electroválvula.
• Convertidor de corriente continua-continua (PWM).
Para poder realizar todas las configuraciones de registros necesarias he utilizado el PIC32 Reference Manual [11] y el 32bit Peripheral Library Guide [12] que microchip pone a disposición de todos los usuarios y en el que se describen y se explican las formas de configurar los registros para las distintas funcionalidades disponibles en los microprocesadores.
Para seguir la misma metodología con todas señales voy a explicar de cada una la configuración y su funcionamiento o en el caso de varias señales tengan alguna de estas partes en común la explicaré en referencia a todas ellas.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 22
3.1. Configuraciones
3.1.1. Configuración del reloj del microprocesador y bibliotecas.
Lo primero que vamos a hacer a la hora de comenzar con el código es incluir las bibliotecas necesarias que vamos a utilizar y configurar la velocidad a la que va a trabajar el microprocesador.
Como bibliotecas predefinidas se van a utilizar stdio.h y stdlib.h de C y plib.h y p32xxxx.h de microchip. Además se deberán incluir los archivos .h extra que se creen. La inclusión de las bibliotecas es lo primero que aparece en el código en el archivo principal llamado main.c (ver anexo Código main.c).
A continuación se quiere configurar la velocidad a la que debe funcionar el microprocesador. El oscilador interno del microprocesador funciona a 8MHz aunque tiene un preescalado de 2, que por defecto está activado aunque se puede desactivar, que hace que la velocidad de funcionamiento, en un principio, sea de 4MHz. Inicialmente se pensó que esta velocidad podía ser adecuada para conseguir un funcionamiento correcto del programa, pero finalmente la necesidad de tener que producir un PWM a una frecuencia de 100KHz con una mayor resolución que la que proporcionaba el reloj a 4MHz hizo que se subiese esta velocidad hasta 16MHz.
Para utilizar una frecuencia distinta a la predeterminada de 4MHz es necesario realizar una serie de configuraciones a divisores y multiplicadores, en concreto, una primera división entre 2 de la frecuencia inicial del oscilador que pasa la frecuencia de 8 a 4 MHz, después se realiza una multiplicación por 16 que pasa la frecuencia a 64MHz para después volver a dividir la frecuencia entre 4 para conseguir los 16MHz finales que eran los deseados.
Se puede pensar que se podría, simplemente, realizar una multiplicación por 4 de los 4MHz iniciales para conseguir los 16MHz deseados pero, la estructura del microprocesador hace que la señal del reloj pase por todos estos multiplicadores y divisores.
Además hay que modificar un divisor que divide esta frecuencia para los periféricos y tiene por defecto el valor de 2 cuando nosotros queremos que se mantenga la velocidad de 16MHz por lo que se cambia su valor a 1.
Todo este código para modificar la velocidad del reloj se encuentra a continuación de la declaración de las bibliotecas que se utilizan, antes de comenzar con la declaración de las variables que se van a utilizar (ver anexo Código main.c).
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 23
Figura 5: Diagrama de flujo de la configuración de la velocidad del reloj.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 24
3.1.2. Señales de entrada analógicas
Como señales de entrada analógica se tienen las siguientes:
• Intensidad que da la batería de hidrógeno.
• Intensidad que da la pila de hidrógeno.
• Sensor de temperatura.
• Sensor de hidrógeno.
El procesamiento de todas las señales analógicas debe hacerse a través del convertidor analógico-digital (ADC) de 10 bits que tiene el microprocesador. Por lo que además de configurar las entradas como analógicas habrá que configurar el ADC, y un timer que es utilizado por el ADC, para que convierta estas señales a valores digitales. Para ello también serán necesarios los valores entre los que se encuentra la medida que vendrán impuestos por el sensor.
Las funciones que configuran las entradas analógicas y el ADC se encuentran en el archivo sensores_analogicos_ADC.c
Para que el usuario pueda añadir más sensores analógicos, en caso de que fuese necesario, sin tener que modificar registros, se ha creado una función de tipo void con tres parámetros:
1. El primer parámetro es el número de pin analógico al que se va a conectar el sensor, que es necesario para configurar el registro correspondiente como entrada analógica y también para modificar el registro del ADC que indica las correspondientes entradas que tienen que ser convertidas.
Para poder configurar estos registros independientemente del número de sensor que introduzca el usuario se han creado en el archivo sensores_analogicos_ADC.h unas funciones de desplazamiento de bits que permitirán modificar los bits que sean necesarios.
2. El segundo parámetro será el valor mínimo que tiene que leer el sensor y que utilizará el ADC para poder realizar la conversión correctamente. Este valor se almacena en un vector que contiene todos los valores mínimos de todos los sensores analógicos utilizados.
3. El tercer parámetro es similar al anterior solo que en este caso el valor será el máximo en vez del mínimo que también es necesario para realizar la conversión. Este valor se almacenará en otro vector que contiene los valores máximos de todos los sensores analógicos.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 25
La declaración de la función queda, por tanto, de la siguiente forma:
iniSensorAN(número pin analógico, valor mínimo sensor, valor máximo sensor)
Como he dicho, con esto ya se consiguen configurar algunos de los registros que son necesarios configurar para el funcionamiento del ADC que son los pines a los que van a conectarse los sensores analógicos como entradas analógicas y los pines que va a tener que leer el ADC para realizar su conversión.
A continuación hay que seguir configurando una serie de registros para establecer el modo de funcionamiento del ADC.
Para ello se ha creado otra función, igualmente de tipo de void y sin parámetros llama iniADC1, que el usuario solo deberá llamar al iniciarse la función main y, en principio, no deberá modificar a no ser que quiera cambiar el modo de funcionamiento en el que se ha configurado el ADC y que es el más automático posible.
En este modo de funcionamiento, el ADC comenzará a realizar la conversiones de todas las entradas especificadas por el usuario previamente con la función iniSensorAN cuando le marque un timer, almacenándolas en el buffer que dispone el ADC para ello. Este buffer se sobrescribe cada vez que el ADC realiza nuevas conversiones.
Además hay que configurar la interrupción que puede generar el ADC y que se va a utilizar para hacer el escalado de los valores leídos por el ADC. Una vez hecha esta conversión se almacenan esos valores, ya escalados, en un vector para después guardarlos en unas variables más intuitivas que se utilizarán en el resto del código.
Previamente se ha comentado que el ADC empezará a realizar las conversiones cuando se lo marque un timer, en este caso se va a utilizar el timer3 que es de 16 bits y habrá que configurar.
Para configurar el timer hay que darle un valor de preescalado que se aplica a la velocidad del reloj del microprocesador, que en este caso es de 16MHz, y un número de ciclos que debe realizar hasta que se produce su overflow que será lo que marque al ADC el momento en el que debe empezar a realizar la conversión.
Además se puede utilizar o no la interrupción que genera el timer cuando se produce su overflow. Para el funcionamiento del ADC no es necesario utilizar la interrupción y como este mismo timer no se utiliza para nada más se va a dejar desactivada.
Se ha considerado que un tiempo correcto para que el ADC realice interrupciones es cada 100 milisegundos. Como el reloj del microprocesador está configurado para que funcione a 16MHz, este reloj se va a configurar con un preescalado de 64 y con un valor de cuenta de 25000. Así se consigue que el overflow del timer 3 se produzca cada 100 milisegundos.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 26
A pesar de asignar estos valores concretos para este caso particular, los valores pueden ser modificados en el archivo timers.h en caso de que se quisiese que el ADC comenzase a realizar las conversiones con un intervalo distinto a 100 milisegundos.
Según la configuración realizada para el ADC, se podrían conectar a este hasta ocho entradas analógicas. Sin embargo, modificando esta configuración se podría ampliar este número hasta llegar a dieciséis entradas, siempre que haya tantas accesibles en la placa.
A continuación, en la Figura 6, se puede ver de forma simple cómo es el funcionamiento del ADC con su interrupción y su inicio mediante el overflow del timer asignado.
Figura 6: Diagrama de flujo del funcionamiento del ADC
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 27
Finalmente, aunque como se ha comentado el usuario puede añadir nuevos sensores o modificar los ya existentes, se han dejado ya programados los mencionados al principio de esta sección y para ello hay que seleccionar pines que puedan funcionar como entradas analógicas y que estén disponibles para su uso y accesibles en la placa.
Para ello se dispone de los esquemas de la placa que se muestran a continuación, tanto en la Figura 7 como en la Figura 8, donde se señala los pines elegidos que son:
• Sensor de corriente de la batería: AN3.
• Sensor de corriente de la pila de combustible: AN4.
• Sensor temperatura: AN5.
• Sensor de hidrógeno analógico: AN9.
Figura 7: Esquemático de los pines del microprocesador. Fuente: CEI
En este esquema de la Figura 7, se puede ver que los pines analógicos seleccionados se encuentran en el puerto B y en el mismo bit al correspondiente al pin analógico, es decir, el AN0 se encuentro en el pin 0 del puerto B, el AN1 en el pin 1 y así sucesivamente. Como los pines utilizados eran AN3, AN4, AN5 y AN9, se encontrarán en los pines 3, 4, 5 y 9 del puerto B.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 28
Igualmente en el siguiente esquema de la Figura 8 se pueden ver en qué conector y en cuál de sus pines de la placa se encuentran conectados esos pines del microprocesador y que serán donde habrá que conectar las señales una vez se haya realizado el código y se vaya a utilizar la placa.
Figura 8: Esquemático con alguno de los conectores de la placa y los pines correspondientes al microprocesador. Fuente: CEI
Se puede ver en la imagen que los pines utilizados como entradas analógicas se encuentran en los siguientes conectores y pines de la placa:
• AN3: conector CN14 pin 5.
• AN4: conector CN14 pin 6.
• AN5: conector CN14 pin 7.
• AN9: conector CN4 pin 6.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 29
3.1.3. Señales de entrada digitales
Las señales de entrada digitales son las siguientes:
• Señal de la llave en posición 1.
• Señal de la llave en posición 2.
• Sensor de hidrógeno.
Las dos posiciones en las que se puede entrar la llave se corresponden con dos modos de funcionamiento distintos que son los siguientes:
• Posición 1: El modo de funcionamiento en la posición 1 es de solo batería, es decir, la pila de hidrógeno se encuentra apagada.
• Posición 2: El modo de funcionamiento en la posición 2 se corresponde con un funcionamiento conjunto tanto de la batería como de la pila de hidrógeno.
La pila de hidrógeno proporcionará corriente para ir cargando la batería de manera que esta no baje de un determinado porcentaje de carga. Además la pila de hidrógeno podrá proporcionar potencia al motor siempre y cuando no se trate de un valor mayor de 200W que es el que capaz de proporcionar. Si se dan picos de potencia mayores que este valor, como puede ser en una aceleración o en alguna cuesta, será la batería la que proporcione dicha potencia.
La gestión de estas entradas digitales se va a hacer mediante interrupciones. Cuando se produzca un cambio en alguno de los dos bits correspondientes a estas señales digitales saltará una interrupción. Dentro de esta interrupción habrá que identificar cuál ha sido el bit que ha cambiado para pasar a la posición y, por tanto, modo de funcionamiento correspondiente o hacer saltar la alarma de hidrógeno si ha sido su cambio de flanco el que ha hecho saltar la interrupción.
Además como la llave no lleva un sistema antirrebotes propio hay que implementar uno en el propio código que se hará con un retardo de 20ms en la lectura de los puertos después de recibir la interrupción.
Aunque no se deben introducir retardos en las interrupciones, se ha considerado que en este caso es una buena opción ya que el microprocesador no va a poder realizar ninguna de las tareas asignadas hasta que no sepa en que posición se encuentra una vez se haya realizado correctamente la lectura de la posición correspondiente.
La configuración de todas estas entradas se realizarán de forma similar, cambiando solamente el número de bit o también el puerto si fuese necesario pero, en este caso, se utilizan todo entradas del mismo puerto.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 30
Por lo tanto, lo primero que habrá que hacer será habilitar el bit del puerto correspondiente que se va a utilizar, que debe ser uno que permita utilizar la interrupción por cambio de flanco en él, después hay que configurarlo como entrada digital y habilitar el pull up y, por último, fijar la prioridad de la interrupción, borrar el flag de interrupción y habilitar las interrupciones.
Esta configuración se realizará de la misma manera para las entradas digitales ya que se desea que todas ellas produzcan una interrupción por cambio de flanco y, como se ha dicho anteriormente, el vector de interrupciones está compartido por todas por lo que una vez salte la interrupción habrá que identificar cuál de las tres ha provocado la ha provocado.
Cuando salte la interrupción se hará la lectura de los bits de todas las entradas y, en función de sus estados, se realizarán las acciones pertinentes.
En cuanto a la posición de la llave, como se utilizan dos bits podrán ocurrir cuatro situaciones diferentes:
1. Que los dos bits estén a cero
2. Que el bit de la posición 1 esté a uno y el de la posición 2 esté a cero.
3. Que el bit de la posición 1 esté a cero y el de la posición 2 esté a uno.
4. Que los dos bits estén a uno.
Los casos dos y tres son los que se corresponderían, respectivamente, con estar en la posición 1 de funcionamiento solo con batería y en la posición 2 de funcionamiento con batería y pila de hidrógeno.
Para considerar el caso uno, en el que no estaría activa ninguna de las posiciones, se ha creado una nueva posición llamada posición 0 en la que el micro está en un bucle de espera hasta que se pase a alguna de las otras dos posiciones.
En el caso cuatro los bits de las posiciones estarían a uno sin saber en cuál de las dos debería encontrarse. Para solucionar esto se ha decidido dar prioridad al modo de funcionamiento combinado de batería y pila de combustible. De esta forma, para entrar en este modo de funcionamiento se ha puesto únicamente de condición que el bit de la posición 2 se encuentre a 1, independientemente del estado del bit de la posición 1, de manera que se incluye el caso cuatro.
Igual que en el caso anterior con las entradas analógicas, hay que asignar unos pines a estas entradas. En este caso, como el cambio de flanco debe producir una interrupción hay que elegir unos pines que tengan este modo de funcionamiento y son los denominados “Change Notice” abreviados como CN. Por tanto, se van a utilizar los CN siguientes:
• Señal de la llave en posición 1: CN2.
• Señal de la llave en posición 2: CN3.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 31
• Sensor de hidrógeno digital: CN4.
Igual que en el caso anterior hay que identificar los puertos y pines del microprocesador donde habrá que conectar estas señales así como los conectores y los pines en la placa.
En este caso, los pines se vuelven a encontrar todos en el puerto B aunque no coinciden la numeración de los pines del puerto con el pin CN correspondiente. El CN2 se encuentra en el pin 0, el CN3 en el pin 1 y el CN4 en el pin 2.
En cuanto a la conexión de estas señales en la placa, deberá hacerse en los siguientes conectores y pines correspondientes:
• Señal de la llave en posición 1 (CN2): Conector CN14 pin 2.
• Señal de la llave en posición 2 (CN3): Conector CN14 pin 3.
• Sensor de hidrógeno digital (CN4): Conector CN14 pin 4.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 32
3.1.4. Señales de salida digitales
Como señales digitales de salida se tienen:
• Led Verde.
• Led Rojo.
• Pulso de interruptor para el encendido de la pila de hidrógeno.
• Electroválvula.
• Convertidor de corriente continua-continua (PWM).
Los dos leds se corresponderán con dos bits que tendrán que estar a uno o a cero según corresponda al funcionamiento del programa. El led verde estará encendido cuando la pila de hidrógeno esté funcionando correctamente y el led rojo se encenderá cuando suceda algún problema que haga que sea necesario parar la pila de hidrógeno.
El pulso del interruptor para encender la pila de hidrógeno se trata de una señal que tendrá que ponerse a uno durante dos segundos para que la pila de hidrógeno interprete que quiere ser encendida. Para medir esos dos segundos se utilizará un timer como se comentará posteriormente.
También habrá que tener otra salida digital que servirá para encender o apagar la electroválvula cuando la pila de hidrógeno este en funcionamiento o no.
Por último, se necesita utilizar un PWM para regular la potencia que suministra la pila de hidrógeno. Aunque el PWM también es una salida digital su configuración es más compleja que la de los anteriores, que es similar para todos, y se tratará la última por separado.
Como se ha dicho la configuración tanto de los leds como del pulso del interruptor de encendido de la pila de hidrógeno y la electroválvula son similares cambiando únicamente el bit correspondiente a cada señal y el puerto, en caso de que no se encontrasen en el mismo puerto.
Para realizar la configuración de estas señales habrá que poner los bits de los puertos correspondientes como salidas digitales. Para ello, en este caso, se ha utilizado una función predefinida en la librería de periféricos proporcionada por microchip que es la siguiente:
PORTSetPinsDigitalOut(IOPORT_X, BIT_Y) donde solamente hay que sustituir las X por el puerto correspondiente y la Y por el bit de ese puerto.
Por ejemplo, para el caso del led verde que se encuentra en el bit 13 del puerto B quedaría de la siguiente forma: PORTSetPinsDigitalOut(IOPORT_B, BIT_13).
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 33
Estas configuraciones se realizan en el archivo del proyecto llamado señales_digitales_salida.c Además, para aclarar la comprensión a una persona ajena a la realización del código, la llamada a la función comentada anteriormente para configurar los bits como de salida se realiza dentro de otras funciones creadas de tipo void y sin parámetros.
Las funciones se han nombrado de la siguiente forma: void iniNombreSalida (void) donde se sustituye NombreSalida por el nombre de la salida correspondiente así en el caso del led verde, por ejemplo, quedaría de la siguiente manera: void iniLedVerde (void) y dentro de esta función se llama a la función PORTSetPinsDigitalOut(IOPORT_B, BIT_13) de manera que quedaría configurado como una salida digital.
Las señales comentadas al inicio de este punto se inicializan mediante la llamada a esta función
Además para poner a cero o a uno los bits correspondientes cuando se quiera que las señales estén activas o no, también se han creado dos funciones para clarificar el significado del código, una para el caso de poner el bit a uno y otra para el caso de ponerlo a cero.
Estas funciones son de tipo void sin parámetros y con el nombre de la siguiente forma: void NombreSalidaON (void) y void NombreSalidaOFF (void).
Así, por ejemplo, en el caso de la electroválvula quedarían de la siguiente forma: void ElectrovalvulaON(void) y void ElectrovalvulaOFF(void).
Como se ha dicho lo único que hacen estas funciones es poner el bit correspondiente a esa salida a uno en el caso de que sea ON y a cero en el caso de que sea OFF.
Las funciones que inicializan todas las salidas deberán ser llamadas al iniciarse el programa en la función main, mientras que las que ponen las salidas a ON o a OFF se llamarán cuando corresponda en función del programa.
Como se ha comentado anteriormente, el pulso del interruptor para el encendido de la pila de hidrógeno debe durar dos segundos para que lo se necesita utilizar un timer que va a ser el timer 5.
Como dos segundos es un tiempo bastante largo, con el timer de 16 bits utilizando el mayor preescalado que permite de 256 no se consiguen contar esos dos segundos sin que se produzca el overflow del timer.
Debido a esta situación se va a configurar el valor de overflow del timer para que el tarde un segundo en producirse. De esta manera, la segunda vez que se produzca el overflow habrán pasado los dos segundos que eran necesarios y se podrá poner a cero el pulso de interruptor para el encendido de la pila de hidrógeno.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 34
A continuación se va a explicar la configuración del PWM que debe funcionar a una frecuencia de 100KHz. Para la realización de un PWM hay que utilizar un registro Output Compare, que tiene varios modos de funcionamiento, y elegir como modo de funcionamiento el de PWM.
Además se necesita utilizar un timer que puede ser de 16 bits o utilizar dos combinados y en ese caso se conseguiría uno de 32 bits. Para nuestro se caso se va a utilizar el timer 2 solamente y, por lo tanto, será de 16 bits.
Una vez hecho esto se configura también el duty cycle inicial que tendrá el PWM en su primera ejecución. Este valor no debería ser mayor del 50% ya que no queremos que el duty cycle sobrepase este valor en ningún caso, por lo que, inicialmente, se va a inicializar a cero.
El PWM puede generar una interrupción cada vez que finaliza un ciclo pero, en este caso no se va a utilizar ya que su principal uso podría ser actualizar el valor del duty cycle.
Sin embargo, este valor depende de otras partes del programa que van a ser más lentas por lo que la interrupción se produciría muchas veces y en la mayoría de ellas no cambiaría el duty cycle por lo que se estaría desaprovechando y perdiendo un cierto tiempo.
Por lo tanto, la actualización del valor del duty cycle se realizará cuando se dispongan de los nuevos valores necesarios para su cálculo y no hay ningún problema en actualizarlo en otro punto del programa que no sea en la interrupción que genera el PWM ya que ese valor se actualizará automáticamente cuando termine el ciclo en el que se encuentre el PWM.
También hay que configurar el valor del timer (PR2) hasta el que tiene que contar para que se produzca el overflow. Este valor se calcula mediante la siguiente fórmula que aparece en el Datasheet del microprocesador [11] reflejada en la Ecuación 1, en función de la frecuencia a la que tiene que funcionar el PWM, a la que funciona el microprocesador y el preescalado del timer.
1𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎𝑑𝑒𝑠𝑒𝑎𝑑𝑎𝑃𝑊𝑀 = 𝑃𝑅2 + 1 ∗
1𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎𝑑𝑒𝑙𝑟𝑒𝑙𝑜𝑗 ∗ 𝑝𝑟𝑒𝑒𝑠𝑐𝑎𝑙𝑎𝑑𝑜𝑡𝑖𝑚𝑒𝑟
Ecuación 1: Calculo del valor de cuenta del timer(PR2) para obtener la frecuencia del PWM deseada
Además, habrá que configurar el timer que va a utilizar el PWM que, como se ha dicho, va a ser el dos y se va a utilizar a la misma frecuencia del reloj que es de 16MHz, sin ningún preescalado, para que el PWM tenga la mayor resolución posible y con valor de overflow el que se ha calculado anteriormente con la Ecuación 1.
Al igual que en los dos casos anteriores se tienen que identificar los puertos, conectores y bits correspondientes a las señales a partir de los esquemas del microprocesador y la placa.
Para las salidas digitales no hay que tener ninguna consideración especial a la hora de elegir el tipo de pin ya que no tienen ningún tipo de función especial.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 35
Se han elegido los siguientes pines de los puertos para cada una de las señales:
• Led Verde: Puerto B pin 13.
• Led Rojo: Puerto B pin 14.
• Pulso de interruptor para el encendido de la pila de hidrógeno: Puerto B pin 15.
• Electroválvula: Puerto E pin 9
• Convertidor de corriente continua-continua (PWM): puerto E pin 6.
En cuanto a los conectores donde se encuentran en la placa y los pines correspondientes son los siguientes:
• Led Verde: Conector CN13 pin 7.
• Led Rojo: Conector CN13 pin 10.
• Pulso de interruptor para el encendido de la pila de hidrógeno: Conector CN13 pin 9.
• Electroválvula: Conector CN13 pin 14
• Convertidor de corriente continua-continua (PWM): Conector CN13 pin 16.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 36
3.2. Funcionamiento
Para la realización del funcionamiento, EPHISA proporcionó un diagrama de flujo con una primera versión aproximada de cómo querían que fuese ese funcionamiento. El diagrama de flujo se presenta a continuación en la Figura 9:
Figura 9: Diagrama de flujo del funcionamiento original proporcionado por EPHISA
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 37
Como se comentó en el apartado de las configuraciones de las entradas y las salidas, algunas de ellas son atendidas mediante interrupciones, como el cambio de posición de la llave o el sensor de hidrógeno en caso de que este fuese digital.
En cualquier caso, a continuación se va a describir el funcionamiento del sistema en función de las tres posiciones posibles de la llave y las correspondientes acciones que el sistema debe llevar a cabo en cada una de ellas:
• Posición Apagado: se ha llamado posición apagado en vez de posición 0 porque, como se comentó anteriormente, se añadió una posición 0 en la que el sistema está encendido pero a la espera de pasar a la posición 1 o a la posición 2. Por lo tanto, en la posición de apagado el sistema se encuentra sin corriente y tanto la batería como la pila de combustible están apagadas.
• Posición 1: en esta posición se encuentra en funcionamiento únicamente la batería mientras que la pila de hidrógeno permanece apagada. A pesar de la que pila de hidrógeno esté apagada, el microprocesador debe estar funcionando monitorizando la corriente que suministra la batería al motor para, como se explicará en el siguiente epígrafe de control, poder estar calculando el estado de la carga de la batería constantemente ya que el sistema debe conocer ese valor en todo momento. Esto se debe a que la estimación del estado de carga se realiza por medio del método “Coulomb Counting” que es el mejor considerado para este caso. [12]
Si esto no se realizase de así, cuando se pasase a la posición 2 en la que la pila de hidrógeno debería entrar en funcionamiento, el control fallaría ya que al no conocer el estado de carga de la batería, el control realizado no sería correcto al no disponer del valor actual del estado de carga de la batería.
• Posición 2: como se ha dicho, en la posición 2 funcionan conjuntamente la batería y la pila de hidrógeno realizándose un control sobre dicha que se explicará posteriormente. A parte del control, hay varios aspectos importantes a considerar cuando se produce el funcionamiento conjunto en esta posición que son las siguientes:
− A la hora de arrancar la pila de hidrógeno su temperatura debe ser menor de 45ºC. Este requisito no aparecía inicialmente en la diagrama de flujo proporcionado por EPHISA pero se mostrará a continuación en otro diagrama que se actualizó trabajando en el CEI. Si la temperatura sobrepasa esos 45ºC no se podrá encender la pila de hidrógeno. El valor de 45ºC es un parámetro que puede ser modificado por el usuario en el archivo control.h (ver Código control.).
− Si la temperatura es inferior a 45ºC comienza el encendido de la pila y para ello hay que mandar un pulso de dos segundos de duración sino la pila no se encenderá.
− Una vez encendida la pila comienza la fase que se ha denominado como arranque. El arranque dura veinte segundos y durante este tiempo la pila debe comenzar a dar
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 38
corriente. Si esto no sucede, el arranque se considerará fallido debido a que hay algún problema y la pila de hidrógeno se apagará. Al igual que los 45ºC en el caso anterior los veinte segundos son un parámetro que puede ser modificado por el usuario en el archivo control.h (ver Código control.).
− Además, la pila de hidrógeno realiza unas depuraciones de forma periódica, en las que sufre una especie de reset, y puede suceder que al realizar alguna de estas depuraciones haya algún tipo de fallo y la pila de combustible deje de proporcionar corriente. Por lo tanto, hay que monitorizar la corriente que suministra la pila de hidrógeno y si en algún momento esta corriente es nula durante un cierto periodo de tiempo, establecido igualmente como un parámetro en el archivo control.h (ver Código control.), habrá que apagar la pila de hidrógeno.
Otro aspecto que no se reflejaba en el diagrama de flujo inicial, y que hay que considerar, es que si se pasa de la posición 2 a la posición 1 hay que apagar la pila de combustible. El proceso de apagado sí se puede ver en el diagrama de flujo aunque finalmente es algo distinto del que aparece en ese diagrama y se podrá ver en el nuevo diagrama que se presentará a continuación en la Figura 1.
El proceso de apagado consiste en apagar el convertidor de corriente continua y, una vez que la corriente suministrada por la pila de hidrógeno se hace cero, se puede apagar la electroválvula. No hace falta esperar a que la temperatura sea menor de 45ºC como se indicaba en el diagrama original.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 39
Figura 10: Diagrama de funcionamiento modificado por el CEI
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 40
3.3. Control
El control de la pila de hidrógeno se basa en el estado de carga estimado (SOC) de la batería.
Para realizar la estimación de este estado de carga se utiliza el método “Coulomb Counting” que calcula este estado de carga a partir de la intensidad que proporciona la batería y que, como se comentó anteriormente, es una de las entradas analógicas al microprocesador. En concreto la fórmula utilizada por el método “Coulomb Counting” es la a continuación en la Ecuación 2:
𝑆𝑂𝐶 𝑡 = 𝑆𝑂𝐶 0 −100𝑄(𝐴𝑠) 𝐼 𝑡 𝑑𝑡
E
F
Ecuación 2: Estimación del SOC por el método del Coulomb Counting. [13]
Como se puede ver y se comentó en puntos anteriores, para poder utilizar esta fórmula se debe conocer el estado de carga de la batería para poder realizar la integración.
A partir de este estado de carga estimado se le proporcionó a la empresa EPHISA dos estrategias de control posibles que son las siguientes:
• Escalonada: en este caso la pila de combustible proporcionaba su potencia óptima siempre que el estado de carga de la batería se encontrase entre unos límites inferior y superior.
En caso de que el estado de carga llegase a ser inferior del mínimo establecido, la pila de hidrógeno comenzaría a otorgar el su máximo de potencia para aumentar más rápidamente el estado de carga de la batería.
En el caso de que el estado de carga superase un máximo establecido, la pila de combustible pasaría a otorgar el mínimo de potencia con el fin de no apagarse completamente.
La principal ventaja de este control es que la pila de combustible otorga una potencia óptima durante un mayor tiempo. Sin embargo, se producían mayores escalones, es decir, cambios más bruscos de la intensidad que da la pila de combustible en el caso de que se superasen los estados de carga de la batería establecidos como límites superior e inferior. En la siguiente gráfica representada en la Figura 11 se puede ver esta estrategia en un recorrido con paradas, realizado por un carrito de golf con unos límites considerados del estado de carga mínimo del 50% y máximo de un 90%.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 41
Figura 11: control de la pila de combustible escalonado en un recorrido con paradas. [10]
• Continua: en este tipo de control la potencia entregada por la pila de combustible es proporcional al estado de carga de la batería. La ventaja de esta estrategia frente a la escalonada es que se obtiene una regulación más continua aunque la pila de combustible no proporciona la potencia óptima como sucedía con aquella. En la siguiente gráfica representada en la Figura 12 se puede ver la estrategia continua en las mismas condiciones que anteriormente con la escalonada.
Figura 12: control de la pila de combustible continuo en un recorrido con paradas. [10]
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 42
Finalmente EPHISA decidió que era mejor implementar la estrategia de control continua y es la que se desarrolla en este trabajo.
Para realizar este control se disponen de dos entradas analógicas que se corresponden con la intensidad de corriente de la batería y la de la pila de combustible y una salida digital que es el PWM.
Lo primero que hay que hacer es calcular el estado de carga mediante la ecuación del método “Coulomb Counting”(Ecuación 2).
Una vez se dispone del estado de carga hay que calcular la intensidad teórica que debería entregar la pila de combustible en función del estado de carga de la batería.
Para calcular esta intensidad teórica de la batería, se ha calculado una ecuación lineal dependiente del estado de carga en función de los límites mínimo y máximo de potencia que se quiere que de la pila de combustible. Conociendo la intensidad que da la pila de combustible para proporcionar esas potencias se obtiene la siguiente ecuación:
𝑖GHI = 17,55 − 0,185 ∗ 𝑆𝑂𝐶𝑒𝑠𝑡
Ecuación 3: Intensidad teórica que debería dar la pila de combustible para el estado de carga estimado (SOCest). [10]
Una vez se ha obtenido esta intensidad teórica, que se va a llamar intensidad de referencia, se calcula la diferencia respecto a la intensidad de referencia calculada en el bucle anterior y se le aplica una saturación, llamada slew rate limit (SRL), para que no se puedan producir unos grandes escalones en la intensidad demandada a la pila de combustible.
Este valor del slew rate limit es un parámetro que el usuario puede modificar en función de las características de la pila en el archivo control.h (ver Código control.).
Una vez obtenemos la intensidad de referencia habiéndole aplicado el slew rate limit, en caso de ser necesario, se van a seguir dos procesos para realizar el control que debe finalizar con el valor del PWM.
Por un lado, se va a calcular un regulador PID en función del error existente entre la intensidad de referencia calculada de forma teórica y la intensidad procedente de la pila medida directamente mediante el ADC. Los valores de las constantes de las partes proporcional, integral y derivativa son parámetros que pueden ser modificados por el usuario en función de sus necesidades y que se encuentran en el archivo control.h (ver Código control.). Este valor se sumará posteriormente al del duty cycle calculado como se va a comentar a continuación.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 43
Por otro lado, hay que calcular el duty cycle que debe aplicar el convertidor para conseguir la potencia deseada. La fórmula para calcular dicho duty cycle es la siguiente:
𝑑 = 1 −𝑉(𝐼𝑟𝑒𝑓)48
Ecuación 4: Cáculo del duty cycle en función de la tensión correspondiente a la intensidad de referencia. [10]
Para poder obtener la tensión correspondiente a la intensidad de referencia calculada, EPHISA proporcionó la curva V-I de la pila de combustible obtenida en diversas pruebas que se hicieron con ella que se muestra en la Figura 13.
El objetivo es construir una look up table en el código a partir de valores obtenidos de esta gráfica V-I. Para ello, con los valores proporcionados por EPHSA se construyó esta gráfica V-I y se realizó una interpolación de cuarto grado, obteniendo una ecuación que permite calcular el voltaje a partir de la intensidad de referencia para poder, a continuación, calcular el duty cycle.
Figura 13: curva V-I de la pila de combustible con interpolación de cuarto grado
Gracias a esta ecuación se puede crear una look up table en el código, que puede verse en la línea 74 del archivo main.c (ver Código main.c), evitando así que el programa se ralentice calculando la ecuación de cuarto grado cada vez que se necesita un valor de la tabla.
Una vez se han obtenido tanto el valor del duty cycle como el proporcionado por el controlador PID se suman y se calcula el valor hasta el que se tendrá que mantener a uno el PWM para proporcionar el dicho duty cycle multiplicando por el valor hasta el que contaba contaba el timer antes de desbordarse (PR2), que en este caso es de 159.
y = 0,0095x4 - 0,1957x3 + 1,3299x2 - 4,659x + 36,907R² = 0,99405
0
5
10
15
20
25
30
35
40
0 1 2 3 4 5 6 7 8 9
Volta
je(V
)
Intensidad(A)
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 44
Además, como en un principio no se quiere que el duty cycle sobrepase el 50% debido a que se corresponde con el valor máximo de potencia que puede proporcionar la pila de combustible utlilizada en el prototipo, se incluye una saturación al valor hasta el que va a contar el timer que es un parámetro que se puede modificar en el archivo control.h (ver Código control.).
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 45
3.4. Escritura en memoria flash
Por último, para el correcto funcionamiento del sistema se requiere que el valor del estado de carga se encuentre siempre disponible para el programa, ya que, como se ha visto en el apartado anterior, es necesario para el cálculo de estado de carga estimado de la batería mediante el método de “Coulomb Counting”.
Durante el funcionamiento normal no hay ningún problema ya que el valor del estado de carga estimado se mantiene en una variable que se va sobreescribiendo con cada nuevo cálculo de este valor y siempre está disponible.
El problema surge al arrancar el microprocesador por primera vez y al apagarlo ya que la variable se encuentra en memoria volátil durante el funcionamiento y al apagar el microprocesador su valor se borrará.
Si se quiere que el estado de carga no se borre una vez se apague el microprocesador es necesario guardarlo en la memoria flash no volátil.
Para realizar el guardado en la memoria flash, según la información que aparece en el Datasheet del microprocesador [11], es necesario realizar un proceso de desbloqueo de esta memoria para después realizar la escritura que puede ser de una palabra o de una fila. Como en este caso solamente se quiere guardar un valor de tipo entero con escribir una palabra es suficiente. Se pueden ver las funciones obtenidas del Datasheet [11] para ello en los anexos (ver Código escribir_memoria.c).
Con este procedimiento no se consiguió de ninguna forma realizar una escritura en la memoria flash del microprocesador por lo que se buscaron otras alternativas para la posible escritura de la memoria flash.
Se intentó entonces crear una partición de usuario de la memoria flash modificando el linker script del compilador pero, finalmente esto tampoco dio resultado y no se consiguió guardar el valor del estado de carga en la memoria flash del microprocesador.
Hasta que se pudiese solucionar este problema mediante otros métodos, como pudiera ser el utilizar una tarjeta sd externa ya que la placa utilizada en el proyecto lo permite, o incluso en un futuro cambiar de microprocesador a uno que permite escribir su memoria flash no volátil de manera más sencilla, hay que estimar el estado de carga de las baterías mediante un método externo al microprocesador e introducir ese valor manualmente en el código una vez el microprocesador esté encendido.
Otra opción es tener la batería cargada al máximo y que, por tanto, el valor del estado de carga inicial sea el 100%.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 46
3.5. Simulaciones y pruebas en la placa
Para comprobar si el código realizado funciona correctamente se utilizó en primer lugar el simulador que proporciona la compañía Microchip en su IDE gratuito llamado MPLAB X donde se ha realizado toda la programación del código.
Este simulador permite comprobar la configuración de los distintos pines de manera que se puede saber si su configuración como pines de entrada o salida analógicos o digitales ha sido correcta como se puede ver en la Figura 14 y que se trata del paso que se realiza en primer lugar.
Figura 14: Modo de los pines configurados en MPLAB X
Además se pueden modificar los valores de esos pines para, por ejemplo, comprobar que las interrupciones por flanco en los pines de entrada digitales se producen correctamente.
Igualmente para comprobar el correcto funcionamiento del ADC se puede dar un valor de voltaje a los pines analógicos de entrada que debe leer como se ve en la Figura 15, así como modificar el pin correspondiente a la bandera de interrupción del ADC para hacer que esta salte y realice las conversiones correspondientes como se puede ver en la Figura 16.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 47
Figura 15: Valores de los pines modificados en MPLAB X
Figura 16: Forzado de la interrupción del ADC
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 48
Además para comprobar los valores obtenidos de la conversión del ADC, así como el de cualquier otra variable que se desee, MPLAB X permite observar el valor de cualquier variable cuando el programa se encuentra pausado en algún punto del código como se muestra en la
Figura 17.
Figura 17: Valor de las variables en un punto del programa en MPLAB X
Una vez se ha comprobado el correcto funcionamiento del programa en el simulador se puede pasar a realizar las comprobaciones correspondientes en la placa.
Para poder programar el microprocesador se ha utilizado el PICkit 3 que permite, a su vez, hacer un debugging del código. Además se utilizó un osciloscopio para poder visualizar las señales y una fuente de tensión para generar los estímulos necesarios en los pines correspondientes.
En concreto las comprobaciones que se hicieron para cada tipo de señal fueron las siguientes:
• Entradas analógicas: como se sabe, son las distintas entradas que tiene que convertir el ADC. Para comprobar su funcionamiento se conectaba la fuente de tensión a los pines correspondientes a esas entradas analógicas dando unos valores variables entre 0V y 3,3V, que son los valores de voltaje que admiten los pines del microprocesador, y tras las conversiones realizadas por el ADC, se podía observar en MPLAB X que valores habían adquirido las variables donde se guardaban los valores de dicha conversión.
• Entradas digitales: como todas las entradas digitales tienen que hacer saltar una interrupción por cambio de flanco, lo que se hizo fue conectar la fuente de tensión a esos
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 49
pines. En MPLAB X se fijaron puntos de interrupción dentro de ellas para comprobar si saltaba la interrupción correspondiente tanto por flanco de subida como por flanco de bajada.
• Salidas digitales: en las salidas digitales se tiene que diferenciar entre el pwm y el resto. Para las salidas digitales distintas del PWM, la comprobación se realizó poniendo a uno y a cero dichas salidas desde MPLAB X y viendo si en el osciloscopio su valor valía 0V cuando estaba a cero y 3,3V cuando estaba a uno que, como se ha comentado anteriormente, son los valores de voltaje que manejan los pines del microprocesador.
Para comprobar el funcionamiento del PWM necesitamos por un lado comprobar que funciona a la frecuencia deseada, que como se dijo es de 100KHz, y que el duty cycle se corresponde con el establecido en el programa, ambas cosas se pueden ver claramente en el osciloscopio.
Para la frecuencia se puede fijar un duty cycle cualquiera, por ejemplo, de un 50% y se comprueba que, efectivamente, la frecuencia de la señal que muestra el oscilador es de 100KHz.
También se puede comprobar para este primer valor del duty cycle que durante un ciclo la señal esta la mitad del tiempo a uno y la otra mitad a cero.
Posteriormente se comprueba para otros porcentajes de duty cycle reduciendo de 10% en 10% desde el 50% inicial hasta 0%.
Metodología
Escuela Técnica Superior de Ingenieros Industriales (UPM) 50
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 51
4. RESULTADOS Y CONCLUSIONES
El resultado de este trabajo ha sido el código entregado a la empresa EPHISA para su utilización en el proyecto que están llevando a cabo que, como se dijo en la introducción, se trata de fabricar un primer prototipo de pila de combustible de hidrógeno para una aplicación vehicular y que, de momento, se prueba en un carrito de golf.
Uno de los objetivos del trabajo era que este código fuese parametrizable, es decir, que todos los valores que son característicos para la pila de combustible y sensores que se están utilizando en este momento puedan ser modificados en el futuro en caso de que se utilice una pila de combustible distinta o se cambie cualquiera de los sensores o los puntos de operación del sistema. Este requisito era fundamental ya que lo más probable es que esto suceda debido a que el proyecto se trata únicamente de un primer prototipo.
Como se ha comentado durante el desarrollo todos los valores susceptibles de ser alterados han sido programados como parámetros que el usuario puede modificar fácilmente.
Por estos motivos se espera que el código tenga una gran utilidad durante toda la vida del proyecto de EPHISA ya que podrá ir siendo adaptado sin mucho trabajo a las modificaciones que se vayan haciendo tanto a la pila de combustible como a los distintos sensores, al funcionamiento y al control.
También hay que decir que uno de los requisitos iniciales, el de guardar el estado de carga en la memoria flash del microprocesador, no se ha podido conseguir en el tiempo de realización que conllevaba este trabajo. A pesar de ello, este requisito ha servido para llevar a cabo la búsqueda de diferentes alternativas distintas a la que inicialmente se pretendía implementar al no funcionar esta y desarrollar nuevas ideas para conseguir el objetivo. Alguna de estas ideas que se sugirieron en el apartado correspondiente podrá ser implementada en el futuro.
Además de estos resultados tangibles del trabajo, también creo que ha sido muy formativa la experiencia de participar en un primer proyecto real, con un cliente fuera de la universidad de manera que es una situación más parecida a lo que me voy a tener que enfrentar dentro de poco en el mundo laboral.
Esto ha supuesto un modo diferente de trabajo al que supondría realizar este trabajo como un proyecto dentro de la universidad ya que, al depender de un cliente, suceden cambios en la planificación y requisitos durante la realización del trabajo a los que hay que adaptarse modificando lo realizado hasta el momento.
Como se ha dicho, creo que esto ha supuesto un complemento formativo más allá de la realización de un Trabajo de Fin de Grado que considero de gran enriquecimiento profesional.
Resultados y conclusiones
Escuela Técnica Superior de Ingenieros Industriales (UPM) 52
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 53
5. LÍNEAS FUTURAS
En cuanto a las siguientes pasos a seguir en este proyecto, habría que buscar alguna alternativa para poder realizar el guardado del estado de carga ya que no se consiguió hacer con este microprocesador mediante los procedimientos indicados en el Datasheet del microprocesador como se indicó en el apartado correspondiente en el desarrollo.
Por lo tanto, habría que buscar otras alternativas como pudiera ser la utilización de una tarjeta sd externa dado que la placa construida por el CEI para el proyecto de EPHISA tiene una ranura para ello. Además habría que desarrollar un código que permitiese tanto su escritura como lectura desde el microprocesador.
Por otra parte, también habría que ajustar los parámetros del regulador PID en el sistema del carrito de golf de EPHISA. Se empezaría ajustando la acción proporcional viendo si con solamente con ella es suficiente para realizar un control suficientemente bueno de la pila de combustible. Si con la acción proporcional el control no es bueno se añadiría, a continuación, la acción integral. Con esto ya se conseguiría que el sistema redujese el error hasta hacerlo teóricamente cero. Finalmente, dependiendo de las condiciones estáticas y dinámicas requeridas y las conseguidas con las acciones proporcional e integral habría que considerar si es necesario añadir también la acción derivativa o no.
Además de realizar el mencionado ajuste de los parámetros del PID hay que comprobar que todas las entradas, salidas y el control realizado funcionan correctamente con el sistema real de la pila de combustible de hidrógeno y las baterías ya que, muy probablemente, van a aparecer problemas al tratarse del sistema real como puede ser, sobre todo, el caso de ruido que afecte a los sensores y las medidas realizadas y, por tanto, influyan en el control y puede que hagan necesario realizar algunas modificaciones ya sea de tipo software o hardware.
Líneas futuras
Escuela Técnica Superior de Ingenieros Industriales (UPM) 54
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 55
6. ANÁLISIS TEMPORAL Y ECONÓMICO
El objetivo de este capítulo es realizar un análisis de la distribución en el tiempo del trabajo realizado así como del coste económico del trabajo.
6.1. Análisis temporal
Este Trabajo de Fin de Grado comenzó en Febrero de 2016 y se ha desarrollado hasta Febrero de 2017.
En cuanto al análisis temporal, el trabajo se puede dividir en cuatro grandes partes:
1. La primera se trata del estudio del arte así como del estado en el que se encuentra el proyecto llevado a cabo por EPHISA del que ya lleva tiempo formando parte el CEI y ha desarrollado un esquema de control en Matlab que será el punto de partida de este Trabajo de Fin de Grado. Además se fijan los objetivos y requisitos del código que se tiene que llevar a cabo durante este trabajo.
2. En la segunda parte se realiza la instalación del IDE de Microchip, MPLAB X, y se empieza a trabajar para ir familiarizándose con él visualizando algunos ejemplos incluidos en este IDE e información disponible tanto en la página web oficial de Microchip como en distintos foros.
3. En la tercera parte comienza la escritura del código atendiendo los objetivos y requisitos fijados por el proyecto.
4. Por último, en la última parte se realizando las comprobaciones del correcto funcionamiento del código, primero realizando simulaciones en el simulador incluido en MPLAB X y posteriormente sobre la placa construida por el CEI para el proyecto.
A continuación se presentan dos figuras, una con la Estructura de Descomposición del Trabajo (EDP) y otra con el diagrama de Gantt.
Análisis temporal y económico
Escuela Técnica Superior de Ingenieros Industriales (UPM) 56
Figura 18: EDP del Trabajo de Fin de Grado
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 57
Figura 19: Diagrama de Gantt del Trabajo de Fin de Grado
Análisis temporal y económico
Escuela Técnica Superior de Ingenieros Industriales (UPM) 58
6.2. Análisis económico
En este apartado se va a realizar el análisis económico del Trabajo de Fin de Grado que se presenta resumido en la siguiente figura.
CONCEPTO COSTE Personal 2.100,00 € Ordenador 450,00 € Software Matlab 0,00 € Mplab X 0,00 € Material Osciloscopio 0,00 € Sondas 0,00 € Fuente de alimentación 0,00 € Programador Pickit 0,00 € Componentes Microprocesador 10,00 € Conectores y otros 20,00 € Fabricación 3,50 €
TOTAL 2.583,50€
Figura 20: Costes Trabajo de Fin Grado
6.2.1. Coste de personal
Para calcular el coste de personal se ha estimado el sueldo de un estudiante del Grado en Tecnologías Industriales en prácticas en 6€/hora que multiplicado por el número de horas empleado en el Trabajo de Fin de Grado que han sido 350 horas hace un total 2100€.
6.2.2. Ordenador
Como equipo para realizar la programación del código se ha utilizado el ordenador personal que tuvo un coste de 1350€. Suponiendo una amortización de 3 años y con una utilización de 12 meses para el Trabajo de Fin de Grado supone un coste de 450€.
6.2.3. Software
En cuanto al software utilizado han sido dos programas, Matlab y Mplab X. Para Matlab, la universidad ofrece licencias gratuitas a todos sus estudiantes por lo no tiene ningún coste. Mplab X es el IDE de Microchip que se puede descargar gratuitamente desde su página web por lo que tampoco supone ningún coste.
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 59
6.2.4. Material
Para realizar las pruebas en la placa se utilizó un osciloscopio, sondas y una fuente de alimentación, todo ello en propiedad del CEI y ya amortizado por lo que cuenta como coste para el proyecto.
Además se utilizó también un programador, el Pickit , para programar el microprocesador que también era propiedad del CEI y ya se encontraba amortizado.
6.2.5. Componentes
Los componentes son los utilizados en para la fabricación de la placa utilizada en el proyecto en la que se puede destacar el microprocesador con un coste de 10€ y el resto de componentes y conectores se pueden englobar con un coste de 20€.
6.2.6. Fabricación
Por último, se puede imputar un coste de fabricación de la placa fabricada en el propio CEI de 3,5€.
Como se ha visto en la figura el coste total del Trabajo de Fin de Grado sumando todos los costes desglosados anteriormente asciende a 2583,50€.
Análisis temporal y económico
Escuela Técnica Superior de Ingenieros Industriales (UPM) 60
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 61
7. REFERENCIAS
[1] transport, Quality of. «Comisión Europea.» Comisión Europea. Diciembre de 2014. http://ec.europa.eu/public_opinion/archives/ebs/ebs_422a_en.pdf. [2] “El lado oscuro de los coches de hidrógeno”. Ferrer, S. El Confidencial. 12 de Diciembre de 2014. http://www.elconfidencial.com/tecnologia/2014-12-18/el-lado-oscuro-del-coche-de-hidrogeno_592282/. [3] “¿Por qué no triunfa el hidrógeno como combustible de vehículos?” Sanz, D. Ecología Verde. 10 de Julio de 2013. http://www.ecologiaverde.com/por-que-no-triunfa-el-hidrogeno-como-combustible-de-vehiculos/. [4] “Combustible de Hidrógeno”. Wikipedia. https://es.wikipedia.org/wiki/Combustible_de_hidr%C3%B3geno#cite_note-ReferenceA-1. [5] “Apliaciones del hidrógeno en el uso diario”. González, M. La Guía 2000. 20 de Diciembre de 2010. http://quimica.laguia2000.com/conceptos-basicos/aplicaciones-del-hidrogeno-en-el-uso-diario. [6] Global CCS Institute. https://hub.globalccsinstitute.com/publications/ccs-roadmap-industry-high-purity-co2-sources-sectoral-assessment-%E2%80%93-final-draft-report-1. [7] “Pila de combustible”. Wikipedia. https://es.wikipedia.org/wiki/Pila_de_combustible#Tecnolog.C3.ADa. [8] “El coche de hidrógeno vs el coche elétrico: la competencia por ser la motorización del futuro”. Ibáñez. Xataka. 4 de Agosto de 2016. https://www.xataka.com/automovil/el-coche-de-hidrogeno-vs-el-coche-electrico-la-competencia-por-ser-la-motorizacion-del-futuro. [9] EPHISA. http://ephisa.es/. [10] Centro de Electrónica Industrial (CEI) de la Escuela Técnica Superior de Ingenieros Industriales (ETSII) de la Universidad Politécnica de Madrid (UPM). [11] “PIC32 Reference Manual”. Microchip. [12] “32bit Peripheral Library Guide”. Microchip. [13] “Sistema de pila de combustible PEM de baja potencia en configuración híbrida con baterías para aplicación a un vehículo: sistema de control electrónico”. C. Sanz. Trabajo de Fin de Grado, UPM, Julio 2016.
Referencias
Escuela Técnica Superior de Ingenieros Industriales (UPM) 62
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 63
8. ÍNDICE DE FIGURAS
Figura 1: Uso del transporte en un día normal en la Europa de los 28. [1] ............................... 9 Figura 2: Producción y uso mundial de hidrógeno. [6] ........................................................... 12 Figura 3: Esquema de funcionamiento de una pila de combustible tipo PEM. [7] ................. 14 Figura 4: Modelo en Simulink de la pila de hidrógeno. [10] ................................................... 19 Figura 5: Diagrama de flujo de la configuración de la velocidad del reloj. ............................. 23 Figura 6: Diagrama de flujo del funcionamiento del ADC ...................................................... 26 Figura 7: Esquemático de los pines del microprocesador. Fuente: CEI .................................. 27 Figura 8: Esquemático con alguno de los conectores de la placa y los pines correspondientes al
microprocesador. Fuente: CEI .......................................................................................... 28 Figura 9: Diagrama de flujo del funcionamiento original proporcionado por EPHISA .......... 36 Figura 10: Diagrama de funcionamiento modificado por el CEI ............................................ 39 Figura 11: control de la pila de combustible escalonado en un recorrido con paradas. [10] ... 41 Figura 12: control de la pila de combustible continuo en un recorrido con paradas. [10] ....... 41 Figura 13: curva V-I de la pila de combustible con interpolación de cuarto grado ................. 43 Figura 14: Modo de los pines configurados en MPLAB X ..................................................... 46 Figura 15: Valores de los pines modificados en MPLAB X ................................................... 47 Figura 16: Forzado de la interrupción del ADC ...................................................................... 47 Figura 17: Valor de las variables en un punto del programa en MPLAB X ............................ 48 Figura 18: EDP del Trabajo de Fin de Grado .......................................................................... 56 Figura 19: Diagrama de Gantt del Trabajo de Fin de Grado ................................................... 57 Figura 20: Costes Trabajo de Fin Grado .................................................................................. 58
Índice de figuras
Escuela Técnica Superior de Ingenieros Industriales (UPM) 64
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 65
9. ÍNDICE DE FÓRMULAS
Ecuación 1: Calculo del valor de cuenta del timer(PR2) para obtener la frecuencia del PWM deseada .............................................................................................................................. 34
Ecuación 2: Estimación del SOC por el método del Coulomb Counting. [13] ....................... 40 Ecuación 3: Intensidad teórica que debería dar la pila de combustible para el estado de carga
estimado (SOCest). [10] ................................................................................................... 42 Ecuación 4: Cáculo del duty cycle en función de la tensión correspondiente a la intensidad de
referencia. [10] .................................................................................................................. 43
Índice de fórmulas
Escuela Técnica Superior de Ingenieros Industriales (UPM) 66
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 67
10. ANEXOS
10.1. Código main.c 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
EI
6
7
@Fi
le N
ame
8
mai
n.c
9
10
@D
escr
iptio
n 1
1
En
este
arc
hivo
es
dond
e se
real
iza
todo
el p
rogr
ama.
Lo
prim
ero
se in
cluy
en la
s bi
blio
teca
s ne
cesa
rias
en e
ste
caso
1
2 *
las
de C
, el d
e lo
s per
iferic
os d
e m
icro
chip
y p
ic32
. Ade
mas
se
incl
uye
el a
rchi
vo c
ontro
l.h d
onde
se
esta
blec
en a
lgun
os
13
* p
arám
etro
s ne
cesa
rios
para
el c
ontro
l. 1
4
15
@A
utor
1
6
Pab
lo M
edra
no
17
1
8 @
Fech
a 1
9
11
Dic
iem
bre
2016
2
0 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
21
2
2 //I
nclu
sión
de
bibl
iote
cas
23
#def
ine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
2
4 #i
nclu
de <
stdi
o.h>
2
5 #i
nclu
de <
stdl
ib.h
> 2
6 #i
nclu
de <
plib
.h>
27
#inc
lude
<p3
2xxx
x.h>
2
8 #i
nclu
de "
cont
rol.h
" 2
9
30
3
1
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 68
32
//DEV
CFG
1 3
3 //C
onfig
urac
ion
del m
icro
proc
esad
or p
ara
que
func
ione
a 1
6MH
z 3
4 #p
ragm
a co
nfig
FN
OSC
= F
RC
PLL
//E
l osc
ilado
r es e
l int
erno
del
mic
ro q
ue ti
ene
una
velo
cida
d de
8M
Hz
pero
se
mod
ifica
con
el P
LL
35
//e
n la
s sig
uien
tes
conf
igur
acio
nes
36
#pra
gma
conf
ig F
PLLI
DIV
= D
IV_2
//PL
L In
put D
ivid
er. S
e po
ne 2
par
a qu
e la
ent
rada
al P
LL s
ea d
e 4M
Hz.
Tie
ne q
ue se
r ent
re 4
y 5
M
Hz
3
7 #p
ragm
a co
nfig
FPL
LMU
L =
MU
L_16
//PL
L M
ultip
lier.
Entra
la fr
ecue
ncia
de
4MH
z y
se m
ultip
lica
por 1
6 sa
liend
o un
a de
64
MH
z 3
8 #p
ragm
a co
nfig
FPL
LOD
IV =
DIV
_4
//
PLL
Out
put D
ivid
er. S
e di
vide
n lo
s 64M
Hz
de s
alid
a de
l PLL
ent
re 4
y s
e ob
tiene
n 16
MH
z 3
9 #p
ragm
a co
nfig
FPB
DIV
= D
IV_1
//P
erip
hera
l Bus
Div
ider
. Se
pone
a 1
par
a qu
e ta
mbi
en v
ayan
a 1
6Mhz
los t
imer
s 4
0
41
4
2 //D
ecla
raci
on d
e va
riabl
es
43
float
SO
Ces
t;
/
/Var
iabl
e qu
e gu
arda
el e
stad
o de
car
ga e
stim
ado
cada
vez
que
se
calc
ula
4
4
45
int c
onve
rsio
n;
//
Var
iabl
e qu
e in
dica
si e
l AD
C h
a te
rmin
ado
la c
onve
rsio
n 4
6
47
int p
osic
ion
= 0;
/
/Var
iabl
e qu
e in
dica
la p
osic
ion
en la
que
se
encu
entra
la ll
ave
48
int t
iem
po_s
in_c
orrie
nte_
arra
nque
= 0
;
//V
aria
ble
que
va g
uard
ando
el n
umer
o de
seg
undo
s sin
que
la p
ila d
e co
rrie
nte
cuan
do e
sta
4
9
//ar
ranc
ando
5
0 in
t tie
mpo
_sin
_cor
rient
e =
0;
//V
aria
ble
que
guar
da e
l tie
mpo
sin
que
la p
ila d
e co
rrie
ntes
en
cual
quie
r mom
ento
de
5
1
//fu
ncio
nam
ient
o 5
2
53
int a
rran
que;
//V
aria
ble
que
indi
ca s
i al e
star
en
posi
cion
2 s
e es
ta a
rran
cand
o la
pila
o n
o 5
4 in
t enc
endi
do =
0;
//V
aria
ble
que
indi
ca s
i al e
star
en
posi
cion
2 h
ay q
ue s
egui
r el p
roce
so d
e en
cend
ido
o no
5
5 flo
at in
t_pi
la;
/
/Var
iabl
e qu
e gu
arda
el v
alor
de
inte
nsid
ad q
ue s
ale
de la
pila
5
6 flo
at in
t_re
f;
//
Var
iabl
e qu
e gu
arda
el v
alor
de
la in
tens
idad
de
refe
renc
ia c
alcu
lada
en
func
ion
de la
que
5
7
//da
la b
ater
ia y
el S
OC
est
imad
o 5
8 flo
at te
mpe
ratu
ra_p
ila;
//V
aria
ble
que
guar
da la
tem
pera
tura
que
hay
en
el a
mbi
ente
de
la p
ila
59
float
con
cent
raci
on_h
idro
geno
;
/
/Var
iabl
e qu
e gu
arda
la c
once
ntra
cion
de
hidr
ogen
o si
se
usa
un s
enso
r ana
logi
co
60
6
1 in
t pos
icio
n_an
terio
r2;
//V
aria
ble
que
sirv
e pa
ra s
aber
si h
emos
pas
ado
de la
pos
icio
n 2
a la
1 re
aliz
ar e
l cic
lo d
e 62
/
/apa
gado
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 69
63
6
4
65
//Var
iabl
es d
el P
ID
66
float
err
or =
0;
//
Var
iabl
e qu
e gu
arda
el e
rror
ent
re la
inte
nsid
ad d
e la
pila
y la
de
refe
renc
ia
67
float
err
or_a
nter
ior =
0;
//V
aria
ble
que
guar
da e
l err
or d
e la
con
vers
ion
ante
rior p
ara
el e
rror
der
ivat
ivo
6
8 flo
at p
ropo
rcio
nal =
0;
//V
aria
ble
que
cont
iene
la a
ccio
n pr
opor
cion
al d
el P
ID
69
float
inte
gral
= 0
;
//
Var
iabl
e qu
e co
ntie
ne la
acc
ion
inte
rgra
l del
PID
7
0 flo
at d
eriv
ativ
o =
0;
//
Var
iabl
e qu
e co
ntie
ne la
acc
ion
deriv
ativ
a de
l PID
7
1 flo
at c
ontro
l_pi
d =
0;
//V
aria
ble
que
cont
iene
la s
uma
de to
das
las a
ccio
nes
del P
ID
72
7
3 //L
ook
up ta
ble
para
los v
alor
es d
e te
nsio
n co
rres
pond
ient
es a
las i
nten
sida
des
de la
pila
de
com
bust
ible
7
4 flo
at ta
blaV
I[83
] = {
36.4
5, 3
6.03
, 35.
62, 3
5.24
, 34.
89, 3
4.55
, 34.
23, 3
3.93
, 33.
65, 3
3.39
, 33.
14,
75
32.
91, 3
2.70
, 32.
49, 3
2.30
, 32.
12, 3
1.95
, 31.
79, 3
1.64
, 31.
50, 3
1.36
, 31.
23,
76
31.
11, 3
1.00
, 30.
88, 3
0.78
, 30.
68, 3
0.58
, 30.
48, 3
0.38
, 30.
29, 3
0.20
, 30.
11,
77
30.
02, 2
9.93
, 29.
84, 2
9.74
, 29.
65, 2
9.55
, 29.
46, 2
9.36
, 29.
26, 2
9.15
, 29.
04,
78
28.
93, 2
8.82
, 28.
70, 2
8.58
, 28.
46, 2
8.33
, 28.
20, 2
8.07
, 27.
93, 2
7.79
, 27.
65,
79
27.
50, 2
7.35
, 27.
19, 2
7.03
, 26.
87, 2
6.71
, 26.
54, 2
6.37
, 26.
20, 2
6.03
, 25.
85,
80
25.
68, 2
5.50
, 25.
32, 2
5.14
, 24.
97, 2
4.79
, 24.
61, 2
4.44
, 24.
27, 2
4.10
, 23.
93,
81
23.
77, 2
3.61
, 23.
46, 2
3.32
, 23.
17, 2
3.04
};
82
8
3 in
t ind
iceV
I;
/
/Var
iabl
e qu
e gu
arda
el i
ndic
e pa
ra e
ntra
r a la
tabl
a V
I
84
int i
nt_r
ef_a
ux;
//
Var
iabl
e qu
e gu
arda
la in
tens
idad
de
refe
renc
ia e
n fo
rmat
o en
tero
par
a lu
ego
utili
zarla
8
5
//pa
ra c
alcu
lar e
l ind
ice
VI
86
8
7 in
t num
ero_
conv
ersi
ones
= 0
;
//V
aria
ble
que
guar
da e
l num
ero
de c
onve
rsio
nes
real
izad
o y
cuan
do s
e ig
uala
a u
n va
lor
88
//
esta
blec
ido
por e
l usu
ario
sirv
e ha
ce q
ue s
e gu
arde
el e
stad
o de
car
ga e
n la
sd
89
9
0 //D
ecla
raci
on d
e la
var
iabl
e qu
e se
va
a al
mac
enar
en
la fl
ash
91
exte
rn c
onst
cha
r mi_
espa
cio_
flash
_add
r[];
92
unsi
gned
cha
r *SO
Cgu
arda
do =
mi_
espa
cio_
flash
_add
r; 9
3
94
int m
ain
(voi
d)
95
{ 9
6
SO
Ces
t = 4
5;
97
98
IN
TDis
able
Inte
rrup
ts()
;
//
Se d
esac
tivan
las i
nter
rupc
ione
s pa
ra re
aliz
ar la
s in
icia
lizac
ione
s 9
9
100
/*Se
inic
ializ
an lo
s sen
sore
s an
alog
icos
que
se
van
a co
nect
ar a
l AD
C.*
/ 10
1
iniS
enso
rAN
(3, -
75.0
, 90.
0);
//In
icia
lizam
os e
l sen
sor d
e co
rrie
nte
de la
bat
eria
10
2
iniS
enso
rAN
(4, 0
.0, 8
.3);
//Ini
cial
izam
os e
l sen
sor d
e co
rrie
nte
de la
pila
10
3
iniS
enso
rAN
(5, -
25.0
, 150
.0);
//In
icia
lizam
os e
l sen
sor d
e te
mpe
ratu
ra
104
in
iSen
sorA
N(9
, -5.
0, 1
0.0)
;
//Ini
cial
izam
os e
l sen
sor d
e hi
drog
eno
si e
s an
alog
ico
105
10
6 /*
Se in
icia
liza
el T
imer
que
util
iza
el A
DC
y e
l pro
pio
AD
C*/
10
7
iniT
imer
3();
// S
e in
icia
liza
el T
imer
que
util
iza
el A
DC
10
8
i
niA
DC
1();
//
Se in
icia
liza
el A
DC
con
su
conf
igur
acio
n 10
9
110
/*Se
inic
ializ
an o
tros t
imer
s qu
e se
van
a u
tiliz
ar*/
11
1
iniT
imer
2();
//Se
inic
ializ
a el
Tim
er 2
que
util
iza
el P
WM
11
2
iniP
WM
();
113
114
in
iTim
er5(
);
//
Se in
icia
liza
el T
imer
5 q
ue s
e ut
iliza
par
a pr
oduc
ir el
pul
so d
e do
s seg
undo
s 11
5
116
/*Se
inic
ializ
an la
s señ
ales
dig
itale
s de
ent
rada
que
pro
duce
n in
terr
upci
on p
or c
ambi
o de
est
ado*
/ 11
7
iniS
enso
rPos
1();
//S
e in
icia
lizan
los
sens
ores
de
las
posi
cion
es
118
in
iSen
sorP
os2(
); 11
9
iniS
enso
rHid
roge
no()
;
//Se
inic
ializ
a el
sen
sor d
e hi
drog
eno
si e
s di
gita
l 12
0
121
/*Se
inic
ializ
an la
s señ
ales
dig
itale
s de
sal
ida*
/ 12
2
iniL
edV
erde
();
//
Se in
icia
lizan
los
leds
12
3
iniL
edR
ojo(
); 12
4
Led
Ver
deO
FF()
; 12
5
Led
Roj
oOFF
();
126
in
iPul
soIn
terr
upto
r();
//S
e in
icia
liza
el p
ulso
del
inte
rrup
tor
127
in
iEle
ctro
valv
ula(
);
//S
e in
icia
liza
la s
eñal
de
la e
lect
rova
lvul
a 12
8
iniC
onve
rtido
rDC
();
/
/Se
inic
ializ
a la
señ
al d
el c
onve
rtido
r
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 70
129
130
IN
TEna
bleS
yste
mM
ultiV
ecto
redI
nt()
;
/
/Se
habi
litan
las i
nter
rupc
ione
s 13
1
INTE
nabl
eInt
erru
pts(
); 12
7
iniE
lect
rova
lvul
a();
/
/Se
inic
ializ
a la
señ
al d
e la
ele
ctro
válv
ula
128
in
iCon
verti
dorD
C()
;
//S
e in
icia
liza
la s
eñal
del
con
verti
dor
129
130
IN
TEna
bleS
yste
mM
ultiV
ecto
redI
nt()
;
/
/Se
habi
litan
las i
nter
rupc
ione
s 13
1
INTE
nabl
eInt
erru
pts(
); 13
2
13
3
13
4
13
5
w
hile
(1){
// B
ucle
a la
esp
era
de la
s int
erru
pcio
nes d
el A
DC
13
6
137
whi
le(p
osic
ion
== 0
){
138
//No
hace
mos
nad
a es
mie
ntra
s se
pro
duce
el c
ambi
o de
una
pos
icio
n a
otra
13
9
}
14
0
141
whi
le(p
osic
ion
== 1
){
142
14
3
if
(con
vers
ion
== 1
){
//C
uand
o se
ha
real
izad
o la
con
vers
ion
del A
DC
pas
amos
a c
alcu
lar e
l SO
C
144
14
5
cal
cula
r_SO
C()
;
//E
n la
pos
icio
n 1
solo
se
calc
ula
el e
stad
o de
car
ga
146
147
n
umer
o_co
nver
sion
es++
;
//El
num
ero
de c
onve
rsio
nes
aum
enta
una
uni
dad
148
} 14
9
150
if (n
umer
o_co
nver
sion
es =
= N
umer
oCon
vers
ione
sPar
aGua
rdar
){
//S
e gu
arda
el S
OC
en
mem
oria
si se
han
hec
ho e
l num
ero
de
151
//
conv
ersi
ones
nec
esar
ias
152
15
3
//C
odig
o o
func
ion
para
gua
rdar
el e
stad
o de
car
ga e
n m
emor
ia
154
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 71
155
n
umer
o_co
nver
sion
es =
0;
156
15
7
}
158
15
9
/*
Si s
e pa
sa d
e la
pos
icio
n 2
a la
pos
icio
n 1
hay
que
apag
ar la
pila
cor
tand
o el
con
verti
dor y
una
vez
la c
orrie
nte
se h
ace
cero
16
0
*
se a
paga
la e
lect
rova
lvul
a*/
161
if(po
sici
on_a
nter
ior2
==
1){
162
163
C
onve
rtido
rDC
OFF
();
164
165
if
(int_
pila
< L
imite
Supe
riorC
orrie
nteC
ero)
{
166
16
7
P
ulso
Inte
rrup
torO
N()
; 16
8
E
lect
rova
lvul
aOFF
();
169
Led
Ver
deO
FF()
; 17
0
L
edR
ojoO
N()
;
/
/Se
enci
ende
el l
ed ro
jo
171
//p
osic
ion_
ante
rior2
= 0
; 17
2
17
3
}
174
} 17
5
}
17
6
177
whi
le(p
osic
ion
== 2
){
178
17
9
if(
ence
ndid
o ==
1){
18
0
if(te
mpe
ratu
ra_p
ila >
Lim
iteTe
mpe
ratu
raEn
cend
ido)
{
/
/Si a
l int
enta
r arr
anca
r la
pila
la te
mpe
ratu
ra e
s m
ayor
de
45
181
//n
o se
arr
anca
18
2
183
Con
verti
dorD
CO
FF()
;
//
Se a
paga
el c
onve
rtido
r 18
4
L
edV
erde
OFF
();
185
Led
Roj
oON
();
//S
e en
cien
de e
l led
rojo
18
6
}
187
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 72
188
e
lse{
//S
i la
tem
pera
tura
es
men
or d
e 45
si s
e en
cien
de y
se
activ
a el
pul
so d
e 2
segu
ndos
189
19
0
E
lect
rova
lvul
aON
();
//Se
act
iva
la e
lect
rova
lvul
a
191
Pul
soIn
terr
upto
rON
();
/
/Se
activ
a el
pul
so d
el in
terr
upto
r 19
2
L
edV
erde
ON
();
193
Led
Roj
oOFF
();
194
}
19
5
19
6
enc
endi
do =
0;
//
Term
ina
el e
ncen
dido
19
7
}
198
19
9
if
(con
vers
ion
== 1
){
//C
uand
o se
ha
real
izad
o la
con
vers
ion
del A
DC
pas
amos
a c
alcu
lar e
l SO
C y
la in
tens
idad
20
0
/
/de
refe
renc
ia
201
202
c
alcu
lar_
SOC
eInt
ensi
daR
ef()
;
//S
e ca
lcul
a el
SO
C y
la in
tens
idad
de
refe
renc
ia
203
204
if
((ar
ranq
ue =
1) &
& (i
nt_p
ila <
Lim
iteSu
perio
rCor
rient
eCer
o)){
//C
ompr
obar
si l
a co
rrie
ntes
es c
ero
dura
nte
20 s
egs
205
//d
espu
es d
e ar
ranc
ar
206
20
7
t
iem
po_s
in_c
orrie
nte_
arra
nque
++;
//Si p
ila e
sta
arra
ncan
do y
la c
orrie
nte
med
ida
es c
ero
aum
enta
mos
la v
aria
ble
20
8
209
if(
tiem
po_s
in_c
orrie
nte_
arra
nque
==
Tiem
poC
orrie
nteC
eroA
rran
que)
{
//S
i dur
ante
el a
rran
que
pasa
un
tiem
po d
eter
min
ado
21
0
//
sin
que
la p
ila d
e co
rrie
nte
hay
que
apag
arla
21
1
El
ectro
valv
ulaO
FF()
; 21
2
C
onve
rtido
rDC
OFF
();
213
LedV
erde
OFF
();
214
LedR
ojoO
N()
; 21
5
21
6
}
21
7
}
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 73
218
219
if
((ar
ranq
ue =
1) &
& (i
nt_p
ila >
Lim
iteSu
perio
rCor
rient
eCer
o)){
22
0
221
tie
mpo
_sin
_cor
rient
e_ar
ranq
ue =
0;
//Si
la c
orrie
nte
es d
istin
ta d
e ce
ro p
odem
os d
ar p
or fi
naliz
ado
el a
rran
que
222
arr
anqu
e =
0;
223
Led
Ver
deO
N()
; 22
4
L
edR
ojoO
FF()
; 22
5
}
226
227
if
(int_
pila
< L
imite
Supe
riorC
orrie
nteC
ero)
{
//C
ompr
obac
ion
de q
ue la
pila
no
deja
de
dar c
orrie
nte
dura
nte
mas
de
un ti
empo
22
8
//d
uran
te e
l fun
cion
amie
nto
cuan
do h
ace
una
min
i res
et
229
tie
mpo
_sin
_cor
rient
e++;
23
0
}
231
232
e
lse
{ 23
3
t
iem
po_s
in_c
orrie
nte
= 0;
23
4
}
235
236
if
(tiem
po_s
in_c
orrie
nte
== T
iem
poC
orrie
nteC
ero)
{
//C
ompr
obam
os q
ue n
o es
ta u
n de
term
inad
o tie
mpo
sin
dar
cor
rient
e du
rant
e
237
//
el fu
ncio
nam
ient
o no
rmal
23
8
E
lect
rova
lvul
aOFF
();
239
Con
verti
dorD
CO
FF()
; 24
0
L
edV
erde
OFF
();
241
Led
Roj
oON
();
242
}
24
3
244
if
((co
ncen
traci
on_h
idro
geno
*5.0
/102
3.0)
> V
olta
geM
axim
o){
245
Ala
rmaH
idro
geno
();
246
}
24
7
24
8
//ca
lcul
o de
PID
con
las
cons
tant
es q
ue s
e en
cuen
tran
defin
idas
en
cont
rol.h
24
9
err
or =
int_
pila
- in
t_re
f;
//C
alcu
lo d
el e
rror
25
0
pro
porc
iona
l = e
rror
* K
p;
//C
alcu
lo d
e la
par
te p
ropo
rcio
nal
251
in
tegr
al =
inte
gral
+ e
rror
* K
i * T
mue
stre
o;
//C
alcu
lo d
e la
par
te in
tegr
al
252
d
eriv
ativ
o =
(err
or -
erro
r_an
terio
r) *
Kd
/ Tm
uest
reo;
//C
alcu
lo d
e la
par
te d
eriv
ativ
a 25
3
err
or_a
nter
ior =
err
or;
//Pa
sar e
l err
or a
ctua
l a s
er e
l ant
erio
r par
a la
sig
uien
te
254
//ite
raci
on
255
c
ontro
l_pi
d =
prop
orci
onal
+ in
tegr
al +
der
ivat
ivo;
/
/Cal
culo
del
con
trol
256
25
7
cal
cula
r_D
utyC
ycle
();
//S
e ca
lcul
a el
dut
y cy
cle
para
los n
uevo
s va
lore
s med
idos
25
8
259
260
if
(num
ero_
conv
ersi
ones
==
Num
eroC
onve
rsio
nesP
araG
uard
ar){
//
Se g
uard
a el
SO
C e
n m
emor
ia si
se
han
hech
o el
num
ero
de
261
//nve
rsio
nes
nece
saria
s 26
2
263
//
Cod
igo
o fu
ncio
n pa
ra g
uard
ar e
l est
ado
de c
arga
en
mem
oria
26
4
26
5
num
ero_
conv
ersi
ones
= 0
; 26
6
267
}
26
8
}
269
}
27
0
}
27
1
r
etur
n 0;
27
2 }/
/mai
n 27
3
274
27
5 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
276
End
of F
ile
277
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 74
10.2. Código control.c 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
EI
6
7
@Fi
le N
ame
8
con
trol.c
9
1
0 @
Des
crip
tion
11
En
este
arc
hivo
se
defin
en fu
ncio
nes q
ue s
e ut
iliza
n pa
ra e
l con
trol d
e la
pila
. En
conc
reto
son
4:
12
* 1
. La
prim
era
sirv
e pa
ra c
alcu
lar e
l est
ado
de c
arga
est
imad
o y
se u
tiliz
a cu
ando
est
amos
en
la p
osic
ion
1 en
la q
ue n
o se
util
iza
la p
ila
13
* 2
. La
segu
nda
es s
imili
ar a
la a
nter
ior a
dem
as d
e ca
lcul
ar e
l est
ado
de c
arga
tam
bien
cal
cula
la in
tens
idad
de
refe
renc
ia q
ue d
eber
ia
14
* p
ropo
rcio
nar l
a pi
la d
e co
mbu
stib
le. S
e ut
iliza
cua
ndo
esta
mos
en
la p
osic
ion
2.
15
* 3
. La
terc
era
sirv
e pa
ra c
alcu
lar e
l dut
y cy
cle
que
tene
mos
que
apl
icar
en
el P
WM
. En
ella
se
real
izan
los
calc
ulos
nec
esar
ios
a pa
rtir d
e 1
6 *
la in
tens
idad
de
refe
renc
ia p
ara
pode
r ent
rar a
la lo
ok u
p ta
ble
de la
cur
va V
I. D
espu
és s
e ca
lcul
a el
dut
y cy
cle
y se
le a
plic
a
17
*
el
con
trol d
el P
ID c
alcu
lado
en
el m
ain.
1
8 *
4. L
a ul
tima
func
ion
es la
ala
rma
de h
idro
geno
que
lo q
ue h
ace
es a
paga
r la
pila
en
caso
de
que
se p
rodu
zcan
fuga
s ap
agan
do e
l co
nver
tido
y 1
9 *
la e
lect
rova
lvul
a.
20
2
1 @
Aut
or
22
P
ablo
Med
rano
2
3 @
Fech
a 2
4
11
Dic
iem
bre
2016
2
5 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
26
2
7 #d
efin
e _S
UPP
RES
S_PL
IB_W
AR
NIN
G
28
#inc
lude
<pl
ib.h
> 2
9 #i
nclu
de "
cont
rol.h
" 3
0
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 75
31 fl
oat i
nt_r
ef =
0;
//
Var
iabl
e qu
e se
util
iza
para
alm
acen
ar e
l val
or d
e la
inte
nsid
ad q
ue s
irve
de re
fere
ncia
par
a
32
//rea
lizar
el c
ontro
l. 3
3 flo
at S
OC
est =
50;
//Var
iabl
e en
la q
ue s
e va
act
ualiz
ando
el v
alor
del
est
ado
de c
arga
est
imad
o 3
4 flo
at in
t_ba
t;
//Var
iabl
e en
la q
ue s
e gu
arda
el v
alor
de
la in
tens
idad
que
da
la b
ater
ia
35
float
int_
ante
rior =
0;
/
/Var
iabl
e en
la q
ue s
e gu
arda
la in
tens
idad
de
cont
rol c
alcu
lada
del
cic
lo a
nter
ior p
ara
3
6
//c
ompa
rarla
con
la n
ueva
par
a la
sat
urac
ion
37
float
int_
nuev
a =
0;
//V
aria
ble
en la
que
se
guar
da la
nue
va in
tens
idad
que
va
a se
rvir
de re
fere
ncia
3
8 in
t con
vers
ion;
//V
aria
ble
que
indi
ca si
la c
onve
rsio
n de
l AD
C h
a te
rmin
ado
o no
3
9 in
t ind
iceV
I = 0
;
//V
aria
ble
que
va a
con
tene
r el i
ndic
e pa
ra e
ntra
r a la
tabl
a V
I 4
0 flo
at in
t_pi
la;
//V
aria
ble
que
alm
acen
a la
inte
nsid
ad d
e la
pila
leid
a de
l AD
C
41
int i
nt_r
ef_a
ux;
//Var
iabl
e au
xilia
r que
se
utili
za p
ara
tene
r la
inte
nsid
ad d
e re
fere
ncia
en
form
ato
ente
ro p
ara
42
//usa
rla c
omo
valo
r de
entra
da a
la ta
bla
VI
43
float
tabl
aVI[
68];
/
/Vec
tor q
ue c
ontie
ne lo
s val
ores
de
la lo
ok u
p ta
ble
44
float
con
trol_
pid;
//Var
iabl
e qu
e gu
arda
el v
alor
del
con
trol P
ID
45
float
tens
ion;
//
Var
iabl
e qu
e gu
arda
la te
nsio
n qu
e se
sac
a de
la L
UT
46
int v
alor
_pw
m;
//V
aria
ble
que
guar
da e
l val
or q
ue s
e da
al p
wm
4
7
48
/*Es
ta fu
ncio
n ca
lcul
a el
SO
C e
stim
ado
de la
bat
eria
a p
artir
de
la in
tens
idad
que
pro
porc
iona
4
9 q
ue e
s lei
da p
or e
l AD
C. E
sta
func
ion
la u
tiliz
amos
cua
ndo
la ll
ave
esta
en
la p
osic
ion
1 en
5
0 la
que
sol
o fu
ncio
na la
bat
ería
sin
la p
ila d
e co
mbu
stib
le. E
n el
arc
hivo
con
trol.h
se p
uede
5
1 d
efin
ir lo
s va
lore
s Tm
uest
ro q
ue e
s ca
da c
uant
o tie
mpo
se
real
iza
la m
edid
a de
la in
tens
idad
5
2 y
el Q
nom
que
es u
n pa
ram
etro
fija
do p
or la
bat
eria
. */
53
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 76
54 v
oid
calc
ular
_SO
C(v
oid)
{ 5
5
5
6
//C
alcu
lo d
el S
OC
est
imad
o a
parti
r de
la in
tens
idad
de
la b
ater
ia
57
S
OC
est=
SOC
est-(
int_
bat*
Tmue
stre
o*10
0.0/
Qno
m);
58
5
9
// L
os v
alor
es d
el S
OC
est t
iene
n qu
e es
tar e
ntre
0 y
100
6
0
if(S
OC
est>
100)
{ 6
1
S
OC
est=
100;
6
2
}
63
6
4
if(S
OC
est<
0){
65
SO
Ces
t=0;
6
6
}
67
68
c
onve
rsio
n =
0;
//S
e po
ne a
cer
o la
var
iabl
e co
nver
sion
que
se
utili
za p
ara
sabe
r si e
l AD
C h
a te
rmin
ado
6
9
/
/de
real
izar
la c
onve
rsio
n 7
0
7
1
ret
urn;
7
2 }
73
7
4 /*
Esta
func
ion
es ig
ual a
la a
nter
ior e
n la
par
te d
e ca
lcul
ar e
l SO
C e
stim
ado
pero
ade
mas
incl
uye
7
5 e
l cal
culo
de
la in
tens
idad
de
refe
renc
ia q
ue s
e ut
iliza
par
a ha
cer e
l con
trol d
e la
pila
de
hidr
ogen
o 7
6 e
incl
uye
la u
tiliz
acio
n de
l par
amet
ro s
lew
rate
lim
it de
sat
urac
ion
que
se d
efin
e en
el a
rchi
vo c
ontro
l.h*/
7
7
78
void
cal
cula
r_SO
CeI
nten
sida
Ref
(voi
d){
79
80
//
Cal
culo
del
SO
C e
stim
ado
a pa
rtir d
e la
inte
nsid
ad d
e la
bat
eria
8
1
SO
Ces
t=SO
Ces
t-(in
t_ba
t*Tm
uest
reo*
100.
0/Q
nom
); 8
2
83
//
Los
val
ores
del
SO
Ces
t tie
nen
que
esta
r ent
re 0
y 1
00
84
if
(SO
Ces
t>10
0){
85
SO
Ces
t=10
0;
86
}
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 77
87
8
8
if(S
OC
est<
0){
89
SO
Ces
t=0;
9
0
}
91
9
2
9
3
//C
alcu
lo d
e la
inte
nsid
ad q
ue d
eber
ia s
umin
istra
r la
pila
de
com
bust
ible
9
4
int_
nuev
a =
17.5
5-0.
185*
SOC
est;
95
96
//
Satu
raci
on e
ntre
los v
alor
es e
stab
leci
dos
en c
ontro
l.h p
ara
no p
edir
dem
asia
da in
tens
idad
a la
pila
ni d
ar m
enos
de
un m
inim
o 9
7
if(in
t_nu
eva
> Li
mite
Supe
riorI
nten
sida
d){
98
int
_nue
va =
Lim
iteSu
perio
rInt
ensi
dad;
9
9
}
100
101
if
(int_
nuev
a <
Lim
iteIn
ferio
rInt
ensi
dad)
{ 10
2
i
nt_n
ueva
= L
imite
Supe
riorI
nten
sida
d;
103
}
10
4
105
10
6
//SR
L(Sl
ew R
ate
Lim
it) v
alor
de
satu
raci
on
107
//
La
sena
l aum
enta
de
valo
r 10
8
if ((
int_
ante
rior-
int_
nuev
a) >
sr)
{ 10
9
i
nt_n
ueva
= in
t_an
terio
r-sr
; 11
0
}
111
11
2
//La
sen
al d
ism
inuy
e de
val
or
113
if
((in
t_nu
eva-
int_
ante
rior)
> s
r){
114
int
_nue
va =
int_
ante
rior+
sr;
115
}
116
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 78
117
//
La n
ueva
inte
nsid
ad c
alcu
lada
pas
a a
ser l
a de
refe
renc
ia y
se
guar
da e
n la
ant
erio
r par
a ut
iliza
rla d
e co
mpa
raci
on p
ara
aplic
ar e
l SR
L
118
//
en e
l sig
uien
te c
iclo
11
9
int_
ref =
int_
nuev
a;
120
in
t_an
terio
r = in
t_re
f; 12
1
12
2
con
vers
ion
= 0;
12
3
12
4
ret
urn;
12
5 }
126
12
7 vo
id c
alcu
lar_
Dut
yCyc
le(v
oid)
{ 12
8
12
9
int_
ref_
aux
= in
t_re
f*10
+ 0
.5;
//S
e ut
iliza
la v
aria
ble
auxi
liar p
ara
tene
r la
inte
nsid
ad d
e
130
//r
efer
enci
a en
form
ato
ente
ro
131
//H
ay q
ue s
umar
le 0
.5 p
ara
que
haga
el r
edon
deo
bien
por
que
sino
13
2
//tru
nca
en v
ez d
e re
dond
ear
133
134
in
dice
VI =
int_
ref_
aux
- 1;
135
136
te
nsio
n =
tabl
aVI[
indi
ceV
I];
137
138
v
alor
_pw
m =
((1-
(tens
ion/
48.0
))+c
ontro
l_pi
d)*1
59.0
;
//C
alcu
lam
os e
l dut
y cy
cle
139
140
//
Satu
raci
on p
ara
el v
alor
del
pw
m
141
if
(val
or_p
wm
> V
alor
Max
imoP
WM
){
142
14
3
O
C2R
S =
Val
orM
axim
oPW
M;
144
}
14
5
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 79
146
e
lse
if(va
lor_
pwm
< 0
){
147
14
8
O
C2R
S =
0;
149
}
15
0
15
1
els
e{
152
15
3
O
C2R
S =
valo
r_pw
m;
154
}
15
5
15
6
retu
rn;
157
} 15
8
159
//Fun
cion
que
apa
ga la
pila
en
caso
de
alar
ma
de h
idro
geno
16
0 vo
id A
larm
aHid
roge
no(v
oid)
{ 16
1
Ele
ctro
valv
ulaO
FF()
; 16
2
Con
verti
dorD
CO
FF()
; 16
3
Led
Ver
deO
FF()
; 16
4
Led
Roj
oON
();
165
166
re
turn
; 16
7 }
168
16
9
170
17
1 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
172
End
of F
ile
173
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 80
10.3. Código control.h
1 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
2 /*
* D
escr
iptiv
e Fi
le N
ame
3
4
@C
ompa
ny
5
CEI
6
7
@
File
Nam
e 8
con
trol.h
9
10
@
Des
crip
tion
11 E
n es
te a
rchi
vo se
def
inen
val
ores
par
a el
con
trol d
e la
pila
que
el u
suar
io p
uede
mod
ifica
r dep
endi
endo
los v
alor
es q
ue se
ne
cesi
ten
para
12
* su
uso
. 13
14
@
Aut
or
15
Pab
lo M
edra
no
16
@Fe
cha
17
11
Dic
iem
bre
2016
18
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
19
20
#ifn
def _
CO
NTR
OL_
H
/* G
uard
aga
inst
mul
tiple
incl
usio
n */
21
#de
fine
_CO
NTR
OL_
H
22
23
24
25 #
defin
e in
om 1
7.57
5
/
/Inte
nsid
ad n
omin
al q
ue b
usca
mos
par
a m
axim
o re
ndim
ient
o de
la p
ila
26 #
defin
e Li
mite
Supe
riorI
nten
sidad
8.3
//
Lim
ite su
perio
r de
satu
raci
on p
ara
la in
tens
idad
de
refe
renc
ia d
e la
pila
27
#de
fine
Lim
iteIn
ferio
rInte
nsid
ad 0
.9
//Li
mite
infe
rior d
e sa
tura
cion
par
a la
inte
nsid
ad d
e re
fere
ncia
de
la p
ila
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 81
28
29 #
defin
e sr
0.1
5
//S
lew
Rat
e lim
it, A
por
cad
a Tm
uest
reo
que
pued
e au
men
tar o
dim
inui
r la
inte
nsid
ad d
e
30
//c
ontro
l com
o m
axim
o 31
32
33
#de
fine
Qno
m 1
9500
0.12
//Cap
acid
ad n
omin
al d
e la
bat
eria
en
As e
n ve
z de
Ah
34
35
36 #
defin
e Tm
uest
reo
0.1
//Tie
mpo
en
segu
ndos
ent
re c
ada
mue
stra
37
#de
fine
Tiem
poG
uard
ado
600.
0*Tm
uest
reo
//S
egun
dos q
ue tr
ansc
urre
n pa
ra g
uard
ar e
l val
or d
el S
OC
en
mem
oria
38
39
40
#de
fine
Tiem
poC
orrie
nteC
eroA
rran
que
200.
0*Tm
uest
reo
//T
iem
po m
axim
o qu
e pu
ede
esta
r la
pila
sin
dar
cor
rient
e en
el a
rran
que
41 #
defin
e Ti
empo
Cor
rient
eCer
o 50
.0*T
mue
stre
o
//T
iem
po m
axim
o qu
e pu
ede
esta
r la
pila
sin
dar c
orrie
nte
dura
nte
el
func
iona
mie
nto
norm
al
42
43 #
defin
e Li
mite
Supe
riorC
orrie
nteC
ero
0.5
//Val
or p
or d
ebaj
o de
l cua
l la
corr
ient
e se
con
side
ra c
ero
44
45
46 #
defin
e Li
mite
Tem
pera
tura
Ence
ndid
o 45
.0
//
Tem
pera
tura
por
enc
ima
de la
cua
l no
se p
uede
enc
ende
r la
pila
47
48
#de
fine
Vol
tage
Max
imo
1.52
9
//C
alcu
lado
con
la fo
rmul
a qu
e ap
arec
e en
el d
atas
heet
par
a un
con
cent
raci
on d
e hi
drog
eno
de
49
//5
000p
pm
50
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 82
51 #
defin
e K
p 0.
9
//
Con
stan
te p
ara
el e
rror p
ropo
rcio
nal
52 #
defin
e K
i 0.2
//C
onst
ante
par
a el
erro
r int
egra
l 53
#de
fine
Kd
0.0
//C
onst
ante
par
a el
erro
r der
ivat
ivo
54
55 #
defin
e V
alor
Max
imoP
WM
79
56
57 #
defin
e N
umer
oCon
vers
ione
sPar
aGua
rdar
100
/
/Est
able
ce c
ada
cuan
tas c
onve
rsio
nes s
e tie
ne q
ue g
uard
ar e
l est
ado
de c
arga
en
mem
oria
58
59
#en
dif /
* _C
ON
TRO
L_H
*/
60
61 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
62 E
nd o
f File
63
*/
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 83
10.4. Código sensores_analógicos_ADC.c
1 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
2 /*
* D
escr
iptiv
e Fi
le N
ame
3
4
@C
ompa
ny
5
CEI
6
7
@
File
Nam
e 8
s
enso
r_an
alog
ico.
c 9
1
0 @
Des
crip
tion
11
D
escr
ibe
the
purp
ose
of th
is fi
le.
12
1
3 @
Aut
or
14
P
ablo
Med
rano
1
5
16
@Fe
cha
17
1
1 D
icie
mbr
e 20
16
18
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
1
9
20
#def
ine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
2
1 #i
nclu
de <
plib
.h>
22
#inc
lude
"sen
sore
s_an
alog
icos
_AD
C.h
" 2
3
24
2
5
26
int i
= 0
; 2
7
28
//Vec
tore
s que
gua
rdan
los v
alor
es d
e lo
s sen
sore
s que
lee
el A
DC
2
9 flo
at v
alor
es_m
axim
os[1
6] =
{0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0};
//Val
ores
max
imos
de
los s
enso
res q
ue si
rve
para
esc
alar
la
lect
ura
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 84
30 fl
oat v
alor
es_m
inim
os[1
6] =
{0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0};
//Val
ores
min
imos
de
los s
enso
res q
ue si
rve
para
esc
alar
la
lect
ura
31
float
val
ores
_lei
dos[
16] =
{0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0,0,
0};
//V
ecto
r que
alm
acen
a lo
s val
ores
que
se ll
en d
el A
DC
32
3
3 in
t num
ero_
sens
ores
= 0
;
/
/Var
iabl
e qu
e gu
arda
el n
umer
o de
sens
ores
que
lee
el A
DC
3
4 flo
at in
t_ba
t = 0
;
/
/Var
iabl
e qu
e g
uard
a la
inte
nsid
ad le
ida
de la
bat
eria
3
5 flo
at in
t_pi
la =
0;
//V
aria
ble
que
gua
rda
la in
tens
idad
leid
a de
la p
ila
36
float
tem
pera
tura
_pila
= 0
;
//V
aria
ble
que
gua
rda
la te
mpe
ratu
ra d
e la
pila
3
7 flo
at c
once
ntra
cion
_hid
roge
no =
0;
//
Var
iabl
e qu
e g
uard
a la
con
cent
raci
on d
e hi
drog
eno
38
int c
onve
rsio
n =
0;
//Var
iabl
e qu
e si
rve
para
sabe
r si l
a co
nver
sion
de
valo
res d
el A
DC
3
9
//ha
term
inad
o 4
0
41
4
2 /*
Esta
func
ion
lo q
ue h
ace
es in
icia
lizar
los s
enso
res a
nalo
gico
s que
teng
an q
ue se
r lei
dos p
or e
l AD
C.
43
El n
umer
o de
sens
or se
refie
re a
l pin
ana
logi
co e
n qu
e va
a ir
con
ecta
do e
l sen
sor.
Por e
jem
plo:
si lo
4
4 c
onec
tam
os e
n A
N0
en n
úmer
o de
sens
or p
ondr
iam
os 0
; si l
o co
nect
amos
en
AN
1 po
ndria
mos
1 y
asi
suce
siva
men
te.
45
Los
par
amet
ros d
e va
lor m
inim
o y
max
imo
son
los v
alor
es e
ntre
los q
ue ti
ene
que
leer
el s
enso
r. 4
6 S
e de
be ll
amar
a e
sta
func
ion
tant
as v
eces
com
o se
nsor
es v
aya
a te
ner q
ue le
er e
l AD
C y
sie
mpr
e A
NTE
S de
4
7 in
icia
lizar
el A
DC
. Las
func
ione
s set
Bit
esta
n de
finid
as e
n se
nsor
_ana
logi
co.h
*/
48
4
9 vo
id in
iSen
sorA
N (i
nt n
umer
o_se
nsor
, flo
at v
alor
_min
imo,
floa
t val
or_m
axim
o){
50
51
C
lose
AD
C10
();
/
/Cer
ram
os e
l AD
C m
ient
ras l
o es
tam
os m
odifi
cand
o 5
2
clrB
it(A
D1P
CFG
, num
ero_
sens
or);
//Se
conf
igur
a el
sens
or c
omo
ana
logi
co
53
se
tBit(
AD
1CSS
L, n
umer
o_se
nsor
);
//S
e m
odifi
can
los p
uerto
s que
el A
DC
tien
e qu
e le
er a
Òad
iend
o en
el q
ue se
en
cuen
tra
54
//el n
uevo
sens
or
55
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 85
56
val
ores
_max
imos
[num
ero_
sens
ores
] = v
alor
_max
imo;
//E
stab
lece
mos
el r
ango
de
valo
res q
ue le
e el
sens
or
57
v
alor
es_m
inim
os[n
umer
o_se
nsor
es] =
val
or_m
inim
o;
58
59
n
umer
o_se
nsor
es++
;
//E
l num
ero
de se
nsor
es a
nalo
gico
s que
est
amos
util
izan
do a
umen
ta
60
61
} 6
2
63
/*Es
ta fu
ncio
n va
a c
onfig
urar
el A
DC
. En
cada
regi
stro
se c
omen
ta la
form
a en
que
se e
sta
conf
igur
ando
. 6
4 E
sta
conf
igur
ando
par
a qu
e m
uest
ree
de fo
rma
auto
mat
ica
utili
zand
o el
Tim
er 3
com
o tri
gger
.*/
65
6
6 vo
id in
iAD
C1
(voi
d){
67
68
Clo
seA
DC
10()
; 6
9
7
0
I
FS1b
its.A
D1I
F =
0;
//B
orra
r fla
g de
inte
rrup
cion
del
AD
C1
71
72
AD
1CH
Sbits
.CH
0NA
= 0
;
//
El v
olta
ge d
e en
trada
neg
ativ
o al
AD
C e
s el d
e re
fere
ncia
7
3
/
/No
esto
y co
nfig
uran
do e
l reg
istro
CH
0SA
por
que
lueg
o te
ngo
el S
can
Mod
e En
able
7
4
75
AD
1CO
N1b
its.F
OR
M =
0b0
00;
//
Form
ato
ENTE
RO
par
a da
tos d
e sa
lida
76
77
AD
1CO
N1b
its.S
SRC
= 0
b010
;
// In
icio
de
conv
ersi
on se
gun
Tim
er3
78
7
9
A
D1C
ON
1bits
.ASA
M =
1;
// M
uest
reo
auto
mat
ico
80
8
1
A
D1C
ON
2bits
.VC
FG =
0b0
00;
//C
onfig
ura
los v
olta
jes d
e re
fere
ncia
del
AD
C c
omo
los i
nter
nos (
tam
bien
pod
ria
pone
rse
1xx)
8
2
83
AD
1CO
N2b
its.C
SCN
A =
1;
//Sca
n M
ode
ON
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 86
84
8
5
/
/AD
1CO
N2b
its.A
LTS
= 1;
//Se
pon
e a
1 si
se q
uier
e es
cane
ar e
l MU
X B
tam
bien
si te
ngo
muc
has e
ntra
das
86
8
7
A
D1C
ON
2bits
.BU
FM =
0;
//El
buf
fer n
o se
div
ide
y se
usa
el m
odo
de 1
6 bi
ts
88
8
9
A
D1C
ON
3bits
.AD
RC
= 1
;
//
Se u
sa e
l osc
ilado
r int
erno
com
o re
loj.
El T
ad e
s el p
erio
do d
el o
scila
dor
90
9
1
A
D1C
ON
3bits
.SA
MC
= 0
b000
01;
//C
uant
os T
AD
cic
los d
e re
loj t
iene
que
hab
er e
ntre
el c
omie
nzo
del m
uest
reo
y el
co
mie
nzo
de la
9
2
/
/con
vers
ion(
5bits
) 9
3
94
9
5
96
sw
itch(
num
ero_
sens
ores
){
/
/Mod
ifica
mos
el n
umer
o de
lect
uras
que
real
iza
el A
DC
ant
es d
e qu
e sa
lte la
in
terru
pcio
n
97
//
en fu
ncio
n de
l num
ero
de se
nsor
es q
ue te
nem
os p
ara
que
haga
una
lect
ura
de c
ada
uno
98
cas
e 1:
9
9
A
D1C
ON
2bits
.SM
PI =
0x0
; 10
0
br
eak;
10
1
102
cas
e 2:
10
3
A
D1C
ON
2bits
.SM
PI =
0x1
; 10
4
br
eak;
10
5
10
6
c
ase
3:
107
AD
1CO
N2b
its.S
MPI
= 0
x2;
108
brea
k;
109
11
0
c
ase
4:
111
AD
1CO
N2b
its.S
MPI
= 0
x3;
112
brea
k;
113
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 87
113
11
4
c
ase
5:
115
AD
1CO
N2b
its.S
MPI
= 0
x4;
116
brea
k;
117
118
cas
e 6:
11
9
A
D1C
ON
2bits
.SM
PI =
0x5
; 12
0
br
eak;
12
1
122
cas
e 7:
12
3
A
D1C
ON
2bits
.SM
PI =
0x6
; 12
4
br
eak;
12
5
126
cas
e 8:
12
7
A
D1C
ON
2bits
.SM
PI =
0x7
; 12
8
br
eak;
12
9
130
def
ault:
13
1
A
D1C
ON
2bits
.SM
PI =
0x0
; 13
2
br
eak;
13
3
}
13
4
135
136
IPC
6bits
.AD
1IP
= 7;
//S
e fij
a la
prio
ridad
de
la in
terr
upci
on d
el A
DC
13
7
I
EC1b
its.A
D1I
E =
1;
//Se
habi
lita
la in
terr
upci
on d
el A
DC
inte
rrupc
ion
13
8
139
Ena
bleA
DC
10()
;
//U
na v
ez te
rmin
adas
las m
odifi
caci
ones
vol
vem
os a
hab
ilita
r el A
DC
14
0
141
ret
urn;
14
2 }
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 88
143
14
4
145
/*Es
ta fu
ncio
n es
la in
terr
upci
on d
el A
DC
. En
ella
se tr
ansf
orm
an lo
s val
ores
leid
os a
la e
scal
a en
la q
ue se
qui
eren
14
6 o
bten
er e
sos v
alor
es y
se p
asan
a la
s var
iabl
es c
orre
spon
dien
tes.
Ade
mas
se b
orra
el b
it de
inte
rrup
cion
del
AD
C
147
y se
pon
e la
var
iabl
e co
nver
sion
a 1
al f
inal
del
pro
ceso
que
se u
tiliz
a de
ban
dera
par
a sa
ber q
ue la
con
vers
ion
148
ha
term
inad
o y
pode
r rea
lizar
las o
pera
cion
es q
ue n
eces
itan
utili
zar e
stas
var
iabl
es.
149
El u
suar
io d
ebe
añad
ir un
a nu
eva
varia
ble
cuan
do a
ñada
un
sens
or e
igua
larla
al v
ecto
r val
ores
_lei
dos[
i] 15
0 a
umen
tand
o su
indi
ce e
n un
a un
idad
. La
func
ion
Rea
dAD
C10
que
se u
tiliz
a lo
que
hac
e es
leer
la p
osic
ion
i del
buf
fer
151
del
AD
C q
ue e
s don
de a
lmac
ena
los v
alor
es q
ue c
onvi
erte
.*/
152
15
3 vo
id _
_ISR
(_A
DC
_VEC
TOR
, ipl
7) A
DC
Han
dler
(voi
d){
154
155
IF
S1bi
ts.A
D1I
F =
0;
//
Se b
orra
el f
lag
de in
terru
pcio
n
15
6
IEC
1bits
.AD
1IE
= 0;
//D
esha
bilit
ar in
terr
upci
on
157
158
//
En e
l buc
le fo
r se
van
leye
ndo
los v
alor
es q
ue h
a co
nver
tido
el A
DC
y tr
ansf
orm
ando
los a
la e
scal
a de
sead
a. S
e re
aliz
a ta
ntas
ve
ces c
omo
15
9
//se
nsor
es h
aya
que
leer
en
el A
DC
ade
mas
se a
lmac
enan
en
el v
ecto
r los
val
ores
esc
alad
os q
ue h
a le
ido
el A
DC
16
0
for(
i = 0
; i<n
umer
o_se
nsor
es; i
++){
16
1
162
val
ores
_lei
dos[
i] =
Rea
dAD
C10
(i)*(
(val
ores
_max
imos
[i]-v
alor
es_m
inim
os[i]
)/102
3.0)
+val
ores
_min
imos
[i];
163
16
4
}
165
166
in
t_ba
t = v
alor
es_l
eido
s[0]
;
//L
a in
tens
idad
de
la b
ater
ia e
s el p
rimer
val
or le
ido
167
in
t_pi
la =
val
ores
_lei
dos[
1];
/
/La
inte
nsid
ad d
e la
pila
es e
l seg
undo
val
or le
ido
168
te
mpe
ratu
ra_p
ila =
val
ores
_lei
dos[
2];
//L
a te
mpe
ratu
ra d
e la
pila
es e
l ter
cer v
alor
leid
o 16
9
con
cent
raci
on_h
idro
geno
= v
alor
es_l
eido
s[3]
; /
/La
conc
entra
cion
de
hidr
ogen
o es
el c
uarto
val
or le
ido
170
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 89
171
c
onve
rsio
n =
1;
//Act
ivo
la b
ande
ra p
ara
que
en e
l mai
n ej
ecut
e el
con
trol u
na v
ez h
a te
rmin
ado
la c
onve
rsio
n 17
2
17
3
IEC
1bits
.AD
1IE
= 1;
/
/ Hab
ilita
r int
erru
pcio
n 17
4
17
5
retu
rn;
176
} 17
7
178
17
9 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
180
End
of F
ile
181
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 90
10.5. Código sensores_analógicos_ADC.h 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
EI
6
7
@Fi
le N
ame
8
sen
sor_
anal
ogic
o.h
9
10
@D
escr
iptio
n 11
En
este
arc
hivo
se h
an d
efin
ido
tres p
eque
ñas f
unci
ones
que
sirv
en p
ara
mod
ifica
r un
bit d
e un
pue
rto o
regi
stro
pas
ando
le e
ste
en e
l 12
* p
arám
etro
P y
el n
umer
o de
bit
en e
l par
amet
ro B
. 13
14
@
Aut
or
15
Pab
lo M
edra
no
16
17
@Fe
cha
18
11
Dic
iem
bre
2016
19
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
20
21
#ifn
def _
SEN
SOR
_AN
ALO
GIC
O_H
/*
Gua
rd a
gain
st m
ultip
le in
clus
ion
*/
22 #
defin
e _S
ENSO
R_A
NA
LOG
ICO
_H
23
24 /*
Func
ione
s pre
defin
idas
par
a as
igna
r, bo
rrar
o v
er e
l est
ado
de u
n bi
t de
un re
gist
ro.
25 B
asic
amen
te se
util
iza
la fu
ncio
n se
tBit
al a
hora
de
conf
igur
ar lo
s re
gist
ros d
e lo
s 26
pue
rtos a
nalo
gico
s en
func
ion
del n
umer
o in
trodu
cido
por
el u
suar
io. E
l par
amet
ro P
es
27 e
l pue
rto o
regi
stro
don
de se
va
a es
crib
ir, b
orra
r o le
er y
el p
aram
etro
B e
l bit
que
28
se e
scrib
e, b
orra
o le
e.*/
29
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 91
30 #
defin
e se
tBit(
P, B
) (P
|= (
1 <<
B))
31
#de
fine
clrB
it(P,
B) (
P &
= ~(
1 <<
B))
32
#de
fine
isSe
t(P, B
) (P
& (1
<<
B))
33
34
35
#en
dif /
* _S
ENSO
R_A
NA
LOG
ICO
_H *
/ 36
37
38
39
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
40
End
of F
ile
41 *
/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 92
10.6. Código timers.c
1 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
2 /*
* D
escr
iptiv
e Fi
le N
ame
3
4
@C
ompa
ny
5
CEI
6
7
@
File
Nam
e 8
t
imer
.c
9
10
@D
escr
iptio
n 1
1 E
n es
te a
rchi
vo se
llev
a a
cabo
la c
onfig
urac
ion
de lo
s tim
ers.
En c
oncr
eto
se u
tliza
n tre
s:
12
* E
l tim
er 3
se u
tiliz
a co
n el
AD
C p
ara
esta
blec
er la
frec
uenc
ia d
e la
s con
vers
ione
s. Si
no
se u
tiliz
a pa
ra n
ada
mas
la
inte
rrupc
ion
pued
e es
tar
13
* d
esac
tivad
a.
14
* E
l tim
er 2
se u
tiliz
a pa
ra p
rodu
cir e
l PW
M. E
stab
lece
su fr
ecue
ncia
. 1
5 *
El t
imer
5 se
util
iza
para
con
tar l
os d
os se
gund
os d
el p
ulso
del
inte
rrupt
or
16
1
7 @
Aut
or
18
P
ablo
Med
rano
1
9
20
@Fe
cha
21
1
1 D
icie
mbr
e 20
16
22
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
3
24
#def
ine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
2
5 #i
nclu
de "
timer
s.h"
26
#inc
lude
"con
trol.h
" 2
7 #i
nclu
de <
plib
.h>
28
2
9
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 93
30
3
1
32
int c
onta
dor_
pulso
= 0
; 3
3
34
void
iniT
imer
3 (v
oid)
{
3
5
3
6
Ope
nTim
er3(
conf
ig3,
per
iod3
);
//S
e co
nfig
ura
en e
l arc
hivo
tim
er.h
. En
conf
ig se
enc
iend
e el
tim
er y
se
indi
ca
37
//
el p
rees
cala
do. E
n pe
riod
se e
stab
lece
el v
alor
has
ta e
l cue
nta
el ti
mer
, max
imo
3
8
//65
535
al se
r de
16 b
its
39
C
onfig
IntT
imer
3(T3
_IN
T_O
FF);
//N
o se
nec
esita
util
izar
la in
terr
upci
on p
ara
el A
DC
4
0
4
1
retu
rn;
42
} 4
3
44
4
5 vo
id in
iTim
er2
(voi
d){
46
47
//
con
figur
e th
e co
re ti
mer
roll-
over
rate
(1se
g)
48
O
penT
imer
2(T2
_ON
| T2
_PS_
1_1,
159
);
//C
onfig
uram
os e
l tim
er 2
enc
endi
endo
lo y
teni
endo
la fr
ecue
ncia
del
relo
j in
tern
o sin
4
9
//p
rees
cala
do
50
/
/El p
erio
do d
el T
imer
lo fi
jam
os e
n la
con
figur
acio
n de
l PW
M y
a qu
e de
pend
e de
est
e 5
1
52
53
C
onfig
IntT
imer
2(T2
_IN
T_O
FF);
//No
se n
eces
ita la
inte
rrup
cion
par
a le
PW
M
54
55
r
etur
n;
56
} 5
7
58
5
9
60 v
oid
iniT
imer
5 (v
oid)
{ 6
1
6
2
//Se
con
figur
a el
tim
er p
ara
que
se e
ncie
nda,
teng
a su
inte
rrupc
ion
activ
a, u
n pr
eesc
alad
o de
256
, y sa
lte la
inte
rrupc
ion
cada
dos
se
gs
63
O
penT
imer
5(co
nfig
5, p
erio
d5);
64
6
5
6
6
Con
figIn
tTim
er5(
T5_I
NT_
ON
| T5
_IN
T_PR
IOR
_4);
//A
ctiv
amos
la in
terr
upci
on d
el ti
mer
y fi
jam
os e
l niv
el d
e la
in
terru
pcio
n en
4
67
68
r
etur
n;
69
} 7
0
71
void
__I
SR(_
TIM
ER_5
_VEC
TOR
, ipl
4) _
Tim
er5H
andl
er(v
oid)
{
//En
la in
terru
pcio
n po
nem
os a
cer
o el
pul
so d
el
inte
rrupt
or
72
73
c
onta
dor_
pulso
++;
74
75
if
(con
tado
r_pu
lso =
= 2)
{ 7
6
P
ulso
Inte
rrup
torO
FF()
;
/
/Se
apag
a la
seña
l del
inte
rrup
tor t
rans
curr
idos
los 2
segu
ndos
7
7
I
FS0b
its.T
5IF
= 0;
//S
e bo
rra
el fl
ag d
e in
terru
pcio
n 7
8
I
EC0b
its.T
5IE
= 0;
//S
e de
sact
iva
la in
terr
upci
on d
el ti
mer
5 pa
ra q
ue n
o es
te sa
ltand
o co
ntin
uam
ente
7
9
c
onta
dor_
pulso
= 0
; 8
0
}
8
1
8
2
retu
rn;
83
}
84
8
5
86
8
7 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
88
End
of F
ile
89
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 94
10.7. Código timers.h 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
3
/**
Des
crip
tive
File
Nam
e 4
5
@
Com
pany
6
C
EI
7
8
@Fi
le N
ame
9
tim
er.h
10
11
@
Des
crip
tion
12 E
n es
te a
rchi
vo se
est
able
cen
los p
aram
etro
s de
conf
igur
acio
n de
los t
imer
s. El
usu
ario
pue
de m
odifi
car
13 *
los v
alor
es h
asta
los q
ue c
uent
an lo
s tim
ers e
n fu
ncio
n de
las f
recu
enci
as q
ue q
uier
a co
nseg
uir e
n el
14
* A
DC
y e
l PW
M.
15
16
@A
utor
17
P
ablo
Med
rano
18
19
@
Fech
a 20
1
1 D
icie
mbr
e 20
16
21 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
22
23 #
ifnde
f _TI
MER
_H
/* G
uard
aga
inst
mul
tiple
incl
usio
n */
24
#de
fine
_TIM
ER_H
25
26
27
#de
fine
conf
ig3
T3_O
N |
T3_P
S_1_
64
//E
ncen
dido
del
Tim
er y
pre
esca
lado
. Par
a el
Tim
er 1
var
ia, p
ara
el re
sto
pued
e se
r 28
/
/1,2
,4,8
,16,
32,6
4,25
6 29
#de
fine
perio
d3 2
5000
//Q
uere
mos
que
la in
terru
pcio
n sa
lte c
ada
0,1
segu
ndos
. Com
o el
mic
ro v
a a
16M
Hz
pero
el
30
//ti
mer
tien
e un
pre
esca
lado
de
64 h
ace
16*1
0^6/
64=2
5*10
^4 c
iclo
s por
segu
ndo.
Com
o
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 95
31
//q
ue ta
rde
0.1s
egs e
n te
rmin
ar d
e co
ntar
tend
rá q
ue h
acer
25*
10^3
cic
los
32
33
34
35
#de
fine
conf
ig5
T5_O
N |
T5_S
OU
RC
E_IN
T | T
5_PS
_1_2
56
36 #
defin
e pe
riod5
625
00
//Que
rem
os q
ue la
inte
rrup
cion
salte
cad
a 2
segu
ndos
. Com
o el
mic
ro v
a a
16M
Hz
y el
max
imo
pree
scal
ado
37
//es
de
256
no n
os p
erm
ite h
acer
lo e
n un
a so
la in
terru
pcio
n po
r lo
que
hare
mos
que
salte
cad
a se
gund
o
38
//
y co
ntar
el n
umer
o de
inte
rrup
cion
es p
ara
hace
r lo
que
quer
emos
en
la se
gund
a. P
ara
que
salte
cad
a
39
//
segu
ndo
el n
umer
o de
cic
los s
era
16*1
0^6/
256=
6250
0.
40
41
//#d
efin
e co
nfig
2 T2
_ON
| T2
_PS_
1_1
42 //
#def
ine
perio
d2 1
59
43
44 #
endi
f /*
_TIM
ER_H
*/
45
46 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
47 E
nd o
f File
48
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 96
10.8. Código señales_digitales_entrada.c 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
EI
6
7
@Fi
le N
ame
8
sen
al_d
igita
l_en
trada
.c
9
10
@D
escr
iptio
n 1
1 E
n es
te a
rchi
vo se
con
figur
an la
s señ
ales
dig
itale
s de
entra
da q
ue e
n co
ncre
to so
n 3.
1
2 *
La
prim
era
es la
que
nos
indi
ca si
la ll
ave
se e
ncue
ntra
en
la p
osic
ion
1.
13
* L
a se
gund
a es
igua
l sal
vo q
ue e
n es
te c
aso
es la
pos
icio
n 2.
1
4 *
La
terc
era
es e
l sen
sor d
e hi
drog
eno
en c
aso
de q
ue e
ste
sea
digi
tal.
15
* E
l pro
blem
a es
que
toda
s est
as se
ñale
s res
pond
en a
l mis
mo
vect
or d
e in
terru
pcio
n po
r lo
tant
o cu
ando
salte
est
a in
terru
pcio
n 1
6 *
se d
eber
á id
entif
icar
cua
l de
todo
s los
pin
es e
s el q
ue h
a he
cho
salta
r la
inte
rrup
cion
y d
epen
dien
do c
uál s
ea a
ctua
r de
una
form
a 1
7 *
u o
tra.
18
1
9 @
Aut
or
20
P
ablo
Med
rano
2
1
22
@Fe
cha
23
1
1 D
icie
mbr
e 20
16
24
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
5
26
#def
ine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
2
7 #i
nclu
de <
plib
.h>
28
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 97
29 in
t pos
icio
n;
//
Var
iabl
e qu
e in
dica
la p
osic
ion
de la
llav
e 3
0 in
t arr
anqu
e =
0;
//Var
iabl
e qu
e di
ce s
i la
pila
est
a ar
ranc
ando
o n
o 3
1 in
t enc
endi
do;
//
Var
iabl
e qu
e in
dica
si se
tien
e qu
e se
guir
el p
roce
so d
e en
cend
ido
32
int p
osic
ion_
ante
rior2
= 0
;
//Var
iabl
e pa
ra sa
ber s
i pas
amos
de
posi
cion
2 a
pos
icio
n 1
real
izar
el c
iclo
de
apag
ado
33
int j
= 0
;
/
/Var
iabl
e pa
ra e
l buc
le fo
r 3
4
35
/*Es
tas d
os fu
ncio
nes s
on si
mila
res.
Su o
bjet
ivo
es c
onfig
urar
com
o en
trada
s dig
itale
s la
s pos
icio
nes d
e la
3
6 ll
ave.
Ade
mas
act
ivam
os la
s int
erru
pcio
nes*
/ 3
7 vo
id in
iSen
sorP
os1(
void
){
38
3
9
IEC
1bits
.CN
IE =
0;
//Des
habi
litar
inte
rrupc
ione
s del
CN
mie
ntra
s lo
conf
igur
amos
4
0
41
C
NC
ON
bits
.ON
= 0
;
//
Deh
abili
tar C
hang
e N
otic
e m
odul
e 4
2
CN
ENbi
ts.C
NEN
2 =
1;
//
Hab
ilita
r el s
enso
r que
vam
os a
util
izar
4
3
AD
1PC
FGbi
ts.P
CFG
0 =
1;
44
C
NPU
Ebits
.CN
PUE2
= 1
;
//Hab
ilita
r pul
l up
45
4
6
PO
RTB
;
//L
eer P
OR
TB p
ara
elim
inar
alg
un c
ambi
o an
terio
r si l
o hu
bies
e 4
7
48
IP
C6b
its.C
NIP
= 5
;
//F
ijar p
riorid
ad d
e in
terr
upci
on e
n 5
por e
jem
plo
49
5
0
IFS1
bits
.CN
IF =
0;
//Bor
rar e
l fla
g de
inte
rrup
cion
5
1
IEC
1bits
.CN
IE =
1;
//Hab
ilita
r int
erru
pcio
nes d
e C
N
52
C
NC
ON
bits
.ON
= 1
;
//
Hab
ilita
r Cha
nge
Not
ice
mod
ule
53
54
re
turn
; 5
5 }
56
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 98
57 v
oid
iniS
enso
rPos
2(vo
id){
5
8
59
IE
C1b
its.C
NIE
= 0
;
//D
esha
bilit
ar in
terru
pcio
nes d
el C
N m
ient
ras l
o co
nfig
uram
os
60
6
1
CN
CO
Nbi
ts.O
N =
0;
//H
abili
tar C
hang
e N
otic
e m
odul
e 6
2
CN
ENbi
ts.C
NEN
3 =
1;
//H
abili
tar e
l sen
sor q
ue v
amos
a u
tiliz
ar
63
A
D1P
CFG
bits
.PC
FG1
= 1;
6
4
CN
PUEb
its.C
NPU
E3 =
1;
//H
abili
tar p
ull u
p 6
5
66
P
OR
TB;
//Lee
r PO
RTB
par
a el
imin
ar a
lgun
cam
bio
ante
rior s
i lo
hubi
ese
67
6
8
IPC
6bits
.CN
IP =
5;
//Fija
r prio
ridad
de
inte
rrup
cion
en
5 po
r eje
mpl
o 6
9
70
IF
S1bi
ts.C
NIF
= 0
;
//B
orra
r el f
lag
de in
terr
upci
on
71
IE
C1b
its.C
NIE
= 1
;
//H
abili
tar i
nter
rupc
ione
s de
CN
7
2
CN
CO
Nbi
ts.O
N =
1;
73
74
re
turn
; 7
5 }
76
7
7 vo
id in
iSen
sorH
idro
geno
(voi
d){
78
IE
C1b
its.C
NIE
= 0
;
//D
esha
bilit
ar in
terru
pcio
nes d
el C
N m
ient
ras l
o co
nfig
uram
os
79
8
0
CN
CO
Nbi
ts.O
N =
0;
//D
ehab
ilita
r Cha
nge
Not
ice
mod
ule
81
C
NEN
bits
.CN
EN4
= 1;
//H
abili
tar e
l sen
sor q
ue v
amos
a u
tiliz
ar
82
A
D1P
CFG
bits
.PC
FG2
= 1;
8
3
CN
PUEb
its.C
NPU
E4 =
1;
//H
abili
tar p
ull u
p 8
4
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 99
85
PO
RTB
;
//L
eer P
OR
TB p
ara
elim
inar
alg
un c
ambi
o an
terio
r si l
o hu
bies
e 8
6
87
IP
C6b
its.C
NIP
= 5
;
//F
ijar p
riorid
ad d
e in
terr
upci
on e
n 5
por e
jem
plo
88
8
9
IFS1
bits
.CN
IF =
0;
//Bor
rar e
l fla
g de
inte
rrup
cion
9
0
IEC
1bits
.CN
IE =
1;
//Hab
ilita
r int
erru
pcio
nes d
e C
N
91
92
C
NC
ON
bits
.ON
= 1
;
//
Hab
ilita
r Cha
nge
Not
ice
mod
ule
93
94
re
turn
; 9
5 }
96
9
7 /*
En la
inte
rrup
cion
tene
mos
que
leer
los p
uerto
s y v
er c
ual h
a si
do e
l cam
bio
que
se h
a pr
oduc
ido
ya q
ue v
a a
salta
r 9
8 ta
nto
en fl
anco
de
subi
da c
omo
de b
ajad
a de
los d
os p
ines
. En
func
ion
del c
ambi
o qu
e se
hay
a pr
oduc
ido
pasa
ria a
una
pos
icio
n 9
9 u
otra
. En
conc
reto
tene
mos
3 p
osic
ione
s: la
0 q
ue e
s de
espe
ra q
ue p
asem
os a
alg
una
de la
s otra
s dos
. Par
a pa
sar a
est
a po
sici
on
100
las o
tras d
os d
eben
ser c
ero
ya q
ue s
i una
es c
ero
y la
otra
no
debe
ria e
star
en
esa
posi
cion
. La
posi
cion
1 e
s en
la q
ue so
lo
101
se u
tiliz
a la
bat
eria
. La
posi
cion
2 e
s en
la q
ue ta
mbi
en se
util
iza
la p
ila d
e co
mbu
stib
le. C
uand
o se
act
ive
esta
pos
icio
n
102
pon
drem
os a
1 la
var
iabl
e ar
ranq
ue y
a qu
e la
pila
est
ara
arra
ncan
do, e
l con
tado
r del
Tim
er 5
a c
ero
para
que
cue
nte
dos s
egun
dos
103
y a
ctiv
ar e
l pul
so d
el in
terru
ptor
*/
104
10
5 vo
id _
_ISR
(_C
HA
NG
E_N
OTI
CE_
VEC
TOR
, ipl
5) C
hang
eNot
ice_
Han
dler
(voi
d){
106
10
7
for(
j=0;
j<64
000;
j++)
{
//D
elay
de
20m
s par
a ev
itar l
os re
bote
s. El
mic
ro fu
ncio
na a
16M
Hz
por l
o ta
nto
10
8
//re
aliz
a 16
*10^
6 ci
clos
por
segu
ndo.
Si q
uere
mos
que
sea
n 20
ms-
>16*
10^6
*0,0
2=32
0000
10
9
//y
si c
ada
bucl
e fo
r tar
de u
nos 5
cic
los 3
2000
0/5=
6400
0
110
11
1
}
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 100
112
113
if
((PO
RTB
bits
.RB
0 ==
0) &
& (P
OR
TBbi
ts.R
B1
== 0
)){
//
Si re
cibe
un
flanc
o y
se le
e un
cer
o en
am
bas p
osic
ione
s pas
o a
la p
osic
ion
0 11
4
p
osic
ion
= 0;
11
5
116
}
11
7
11
8
if((
POR
TBbi
ts.R
B0
== 1
) &&
(PO
RTB
bits
.RB
1 ==
0))
{
//Si
reci
be u
n fla
nco
y se
lee
un u
no e
n el
sens
or d
e la
pos
icio
n 1
paso
a
119
//
posi
cion
1
120
pos
icio
n =
1;
121
}
12
2
12
3
if(P
OR
TBbi
ts.R
B1
== 1
){
//S
i rec
ibo
un fl
anco
y se
lee
un u
no e
n el
sens
or d
e la
pos
icio
n 2
pued
e qu
e
124
//h
aya
sido
de
la ll
ave
y pa
so o
pos
icio
n 2
y si
ya
esta
ba e
n la
pos
icio
n 2
no h
ago
nada
12
5
126
if(
posi
cion
==
2){
/
/Si y
a es
taba
en
posi
cion
2 n
o ha
go n
ada
porq
ue h
abra
sido
un
cam
bio
en e
l sen
sor d
e hi
drog
eno
127
12
8
}
12
9
e
lse{
//Si n
o es
taba
en
posi
cion
2
130
posi
cion
= 2
;
//P
aso
a po
sici
on 2
13
1
C
onve
rtido
rDC
ON
();
//Enc
iend
o el
con
verti
dor
132
arra
nque
= 1
;
//C
omie
nza
el a
rran
que
133
ence
ndid
o =
1;
//C
omie
nza
el e
ncen
dido
13
4
po
sici
on_a
nter
ior2
= 1
;
//
La p
osic
ion
ante
rior 2
pas
a a
ser p
or si
cam
bia
de p
osic
ion
y ha
y qu
e ap
agar
la p
ila
135
}
136
}
13
7
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 101
138
if
(PO
RTB
bits
.RB
2 ==
1){
/
/Si r
ecib
e un
flan
co y
se le
e un
uno
en
el se
nsor
de
hidr
ogen
o se
enc
iend
e la
ala
rma
139
Ala
rmaH
idro
geno
();
140
}
14
1
14
2
PO
RTB
;
//L
eer P
OR
TB p
ara
elim
inar
el c
ambi
o qu
e se
ha
prod
ucid
o 14
3
IFS1
bits.
CN
IF =
0;
//Elim
inar
el f
lag
de in
terr
upci
on
144
14
5
retu
rn;
146
} 14
7
148
14
9
150
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
15
1 E
nd o
f File
15
2 *
/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 102
10.9. Código señales_digitales_salida.c 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
EI
6
7
@Fi
le N
ame
8
sen
al_d
igita
l_sa
lida.
c 9
1
0 @
Des
crip
tion
11
En
este
arc
hivo
se c
onfig
uran
las s
eñal
es d
igita
les d
e sa
lida
y se
cre
an fu
ncio
nes p
ara
ence
nder
las y
apa
garla
s.
12
* E
stas
func
ione
s sim
plem
ente
mod
ifica
n el
val
or d
el b
it po
nien
dolo
a 1
si e
s ON
y a
0 si
es O
FF. S
e ha
n cr
eado
1
3 *
sola
men
te p
ara
que
se v
ea d
e fo
rma
mas
cla
ra lo
que
se e
sta
haci
endo
en
vez
de la
mod
ifica
cion
del
bit
de u
n re
gist
ro.
14
1
5 @
Aut
or
16
P
ablo
Med
rano
1
7
18
@Fe
cha
19
1
1 D
icie
mbr
e 20
16
20
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
1
22
#def
ine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
2
3 #i
nclu
de <
plib
.h>
24
2
5 /*
En la
s sig
uien
tes t
res f
unci
ones
lo q
ue se
hac
e es
: en
la p
rimer
a co
nfig
urar
un
pin
digi
tal c
omo
salid
a;
26
en
la se
gund
a po
ner a
uno
est
e pi
n pa
ra q
ue e
ncie
nda
un le
d ve
rde;
y e
n la
terc
era
pone
r el p
in a
cer
o 2
7 p
ara
que
se a
pagu
e el
led
verd
e.*/
2
8
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 103
29 v
oid
iniL
edV
erde
(voi
d){
30
P
OR
TSet
Pins
Dig
italO
ut(I
OPO
RT_
B, B
IT_1
3);
31
} 3
2
33
void
Led
Ver
deO
N(v
oid)
{ 3
4
PO
RTB
bits
.RB
13 =
1;
35
} 3
6
37
void
Led
Ver
deO
FF(v
oid)
{ 3
8
PO
RTB
bits
.RB
13 =
0;
39
} 4
0
41
/*En
est
as tr
es fu
ncio
nes s
e ha
ce lo
mis
mo
que
en la
s tre
s ant
erio
res p
ero
para
otro
pin
al q
ue se
con
ecta
ra
42
otro
led
de c
olor
rojo
*/
43
4
4 vo
id in
iLed
Roj
o(vo
id){
4
5
PO
RTS
etPi
nsD
igita
lOut
(IO
POR
T_B
, BIT
_14)
; 4
6 }
47
4
8 vo
id L
edR
ojoO
N(v
oid)
{ 4
9
PO
RTB
bits
.RB
14 =
1;
50
} 5
1
52
void
Led
Roj
oOFF
(voi
d){
53
P
OR
TBbi
ts.R
B14
= 0
; 5
4 }
55
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 104
56
/*En
est
a fu
ncio
n se
con
figur
a ot
ro p
in d
e sa
lida
que
se v
a a
utili
zar p
ara
prod
ucir
la se
ñal d
e do
s se
gund
os
57
cua
ndo
se a
rran
ca la
pila
. Se
pond
ra a
uno
cua
ndo
se re
ciba
la se
ñal d
e qu
e la
llav
e pa
sa a
la p
osic
ion
2 5
8 y
a c
ero
cuan
do sa
lte la
inte
rrup
cion
del
tim
er 5
que
cue
nta
dos s
egun
dos*
/ 5
9 vo
id in
iPul
soIn
terr
upto
r(vo
id){
6
0
PO
RTS
etPi
nsD
igita
lOut
(IO
POR
T_B
, BIT
_15)
; 6
1 }
62
6
3 /*
Cua
ndo
pone
mos
el p
ulso
del
inte
rrup
tor e
n 1
adem
as d
e ca
mbi
ar e
l bit
se a
ctiv
a la
inte
rrup
cion
del
tim
er 5
que
es l
a 6
4 e
ncar
gada
de
apag
ar e
l pul
so c
uand
o pa
sen
los d
os se
gund
os y
se p
one
a 0
el c
onta
dor d
e es
te ti
mer
par
a qu
e cu
ente
los 2
6
5 se
gund
os c
orre
ctam
ente
*/
66
void
Pul
soIn
terr
upto
rON
(voi
d){
67
T
MR
5 =
0;
68
IE
C0b
its.T
5IE
= 1;
6
9
PO
RTB
bits
.RB
15 =
1;
70
} 7
1
72
void
Pul
soIn
terr
upto
rOFF
(voi
d){
73
P
OR
TBbi
ts.R
B15
= 0
; 7
4 }
75
7
6 /*
Para
la e
lect
rova
lvul
a ha
cem
os lo
mis
mo
que
en lo
s cas
os a
nter
iore
s. Se
est
able
ce e
l pin
com
o di
gita
l y d
e sa
lida
y se
cre
an
77
dos
func
ione
s par
a po
ner a
1 o
a 0
ese
bit.
*/
78
void
iniE
lect
rova
lvul
a(vo
id){
7
9
PO
RTS
etPi
nsD
igita
lOut
(IO
POR
T_E,
BIT
_5);
80
} 8
1
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 105
82 v
oid
Ele
ctro
valv
ulaO
N(v
oid)
{ 8
3
PO
RTE
bits
.RE5
= 1
; 8
4 }
85
8
6 vo
id E
lect
rova
lvul
aOFF
(voi
d){
87
P
OR
TEbi
ts.R
E5 =
0;
88
} 8
9
90
/*Se
pro
cede
de
igua
l man
era
para
la se
ñal d
el c
onve
rtido
rDC
est
able
cien
do la
seña
l dig
ital d
e sa
lida
y cr
eand
o la
s dos
func
ione
s 9
1 q
ue m
odifi
can
el b
it*/
92
void
iniC
onve
rtid
orD
C(v
oid)
{ 9
3
PO
RTS
etPi
nsD
igita
lOut
(IO
POR
T_E,
BIT
_6);
94
} 9
5
96
void
Con
vert
idor
DC
ON
(voi
d){
97
P
OR
TEbi
ts.R
E6 =
1;
98
} 9
9
100
void
Con
vert
idor
DC
OFF
(voi
d){
101
P
OR
TEbi
ts.R
E6 =
0;
102
} 10
3
104
10
5
106
10
7 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
108
End
of F
ile
109
*/
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 106
10.10. Código pwm.c
1 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***
*/
2 /*
* D
escr
iptiv
e Fi
le N
ame
3
4
@C
ompa
ny
5
CEI
6
7
@
File
Nam
e 8
p
wm
.c
9
10
@D
escr
iptio
n 11
En
este
arc
hivo
se re
aliz
a la
con
figur
acio
n de
l PW
M. S
e ut
iliza
el t
imer
2 y
se p
uede
fija
r el v
alor
has
ta e
l que
tien
e qu
e co
ntar
12
* e
ste
timer
en
func
ion
de su
frec
uenc
ia p
ara
esta
blec
er la
frec
uenc
ia d
el P
WM
13
14
@
Aut
or
15
Pab
lo M
edra
no
16
17
@Fe
cha
18
11
Dic
iem
bre
2016
19
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
20
21
#de
fine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
22
#in
clud
e <p
lib.h
> 23
24
int i
ndic
eVI;
25 fl
oat t
abla
VI[6
8];
26
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 107
27 /*
En e
sta
func
ion
se c
onfig
ura
el P
WM
. Hay
que
fija
r el d
uty
cycl
e in
icia
l y e
l val
or d
el ti
mer
has
ta e
l que
tien
e qu
e co
ntar
28
par
a qu
e el
PW
M v
aya
a la
frec
uenc
ia d
esea
da. A
dem
as se
bor
ra e
l fla
g de
inte
rrup
cion
y se
fija
la p
riorid
ad d
e la
inte
rrup
cion
. 29
En
la in
terr
upci
on o
en
otro
pun
to d
el p
rogr
ama
hay
que
mod
ifica
r el r
egis
tro O
C2R
S co
n el
nue
vo d
uty
cycl
e qu
e se
qui
era
dar.
30 E
ste
valo
r se
actu
aliz
ara
desp
ues d
e te
rmin
ar u
n ci
clo
com
plet
o de
l PW
M. *
/ 31
32
voi
d in
iPW
M (v
oid)
{ 33
O
C2C
ON
bits
.ON
= 0
;
//Se
des
activ
a el
Out
put C
ompa
re q
ue v
amos
a u
tiliz
ar p
ara
conf
igur
arlo
34
O
C2C
ON
bits
.OC
32 =
0;
//U
sam
os u
n tim
er d
e 16
bits
si se
pon
e a
1 pa
ra u
sar u
no d
e 32
hay
que
con
figur
ar d
os
timer
s 35
/
/de
16 b
its p
ara
que
func
ione
n ju
ntos
36
O
C2C
ON
bits
.OC
TSEL
= 0
;
//U
sam
os e
l Tim
er 2
par
a el
PW
M. S
i se
quie
re u
sar e
l 3 se
pon
e a
1.
37
OC
2CO
Nbi
ts.O
CM
= 0
b110
;
//S
elec
cion
amos
el m
odo
de fu
ncio
nam
ient
o PW
M y
Fau
lt pi
n di
sabl
ed
38
OC
2R =
0;
//D
uty
cycl
e in
icia
l 39
P
R2
= 15
9;
//Val
or d
el p
erio
do d
el ti
mer
2 pa
ra q
ue te
nga
una
frecu
enci
a de
100
KH
z 40
41
IFS
0bits
.OC
2IF
= 0;
/
/Bor
ram
os e
l fla
g de
inte
rrup
cion
42
I
EC0b
its.O
C2I
E =
0;
//N
o ac
tivam
os la
inte
rrup
cion
del
PW
M
43
//IP
C2b
its.O
C2I
P =
7;
//Fija
mos
la p
riorid
ad d
e la
inte
rrup
cion
44
O
C2C
ON
bits
.ON
= 1
;
//Se
aac
tiva
el O
utpu
t Com
pare
45
46
ret
urn;
47
}
48
49 /*
En la
inte
rrupc
ion
actu
aliz
amos
el v
alor
del
dut
y cy
cle
y bo
rram
os e
l fla
g de
inte
rrup
cion
*/
50
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 108
51 /*
void
__I
SR(_
OU
TPU
T_C
OM
PAR
E_2_
VEC
TOR
, ipl
7) O
C2_
IntH
andl
er (v
oid)
{ 52
53
OC
2RS
= ((
1-ta
blaV
I[in
dice
VI]
/48.
0)*3
9);
//
Cal
cula
mos
el d
uty
cycl
e 54
55
IFS
0bits
.OC
2IF
= 0;
//B
orra
mos
el f
lag
de in
terr
upci
on
56
57 }
*/
58
59 /*
***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
**
60 E
nd o
f File
61
*/
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 109
10.11. Código escribir_memoria.c 1
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
2
/**
Des
crip
tive
File
Nam
e 3
4
@
Com
pany
5
C
ompa
ny N
ame
6
7
@Fi
le N
ame
8
file
nam
e.c
9
10
@Su
mm
ary
11
Brie
f des
crip
tion
of th
e fil
e.
12
13
@D
escr
iptio
n 14
D
escr
ibe
the
purp
ose
of th
is fi
le.
15 *
/ 16
/* *
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
* */
17
18
#de
fine
_SU
PPR
ESS_
PLIB
_WA
RN
ING
19
#in
clud
e <p
lib.h
> 20
21
uns
igne
d in
t NV
MU
nloc
k (u
nsig
ned
int n
vmop
) {
22
23
u
nsig
ned
int s
tatu
s;
24
25
/
/ Sus
pend
or D
isabl
e al
l Int
erru
pts
26
//a
sm v
olat
ile (?
di %
0? :
?=r?
(sta
tus)
); 27
I
NTD
isabl
eInt
erru
pts(
); 28
Anexos
Escuela Técnica Superior de Ingenieros Industriales (UPM) 110
29
// E
nabl
e Fl
ash
Writ
e/Er
ase
Ope
ratio
ns a
nd S
elec
t 30
/
/ Fla
sh o
pera
tion
to p
erfo
rm
31
NV
MC
ON
SET
= 0x
4004
; 32
33
// W
rite
Key
s 34
N
VM
KEY
= 0
xAA
9966
55;
35
NV
MK
EY =
0x5
5669
9AA
; 36
37
// S
tart
the
oper
atio
n us
ing
the
Set R
egis
ter
38
NV
MC
ON
SET
= 0x
8000
; 39
40
// W
ait f
or o
pera
tion
to c
ompl
ete
41
w
hile
(NV
MC
ON
& 0
x800
0);
42
43
/
/ Res
tore
Inte
rrup
ts
44
IN
TEna
bleI
nter
rupt
s();
45
46
47
// R
etur
n N
VM
ERR
and
LV
DER
R E
rror
Sta
tus B
its
48
ret
urn
(NV
MC
ON
& 0
x300
0);
49 }
50
51
uns
igne
d in
t NV
MW
rite
Wor
d (v
oid*
add
ress
, uns
igne
d in
t dat
a) {
52
u
nsig
ned
int r
es;
53 //
Loa
d da
ta in
to N
VM
DA
TA re
gist
er
54
NV
MD
ATA
= d
ata;
55
// L
oad
addr
ess t
o pr
ogra
m in
to N
VM
AD
DR
regi
ster
56
N
VM
AD
DR
= (u
nsig
ned
int)
addr
ess;
57
// U
nloc
k an
d W
rite
Wor
d
58
res =
NV
MU
nloc
k (0
x400
1);
Sistema de control electrónico de un sistema de pila de combustible
Pablo Medrano Gastañaga 111
59
// R
etur
n R
esul
t 60
re
turn
res;
61
}
63 u
nsig
ned
int N
VM
Eras
ePag
e(vo
id*
addr
ess)
{
64
uns
igne
d in
t res
; 65
// S
et N
VM
AD
DR
to th
e St
art A
ddre
ss o
f pag
e to
era
se
66
NV
MA
DD
R =
(uns
igne
d in
t) ad
dres
s;
67 //
Unl
ock
and
Eras
e Pa
ge
68
res =
NV
MU
nloc
k(0x
4004
); 69
//
Ret
urn
Res
ult
70
retu
rn re
s;
71 }