BMS (Battery Management System) para una motocicleta eléctrica
Abstract
El propósito de este documento es presentar un proyecto que es de utilidad para el equipo MotoStudent. Este proyecto consiste en el desarrollo, fabricación y puesta a punto de un BMS (battery management system), software necesario para controlarlo y software adicional para diagnosis desde el ordenador. Se muestra el diseño de un BMS de manera económica para posteriormente utilizarlo en la competición de MotoStudent. Se trabajan apartados tales como los objetivos, el alcance, estudio de alternativas y soluciones, desarrollo teórico y práctico completo para la consecución del trabajo y las conclusiones del mismo.
Full text
MÁSTER UNIVERSITARIO EN INGENIERÍA EN TECNOLOGÍA INDUSTRIAL TRABAJO FIN DE MÁSTER BMS (BATTERY MANAGEMENT SYSTEM) PARA UNA MOTOCICLETA ELÉCTRICA Estudiante Lizarralde Bilbao Markel Director/Directora Zuloaga Izaguirre Aitzol Departamento Tecnología electrónica Curso académico 2019-2020 Bilbao, 14 de septiembre de 2020
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 1 RESUMEN TRILINGÜE RESUMEN El propósito de este documento es presentar un proyecto que es de utilidad para el equipo MotoStudent. Este proyecto consiste en el desarrollo, fabricación y puesta a punto de un BMS (battery management system), software necesario para controlarlo y software adicional para diagnosis desde el ordenador. Se muestra el diseño de un BMS de manera económica para posteriormente utilizarlo en la competición de MotoStudent. Se trabajan apartados tales como los objetivos, el alcance, estudio de alternativas y soluciones, desarrollo teórico y práctico completo para la consecución del trabajo y las conclusiones del mismo. ABSTRACT The purpose of this document is to introduce a project that could be useful for the MotoStudent team. The project consists in the development of a BMS (battery management system) and its corresponding software to be able to control it. The aim of this document is to present the possibility of designing a BMS in an economical way to be able to use it in the MotoStudent competition. The proposed study is described in the following text. Related to the document, we will find out that it is divided in diferent parts, including introduction, context, goals and scope, working plan, resources, and conclusions. LABURPENA Dokumentu honen helburua MotoStudent taldearentzat erabilgarria den proiektu bat garatzea da. Lan hau BMS (battery management system) baten garapen teknikoa, fabrikazioa, programazioa eta probak egitean datza. MotoStudent lehiaketan erabili ahal izango den BMS ekonomiko bat diseinatu da. Garatuko diren atalen artean helburua, irispena, aukeren eta konponbideen azterketa, lana aurrera eramateko garapen tekniko osoa eta ondorioak aurkitzen dira. PALABRAS CLAVE BMS, battery management system, MotoStudent, placa electrónica, software, programación, diseño esquemático, arduino.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 2 1. Contenido 1. MEMORIA ....................................................................................................................................................... 7 Introducción ....................................................................................................................................................... 7 Contexto ............................................................................................................................................................... 7 Estado del arte .................................................................................................................................................. 8 BMS comerciales .......................................................................................................................................... 8 Objetivos y alcance .......................................................................................................................................... 9 Beneficios .......................................................................................................................................................... 10 Beneficios Técnicos .................................................................................................................................. 10 Beneficios Económicos ........................................................................................................................... 11 Beneficios Sociales .................................................................................................................................... 11 Beneficios Medioambientales .............................................................................................................. 11 Descripción de requerimientos ................................................................................................................ 11 Análisis y selección de alternativas ........................................................................................................ 13 Grupo de alternativas 1: Topología del BMS .................................................................................. 13 Grupo de alternativas 2: Tipo de balanceo ..................................................................................... 14 Grupo de alternativas 2: Medición de voltajes .............................................................................. 20 Grupo de alternativas 3: Topología de medición de intensidades ........................................ 22 Grupo de alternativas 4: Tecnología de medición de temperaturas .................................... 23 Grupo de alternativas 5: Protocolos de comunicación .............................................................. 24 Grupo de alternativas 6: Alimentación del BMS ........................................................................... 25 Grupo de alternativas 7: Microcontrolador.................................................................................... 26 Solución propuesta. Diseño de alto nivel ............................................................................................. 28 2. METODOLOGÍA SEGUIDA EN EL DESARROLLO DEL TRABAJO ............................................. 30 Plan de proyecto y planificación .............................................................................................................. 30 Fases del trabajo ........................................................................................................................................ 30 Hitos ................................................................................................................................................................ 32 Equipo y recursos utilizados ................................................................................................................ 33 Diagrama de Gantt ......................................................................................................................................... 34 Diseño de placa esclava ............................................................................................................................... 34 Diseño esquemático: Arduino Nano .................................................................................................. 34 Diseño esquemático: Balanceo ............................................................................................................ 36 Diseño esquemático: Medición de voltajes ..................................................................................... 40 Diseño esquemático: Comunicaciones ............................................................................................. 45
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 3 Diseño esquemático: Módulo Micro SD ........................................................................................... 46 Diseño esquemático: Pantalla OLED ................................................................................................. 47 Diseño esquemático: Alimentaciones ............................................................................................... 48 Diseño del PCB ........................................................................................................................................... 50 Diseño de placa maestra ............................................................................................................................. 54 Diseño esquemático: Arduino Nano .................................................................................................. 54 Diseño esquemático: Control de contactores ................................................................................ 55 Diseño esquemático: Supervisión de contactores ....................................................................... 59 Diseño esquemático: Termistores ...................................................................................................... 61 Diseño esquemático: Supervisión del IMD ..................................................................................... 61 Diseño esquemático: Comunicaciones ............................................................................................. 62 Diseño esquemático: Módulo Micro SD ........................................................................................... 65 Diseño esquemático: Pantalla OLED ................................................................................................. 65 Diseño esquemático: Alimentaciones ............................................................................................... 65 Diseño del PCB ........................................................................................................................................... 66 Software del BMS ........................................................................................................................................... 68 Software del esclavo ................................................................................................................................ 69 Software del maestro ............................................................................................................................... 77 Software de monitorización y análisis de funcionamiento ........................................................... 84 Extraer datos en directo del BMS ....................................................................................................... 87 Analizar un archivo guardado en el PC ............................................................................................ 88 Extraer datos guardados del BMS ...................................................................................................... 88 Puesta en marcha. Resultados obtenidos............................................................................................. 89 Ensamblaje ................................................................................................................................................... 89 Retrasos por fuerzas mayores ............................................................................................................. 94 Pruebas de la placa esclava ................................................................................................................... 95 Pruebas de la placa maestra .............................................................................................................. 100 Pruebas BMS al completo ................................................................................................................... 101 Futuras mejoras ........................................................................................................................................... 101 3. COSTES DEL PROYECTO ..................................................................................................................... 104 4. CONCLUSIONES ...................................................................................................................................... 106 5. BIBLIOGRAFÍA ......................................................................................................................................... 108 6. ANEXO I: Diagrama de Gantt ............................................................................................................. 110 7. ANEXO II: Esquema eléctrico de la placa esclava ...................................................................... 111
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 4 8. ANEXO III: Esquema eléctrico de la placa maestra .................................................................. 117 9. ANEXO IV: Software de la placa esclava ....................................................................................... 122 10. ANEXO V: Software de la placa maestra .................................................................................. 128 11. ANEXO VI: Software de monitorización y análisis de funcionamiento ....................... 140 12. ANEXO VII: COSTES DEL PROYECTO ........................................................................................ 172 TABLA DE ILUSTRACIONES Ilustración 1. Topologías de BMS ................................................................................................................. 14 Ilustración 2. Celdas desbalanceadas en carga máxima [3] .............................................................. 15 Ilustración 3. Celdas desbalanceadas en carga mínima ...................................................................... 15 Ilustración 4. Tipos de balanceo ................................................................................................................... 16 Ilustración 5. Balanceo por resistencia fija .............................................................................................. 17 Ilustración 6. Balanceo por diodo zener .................................................................................................... 17 Ilustración 7. Balanceo por resistencia conmutada .............................................................................. 18 Ilustración 8. Balanceo de celdas ................................................................................................................. 19 Ilustración 9. Medición de voltajes de celdas en serie ......................................................................... 20 Ilustración 10. Etapa de acondicionamiento ........................................................................................... 21 Ilustración 11. Distintos tipos de etapas de acondicionamiento .................................................... 22 Ilustración 12. Convertidores de alimentación ...................................................................................... 26 Ilustración 13. Diagrama de Gantt ............................................................................................................... 34 Ilustración 14. Arduino Nano en el esclavo ............................................................................................. 35 Ilustración 15. Shift register ........................................................................................................................... 37 Ilustración 16. Circuito de balanceo ........................................................................................................... 38 Ilustración 17. Multiplexor MUX508 y MUX509 .................................................................................... 41 Ilustración 18. Tabla de verdad del multiplexor [17] .......................................................................... 41 Ilustración 19. Conexiones del multiplexor ............................................................................................. 42 Ilustración 20. Esquema interno del AD628 [18] .................................................................................. 43
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 5 Ilustración 21. OP-AMP en modo no inversor ........................................................................................ 44 Ilustración 22. AD628 en el esquema eléctrico ...................................................................................... 45 Ilustración 23. Aislador Si8600 [19] ........................................................................................................... 45 Ilustración 24. Esquema del módulo Micro SD ....................................................................................... 47 Ilustración 25. Pantalla OLED ........................................................................................................................ 48 Ilustración 26, MAX680 .................................................................................................................................... 49 Ilustración 27. Alimentación de la placa esclava ................................................................................... 50 Ilustración 28. Diseño del PCB esclavo ...................................................................................................... 51 Ilustración 29. PCB esclavo ............................................................................................................................. 52 Ilustración 30. Bloques funcionales del esclavo..................................................................................... 53 Ilustración 31. Arduino Nano en el maestro ............................................................................................ 55 Ilustración 32. Circuito del contactor [20] ............................................................................................... 56 Ilustración 33. Esquema de control de contactor .................................................................................. 58 Ilustración 34. Control de contactor completo ....................................................................................... 59 Ilustración 35. Supervisión de contactor .................................................................................................. 60 Ilustración 36. Esquema de conexión de termistores .......................................................................... 61 Ilustración 37. Esquema de conexión del IMD ........................................................................................ 62 Ilustración 38. Esquema del MCP2515D ................................................................................................... 63 Ilustración 39. Esquema del MCP2551 ...................................................................................................... 64 Ilustración 40. Resto de esquema del CAN ............................................................................................... 64 Ilustración 41. Módulo bluetooth HC-05 ................................................................................................... 65 Ilustración 42. Diseño de placa maestra ................................................................................................... 67 Ilustración 43. Bloques funcionales de placa maestra ........................................................................ 68 Ilustración 44. Tabla de verdad de los multiplexores ......................................................................... 72 Ilustración 45. Bloque funcional de medición de voltajes ................................................................. 73 Ilustración 46. Diagrama funcional del balanceo .................................................................................. 77 Ilustración 47. Software de análisis y monitorización ........................................................................ 86
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 6 Ilustración 48. Diagrama funcional del software de análisis y monitorización ........................ 86 Ilustración 49. Fijación de las placas a soldar ......................................................................................... 89 Ilustración 50. Colocación del Stencil ......................................................................................................... 90 Ilustración 51. Colocación de componentes ............................................................................................ 91 Ilustración 52. Soldadura de los componentes en el horno .............................................................. 92 Ilustración 53. Resultado obtenido ............................................................................................................. 92 Ilustración 54. Placa esclava .......................................................................................................................... 93 Ilustración 56. Ensamblaje del BMS al completo ................................................................................... 94 Ilustración 57. Curva de carga de las celdas ............................................................................................ 95 Ilustración 58. Desviación del voltaje en el balanceo de las celdas ............................................... 96 Ilustración 59. Placa de pruebas para las celdas ................................................................................... 97 Tabla 1. Requerimientos del BMS ................................................................................................................ 11 Tabla 2. Arduino Nano ...................................................................................................................................... 28 Tabla 3. Atributos de las tareas del esclavo ............................................................................................. 72 Tabla 4. Tareas del maestro. .......................................................................................................................... 79 Tabla 5. Errores en la medición de voltajes. ............................................................................................ 97 Tabla 6. Mediciones de intensidad .............................................................................................................. 99 Tabla 7. Costes del proyecto ........................................................................................................................ 104
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 7 1. MEMORIA INTRODUCCIÓN Este documento contiene un proyecto de diseño e implantación del BMS (battery management system) para una moto eléctrica de competición, así como el software necesario para dicha placa. Este software servirá para el posterior análisis del funcionamiento del BMS y las baterías de la motocicleta por parte del equipo de MotoStudent Bizkaia. En una primera parte se presenta el contexto del proyecto, objetivos del mismo y los beneficios técnicos y económicos que se esperan conseguir. Para ello, se estudiarán distintas alternativas y se valorarán ambas mediante diferentes criterios, eligiendo aquella opción que más se ajuste a las necesidades. Una vez seleccionada la alternativa, se realiza una descripción en la que se muestran las diferentes partes de las que constará el BMS y se da una breve explicación de cada una de ellas. También se detallarán todos los detalles del Software diseñado para su control. A continuación, se planifican todos los trabajos a realizar, viendo las diferentes relaciones entre las tareas a llevar a cabo. Principalmente hay dos etapas, una en la que se realiza el diseño y fabricación de las placas electrónicas y otra en la que se programa el Software. Este proyecto cuenta también con un análisis detallado de todos los costes. En este último se enumeran las ventajas obtenidas, dando una explicación de las consecuencias de las mismas. CONTEXTO Como alumno de la escuela participo voluntariamente en la sexta edición de la competición de MotoStudent (2018-2020) [1]. MotoStudent es un desafío que nace de la Ciudad del motor de Aragón, siendo una competición entre universidades de ingeniería de todo el mundo. El objetivo consiste en el diseño y construcción de una motocicleta de competición eléctrica. Las distintas universidades se enfrentarán en la competición a unas pruebas técnicas durante unas jornadas que se llevan a cabo en las instalaciones de Motorland Aragón durante un fin de semana en el mes de octubre 2020, teniendo como prueba final la carrera. Las pruebas planteadas tendrán como fin evaluar el comportamiento dinámico y las prestaciones de la moto fabricada, para comprobar la seguridad y funcionalidad, resultado dependiente de la destreza de los miembros del equipo.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 8 Uno de los objetivos principales por parte de la escuela de ingeniería de Bilbao es construir la mayor cantidad de elementos de la motocicleta que sea posible. Uno de los componentes básicos y más importantes en un vehículo eléctrico es el BMS: Las siglas de BMS proviene de Battery management system en inglés, o sistema de gestión de baterías en español. Las baterías de Ion de Litio son peligrosas ya que un uso indebido de las mismas puede llevarlas un sobrecalentamiento o incuso a la explosión. Con el fin de evitar cualquier problema se han desarrollado distintas alternativas. Entre ellas, y la más utilizada sin duda, es el BMS. Es la placa de control encargada de que las baterías del vehículo eléctrico permanezcan en su rango seguro de operación (safe operation area). Para ello debe monitorizar distintos parámetros eléctricos y térmicos de las baterías como voltajes, intensidades de carga y descarga, temperaturas… y asegurar la desconexión de las baterías del sistema de tracción en caso de fallo de alguno de los mismos. Por lo tanto, debido a la importancia del BMS en el vehículo eléctrico, así como la necesidad utilizar uno para la próxima motocicleta de la universidad se ha decidido llevar a cabo el proyecto de diseño, ensamblaje y pruebas reales en circuito. ESTADO DEL ARTE BMS comerciales Las funciones mínimas que cumple el BMS más sencillo son las siguientes: Protección ante sobretensiones: Si el voltaje de alguna de las celdas llega a los 4.2V (voltaje máximo de las celdas de Li-Ion), el BMS debe impedir que se siga cargando esa celda. Para impedirlo abre el contactor o mosfet que regule la entrada de corriente y deja de cargar toda la batería. En caso de que se use un BMS sin la capacidad de balancear las celdas no se habrá cargado la batería al completo ya que el resto de celdas no habrán llegado al voltaje de 4.2V. Además, los BMS más sencillos no permiten regular el voltaje al que se corta la carga, con lo que solo se podría utilizar ese dispositivo para una tecnología específica de celdas. Protección ante sobrecargas de intensidad: Si la intensidad de descarga supera cierto valor abre el circuito desconectando a la batería de la carga. Puede que no exista esta protección cuando se cargue la batería ya que suele ser el propio cargador quien lleva esa limitación de corriente. Al igual que el voltaje, esta intensidad de corte no suele ser regulable en los BMS comerciales. En los BMS más compactos suele usarse una resistencia shunt y en los de mayor potencia un sensor
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 15 varias de las celdas no se han cargado por completo y el BMS habrá dado por finalizada la carga. Ilustración 2. Celdas desbalanceadas en carga máxima [3] El BMS corta la descarga de la batería cuando detecta que una celda ha llegado a su voltaje mínimo. Partiendo del caso anterior en el que una celda estaba menos cargada que la otra, es sencillo ver que la celda menos cargada será la primera en llegar al voltaje mínimo. Esto llevará a no haber aprovechado toda la energía que tenía en su interior. Ilustración 3. Celdas desbalanceadas en carga mínima Aumentando el número de ciclos de carga y descarga el desbalanceo de las celdas sería cada vez mayor y, por lo tanto, el rendimiento cada vez peor. Con el fin de evitar este fenómeno se hace uso de uno de los métodos de balanceo que se explican a continuación. Estos métodos se pueden dividir en dos grandes grupos: Balanceo activo y pasivo.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 16 Los métodos de balanceo activo tratan de pasar el exceso de carga de algunas celdas a las de menor carga tratando de desperdiciar la mínima energía posible. Como gran desventaja tienen que son mucho más costosos y necesitan más espacio físico. Como estos últimos dos puntos son muy importantes en el caso de la motocicleta se descarta directamente el estudio de los mismos en este proyecto. Además, requieren generalmente un control más complejo que con el balanceo pasivo. El balanceo pasivo disipa la energía sobrante de las celdas de mayor carga directamente en forma de calor. Es un método más ineficiente que el balanceo activo, pero suficiente para la competición. Como la motocicleta está diseñada para desempeñar el máximo rendimiento en carrera, no resulta tan importante disponer de un método de balanceo algo más ineficiente a la hora de cargarlo en boxes si este hace que la placa sea más pequeña y pese menos para la carrera. Además, el control del balanceo pasivo es muy sencillo. Ambos métodos pueden dividirse en subgrupos como se puede ver en la siguiente imagen [4]. Solamente se van a analizar los métodos pasivos en este proyecto por las razones anteriormente comentadas. Ilustración 4. Tipos de balanceo Equilibrado pasivo: Resistencia fija Consiste en colocar una resistencia en paralelo a cada celda de tal forma que la resistencia limite la tensión a la que puede llegar la celda. Se mantiene el balanceo entre las celdas ya que, si se da el caso de que una celda tiene mayor tensión, la descarga que esta sufrirá a causa de su resistencia también será mayor y volverá al mismo voltaje que el resto. Es el método más sencillo, pero también obsoleto debido a la alta ineficiencia energética.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 17 Ilustración 5. Balanceo por resistencia fija Equilibrado pasivo: Diodo zener El uso de un diodo zener en lugar de una resistencia fija reduce el problema de la gran pérdida de energía del caso anterior. Protege a las celdas de sobrecargas ya que estas no sobrepasarán el voltaje del diodo. Sin embargo, no protege ante sobredescargas y los diodos deben soportar la corriente de carga de las celdas suponiendo esto problemas económicos y térmicos. Ilustración 6. Balanceo por diodo zener Equilibrado pasivo: Resistencia conmutada Se trata de una versión mejorada a la resistencia fija. Se sigue utilizando una resistencia fija para disipar la energía sobrante de cada celda, pero solo cuando es necesario. Para ello se coloca un interruptor en serie a cada resistencia y se decide cuando se cierra y cuando no.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 18 Estos interruptores pueden ser transistores, mosfets u otros elementos dependiendo de la intensidad que tengan que soportar. El esquema es el siguiente: Ilustración 7. Balanceo por resistencia conmutada La velocidad de balanceo depende del paso de corriente por el mosfet y la resistencia. El control de los mosfets se realiza con el microcontrolador, que es el encargado de medir los voltajes y decidir en cada instante cuales de los mosfets deben estar conduciendo. Existen diferentes algoritmos de control. El más sencillo consiste en activar el balanceo de todas las celdas salvo la del voltaje más bajo. De esta forma se estará cargando más rápido la celda que menor voltaje tenga para que se iguale con el resto. Otra opción es activar solamente los que estén por encima de un rango de voltaje (10mV por ejemplo) sobre la celda de voltaje más bajo. La elección de uno u otro influye básicamente en la velocidad de balanceo, calentamiento del BMS y complejidad del algoritmo de control entre otros factores. Es un sistema de balanceo más caro que los dos anteriores, pero sigue siendo más barato que lo métodos de balanceo activos ya descartados. Por todos estos motivos se ha decidido utilizar la topología de resistencia conmutada Además, tiene una gran ventaja frente a muchos BMS comerciales ya que permite empezar a balancear la batería en cualquier nivel de carga de la batería. Muchos de los comerciales solo empiezan a balancear las celdas que llegan a su nivel máximo de carga. Si se supone el siguiente estado de carga de una batería:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 19 Ilustración 8. Balanceo de celdas En el estado de carga (1) en la imagen, el BMS comenzaría el balanceo de la celda de 4.2V (2) hasta que recuperara el mismo voltaje que las otras (3), esto es, a 4.0V. En este caso se ha supuesto que no está circulando intensidad por ninguna de las otras celdas. Ahora se plantea el caso anterior, pero cargando simultáneamente todas las celdas, incluida la del balanceo. La intensidad máxima a la que se podrá cargar esta será la intensidad de balanceo de la celda ya que, si se le suministra una intensidad mayor a la que se está disipando en el balanceo, esta seguirá cargándose hasta que se estropee o se incendie por sobrecargarla. Esto limita la intensidad de carga de toda la batería cuando una de las celdas llega a su voltaje máximo. Los BMS comerciales son capaces de disipar unos 100mA, con lo que ese sería el límite de intensidad de carga cuando se está llegando al tope. Los hay hasta más ineficientes, que cortan directamente la carga hasta que las celdas se balancean, lo que hace la carga aún más lenta. Si se utilizara un BMS habitual para la batería de la motocicleta, suponiendo que hubiera una diferencia de carga del 5% entre la celda más cargada y el resto, el tiempo de balanceo sería el siguiente: 𝐶𝑎𝑝𝑎𝑐𝑖𝑑𝑎𝑑 𝑑𝑒 𝑐𝑎𝑑𝑎 𝑟𝑎𝑚𝑎 𝑑𝑒 𝑙𝑎 𝑚𝑜𝑡𝑜𝑐𝑖𝑐𝑙𝑒𝑡𝑎 𝑒𝑛 𝑝𝑎𝑟𝑎𝑙𝑒𝑙𝑜=60 𝐴ℎ 𝐶𝑎𝑝𝑎𝑐𝑖𝑑𝑎𝑑 𝑑𝑒 𝑙𝑎 𝑟𝑎𝑚𝑎 𝑎 𝑑𝑖𝑠𝑖𝑝𝑎𝑟 𝑒𝑛 𝑏𝑎𝑙𝑎𝑛𝑐𝑒𝑜=60𝑥0.05=3 𝐴ℎ 𝐼𝑛𝑡𝑒𝑛𝑠𝑖𝑑𝑎𝑑 𝑑𝑒 𝑏𝑎𝑙𝑎𝑛𝑐𝑒𝑜=100 𝑚𝐴=0.1 𝐴 𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑏𝑎𝑙𝑎𝑛𝑐𝑒𝑜=3 𝐴ℎ 0.1 𝐴=30 ℎ Como se puede observar se necesita una intensidad de balanceo mayor a la ofrecida por la mayoría de los BMS del mercado. Hay que buscar un compromiso entre la velocidad de balanceo y el calor a disipar en cada resistencia del balanceo. Se ha decidido escoger una intensidad cercana a 0.3A, reduciendo 3 veces el tiempo necesario.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 20 Por lo tanto, en la situación planteada se necesitarían 30h para completar la carga de la batería con un BMS comprado mientras que con el de este proyecto se necesitarían 10h. Además, es muy importante tener en cuenta que el BMS comprado haría este balanceo a partir del instante en que la celda más cargada llegue a los 4.2V como se ha planteado. En el BMS del proyecto se podrá empezar a balancear las celdas en cualquier momento, antes de que esto ocurra, gracias a que se tendrá control absoluto con el microcontrolador, aprovechando así todo el tiempo de carga. Esto quiere decir que, si por ejemplo hicieran falta 2h cargando la batería para que se diera la situación planteada anteriormente, con el BMS diseñado ya se habría estado balanceando la batería 2h, reduciendo aún más el tiempo de balanceo. Esto le da una ventaja sustancial frente a otros BMS. Grupo de alternativas 2: Medición de voltajes Hay que adaptar los voltajes de las celdas para poder medirlos con un microcontrolador. Esto se debe a que la medición de la tensión de cada celda está referenciada a su propio borne negativo, con lo que, aunque cada celda solo tenga un voltaje del rango 2.5-4.2V, el microcontrolador no medirá lo mismo (el microcontrolador estará referenciado al borne negativo de la primera celda y no la que quiere medir). Este fenómeno se puede ver a continuación: Ilustración 9. Medición de voltajes de celdas en serie Se puede como el microcontrolador al medir el voltaje de la segunda celda verá una tensión entre 5.0 y 8.4V, valor resultante de suma de las dos primeras celdas. Este fenómeno imposibilita la medida directa de las tensiones ya que si así se hiciera se dañaría el microcontrolador por alimentarlo con tensiones mayores de las permitidas (generalmente funcionan a 3.3 0 5V). Para evitar esto se debe medir el voltaje de cada celda de forma diferencial, esto es, tomar la medida del borne negativo y positivo, obtener el diferencial de ambos y referenciarlo al mismo punto que el microcontrolador. A esta etapa se le llamará la etapa de acondicionamiento.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 21 Ilustración 10. Etapa de acondicionamiento Otro problema importante a resolver es que hay que medir 27 tensiones diferentes y el microcontrolador no tendrá tantas entradas analógicas. En consecuencia, no queda más remedio que multiplexar las medidas de las celdas. Los multiplexores son dispositivos que permiten controlar un mayor número de señales con un número menor de entradas [5]. Básicamente funcionan como un interruptor de señales. Son capaces de juntar 2,4,8,16 o incluso 32 señales en una única. Para ello requieren cierto control de señales, ya sea utilizando entradas digitales o con algún protocolo de comunicación. Dicho esto, se pueden utilizar dos topologías diferentes: Colocar una etapa de acondicionamiento para cada conjunto serie de celdas y, una vez acondicionados todos los voltajes, multiplexarlos hasta la entrada o entradas analógicas. La elección del multiplexor se hace más sencilla ya que los voltajes están ya acondicionados. Sin embargo, se utiliza una mayor cantidad de componentes que en la siguiente tipología ya que se utilizan tantas etapas de acondicionamiento como celdas en serie. Colocar el multiplexor o los multiplexores directamente a las celdas y una única o un par de etapas de acondicionamiento entre la salida del multiplexor y las entradas analógicas del microcontrolador. Son necesarios menos componentes electrónicos, pero los multiplexores deben soportar la alta tensión compuesta por el conjunto de celdas, ya que se están pasando las señales sin acondicionar por el mismo Las dos tipologías se pueden ver en la siguiente imagen:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 22 Ilustración 11. Distintos tipos de etapas de acondicionamiento La alternativa adoptada es la segunda, la de multiplexar primero las señales para así reducir el número de etapas de acondicionamiento. Como se necesita un menor número de componentes para obtener el mismo resultado no solo el coste total de la placa será menor, sino que el espacio necesario también lo será. Respecto a la desventaja de hacer circular señales de altos voltajes por el multiplexor, se reduce el número de multiplexores del mercado que se puedan utilizar, pero sigue habiendo un amplio abanico a elegir. Grupo de alternativas 3: Topología de medición de intensidades Como ya se ha comentado anteriormente en el apartado de descripción de requerimientos es necesario medir la intensidad que circula por la batería, tanto en carga como en descarga. Esta intensidad es de corriente continua ya que se mide directamente en el borne positivo de la batería. Se podría medir también la corriente alterna circulada en los bornes del motor, pero resultaría útil ya que no se estarían midiendo las pérdidas que hay aguas arriba. Existen diferentes maneras de medir la corriente continua: Resistencia shunt: Consiste en colocar una resistencia en serie a la salida de la batería y medir la caída de voltaje en la resistencia. Conocido el valor de la resistencia y la caída de voltaje del mismo (se mediría mediante el microcontrolador) se puede calcular la intensidad que circula por él mediante la ley de Ohm. Es una forma muy sencilla de medir la intensidad, pero conlleva las siguientes desventajas: Se trata de un método de medición invasivo no aislado ya que se actúa directamente sobre el cable de alimentación de la batería provocando
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 23 una caída de voltaje en la salida y, lo peor de todo, a intensidades tan altas resulta completamente ineficiente por la potencia que disiparía en forma de calor (las pérdidas de calor van en relación de al cuadrado respecto a la intensidad que circula por la resistencia). Efecto Hall: Este tipo de sensores son sensibles a las variaciones del campo magnético que lo atraviesa, generando un voltaje en su salida equivalente a la influencia magnética que lo circula [6]. Son capaces de medir corrientes DC y AC de una forma lineal, precisa y sin bajo consumo. No son invasivos y están completamente aislados del circuito principal. El método a utilizar es el de efecto Hall por su sencillez, robustez y eficiencia. Son capaces de medir corrientes en ambas direcciones, con lo que teniendo un único sensor se podrán medir las intensidades tanto en carga como en descarga de la batería. Habrá que tener esto en cuenta a la hora de leer el voltaje proporcionado por el sensor para leerlo en el microcontrolador. Grupo de alternativas 4: Tecnología de medición de temperaturas Por normativa de la competición se deben colocar, al menos, 4 sensores de temperatura en la batería con el fin de garantizar su seguridad [7]. Adicionalmente, aunque no sea obligatorio, es recomendable monitorizar la temperatura del propio BMS para asegurar que este tampoco sobrepase su límite de temperatura. El tipo de sensor de temperatura a utilizar no está restringido por la competición, con lo que queda a elección libre. Por lo tanto, se pueden utilizar los siguientes tipos de sensores de temperatura [8]: Termopar: Están compuestos por dos hilos metálicos de diferente tipo unidos en uno de los extremos. El efecto de la temperatura hace que se cree una diferencia de tensión en el otro extremo y esta tensión es leída para obtener la temperatura. Son los más utilizados al ser económicos, de sencilla instalación y precisos en un amplio rango de medición. Sin embargo, tienen una respuesta lenta en comparación a otros tipos y necesitan una entrada analógica y una etapa de amplificación por cada sensor a instalar ya que la tensión que pueden ser capaces de generar es del orden de milivoltios. Termistor: Este tipo de sensor contiene un material semiconductor en la que varía su resistencia en función de la temperatura a la que esté sometida. Existen dos tipos de termistores: Los NTC, que disminuyen su resistencia al aumentar la temperatura
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 24 y los PTC que aumentan su resistencia junto con la temperatura. Al igual que con los termopares necesitan una entrada analógica por cada sensor termistor a utilizar. Dallas: Este tipo de sensores de temperatura están compuestos por 3 cables: Dos para alimentación y uno de datos. Este último es un bus de datos que, mediante el uso de un protocolo de comunicación específico, está unido a cada uno de los sensores tipo Dallas que se utilicen. Permiten realizar la medición de hasta 2^48 sensores mediante un único cable, esto es, un número prácticamente ilimitado de dispositivos. Son sencillos de leer en un microcontrolador con una única entrada digital, baratos y además provocan un uso menor de cables al compartir el bus de datos [9]. El sensor a utilizar para las mediciones de temperatura tanto en la batería como en el BMS es el de tipo Dallas, principalmente por el ahorro de cableado en la motocicleta. Adicionalmente habrá un termistor dentro del motor eléctrico ya que es el que viene preinstalado internamente. Por lo tanto, habrá que añadir también la posibilidad de medir este tipo de sensores. Grupo de alternativas 5: Protocolos de comunicación En la mayoría de microcontroladores del mercado se incluye la posibilidad de utilizar los siguientes dos protocolos maestro-esclavo: SPI e I2C. Las diferencias son las siguientes El protocolo SPI es síncrono, Full Duplex y necesita 4 cables para realizar la comunicación. El maestro decide con qué esclavo comunicarse a través de uno de los 4 cables que utiliza. Por cada pulso de la señal de reloj se puede enviar un bit del maestro al esclavo y viceversa. Se pueden mandar secuencias de bit de cualquier tamaño y a velocidades de transmisión de hasta 8MHz. Las desventajas son que necesita hasta 4 cables, funciona para cortas distancias, no tiene mecanismo de control y detección de errores y la longitud de mensajes debe conocerse tanto por los esclavos como por los maestros [10]. El I2C es un protocolo síncrono que solamente necesita 2 cables para realizar la comunicación. Uno para la señal de reloj y otro para el envío de datos. Cada dispositivo tiene una dirección y el maestro accede a los esclavos escribiendo en el propio bus la dirección del esclavo del que quiere obtener datos. Es posible disponer más de un maestro, pero aumenta la complejidad de la comunicación y tampoco es necesario en este proyecto. A diferencia del SPI contiene un bit de validación en la comunicación dándole un grado mayor de fiabilidad. Además, tiene una velocidad de comunicación mucho mayor, de hasta 400MHz [11].
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 31 Diseño del esquema eléctrico del maestro Al igual que con el esclavo se diseña el esquema eléctrico del maestro. Diseño del circuito impreso del maestro Se diseña el PCB para poder dar por terminada la parte de diseño de ambas placas. Periodo de envío de los circuitos impresos Tras haber terminado de diseñar el circuito completo se encarga a un fabricante de circuitos impresos para que envíe el prototipo a la universidad. Es una fase en la que habrá que esperar a que la placa llegue y el tiempo depende de los fabricantes contratados. Diseño del software del esclavo y maestro Se diseña el programa necesario para controlar ambas placas. Para ello se utilizará el software proporcionado por arduino, el Arduino IDE. Desarrollo del software de monitorización y análisis Para mostrar los valores en el ordenador se diseñará utilizando el lenguaje de programación Processing. El fin es crear un programa que permita extraer los datos del BMS y graficarlos con el fin de analizar el funcionamiento de la motocicleta en la carrera. Búsqueda de los materiales y componentes Se buscan los componentes electrónicos, materiales y sensores necesarios en distintos proveedores para realizar todo el ensamblaje y pruebas. La búsqueda deberá hacerse una vez terminado el diseño por completo, para así evitar buscar componentes innecesariamente si se dieran cambios en el diseño. No obstante, esto no quiere decir que no se vaya a buscar ninguna información mientras se diseña la placa sino todo lo contrario, ya que la elección del componente es un punto crucial en el diseño de la placa. Esta fase trata de encontrar el precio más económico para encargar todo el material. Periodo de envío del material En esta fase toca esperar a que los componentes lleguen al taller. Al igual que con el encargo del circuito impreso, la duración de esta fase depende de la velocidad de los distribuidores. Ensamblaje de las placas Obtenidas las placas electrónicas y todos los componentes se procede a ensamblar el conjunto.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 32 Pruebas funcionales Una vez ensambladas las placas se comienza a hacer pruebas de cada función específica, tanto del esclavo como del maestro. Se probará a medir el voltaje, intensidad y temperatura de las celdas, así como la comunicación entre esclavo-maestro y el ordenador. Todas estas pruebas se harán por separado con el fin de facilitar la detección de errores en alguna de las etapas. Ni siquiera hará falta que los voltajes intensidades y temperaturas provengan de la batería que se vaya a usar en la motocicleta, ya que el fin de esta fase es comprobar el funcionamiento del diseño electrónico. La prueba definitiva en el entorno real es la siguiente fase. Pruebas reales del BMS Tras haber comprobado que todos los componentes funcionan y que la placa mide las variables como debería se montará definitivamente el BMS en la motocicleta. Se hará funcionar la motocicleta ya sea en un banco de potencia o en un circuito real. De esta forma se podrá dar por válido el principal objetivo del proyecto. Redacción del trabajo Esta fase se irá trabajando a lo largo de todo el curso, a medida que el proyecto vaya avanzando. Se anotará las cosas más importantes del trabajo que se vaya realizando para una mejor redacción final del trabajo. Hitos El cumplimiento de estos hitos es fundamental para poder llevar a cabo el proyecto a tiempo. Los hitos marcados son los siguientes: Elección del trabajo de fin de máster Es el primer hito y el más importante. Simboliza que para esa fecha el tema del trabajo de fin de máster ya habrá sido escogido y que se comienza a trabajarlo. Elección de la solución Es el momento en que tras profundizar en los conceptos teóricos se ha escogido entre cada una de las alternativas estudiadas. Llegado a este punto se empieza a diseñar tanto el esquema eléctrico como el Software. Se da comienzo a la parte práctica del proyecto.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 33 Encargo circuitos impresos Es el hito que marca que tanto la placa esclava como maestra ya ha sido diseñada y puede encargarse a una empresa para su fabricación. El trabajo que sigue a continuación será buscar los componentes eléctricos, pruebas funcionales, puesta en marcha en la motocicleta, etc. Compra de material y componentes electrónicos Se hace la compra para conseguir los componentes electrónicos, sensores y demás cosas necesarias. Todo el trabajo que queda después de este hito es mano pura mano de obra. Entrega del trabajo Es el último hito que marca que el trabajo ha sido terminado cumpliendo cada una de las fases planificadas. Significa que el proyecto ha sido redactado completamente y está listo para ser entregado. Equipo y recursos utilizados El equipo a utilizar para el diseño, programación y redacción del trabajo es el portátil personal y un ordenador ya disponible en el taller. Para el ensamblaje de las placas se utilizará un soldador, horno, estaño, pinzas y una lupa ya disponible en el taller también. Se van a utilizar 4 softwares distintos: Arduino IDE para la programación del Arduino, Processing para la programación del software de análisis y monitorización, Autodesk Eagle para el diseño de los PCB y el MS Project para la planificación y el Gantt. Arduino IDE y Processing son gratuitos, mientras que Autodesk Eagle y MS Project no. Sin embargo, MS Project está a disponibilidad de los alumnos en los ordenadores de la escuela de forma gratuita y Autodesk proporciona licencias gratuitas a estudiantes para sus softwares, entre ellos Autodesk Eagle. El equipo necesario para realizar el ensamblaje de la placa esta disponible en el taller de la universidad y es el siguiente: Soldador de estaño. Bomba de calor. Pasta de soldar. Pinzas para colocar los componentes. Horno para la soldadura SMD. Lupa.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 34 Para las pruebas de puesta punto: Multímetro. Osciloscopio. Los recursos humanos a destinar al trabajo son los del propio autor del proyecto. La medida de la misma se va a realizar haciendo una equivalencia del valor del trabajo de fin de máster. Como este trabajo equivale a 24 créditos ECTS en el máster y cada crédito equivale a 25h, el tiempo dedicado a este será de 600h a lo largo de todas las tareas. DIAGRAMA DE GANTT Una vez explicadas todas las tareas a realizar e hitos a alcanzar se representan en un Gantt para tener una visión más gráfica de toda la planificación del trabajo: Ilustración 13. Diagrama de Gantt DISEÑO DE PLACA ESCLAVA En el presente apartado se aborda todo lo correspondiente al diseño esquemático de cada una de las partes del esclavo. La explicación se divide por bloques funcionales: Diseño esquemático: Arduino Nano El uso de pines digitales y analógicos es el siguiente: Entradas digitales:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 35 o D8: Medición de temperaturas con sensor Dallas. Salidas digitales: o D3 y D4: Control de multiplexores para medición de voltajes. o D5 a D7: Control de balanceo. Entradas analógicas: o A3: Sensor de intensidad o A6 y A7: Medición de voltajes de las celdas. Comunicaciones: o D0 y D1: Comunicaciones serie. Tienen que ser estos dos pines ya que van internamente conectados en el arduino al conector micro USB. o D2, D10, D11, D12, D13: Comunicaciones SPI para la micro SD. Son los pines que la placa tiene reservados para tal fin. o A4 y A5: Comunicaciones I2C. Al igual que con el SPI, estos dos pines son los habilitados para realizar las comunicaciones I2C. Ilustración 14. Arduino Nano en el esclavo Como se puede observar hay pines que van a quedar inutilizados. Los que no se utilizan podrían haber sido escogidos para realizar alguna de las funciones que se realiza en otro
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 36 pin. Sin embargo, se ha decidido esta disposición de pines ya que era la que permitía un ruteado más sencillo a la hora de diseñar el PCB. Cada uno de los pines y sus funciones se detallan en los próximos apartados: Diseño esquemático: Balanceo El método de balanceo a utilizar es el de resistencia conmutada. Como ya se ha explicado anteriormente se necesita controlar la conmutación de una resistencia en serie por cada celda a monitorizar. Estas conmutaciones se pueden realizar con un mosfet o transistor. Se ha optado por utilizar mosfet ya que tienen mejor capacidad de conducción de corriente que los transistores, siendo así mejor opción para el balanceo. Serán necesarias tantas señales digitales como mosfets, esto es, 8. El arduino tiene más de 8 salidas digitales, en concreto 13. Sin embargo, se necesitan más de 5 pines para el resto de funciones que debe cumplir la placa. Por lo tanto, al no tener el número de salidas necesarias se recurre a la opción de utilizar un shift register o registro de desplazamientos. Los shift register pertenecen a una familia de chips que aceptan una entrada de bits en serie y los sacan en 8 pines paralelos. Son utilizados para ampliar el número de salidas digitales que se dispone [12]. Funciona mediante la comunicación serie síncrona. Es decir que usa un pin para enviar los bits en serie (el Data pin) y un segundo pin (el Clock pin) para indicar cuando hay que leer el bit. Cuando los 8 bits se han leído en el registro un tercer pin (Latch pin) escribe estos bits en los pines de salida del chip y los mantiene hasta que se reciban nuevos datos. Se necesita un shift register con las siguientes características: Voltaje de funcionamiento 5V, 8 salidas digitales y capacidad de conducir una corriente de al menos 10mA por cada salida digital para que el balanceo funcione correctamente. Un shift register típico con estas características y coste económico es el SN74HC595D [13].
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 37 Ilustración 15. Shift register Los pines numerados desde “BALANCEO1” hasta “BALANCEO8” son las salidas digitales del shift register. El resto son pines de alimentación y de control ya comentados. El pin 10 debe conectarse a 5V también para activar el funcionamiento del shift register. Cada una de estas salidas digitales no se puede conectar directamente al mosfet correspondiente. Al igual que con la medición de voltajes de las celdas no se puede hacer una conexión directa, ya que los 5V de la salida digital están referenciados a la referencia del arduino y no a la de cada celda. En consecuencia, se va a utilizar el siguiente esquema [14]:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 38 Ilustración 16. Circuito de balanceo Cuando el voltaje en la salida digital “BALANCEOX” (representa a cada una de las salidas del multiplexor) es nulo el optoacoplador no conduce. En consecuencia, tampoco circula corriente en el lado izquierdo del circuito y tanto el led como el mosfet están en corte. Cuando el voltaje de la salida digital es 5V el optoacoplador conduce una corriente que activa al led D1 y genera un voltaje suficiente para que el mosfet de canal P entre en saturación. Al estar este en saturación la caída de voltaje en el mismo será prácticamente nula y casi toda la potencia de balanceo la disipará la resistencia R3. El led D1 sirve para que indique cuando la celda está balanceándose y, según su datasheet, una corriente de 7mA será suficiente para iluminarlo [15]. Gracias a la resistencia R1 las corrientes parásitas de Q1 conseguirán retornar cuando el transistor del optoacoplador esté en corte. También aumenta la fiabilidad del sistema ya que permite seguir funcionando el balanceo aun dándose el caso de que el led se estropeara. Se escoge un valor de resistencia alto para poder cumplir su función, pero no excederse en el consumo de corriente (560 kΩ, por ejemplo). Partiendo de los siguientes datos se realizan los siguientes cálculos: 𝐼=7 𝑚𝐴 (𝑑𝑎𝑡𝑎𝑠ℎ𝑒𝑒𝑡) 𝑉=1.25 𝑉 (𝑑𝑎𝑡𝑎𝑠ℎ𝑒𝑒𝑡)
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 39 𝑉= 𝑉 → 𝐼= = . .=2.23𝑥10 𝑚𝐴 ≈0 mA 𝐼= 𝐼+ 𝐼 =7 𝑚𝐴 →𝑅2= 𝑉 𝐼= 4.2−1.9 0.007 =330 Ω El valor de R2 se ha calculado suponiendo un voltaje de 4.2V en la celda ya que es el momento en el que causará una mayor circulación de corriente. También se ha calculado la intensidad que circulará por el opto y será de 7mA aproximadamente. El optoacoplador a utilizar es el “TLP293-4(GB-TP,E)” por disponer de 4 canales en un encapsulado compacto, buena calidad precio y un “current transfer ratio” mínimo de 100% [16], lo que garantiza que si se hacen circular 7 mA por el lado derecho del optoacoplador se obtendrán al menos los 7 mA necesarios en el lado izquierdo (según el esquema mostrado). Para garantizar esa corriente de 7mA se ha colocado una resistencia R4. La caída de voltaje en el optoacoplador es de 1.25 V para una corriente de 7 mA según el datasheet. Por lo tanto: 𝑉=5 𝑉= 𝑉+ 𝑉 → 𝑉=5 − 1.25= 3.75 𝑉 𝑅4= = . . = 535 Ω Solamente queda por calcular R3. La caída de tensión en esta resistencia será como máximo 4.2 V simplificando que el mosfet tiene una caída de voltaje prácticamente nula. Además, se ha establecido como requisito una potencia de disipación de calor máxima de 2W. Por lo tanto: 𝑃= 𝑉𝑥𝐼 → 𝐼= 𝑃 𝑉= 2 4.2=0.476 𝐴 𝑅3= 𝑉 𝐼= 4.2 0.476= 8.82 Ω Buscando distintas resistencias que sean capaces de disipar esa potencia entre los distintos tamaños y valores se ha llegado a la conclusión de utilizar una resistencia de valor 15 Ω con una capacidad de disipación de hasta 5W. Es de encapsulado tipo radial. Por lo tanto, la potencia a disipar e intensidad de balanceo serán: 𝑉= 𝑅𝑥𝐼 → 𝐼= 𝑉 𝑅= 4.2 15=0.28 𝐴 𝑃= 𝑉 𝑅= 4.2 15= 1.176 𝑊 El mosfet debe ser de canal P para funcionar en la configuración del esquema. Además, deberá ser capaz de soportar 0.28 A de corriente por el mismo, con lo que interesa que tenga
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 40 una resistencia de conducción lo más baja posible. También deberá necesitar un voltaje bajo para entrar en saturación ya que el voltaje de la celda oscilará entre 2.5 y 4.2V. Un modelo adecuado que reúne estas características es el FDN304P. Como aclaración cabe comentar que el circuito de la anterior figura sirve solamente para el balanceo de cada celda. Como en cada placa esclava habrá posibilidad de balancear hasta 8 celdas simultáneamente, este circuito estará repetido 8 veces en cada placa. Diseño esquemático: Medición de voltajes Como ya se ha explicado en el análisis de alternativas se ha optado por multiplexar los voltajes de las celdas para reducir el número de entradas analógicas y etapas de acondicionamiento necesarias. Como se tienen que medir hasta 8 voltajes y, teniendo en cuenta que el arduino Nano dispone de 6 entradas analógicas (ya que 2 se utilizan para las comunicaciones I2C porque comparten pin), surgen las siguientes posibilidades: Multiplexar las 8 señales hasta 4 y utilizar 4 etapas de acondicionamiento con 4 entradas analógicas. Multiplexar las 8 señales hasta 2 y utilizar 2 etapas de acondicionamiento con 2 entradas analógicas. Multiplexar las 8 señales hasta 1 y utilizar 1 única etapa con una sola entrada analógica. Como las 3 soluciones son factibles a nivel electrónico se ha tomado la decisión en función del coste económico y espacio necesario en la placa para cada opción. Tras una búsqueda en el mercado para las distintas posibilidades se ha visto que aproximadamente los componentes de la etapa de acondicionamiento cuestan el doble que cada multiplexor. Por lo tanto, la primera opción ha sido descartada por su coste y necesitar algo más de espacio. Entre la segunda y la tercera opción se ha decidido escoger la segunda ya que ambas tenían un coste similar, pero la segunda opción ha resultado más sencilla para optimizar el tamaño del PCB. Para escoger el modelo del multiplexor se debe tener en cuenta principalmente los siguientes dos factores: El voltaje que son capaces de soportar ya que el voltaje de las celdas se suma. El número de canales que tiene. Existen multiplexores que multiplexan 8 señales en 1 en un solo encapsulado. También hay modelos con el mismo encapsulado que el
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 47 Ilustración 24. Esquema del módulo Micro SD Diseño esquemático: Pantalla OLED El módulo OLED a utilizar será una pantalla de 0.96” típica utilizada en proyectos de arduino, dado su bajo coste, consumo y facilidad de uso. Existen principalmente dos tipos de módulos: Con comunicaciones SPI y con I2C. Se ha escogido el de I2C por reducir el número de pines y por simplicidad a la hora de programarlo. La alimentación es a 5V y su conexión y apariencia es la siguiente:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 48 Ilustración 25. Pantalla OLED Diseño esquemático: Alimentaciones Surge la necesidad de alimentar los componentes de la placa a 2 voltajes diferentes. Por un lado está el AD628ARZ de la etapa de acondicionamiento que necesita alrededor de ±12𝑉, mientras que el resto de componentes se alimentan a 5𝑉. Estas tensiones deben lograrse a partir de los 12V disponibles en la motocicleta y hay que tener en cuenta que la conversión debe hacerse aislada galvánicamente, ya que cada placa tiene su referencia. Por lo tanto, surgen dos posibilidades: Utilizar dos reguladores DC/DC aislados para obtener los ±12𝑉 y 5𝑉 a partir de los 12V de entrada. Utilizar un regulador DC/DC aislado para obtener 5𝑉 a partir de los 12𝑉 de entrada y otro regulador no aislado para obtener los ±12𝑉 a partir de los 5𝑉. Para ambos casos se necesitan dos reguladores, a diferencia de que en el segundo caso solo hace falta que uno de los reguladores sea aislado. Esto ofrece una ventaja económica ya que los reguladores aislados tienden a ser más caros. Electrónicamente hablando apenas hay una ventaja de una frente a la otra, con lo que se opta por la segunda opción. Una vez conocido el tipo de regulador necesario hace falta estimar el consumo de corriente para elegir de la forma más eficiente los componentes. Para ello se van a enumerar todos los componentes que consuman corriente de cada regulador y se estimará su consumo a partir del datasheet correspondiente: La fuente de alimentación de ±12𝑉 necesita alimentar a: o Amplificador diferencial AD628ARZ: 1.6𝑚𝐴 de consumo por cada amplificador. Como se utilizan 2 el consumo total asciende a 3.2𝑚𝐴.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 49 Siendo el consumo tan pequeño en los ±12𝑉 se ha decidido utilizar el conversor MAX680CSA+. Es capaz de suministras hasta 10𝑚𝐴, con lo que tiene capacidad de sobra para su función. Acepta voltajes entre 1.5 𝑦 6𝑉, con lo que la alimentación a 5𝑉 no le supone ningún problema. El voltaje de salida es el doble al voltaje de entrada, con lo que en realidad se obtendrán ±10𝑉, aunque eso no va a suponer ningún problema a los amplificadores diferenciales que alimenta. Su conexión es la siguiente: Ilustración 26, MAX680 Es necesario colocar 4 condensadores para poder duplicar el voltaje. El valor recomendado para estos condensadores es de 4.7𝜇𝐹 según el datasheet [26], con lo que se colocarán esos mismos valores. La fuente de alimentación de 5V necesita alimentar a: o Arduino Nano: Como máximo puede llegar a consumir unos 200𝑚𝐴, aunque realmente en este proyecto no se vaya a llegar a dichos valores puesto que no se utilizan todos los pines. A este valor se le está sumando el consumo del módulo micro SD. o Pin Enable de los multiplexores: 0.15𝜇𝐴, prácticamente despreciable. o Aislador digital: 7.6𝑚𝐴 de consumo máximo. o Registro de desplazamiento de la etapa del balanceo: Se va a consumir aproximadamente 7𝑚𝐴 por cada salida que se active. Suponiendo que se activan todas las salidas a la vez supondría un consumo de 56𝑚𝐴. o Sensores de temperatura Dallas: Aproximadamente unos 5𝑚𝐴 por cada sensor conectado. Suponiendo que se conectan 4 sensores por placa, algo muy cercano a la realidad, supondría un consumo de 20𝑚𝐴. o Pantalla OLED: 16mA según su datasheet.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 50 o Conversor DC/DC de 5𝑉 a ±12𝑉: Para el consumo que tendrá el datasheet estima que la eficiencia del conversor ronda el 90%. Esto supone el siguiente consumo a 5𝑉: 𝑃=𝑉∗ 𝐼=10 ∗ 0.0032=0.032 𝑊 𝑃=𝑃 𝜂= 0.032 0.9 =0.0355 𝑊 𝐼= 𝑃 𝑉= 0.0355 5=0.007𝐴=7𝑚𝐴 Sumando todos los consumos máximos se llega a un valor de 306.6𝑚𝐴. En la realidad probablemente tenga un valor menor, pero siempre hay que considerar el peor caso para evitar sobrecargas. Tras una búsqueda entre diferentes fabricantes se opta por el conversor TMH 1205S de Traco Power. Ofrece un tamaño compacto para ser un conversor aislado, además de a un bajo precio y con una capacidad de suministro de hasta 400𝑚𝐴. Se ha conectado de la siguiente forma: Ilustración 27. Alimentación de la placa esclava Se han introducido condensadores y una inductancia para reducir el ruido que pueda haber del entorno. También se ha colocado un fusible de 0.5A como medida de protección. La alimentación a la placa se introduce mediante el uso del conector 43650-0400 de Molex. Diseño del PCB Para el diseño del circuito impreso se ha utilizado el mismo programa que para el esquema eléctrico, el Autodesk Eagle. Una vez terminado el esquema hay que importar todos los componentes a un nuevo archivo que contendrá el PCB. Cuando se importa el esquema completo aparece lo siguiente:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 51 Ilustración 28. Diseño del PCB esclavo Las líneas amarillas simbolizan todas las conexiones que hay entre dichos componentes. El siguiente paso es colocar todos los componentes en el sitio que más les convenga. Para ello se siguen los siguientes criterios: Todos los componentes se colocarán en la misma cara para facilitar el ensamblaje de los mismos. Esto se debe a que todos los componentes, salvo los Through Hole, serán soldados a la vez en un horno. Este proceso se explica en detalle en el apartado “Ensamblaje”. El resto de componentes pertenecientes a la misma referencia se van a colocar lo más cerca posible para reducir el tamaño del PCB y ordenados de tal forma que faciliten las conexiones. Para tal fin se agrupan los componentes en función del papel que desempeñan en la placa: Conectores, alimentación, comunicaciones, balanceo, medida de celdas, sensores de temperatura y Arduino. No se necesita un ancho de pista excesivo ya que la mayor corriente no será de más de 400mA. El criterio a seguir será colocar un grosor de pista que permita circular la corriente sin que apenas se caliente la placa. Contrastando en diferentes bibliografías y experiencia personal se concluye que un ancho de pista de 0.5mm es suficiente para corrientes de hasta 2A. Por lo tanto, si se cumple esta anchura quedará descartado el sobrecalentamiento de la placa. Las resistencias que disipan la energía del balanceo se colocan ordenados en una fila por si se diera la necesidad de instalar un disipador de calor. De esta forma colocando un único disipador rectangular se puede refrigerar todas las resistencias. Adicionalmente se colocan dos agujeros en los extremos izquierdo y derecho para
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 52 facilitar el amarre del disipador. En caso de que fuera necesario se podría aprovechar los agujeros para colocar un ventilador. Se colocan al menos tres agujeros más para facilitar el amarre entre las placas o a la propia motocicleta. La organización de MotoStudent indica en el reglamento la siguiente norma a cumplir: “En el caso de que ciertos componentes pertenecientes al HVS y GLVS se instalen en una misma placa base, se colocarán en zonas claramente diferenciadas y marcadas a tal efecto sobre la placa. La separación entre ambas será de al menos, 6,4 mm sobre superficie, 3,2 mm a través del aire y de 2 mm si están bajo recubrimiento (estas distancias pueden no respetarse para el caso de optoacopladores cuya tensión nominal sea igual o mayor que la tensión del HVS) “. Puesto que no se va a utilizar ningún tipo de recubrimiento habrá que respetar las distancias de 6.4 y 3.2mm. Se prestará especial atención a la hora de colocar los dos conectores que introducen las comunicaciones I2C y alimentación y el aislador digital de las comunicaciones, ya que son los únicos componentes que van referenciados a otra masa. Para aumentar la seguridad ante arcos eléctricos se va a realizar un corte en la placa en las zonas que separan elementos de distintas referencias. De esta forma se aumenta la distancia de separación de componentes sobre superficie sin haberlos alejados entre ellos. Teniendo en cuenta lo anteriormente comentado el resultado es el siguiente: Ilustración 29. PCB esclavo
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 53 Se ha logrado colocar un gran número de componentes, elementos que consumen potencia y distintas referencias que obligan a aumentar la separación de los componentes en un tamaño reducido. El PCB se resume en unas dimensiones finales de 85𝑥94𝑚𝑚. A continuación se enumera cada uno de los bloques funcionales de la placa y se muestra en qué parte están colocados: 1. Conexión de las celdas a la placa. 2. Alimentación de la placa esclava. 3. Etapa de balanceo. 4. Comunicaciones I2C. 5. Medición de voltaje de las celdas. 6. Etapa de multiplexación del balanceo. 7. Alimentación de ±12V. 8. Almacenamiento en micro SD. 9. Sensores Dallas. 10. Pantalla OLED. 11. Sensor de intensidad. 12. Arduino Nano. Ilustración 30. Bloques funcionales del esclavo
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 54 DISEÑO DE PLACA MAESTRA Diseño esquemático: Arduino Nano El uso de pines digitales y analógicos es el siguiente: Entradas digitales: o D6 hasta D8: Supervisión de apertura y cierre de hasta 3 contactores. o A0: Supervisión del IMD. En realidad es una entrada analógica, pero se puede usar como entrada digital. Salidas digitales: o A1 hasta A3: Apertura y cierre de contactores. Las entradas analógicas también se pueden utilizar como salidas digitales. Entradas analógicas: o A6 y A7: Medición de termistores. Comunicaciones: o D0 y D1: Comunicaciones serie. No hay nada conectado ya que va internamente en el arduino al conector micro USB. o D3 hasta D5: Comunicaciones bluetooth. o D2, D10, D11, D12, D13: Comunicaciones SPI para la micro SD y el CAN. o A4 y A5: Comunicaciones I2C.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 55 Ilustración 31. Arduino Nano en el maestro Al igual que con la placa esclava, cada uno de los pines que se ha utilizado o dejado de utilizar se han elegido con el fin de facilitar el ruteado a la hora de diseñar el PCB. Diseño esquemático: Control de contactores El control de contactores se puede realizar de dos formas: Con o sin circuito de precarga. Los circuitos de precarga se utilizan como elemento de seguridad en contactores que alimentan cargas capacitivas a un alto voltaje. La carga capacitiva requeriría un pico de intensidad tan alto al cerrar el contactor que podría dañar el contactor. A fin de evitar este fenómeno no deseado, el circuito de precarga adecúa el voltaje de ambos terminales del contactor para que sea por debajo de un rango seguro. Existen diferentes topologías para precargar un contactor, pero no hace falta detallarlo en este proyecto, simplemente saber que se debe añadir la posibilidad de utilizarlos. Se va a explicar primero el circuito del control de contactor sin precarga y posteriormente con precarga para finalmente mostrar cómo se ha implementado.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 56 Control de contactor sin precarga “CONTACTOR-1” es la salida digital del arduino que controla el contactor. Como los contactores pueden llegar a consumir más intensidad que la que el arduino puede dar por pin y el voltaje necesario es de 12V en lugar de 5V se debe diseñar un esquema que cumpla las necesidades. Ese esquema es el siguiente: Ilustración 32. Circuito del contactor [20] El control del contactor se realiza a través del transistor NPN “T1”. Este cierra el circuito alimentando a 12V directamente el contactor ya que pone a masa el terminal del contactor que no está a los 12V. De esta forma se soluciona el problema de alimentar el contactor a una tensión diferente a los 5V del arduino. Los 12V se suministran directamente de la alimentación de la placa maestra. El valor de R11 se ha calculado para garantizar que el transistor deja pasar la suficiente corriente como para alimentar el relé. Se ha supuesto que el contactor que se va a conectar consumirá como mucho 100mA a 12V. Por lo tanto, el valor de R11 será: 𝑉""= 𝑉+𝑉 (1) 𝑉=𝑅11𝑥𝐼 𝐼= 𝐼= 𝐼 ℎ → 𝑉 =𝑅11𝑥𝐼 ℎ (2) 𝑉= 0.6 𝑉 (3)
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 63 CAN Las comunicaciones CAN entre el arduino y otros dispositivos se realizan mediante los controladores MCP2515 y MCP2551 [22]. Ambos chips realizan la conversión del protocolo CAN a SPI para que el arduino pueda comunicarse. El esquema de conexiones es el siguiente: Ilustración 38. Esquema del MCP2515D Para el correcto funcionamiento del protocolo CAN es necesario añadir un oscilador de 16MHz junto con dos condensadores de 22pF. Esta parte se encarga de generar la señal de reloj necesaria en el módulo. Las conexiones CS, SCK, MOSI y MISO son las necesarias para las comunicaciones SPI con el arduino. El MCP2515D traduce las comunicaciones SPI a dos únicas señales, TXCAN y RXCAN y las envía directamente al MCP2551:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 64 Ilustración 39. Esquema del MCP2551 El MCP2551 es el transmisor encargado de cumplir los requisitos de la capa física del protocolo CAN. CANH y CANL son las señales ya en el protocolo CAN que irán de un dispositivo a otro. Ilustración 40. Resto de esquema del CAN La resistencia R10 de 120Ω es la resistencia terminal de las comunicaciones. Sirve para facilitar la tarea de averiguar averías y se coloca al lado de CANH y CANL [23].
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 65 Adicionalmente se han colocado 3 leds como indicadores de lo que está ocurriendo en las comunicaciones. Bluetooth Por simplicidad a la hora de realizar las soldaduras y conocimientos por haber realizado comunicaciones bluetooth en otros proyectos se va a utilizar un módulo HC-05. Tiene la siguiente apariencia: Ilustración 41. Módulo bluetooth HC-05 El módulo bluetooth se encarga de realizar el enlace entre el bluetooth y el protocolo UART TTL del arduino. Se alimenta a 5V y el pin “ENABLE” se conecta con el arduino para posibilitar la configuración del bluetooth mediante comandos AT. El pin “STATE” no es necesario conectarlo. Diseño esquemático: Módulo Micro SD El módulo micro SD es exactamente idéntico al de la placa esclava, con lo que no hace falta detallarlo en el presente apartado. Diseño esquemático: Pantalla OLED La pantalla OLED es exactamente idéntica al de la placa esclava, con lo que no hace falta detallarlo en el presente apartado. Diseño esquemático: Alimentaciones La alimentación de la placa maestra proviene de 12V de corriente continua de la motocicleta. Como el maestro estará referenciado a la misma masa que estos 12V la
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 66 conversión no debe ser aislada. Esos 12V deben adaptarse a 5V y el consumo que habrá es el siguiente: Arduino Nano: Como mucho 200mA según el fabricante para todas sus funcionalidades. En este consumo se ha incluido el módulo de la micro SD y el del CAN. Pantalla OLED: 16mA según su datasheet. Bluetooth: 50mA según su datasheet. En total suman 266mA de máximo consumo a 5V. Se va a utilizar la fuente TSR1-2450, que tiene una capacidad de hasta 1A. Suponiendo una eficiencia de 92% supondría un consumo a 12V de: 0.92= 𝑃 𝑃= 5𝑉𝑥𝐼 12𝑉𝑥𝐼 → 𝐼=5𝑥266 0.92𝑥12= 120.47𝑚𝐴 Cada uno de los circuitos de supervisión de contactores tiene una fuente de alimentación aislada para suplir los 10𝑚𝐴 que se estima que consumirán. Se ha escogido SPU01M-12 con una capacidad de 84mA. Es más que de sobra, pero se ha escogido por ser la opción más económica que se ha encontrado en el momento. Según su datasheet tiene una eficiencia aproximada de 84%, lo que supondría en total un consumo de 11.90mA por circuito de supervisión. Cada uno de los contactores puede llegar a consumir hasta 100mA y, como pueden conectarse 3, el consumo total puede llegar a 300mA. Si se le suman los 3 circuitos de supervisión y la parte que alimenta a la fuente no aislada de 5V el consumo total llega a: 𝐼 = 𝐼 +𝐼ó+𝐼=120.47+3𝑥11.9+300 =456.17𝑚𝐴 Este consumo habrá que tenerlo en cuenta a la hora de escoger la fuente de alimentación de 12V que alimentará a todo el BMS. Diseño del PCB Para el diseño de la placa maestra se han seguido los mismos criterios de ancho de pista y separación de referencias de la placa esclava. Las dimensiones finales son 84x95mm, idénticas a la placa esclava. Se ha hecho el esfuerzo de encajar todos los componentes en el mismo pequeño de placa para aumentar la compactación de toda la electrónica. El resultado es el siguiente:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 67 Ilustración 42. Diseño de placa maestra A continuación se enumera cada uno de los bloques funcionales de la placa y se muestra en qué parte están colocados: 1. Supervisión de contactores. 2. Alimentación de la placa maestra. 3. Almacenamiento en micro SD. 4. Termistores. 5. Comunicaciones CAN. 6. Comunicaciones I2C. 7. Control de contactores. 8. Arduino Nano. 9. Pantalla OLED. 10. Supervisión del IMD. 11. Módulo Bluetooth.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 68 Ilustración 43. Bloques funcionales de placa maestra SOFTWARE DEL BMS Ambos softwares, tanto el del esclavo como el del maestro, se programarán utilizando el entorno Arduino IDE. Como ambas placas deben realizar distintas funciones y cada una de ellas con sus propias restricciones temporales se hará un estudio previo de cada una de las tareas por separado con el fin de asegurar que el software final funcionará sin problemas. Se va a programar el arduino como si se tratara de un sistema operativo de tiempo real o RTOS (Real Time Operative System). Un RTOS es cualquier actividad de procesamiento de la información que debe responder dentro de un intervalo de tiempo especificable, finito y breve. Para realizar la actividad organiza las tareas de forma concurrente, esto es, un planificador decide qué tarea se ejecuta en cada instante en base a ciertos atributos, en vez de ejecutar el código de forma secuencial. Se utilizan los sistemas RTOS en aplicaciones críticas en las que un fallo del sistema puede llevar a un accidente, catástrofe o cualquier consecuencia grave no deseable. Aunque el procesador del arduino no posea los mecanismos Hardware necesarios para funcionar como un RTOS existe una librería que mediante software ofrece las herramientas necesarias para conseguirlo. Para que el planificador de tareas gestione el procesador y las comunicaciones deben especificarse ciertos atributos a cada una de las tareas. Son los siguientes:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 69 Tipo de tarea: Periódica si se ejecuta cíclicamente o esporádica si debe cumplirse alguna condición para que la tarea se ejecute. Prioridad de la tarea: Es un atributo numérico que se le da a cada tarea. La prioridad de cada tarea ayuda al planificador de tareas a decidir que se ejecuta en cada momento. Tiempo de ejecución (C): Tiempo que necesita la tarea para ejecutarse completamente. Se habla del tiempo máximo de ejecución cuando se da el caso en el que la tarea necesita el tiempo máximo posible para ejecutarse. Una tarea puede tener diferentes tiempos de ejecución a causa de bucles no acotados, condiciones que llevan a una sección de código, etc. Periodo de activación (T): Intervalo de tiempo que debe pasar entre dos activaciones consecutivas. Como es de esperar el periodo de activación deberá ser igual o mayor al tiempo de ejecución de la tarea. Plazo de respuesta o “deadline” (D): Tiempo máximo que debe transcurrir para que una tarea se ejecute completamente desde que se ha activado. Este tiempo debe ser igual o mayor que el tiempo de ejecución. Como ya se ha especificado se debe conocer el tiempo máximo de ejecución. Existen dos formas de hacerlo: Experimentalmente midiendo el propio tiempo mediante el uso de algún algoritmo en el código o descomponiendo el código de la propia tarea línea a línea y calcularlo de forma precisa. El código a ejecutar para las tareas del BMS siempre es el mismo ya que son tareas estáticas y no dinámicas. Solo en algunas de ellas habrá bucles condicionales que varíen el tiempo de ejecución de la tarea. En esos casos se supondrá que se accede a todos los bucles condicionales y se calculará ese tiempo de ejecución. Por lo tanto, no resulta ningún inconveniente hacerlo de forma experimental ya que dará un tiempo preciso y requiere menos esfuerzo que realizar el análisis línea a línea. Para medir de forma precisa el tiempo transcurrido se toma el instante temporal absoluto antes de comenzar y al terminar la tarea. La resta de ambos tiempos da el tiempo exacto que ha necesitado para ejecutarse. Se estudia primero el software del esclavo y a continuación el del maestro. Software del esclavo El esclavo tiene 7 tareas a cumplir: Medición de voltajes, temperaturas, intensidades, balanceo, controlar la pantalla OLED, almacenamiento en micro SD y comunicaciones. A
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 70 continuación se detalla el funcionamiento de cada una de las tareas juntos con sus respectivos atributos temporales: Medición de voltajes (Tarea 1): Se encarga de leer el valor de todas las celdas conectadas a esa placa. Es la tarea que se necesita ejecutar con mayor frecuencia ya que es vital tener los voltajes de las celdas actualizados para garantizar la seguridad de las mismas. En caso de que ocurra un cortocircuito y el voltaje de una celda caiga este debe ser detectado en el mejor tiempo posible. Por lo tanto, se trata de una tarea periódica que debe cumplir un periodo de ejecución de 100ms. Se considera un tiempo de muestreo muy ajustado en comparación a otros BMS del mercado. Medición de temperaturas (Tarea 2): Esta tarea se encarga de medir la temperatura de todos los sensores Dallas conectados a la placa. La temperatura es una variable que cambia lentamente debido a los fenómenos físicos de la propia batería. En consecuencia, no se requiere medir el valor a una frecuencia tan alta y se considera adecuada un periodo de 1s para esta tarea periódica. Medición de intensidad (Tarea 3): Al igual que la medición de voltajes, esta es una tarea crítica ya que detectará sobrecargas en la batería y deberá actuar el contactor lo más rápido posible. Se establece un periodo de ejecución también de 100ms. Almacenamiento en la micro SD (Tarea 4): No es necesario guardar todos los datos muestreados ya que generaría muchísimos datos poco útiles y resultaría difícil asegurar los plazos de ejecución de las otras tareas por el tiempo que necesitaría esta para ejecutarse. Por lo tanto, se ha decidido establecer un periodo de 1s para guardar los valores instantáneos de las variables muestreadas. Pantalla OLED (Tarea 5): No requiere actualizarse cada poco tiempo ya que no hace falta tener tanta precisión a la hora de visualizar los datos en la pantalla. Esta simplemente se utilizará para ver de una forma rápida los valores instantáneos, no involucra ninguna parte vital de la placa. Periodo de 1s. Balanceo de las celdas (Tarea 6): Actúa sobre el registro de desplazamiento para así activar el balanceo de las celdas. Con el conocimiento de los voltajes de las celdas calcula cuales deben balancearse. Como la intensidad de balanceo es muy pequeña respecto a la intensidad de carga de la batería apenas se ve afectado el rendimiento del balanceo teniendo un periodo de ejecución muy corto. Por lo tanto, se considera correcto un periodo de 1s para esta tarea semiperiódica. No se considera como periódica a pesar de que no varíe su frecuencia y ejecución ya que esta tarea solo se ejecutará cuando la batería esté cargándose. Se puede catalogar como una tarea
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 71 esporádica que tiene como condición que la batería se esté cargando y que tiene una separación mínima de 1s entre dos activaciones consecutivas. Comunicaciones I2C (Tarea 7): Se encarga de escuchar al maestro y enviarle de vuelta las mediciones actualizadas (voltajes, temperaturas, intensidades y celdas que se están balanceando). No se puede considerar una tarea puramente periódica, aunque sea cíclica, ya que el inicio de la tarea depende del instante en el que el maestro establece la comunicación y esto a su vez depende del número total de placas esclavas con las que se comunica. A mayor número de placas esclavas mayor periodo de ejecución. Para el análisis se va a considerar un periodo estricto de 200ms entre dos comunicaciones consecutivas. Conocidos los requisitos temporales de cada tarea se procede a definir el método de planificación, o lo que es lo mismo, la forma en la que el planificador repartirá los recursos del procesador para ejecutar el código. En el peor de los casos el programa se puede interpretar como 7 tareas periódicas independientes. Se va a realizar una planificación con prioridades fijas y con desalojo: Una tarea que ha empezado a ejecutarse solo dejará de hacerlo si ha terminado su ejecución o porque una tarea más prioritaria quiere ejecutarse. Para la asignación de prioridades en este tipo de planificadores se sigue el criterio RMS (Rate Monotonic Scheduling) ya que es óptima para dicho planificador y se cumple el requisito para utilizarla (que cada tarea tenga plazo igual al periodo). Consiste en dar mayor prioridad a las tareas que tengan menor periodo. Por lo tanto, las asignaciones de prioridades junto con el resto de atributos se resumen en la siguiente tabla: Tarea P C (ms) T (ms) D (ms) Medición de voltajes 3 10 40 40 Medición de intensidades 3 2 40 40 Comunicaciones 2 20 80 80 Almacenamiento micro SD 1 50 1000 1000 Pantalla OLED 1 20 1000 1000 Medición de temperaturas 1 10 1000 1000
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 72 Balanceo 1 0.12 1000 1000 Tabla 3. Atributos de las tareas del esclavo La librería RTOS que se va a implementar en arduino solo permite asignar prioridades entre 1 y 3, siendo la mayor prioridad el valor de 3 y la menor el 1. Según el teorema de Liu & Layland, para el modelo simple de tareas con asignación de prioridades RMS, los plazos de ejecución están garantizados si: 𝑈= 𝐶 𝑇 ≤ 𝑁2 −1 Siendo N el número de tareas a controlar en el sistema: 𝑈= 10 40+2 40+20 80+50 1000+20 1000+10 1000+0.12 1000=0.63 𝑁=6 →𝑈=62−1=0.734 →0.63≤0.734 Como se puede observar se cumple el teorema, lo que quiere decir que queda garantizada la ejecución de las tareas por parte del procesador. A continuación se detalla cada una de las tareas: Medición de voltajes Los voltajes de las 8 celdas se miden a través de las entradas analógicas 6 y 7 del arduino. Para elegir que voltaje medir en cada una de las entradas hay que seleccionar el canal deseado en los multiplexores de la etapa de medición de voltajes. Estos multiplexores se controlan mediante 2 pines digitales, el 3 y el 4 concretamente. El diagrama funcional de los multiplexores es el siguiente: Ilustración 44. Tabla de verdad de los multiplexores Definidos los pines la tarea tiene el siguiente bloque funcional: Digital 4 Digital 3 Analógico 6 Analógico 7 LOW LOW 5 1 LOW HIGH 6 2 HIGH LOW 7 3 HIGH HIGH 8 4 Pines digitales de salida Celdas medidas en las entradas analógicas
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 79 Comunicaciones CAN 2 10 200 200 Comunicaciones I2C 2 5 50 50 Cálculo del SOC 1 2 1000 1000 Medición de termistores 1 4 1000 1000 Comunicaciones Bluetooth 1 5 1000 1000 Comunicaciones serie 1 5 1000 1000 Pantalla OLED 1 20 1000 1000 Almacenamiento micro SD 1 100 1000 1000 Tabla 4. Tareas del maestro. Se procede a realizar el cálculo del teorema de Liu & Layland de la misma manera que en el caso anterior: 𝑈= 5 50+5 50+2 50+10 200+5 50+2 1000+4 1000+5 1000+5 1000+20 1000+100 1000=0.426 𝑁=11 →𝑈=112 −1=0.715 →0.426≤0.715 Se cumple el teorema, lo que quiere decir que queda garantizada la ejecución de las tareas por parte del procesador. A continuación se describe el código de cada una de las tareas: Control de contactores El software es mucho más sencillo que el hardware para el caso del control de contactores. En caso de que se quiera abrir o cerrar el contactor bastará con cambiar el estado del pin que controla dicho contactor. No es necesario atender a la precarga ya que de eso se encarga una placa externa al BMS. Simplemente habrá que actuar sobre las salidas digitales mapeadas del A1 al A3 en función de qué contactor se quiere abrir o cerrar. Para cerrar un contactor hay que poner la salida digital a 1 y viceversa.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 80 La decisión de abrir o cerrar contactor la tomará en función de los valores en todas las variables. Si estas son correctas el contactor se cerrará. En caso contrario ordenará que el contactor permanezca abierto. Supervisión de estado de contactores La supervisión del estado de contactores es similar a la del control del mismo, a diferencia que se lee una entrada digital en vez de controlar una salida. Cada vez que se ejecuta la tarea se lee el estado de los pines entre D6 y D8 y la secuencia es la siguiente: Si el contactor está cerrado llegará un 0 a la entrada digital y viceversa. En caso de que se detecte un caso indeseado (contactor cerrado que no debería o contactor abierto que debería estar abierto) ejecutará la tarea de control de contactores para remediarlo. Supervisión IMD El estado del IMD se lee a través de la entrada digital A0. En caso de que el valor sea 1 significa que los valores medidos por el IMD son correctos, esto es, que el aislamiento entre el alto voltaje y el bajo voltaje en la motocicleta está entre los valores admitidos. Si no es así el arduino leerá un 0 en la entrada digital y el control de contactores deberá actuar. Medición de termistores Los termistores son leídos en los pines A6 y A7. Una vez medido el voltaje se debe hacer la conversión de voltios a grados centígrados. Para ello se parte del modelo de Steinhart-Hart [25]: 𝑇 (º𝐶)= 1 𝐴+𝐵∗𝑙𝑜𝑔(𝑅)+𝐶∗(log(𝑅)) Los parámetros de A, B y C generalmente vienen en el propio datasheet del termistor. En caso de que no fuera así se podría obtener experimentalmente en el taller. El valor de R es la resistencia que ofrece el termistor cuando es sometida a esa temperatura. Conocido el voltaje del termistor se puede obtener el valor de R del mismo ya que este termistor está conectado en serie con una resistencia. Para ello primero se obtiene la intensidad que circula por el termistor: 5𝑉= 𝑉 + 𝑉 → 𝑉 =5𝑉−𝑉 → 10.000∗𝐼=5𝑉−𝑉 → 𝐼= 5𝑉−𝑉 10.000
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 81 Se ha puesto un valor de 10.000Ω para la resistencia en serie ya que es la que se ha colocado en el circuito. El valor de R por lo tanto es: 𝑅∗𝐼=𝑉 →𝑅= 𝑉 5𝑉−𝑉 10.000 →𝑅 =10.000∗𝑉 5𝑉−𝑉 Como el voltaje se mide sobre una escala de 10 bits, en realidad los 5V debería ser un valor de 1025 para realizar la conversión correctamente. En conclusión: 𝑅 =10.000∗𝑉 1025−𝑉 En conclusión, para obtener la temperatura del termistor se debe obtener el valor de R mediante la fórmula anterior para posteriormente sustituirla en el modelo de SteinhartHart. Cálculo del SOC El cálculo del SOC (State Of Charge) de una batería de ion de Litio se puede realizar de diversas formas. Muchas de ellas conllevan algoritmos matemáticos complejos en los que hay que modelizar la batería a través de rigurosos ensayos. Existen algoritmos más sencillos que se obtienen a través de las curvas de funcionamiento a distintas temperaturas y descargas de la batería. El más sencillo de todos es suponer que la batería tiene una capacidad conocida y se estima su capacidad restante a través del consumo en la misma. Esto es, si la capacidad de la batería fuera de 1Ah y se consumiera 1A durante 30 minutos, la batería restante sería del 50% (suponiendo que inicialmente estaba al 100%). El resultado se obtiene de la siguiente fórmula: 𝑆𝑂𝐶= 𝑆𝑂𝐶−𝐼∗𝑡 𝐶í∗3600∗100= 𝑆𝑂𝐶−𝐼 𝐶í∗36 El resultado del SOC se obtiene en % puesto que la intensidad se mide en amperios (A), el tiempo en segundos (s) y la capacidad en amperios hora (Ah). Se divide entre 3600 para realizar la conversión entre segundos y horas y se multiplica por 100 para ponerlo en porcentaje. El tiempo se ha sustituido como 1s ya que esa intensidad será la intensidad media medida en un periodo de 1s. En caso de que el SOC llegara debajo del límite establecido se deberá abrir el contactor principal de la motocicleta.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 82 Comunicaciones I2C El maestro pedirá una cantidad de bytes específica a cada maestro en función del número de sensores que tenga conectados. Ese número es conocido y se indica en la configuración del programa, a través de una variable. Tras un breve periodo recibirá la trama des esclavo y procederá a leerla. Para ello simplemente irá leyendo byte a byte y almacenándolo en las variables que le corresponde. Es una tarea sencilla ya que el orden es conocido de antemano. Se envían los voltajes, después las intensidades y finalmente las temperaturas. Almacenamiento micro SD Es exactamente idéntica a la tarea que tiene la tarjeta esclava, a diferencia de que esta guarda los datos de todos los esclavos, mientras que los esclavos solo guardan los datos de sus propias variables. Comunicaciones serie Las comunicaciones serie van a tener 3 funcionalidades en el proyecto: Programar las placas esclavas y maestras. No es necesario programar ningún software adicional ya que la programación se realiza mediante el entorno arduino IDE. Solamente hay que conectar el arduino al ordenador por USB y subir el programa al microcontrolador. Extraer datos en directo: El maestro enviará una trama de datos delimitados por coma para analizarlos en directo en el software de monitorización y análisis. Los datos se enviarán a través de la tarea de la micro SD. Esto se debe a que la trama que se guarda en la micro SD es la misma que se envía por el puerto serie. Gasta menos recursos enviar la trama por serie tras haberla guardado en la micro SD, ya que la trama que se envía sigue guardada en una variable local y no es necesario acceder a la micro SD a leer la última trama como si se hiciera desde una tarea independiente. Extraer datos de la micro SD: Existirá esta opción adicional para poder realizar un backup de todos los datos almacenados. Esta función se hará a través de un programa independiente con el fin de simplificar el funcionamiento y concurrencia de tareas. El programa consistirá en abrir cada uno de los archivos de texto almacenados en la micro SD y enviarlos al ordenador.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 83 Comunicaciones Bluetooth El funcionamiento y programación de esta tarea es exactamente idéntico al de la comunicación serie. Hace uso de las mismas funciones y se utilizan en el mismo momento que la comunicación serie. Cumple la misma función que el puerto serie, pero de forma inalámbrica. Comunicaciones CAN El protocolo CAN es un poco más complejo de programar que la comunicación serie o bluetooth. Esto se debe a que las funciones que utiliza requieren de mayor conocimiento sobre el protocolo que en los otros casos. Para enviar una trama en CAN se hace de la siguiente forma: CAN.sendMsgBuf(id, ext, len, data_buf); o id: Es el identificador de la trama. Sirve para establecer la prioridad de la trama. o ext: Representa el tipo de trama que se va a enviar. En CAN se pueden enviar 2 tipos diferentes: El estándar y el extendido. Para enviar una trama estándar se pone un 0 en este parámetro y un 1 para la extendida. o len: Se indica la longitud de la trama de datos. Por cada trama se pueden enviar hasta 8 bytes. o data_buf: Array de hasta 8 bytes que contiene los datos que se van a enviar. Para recibir un mensaje se utiliza la siguiente función: CAN.readMsgBuf(len, buf); o len: Indica la longitud de la trama que se va a recibir. o buf: Es la variable en la que se guardarán la trama que se va a leer. Pantalla OLED El software de la pantalla del maestro es exactamente idéntico al de los esclavos, pero mostrando todos los parámetros, en vez de los de cada esclavo. La disposición de los datos es igual que en el caso del esclavo, esto es, muestra los datos recogidos de cada placa en una única pantalla. Sin embargo, como tiene que mostrar los datos de todos los esclavos, refrescará la pantalla en cada ejecución mostrando los datos de un esclavo. La motocicleta, por ejemplo, tendrá 4 placas esclavas. Por lo tanto, serán necesarias 4 ejecuciones de la tarea para mostrar todos los datos. Como la tarea se ejecuta cada 4s, ese será el tiempo necesario para visualizar todos los datos.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 84 SOFTWARE DE MONITORIZACIÓN Y ANÁLISIS DE FUNCIONAMIENTO El software de monitorización y análisis es desarrollado mediante “processing”. Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java y de fácil utilización. Se ha escogido este lenguaje por tener conocimientos previos de Java y ser una versión más “visual y sencilla” para realizar entornos gráficos. Además, ofrece una portabilidad plena a distintas plataformas. Las funciones principales del software son las siguientes: Recibir los datos del BMS en directo. Extraer los datos guardados en la memoria del BMS de un tiempo anterior. Visualizar todos esos datos ya sea en directo o a través de los datos extraídos del BMS. Para ello se usarán distintos elementos como gráficos de dos dimensiones, de barras, diales, animaciones, etc. Los distintos elementos de la interfaz para visualizar los datos que tienen en común los 3 modos de funcionamiento son: 4 gráficas: Los datos a graficar en cada una de ellas se seleccionan en las dos listas desplegables que hay en la parte superior izquierda. Para cargar el dato seleccionado en la gráfica se debe clicar en el botón que se encuentra a la derecha de las listas desplegables y que tiene un gráfico como icono. Un cuadro de texto en el que se exponen todos los datos de los distintos sensores. En el modo de conexión en directo se muestran los datos de la última trama recibida, mientras que en los otros dos modos se enseñan los datos del instante que se está visualizando en ese momento. 2 barras verticales que mostrarán los datos que se desee en la pestaña de configuración del programa. 2 diales que se configurarán de la misma forma que las 2 barras verticales. 1 mapa que indica la posición de la motocicleta en el circuito. Como la motocicleta siempre estará en un circuito solo hace falta cargar la imagen del circuito en el que va a circular y la posición de la moto en la imagen se logra interpolando las coordenadas reales de la moto con las que le correspondería en la imagen. Si se tratara de un vehículo que circulara fuera del circuito no habría más que precargar distintos mapas y realizar el mismo procedimiento.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 85 1 gráfico que muestra el voltaje de cada una de las ramas en serie de la batería. Se le ha dado un buen tamaño a la gráfica ya que muestra claramente el estado de la batería, el nivel de balaceo entre las celdas y la carga de las mismas con un solo vistazo. 1 gráfico que muestra las temperaturas de los sensores que están colocados en la batería. Son 14 sensores y la figura tiene la forma de la batería con el fin de visualizar de una forma más clara el estado térmico de las baterías. Se podrá interpretar qué zonas se calientan más, siendo este un dato valioso para futuros diseño de baterías. 1 cuadro de texto que da información adicional del estado de las celdas, así como voltaje máximo, mínimo y medio. Otro cuadro de texto que da la misma información que el anterior, pero en este caso sobre las temperaturas de la batería. Adicionalmente se van a colocar los siguientes elementos en función del modo de funcionamiento seleccionado en el programa: 1 botón para conectar y desconectar la conexión bluetooth en los dos modos que requiere conectarse con el BMS. También habrá dos campos en los que se indica que puerto y velocidad de trasmisión se utilizará para la comunicación. 1 botón para cargar el archivo deseado del ordenador en el modo de cargar datos desde el PC. 1 botón que permite cambiar de la visualización estándar de los gráficos a una animación de los mismos. En el modo estándar los gráficos, diales y barras muestran el dato del instante seleccionado del archivo mediante el uso de una barra deslizable que hay al lado del botón. En el caso de que se elija la animación se hace una rápida transición de la evolución temporal de los datos. La velocidad de transición entre un dato y otro se realiza con la misma barra. Esta función permite ver de una forma clara el desarrollo de los valores de los sensores a lo largo del tiempo. La apariencia del software es la siguiente:
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 86 Ilustración 47. Software de análisis y monitorización La interacción de los tres modos de funcionamiento con los distintos elementos se puede representar mediante el siguiente diagrama funcional: Ilustración 48. Diagrama funcional del software de análisis y monitorización
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 87 Como se puede observar, una vez abierto el programa para que este haga algo ha de indicarse qué tipo de visualización de datos se quiere realizar. El funcionamiento de cada uno se explica en los siguientes apartados: Extraer datos en directo del BMS Para cada uno de los tipos de análisis se cargan sus interfaces necesarias. En este modo se muestra el botón de conectar/desconectar y los parámetros de configuración de la conexión bluetooth y se esconde el botón y barra deslizable de la animación en caso de que anteriormente estuviera en alguno de los otros dos modos. Posteriormente, se debe seleccionar el puerto “COM” y la velocidad de transmisión en la que se va a realizar la comunicación bluetooth. Para averiguar que puerto COM se va a utilizar, una vez emparejado por bluetooth el BMS al ordenador, se accede a la pestaña de administrador de dispositivos de Windows y se ve cuál es. La velocidad de trasmisión debe ser la misma a la que se haya programado el BMS desde el Arduino IDE. Ambos parámetros serán siempre los mismos, siempre y cuando no se elimine el emparejamiento entre el BMS y el ordenador. Una vez configurados los dos parámetros se clica en el botón correspondiente para establecer la comunicación. Nada más clicar se abre una ventana del explorador de archivos pidiendo el lugar y nombre del archivo que se quiere utilizar o crear para realizar el guardado de todos los datos entrantes. Si estos parámetros son correctos y el BMS se encuentra en el rango de alcance del bluetooth se inicia la conexión. A partir de aquí el software esperará a que haya datos entrantes del BMS en el buffer del puerto. El software procederá a leer la trama (string que contiene los valores de todos los sensores en un instante de muestreo), decodificar el mensaje y visualizar todos los datos en las distintas interfaces. Si detectara algún error en la trama de datos esta sería ignorada. Los datos llegan ordenados según la configuración del BMS y están delimitados por comas entre ellos. Adicionalmente, cada vez que se envía una trama entera se imprime un salto de línea dejando así una trama por cada fila. Se envían de esta forma para facilitar su lectura y escritura como archivos de formato “csv”. Las gráficas pueden mostrar los datos de dos formas: Graficando todos los datos recibidos o los que se deseen utilizando los botones que tienen a su derecha. Estos botones permites realizar zooms tanto en el eje X como en el eje Y, desplazarse por la gráfica y restaurar la visualización a todos los datos. El resto de interfaces (gráfico de celdas, barras, diales…)
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 88 muestran solamente los datos de la última trama, con lo que no hay nada especial que comentar de ellas. Mientras el software funciona del modo descrito existe la posibilidad de que ocurran dos eventos adicionales: Que se decida cerrar la conexión volviendo a clicar en el botón. Cerrará el puerto de comunicaciones limpiando el buffer previamente (por si se decide volver a establecer la conexión de nuevo) y guardará y cerrará el archivo csv en el que estaba haciendo todo el salvado de datos. Posteriormente esperará nueva orden del usuario. Que se decida cambiar de tipo de análisis de datos. Esto conllevará al cierre del puerto de comunicaciones bluetooth y se cambiará al modo seleccionado cambiando las interfaces que hagan falta. Analizar un archivo guardado en el PC En este modo no es necesario establecer la conexión con el BMS, con lo que no es necesario definir los parámetros de comunicación ni mostrar el botón de conexión bluetooth. En lugar de ello se muestra un nuevo botón para cargar el archivo que se quiere leer desde el PC y el botón y barra deslizable de la animación de datos. Cuando se pulsa el botón de cargar se abre el explorador de Windows para seleccionar el archivo a cargar. Si el directorio y tipo de archivo es correcto este se abre y se colocan todos los datos en la interfaz según la configuración establecida. La visualización de datos es la misma en los tres modos de funcionamiento disponibles, a diferencia del modo en directo que se da la posibilidad de realizar la animación de datos. Esto no es posible en mediante la conexión en directo ya que están llegando constantemente datos nuevos y, por lo tanto, no tiene mucho sentido realizar una animación. Dos eventos adicionales pueden ocurrir mientras se está en este modo: Que se decida cambiar de tipo de análisis de datos o que se quiera cargar otro archivo del PC, lo que volvería a la situación inicial de este modo. Extraer datos guardados del BMS Este modo es una mezcla de los anteriores dos. Tiene la misma interfaz para visualizar los datos de un archivo del PC (con lo que mantiene el botón y barra deslizable de la animación),
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 95 o OLED con los datos de todos los esclavos. o Supervisión de contactores. El control de contactores si se ha podido probar como se explicará más adelante. Comunicación del BMS con el software de monitorización y análisis: Todas las pruebas realizadas en este software se han hecho a través de datos simulados, con lo que no era una situación real. Sin embargo, los datos procedentes del BMS tienen el mismo formato, con lo que se espera que funcione sin problemas. Pruebas ante fallas: Medición de tiempos de apertura y cierre de contactor ante diferentes tipos de falla (caída de voltaje, sobrecargas, temperatura excesiva, etc). No se han tenido los medios necesarios en el tiempo disponible. Tampoco se ha podido hacer una prueba de campo del BMS al completo con la batería de la motocicleta. A pesar de este gran inconveniente, a continuación se muestran las pruebas que si se han podido hacer: Pruebas de la placa esclava Balanceo El funcionamiento del balanceo se va a comprobar colocando 8 celdas desbalanceadas y monitorizándolo en directo mientras se cargan. Se ha decidido cargar la batería con una intensidad de 3A y su curva de carga ha sido la siguiente: Ilustración 56. Curva de carga de las celdas
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 96 El voltaje graficado es el correspondiente a las 8 celdas en serie. Mientras se cargaba la batería se ha probado el algoritmo de balanceo. Para comprobar la efectividad del mismo se ha calculado la desviación entre el voltaje de las 8 celdas: Como se puede observar, la desviación se ha reducido significativamente. Inicialmente la batería mostraba una desviación de hasta 10 veces mayor que la que había tras finalizar la carga. Se puede ver también como ese balanceo resulta más eficaz en el comienzo de la carga que al final a causa de la curva de carga de las celdas; a menor tensión una diferencia de voltaje supone una diferencia de carga menor a la que habría en otro nivel de carga superior. Medición de voltajes La etapa de medición de voltajes debe ser calibrada para asegurar su correcto funcionamiento. El microcontrolador tiene una resolución de 10 bits en sus pines analógicos, esto es, valores entre 0 y 1025. Esta medición debe traducirse a voltaje de las celdas. Si la medición fuera perfecta bastaría con aplicar una regla de tres entre los valores de 0 y 1025 y los 0 y 5V. Sin embargo, las medidas están sujetas a oscilaciones como el valor como el voltaje de alimentación del microcontrolador, imprecisiones en el valor de las resistencias de la etapa de medición, temperaturas, etc. A fin de tener en cuenta estas variaciones y obtener una medida lo más real posible se van a realizar una serie de mediciones que determinen la ecuación que relaciona el voltaje de las celdas con el valor obtenido en la entrada analógica. Se va a utilizar 8 celdas conectadas en serie para simular una batería real. Cada una de las celdas será monitorizada por el BMS en sus distintos niveles de carga y se van a recoger los Ilustración 57. Desviación del voltaje en el balanceo de las celdas
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 97 datos obtenidos. Las celdas monitorizadas se colocan en serie a través de dos placas como la de la siguiente imagen. Esta placa ha sido diseñada para este tipo de tests: Ilustración 58. Placa de pruebas para las celdas Para obtener la ecuación se va a comparar las medidas del microcontrolador con un multímetro que asegure una medida precisa. Los resultados son los siguientes: Tabla 5. Errores en la medición de voltajes. En la primera fila se muestra el error medio medido en cada una de las combinaciones del esclavo. Aunque los esquemas de todas las entradas analógicas sean idénticas ofrecen resultados diferentes. Esto se debe a imprecisiones en elementos electrónicos como resistencias, longitud de pistas, etc. Con el fin de minimizar el error de medición se pretende corregir la tendencia que tiene cada una de las mediciones. Para ello se multiplicará cada medida por una ganancia que contrarreste el error medio registrado en las pruebas. El factor por el que se multiplica cada medida es el que se muestra en la segunda fila. CELDA 1 CELDA 2 CELDA3 CELDA 4 CELDA 5 CELDA 6 CELDA 7 CELDA 8 Error (%) -1.56% -1.85% -1.40% -1.20% -1.47% -1.71% -1.30% -1.31% Factor a multiplicar 1.0156 1.0185 1.0140 1.0120 1.0147 1.0171 1.0130 1.0131 Error medio (V) 0.003 0.007 0.003 0.005 0.004 0.005 0.005 0.006 Error medio total (V) 0.0047
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 98 Se vuelve a realizar las mismas pruebas aplicando el factor de corrección y se ha conseguido una precisión media de 0.0047V, o lo que es lo mismo, 4.7mV. Esta calibración se va a realizar para cada una de las placas esclavas ya que no todas tendrán un comportamiento idéntico. Medición de intensidades Para obtener la ecuación que relaciona el valor analógico obtenido con la intensidad monitorizada se realiza un proceso similar al de la medición de voltajes. Se va a someter a las celdas a una descarga de distintas intensidades, medir estas intensidades con un multímetro y compararlas con el valor obtenido. El sensor de intensidad se ha probado midiendo la intensidad que circula por una resistencia cuando se alimenta a unos 120V, ya que es el voltaje que puede alcanzar la motocicleta. Para variar la intensidad que se quiere medir se pueden hacer dos cosas: Variar la resistencia: Esto supondría tener tantas resistencias como valores intensidades se quiera medir. Tener la misma resistencia siempre y pasar el cable varias veces por el sensor para multiplicar la corriente. Por ejemplo, si se hacen pasar 10A por el cable y se le dan 5 vueltas, el sensor de Hall medirá 50A. La segunda opción resulta la más económica y sencilla y además no varía la precisión de la prueba, con lo que se decide hacer de esa forma. Los resultados son los siguientes: Intensidad sensor (A) Voltaje arduino (V) Voltaje datasheet (V) Error (%) 0 2.51 2.510 0.00% 8.64 2.54 2.537 0.12% 17.34 2.56 2.564 0.16% 26.07 2.59 2.591 0.06% 34.6 2.62 2.618 0.07% 43.4 2.64 2.646 0.21% 52.26 2.67 2.673 0.12% 60.69 2.7 2.700 0.01% 69.44 2.73 2.727 0.11% 78.21 2.75 2.754 0.16% 87.1 2.78 2.782 0.08% 121.66 2.89 2.890 0.01%
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 99 139.04 2.94 2.945 0.15% 156.6 3 2.999 0.02% -156.24 2.02 2.022 0.09% -130.65 2.1 2.102 0.08% -104.16 2.18 2.185 0.21% -77.67 2.26 2.267 0.32% -52.02 2.35 2.347 0.11% -25.98 2.43 2.429 0.05% Error medio (%) 0.11% Tabla 6. Mediciones de intensidad El error medio obtenido es del 0.11%. Suponiendo un rango de medida máximo de ±600A, el error máximo sería de 0.624A. Medición de temperaturas Para garantizar la precisión que el fabricante indica en su datasheet se van a contrastar las medidas de temperatura obtenidas con un termómetro preciso disponible en el taller. Se ha podido comprobar que las medidas eran correctas y se confía en la precisión a temperaturas más altas, ya que no se ha tenido los medios para probarlo en el taller. Almacenamiento en micro SD En esta prueba se van a muestrear las distintas variables y se van a tratar de guardar en la micro SD tal y como se ha estipulado en apartados anteriores. Se puede comprobar que los datos se han guardado correctamente de dos formas distintas: Se extrae la tarjeta micro SD de la placa y se introduce en el ordenador directamente mediante un lector de tarjetas micro SD. Se comunica por puerto serie el esclavo con el ordenador y el esclavo le envía los datos que tiene almacenados en la micro SD. No obstante, no ha sido posible comprobar el funcionamiento y no se ha logrado saber por qué. Se sospecha que hay problemas en alguna de las soldaduras, especialmente en el conector de la micro SD, al ser el componente más difícil de soldar y menos accesible. Se cree que el esquema de la micro SD está bien diseñado ya que se ha conectado un módulo idéntico de otro fabricante (pero que utiliza el mismo esquemático) puenteado en el arduino y ha funcionado correctamente.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 100 Para futuras versiones habrá que tener en cuenta que resulta más sencillo conectar un módulo completo de cualquier fabricante que intentar integrarlo a la placa, debido a problemas en las soldaduras. Pruebas de la placa maestra Control de contactores Se va a someter un contactor a diferentes activaciones y desactivaciones consecutivas. Para comprobar que funciona correctamente se va a medir la continuidad en los terminales del contactor y ver que coincide con los instantes en los que el contactor debe estar cerrado. Las pruebas han concluido que el circuito funciona correctamente. Almacenamiento en micro SD En esta prueba se han encontrado los mismos problemas que con la placa esclava, con lo que no se ha podido testear la micro SD. Comunicación bluetooth Para saber que la comunicación bluetooth funciona correctamente se conecta el maestro con otro dispositivo que tenga tecnología bluetooth. Dos dispositivos muy sencillos de conectar son un teléfono móvil y un ordenador. Se va a realizar la prueba con los dos métodos para ver que no existe ningún problema. Antes de establecer la comunicación es necesario configurar el módulo bluetooth. Sus parámetros configurables más importantes son el modo de funcionamiento (maestro o esclavo), contraseña, velocidad de transmisión y nombre del dispositivo. Para configurarlos se debe entrar en el modo de configuración o modo AT del bluetooth. Toda esta información se puede encontrar de forma fácil en internet. Una vez configurado el sistema se establece conexión tanto con el móvil como con el ordenador. Se ha establecido la comunicación sin ningún problema, con lo que se da por válido el funcionamiento del bluetooth. Comunicación serie con el ordenador La comunicación serie se va a comprobar de la misma forma que se ha comprobado el bluetooth a través del ordenador. En este caso se utilizará la consola ofrecida por el arduino IDE. La comunicación a funcionado sin problemas.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 101 Supervisión del IMD Se va a forzar al IMD a dar valores de funcionamiento correcto e incorrecto en el sistema. Los cambios deberán observarse en la lectura del BMS. Efectivamente así ha sido. Cuando el IMD daba una señal de 10V al BMS le llegaba un HIGH en la entrada digital, y cuando el IMD estaba a masa le llegaba LOW. Pruebas BMS al completo Comunicación entre maestro-esclavos Se ha configurado cada esclavo con una dirección diferente y se ha subido un sketch al maestro para que se comunique con los esclavos sin funciones adicionales, simplemente que muestre los datos leídos a través del puerto serie en el ordenador. La comunicación se ha realizado con éxito con todos los esclavos simultáneamente. FUTURAS MEJORAS A causa de los problemas surgidos por el covid-19 u otros factores, el diseño tiene correcciones y mejoras a realizar. Se trata de un proyecto que no está acabado completamente, pero del trabajo que se ha realizado se han detectado los siguientes fallos: Placa esclava: o Se podría diseñar el esclavo sin el multiplexor en la etapa de balanceo y alimentar directamente a los optoacopladores desde las salidas digitales del arduino. Los pines del arduino serían suficientes para esta tarea y se ahorraría el multiplexor. o El condensador del filtro de paso bajo en la etapa de medición altera la medición que se quiera realizar. Aunque se haya escogido una frecuencia de corte superior al cambio de señal en el shift register no ha sido suficiente y se ha eliminado para el funcionamiento. Al quitar el condensador, también sobraría la resistencia de ese mismo filtro. o Añadir un algoritmo de balanceo que no solo tenga en cuenta las 8 celdas de la placa sino todas las que haya en la batería. Esto se podría hacer si el maestro le dijera a todos los esclavos el menor voltaje detectado y así los esclavos actuaran en consecuencia. o Se puede hacer un algoritmo más eficiente de enviar los datos de los esclavos al maestro en caso de no conectar todas las celdas. En vez de enviar siempre la misma longitud de bits con algunos datos vacíos se puede indicar en el
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 102 primer byte la longitud de la trama y en función de eso leer unas cosas u otras. O se puede especificar en el setup cuantas celdas, sensores, etc hay en cada esclavo para que sepa qué es lo que tiene que leer. o En caso de que se conecten varios sensores Dallas en el esclavo no se mostrarían los resultados en la pantalla OLED, ya que está diseñada para un número específico de datos. Para solucionar esto se podría mejorar la tarea de forma adaptable, esto es, que mostrara los datos en el OLED independientemente del número de celdas y sensores que hubiera. o La precisión en las mediciones analógicas depende del voltaje al que se esté alimentando el arduino. La precisión de 10 bits en las entradas analógicas se mide sobre ese voltaje de alimentación, esto es, el valor 0 corresponde a 0V y el valor 1023 corresponde a la alimentación. Oscilaciones en la tensión de alimentación genera perturbaciones proporcionales en la medida. Se podría buscar una fuente más estable para alimentar el arduino y así hacer más estable las mediciones de los pines analógicos. o Añadir una línea i2c adicional en otros dos pines del arduino para conectar su pantalla. Con la disposición actual, como todas las pantallas tienen la misma dirección, al estar en el mismo bus de I2C se graficaría en todas las pantallas los mismos datos. Sería imposible tener cada pantalla con su interfaz. o El footprint del OLED está mal tanto en el esclavo como en el maestro. Los pines VCC y GND están intercambiados, con lo que no se puede soldar directamente a la placa. Temporalmente se ha soldado la pantalla utilizando cables y así es como se ha probado su funcionamiento. o Al poder conectar tantos sensores Dallas como se quieran existe la posibilidad de conectar tantos que el software no sea capaz de cumplir los plazos. Se podría hacer un cálculo que estime cuantos sensores se podrían conectar. Placa maestra: o Las resistencias de la parte de los termistores y del IMD se han colocado con un encapsulado SMD, pero habría sido mejor soldarlo con encapsulado THT. De esta forma, si se necesitara cambiar algún valor de resistencia se cambiaría de una forma mucho más rápida y sencilla que con SMD. También se podría haber optado por poner potenciómetros.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 103 o Aún no se ha podido probar la supervisión de los contactores, pero se prevé un posible fallo en el diseño; Si el contactor que se supervisa estuviera abierto y el voltaje entre terminales fuera mayor a los 12V de la fuente de alimentación, este voltaje del contactor podría dañar a la fuente por hacer circular una corriente en sentido contrario. No se sabe realmente si ocurrirá esto, pero hay una posibilidad de que lo haga. Se comprobará cuando se realicen las pruebas restantes. Como alternativa se podría cambiar el diseño utilizando un sensor Hall que mida la corriente que circula por el contactor. Si midiera una corriente distinta a 0, significaría que el contactor está cerrado. Como contra está la situación en la que el contactor está cerrado, pero la carga no pide ninguna intensidad y, por lo tanto, este circuito lo mediría como contactor abierto. o En el circuito de control de contactores se podría evitar uno de los leds, ya que hay 2 que cumplen la misma función. o No pueden funcionar las comunicaciones CAN y el almacenamiento en micro SD simultáneamente porque se ha colocado el mismo pin CS para los dos casos. En las comunicaciones SPI los pines MOSI, MISO y CLK son comunes en todo el bus para todos los dispositivos. Sin embargo, el pin CS debe ser único para cada dispositivo. Esto es, al haber dos dispositivos que se comunican por SPI el arduino debería tener dos pines destinados en vez de 1 [27]. o La resistencia que limita la intensidad en la supervisión de contactores debería de ser 921Ω según los cálculos, pero se ha colocado una resistencia de 120Ω. Esto se debe a una errata a la hora de realizar el diseño. o Se puede añadir un jumper en paralelo a cada resistencia del bus de comunicaciones I2C para cortocircuitarlas. Sería útil ya que tanto la placa esclava como la maestra tienen colocadas resistencias de pull-up. Con estos jumpers se podrían ignorar las resistencias que se considerasen oportunas. o Se puede pulir más el código para mejorar la seguridad ante fallas, reducir tiempos de respuesta y añadir funcionalidades extra que no implicarían cambios en el hardware.
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 104 3. COSTES DEL PROYECTO En este apartado se valora económicamente todos los elementos y acciones que han sido necesarias para la consecución del proyecto. Se muestran los costes y no el proyecto ya que se trata de un proyecto real que se ha llevado a cabo. A continuación se muestra una tabla en la que figura la inversión realizada desglosada por partidas. Este desglose de costes se encuentra detallado en el Anexo VII. Tabla 7. Costes del proyecto Los costes se han desglosado en dos subgrupos: Subcontrataciones: Incluye el pedido que se hizo a la empresa alemana Multi Circuit Boards para la fabricación de las placas electrónicas. En este concepto está incluido tanto la fabricación como el envío. Materiales: Agrupa todos los componentes electrónicos del BMS, tanto del esclavo como del maestro. Todos los componentes han sido encargados a la empresa Mouser, a excepción de algunos, ya que no estaban disponibles o eran más económicos y se han conseguido a través de ebay. No se han desglosado todos los costes en este apartado con el fin de simplificarlo. Todos los conceptos llevan ya incluidos los impuestos, con lo que no hay que sumarle el IVA y se trata del coste total. Como se puede observar, el coste total del proyecto es de 425.71€. Comparándolo con BMS de características similares disponibles en el mercado, que pueden oscilar entre 700 y 1000€, supone un ahorro interesante para el equipo de MotoStudent Bizkaia. Más aún Nº Ref Cant. (Ud) Concepto Precio unitario (€/ud.) Precio total (€) 1SUBCONTRATACIÓN 1.1 1 Subcontratación fabricación PCBs 112.59 € 112.59 € TOTAL SUBCONTRATACIONES 112.59 € 2 MATERIALES 2.1 4 Placa esclava 75.40 € 301.61 € 2.2 1 Placa maestra 75.06 € 75.06 € TOTAL MATERIALES 376.67 € COSTE TOTAL 489.26 €
4.7uF 2.2uH 0.5A 4.7uF 100nF MUX509IDR GND VCC MUX509IDR GND VCC 100k 11k 15nF GND GND GND 100k 11k 15nF GND GND GND GND VCC GND 7. ANEXO II: Esquema eléctrico de la placa esclava C2 L1 F1 C5 C6 IC1 S1A S1A S1B S1B S2A S2A S2B S2B S3A S3A S3B S3B S4A S4A S4B S4B A1 A1 DA DA GND GND VDD VDD DB DB EN EN VSS VSS A0 A0 IC2 S1A S1A S1B S1B S2A S2A S2B S2B S3A S3A S3B S3B S4A S4A S4B S4B A1 A1 DA DA GND GND VDD VDD DB DB EN EN VSS VSS A0 A0 R17 R19 C3 R18 R20 C4 +VIN +VIN -VIN -VIN +VOUT +VOUT -VOUT -VOUT TMH-1205S CELDA8 CELDA8 CELDA7 CELDA7 CELDA6 CELDA6 CELDA5 CELDA5 CELDA4 CELDA4 CELDA4 CELDA3 CELDA3 CELDA1 CELDA1 CELDA2 CELDA2 CELDA0 CELDA0 MUX-0 MUX-0 MUX-1 MUX-1 +12V +12V -12V -12V VCELDA1VCELDA1VCELDA1+ VCELDA1+ VCELDA2+ VCELDA2+ VCELDA2VCELDA2VCELDA1 VCELDA2 1 2 3 4 MOLEX 4 PIN CONNECTOR Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS +IN -Vs Vref Cfilt -IN +Vs Rg OUT AD628 +IN -Vs Vref Cfilt -IN +Vs Rg OUT AD628
3.3uF 3.3uF 3.3uF 3.3uF VCC GND SI8600AC-B-ISR GND VCC 3k 3k VCC VCC 3k 3k 0.1uF 0.1uF VCC GND MAX680CSA+ C10 C11 C12 C13 IC6 AVDD 1 ASDA 2 ASCL 3 AGND 4 BVDD 8 BSDA 7 BSCL 6 BGND 5 R39 R40 R29 R32 C8 C9 IC11 C11 C2+ 2 C23 V4 V+ 8 C1+ 7VCC 6 GND 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 TP1 TP2TP3TP4 CELDA8 CELDA8 CELDA7 CELDA7 CELDA6CELDA6 CELDA5 CELDA5 CELDA4 CELDA4 CELDA4 CELDA3 CELDA3 CELDA1 CELDA1 CELDA2 CELDA2 CELDA0 CELDA0 CELDA0 +12V -12V GND1 GND1 GND1 VDD1 VDD1 VDD1 VDD1 VDD1 SDA1 SDA1 SCL1 SCL1 SDA SCL 1 2 3 4 5 6 7 8 MOLEX 8 PIN CONNECTOR Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS 1 2 3 4 MOLEX 4 PIN CONNECTOR 1 2 3 4 MOLEX 4 PIN CONNECTOR 5 Jumpers Jumpers
4.7k DS18B20+ GND VCC VCC VCC GND GND ARDUINO-NANO-3.0 VCC GND SN74HC595D GNDGND VCC JP1 1 2 3 R41 IC10 GND 1DQ 2VDD 3 D1/TX J1.1 D0/RX J1.2 RST.1 J1.3 GND.1 J1.4 D2 J1.5 D3 J1.6 D4 J1.7 D5 J1.8 D6 J1.9 D7 J1.10 D8 J1.11 D9 J1.12 D10 J1.13 D11/MOSI J1.14 D12/MISO J1.15 VIN J2.1 GND.2 J2.2 RST.2 J2.3 5V J2.4 A7 J2.5 A6 J2.6 A5 J2.7 A4 J2.8 A3 J2.9 A2 J2.10 A1 J2.11 A0 J2.12 AREF J2.13 3V3 J2.14 D13/SCK J2.15 M1 IC9 QB 1 QC 2 QD 3 QE 4 QF 5 QG 6 QH 7 GND 8 VCC 16 QA 15 SER 14 OE 13 RCLK 12 SRCLK 11 SRCLR 10 QH' 9 CELDA8 CELDA0 MUX-0 MUX-1 CLK CLK LATCH LATCH DS DS SDA SCL SIGNALTEMPSIGNALTEMPSIGNALTEMP SIGNALTEMP BALANCEO1 BALANCEO2 BALANCEO3 BALANCEO4 BALANCEO5 BALANCEO6 BALANCEO7 BALANCEO8 VCELDA1 VCELDA2 SENSOR-INTENSIDAD CS SCKMISO MOSI 1 2 3 MOLEX 3 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS USB
TLP293-4(GB-TP,E(T 560k 330 FDN304P 535 535 535 535 560k 330 FDN304P 560k 330 FDN304P 560k 330 FDN304P GND 15151515 IC3 ANODE_1 1 CATHODE_1 2 ANODE_2 3 CATHODE_2 4 ANODE_3 5 CATHODE_3 6 ANODE_4 7 CATHODE_4 8 COLLECTOR_4 16 EMITTER_4 15 COLLECTOR_3 14 EMITTER_3 13 COLLECTOR_2 12 EMITTER_2 11 COLLECTOR_1 10 EMITTER_1 9 R14 R8 Q4 1 3 2 LED4 K 1A2 R9 R10 R15 R16 R13 R7 Q3 1 3 2 LED3 K 1A2 R12 R6 Q2 1 3 2 LED2 K 1A2 R11 R5 Q1 1 3 2 LED1 K 1A2 R42R1R2R3 CELDA4 CELDA3 CELDA3 CELDA1 CELDA1 CELDA2 CELDA2 CELDA0 CELDA0 BALANCEO1 BALANCEO2 BALANCEO3 BALANCEO4 B1+ B1+ B2+ B2+ B3+ B3+ B4+ B4+ Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS 4.2V-1.9V(LED)=2.3V 2.3V/330ohm=7mA por el Led Necesito que vayan al menos 7mA por el otro lado del opto para cumplir el 100% de current transfer ratio minimo que me da el opto El opto chupa 1.25V con 7mA 5V-1.25V=3.75V tiene que caer en la R 3.75V/0.007A=535ohm
560k 330 FDN304P 560k 330 FDN304P 560k 330 FDN304P 560k 330 FDN304P TLP293-4(GB-TP,E(T 535 535 535 535 GND 15 15 15 15 R37 R28 Q8 1 3 2 LED8 K 1A2 R36 R27 Q7 1 3 2 LED7 K 1A2 R35 R26 Q6 1 3 2 LED6 K 1A2 R34 R25 Q5 1 3 2 LED5 K 1A2 IC7 ANODE_1 1 CATHODE_1 2 ANODE_2 3 CATHODE_2 4 ANODE_3 5 CATHODE_3 6 ANODE_4 7 CATHODE_4 8 COLLECTOR_4 16 EMITTER_4 15 COLLECTOR_3 14 EMITTER_3 13 COLLECTOR_2 12 EMITTER_2 11 COLLECTOR_1 10 EMITTER_1 9 R30 R31 R33 R38 R4 R21 R22 R23 CELDA8 CELDA7 CELDA7 CELDA6 CELDA6 CELDA5 CELDA5 CELDA4 CELDA4 BALANCEO5 BALANCEO6 BALANCEO7 BALANCEO8 B5+ B5+ B6+ B6+ B7+ B7+ B8+ B8+ Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS
VCC GND OLED_0.96_I2C VCC GND 4050D 4050D 4050D 4050D 4050D 4050D +3V3 +3V3 +3V3 LP298X +3V3 GNDGND GND GND GND GND GND 10uF 0.1uF 1k VCC VCC Módulo MicroSD SCL SCL VCC VCC GND GND SDA SDA U$1 IC8A 23 IC8B 45 IC8C 67 IC8D 109 IC8E 1211 IC8F 1514 IC8P VDDVSS 8 1 CS 2 DATA_IN 3 VSS 6VDD 4 SCLK 5 DATA_OUT 7 DAT1 8 DAT2 1 CARD_DETECT CD1 GND MT1 GND1 MT2 CARD_DETECT1 CD2 IC12 VOUT 5 VIN 1 GND 2 EN 3BYP 4 C18 C19 R43 LED9 K 1A2 SDA SCL SENSOR-INTENSIDAD CS SCK SCK MISO MOSI 1 2 3 MOLEX 3 PIN CONNECTOR SD & MMC Date: 12/09/2020 16:56 Sheet: 1/1 REV: TITLE: Document Number: BMS
ARDUINO-NANO-3.0 GND VCC 4050D 4050D 4050D 4050D 4050D 4050D +3V3 +3V3 +3V3 LP298X +3V3 GNDGND GND GND GND GND GND 10uF 0.1uF 1k VCC VCC 22uF GND VCC 12V 0.5A 1k1k GND Módulo MicroSD Fuente de alimentación no aislada Arduino Nano 8. ANEXO III: Esquema eléctrico de la placa maestra D1/TX J1.1 D0/RX J1.2 RST.1 J1.3 GND.1 J1.4 D2 J1.5 D3 J1.6 D4 J1.7 D5 J1.8 D6 J1.9 D7 J1.10 D8 J1.11 D9 J1.12 D10 J1.13 D11/MOSI J1.14 D12/MISO J1.15 VIN J2.1 GND.2 J2.2 RST.2 J2.3 5V J2.4 A7 J2.5 A6 J2.6 A5 J2.7 A4 J2.8 A3 J2.9 A2 J2.10 A1 J2.11 A0 J2.12 AREF J2.13 3V3 J2.14 D13/SCK J2.15 M2 IC8A 23 IC8B 45 IC8C 67 IC8D 109 IC8E 1211 IC8F 1514 IC8P VDDVSS 8 1 CS 2 DATA_IN 3 VSS 6VDD 4 SCLK 5 DATA_OUT 7 DAT1 8 DAT2 1 CARD_DETECT CD1 GND MT1 GND1 MT2 CARD_DETECT1 CD2 IC12 VOUT 5 VIN 1 GND 2 EN 3BYP 4 C18 C19 R43 C16 F1 R29R30 LED11 INT CS CS SCK SCK SCK MOSI MOSI MISO MISO TXBT RXBT SCL SDA CONTINUIDAD-1 CONTINUIDAD-2 ENABLE CONTINUIDAD-3 CONTACTOR-1 CONTACTOR-2 CONTACTOR-3 TERMISTOR-1 TERMISTOR-2 BENDER BENDER USB SD & MMC VIN VOUT REF TSR 1-2450 + 1 2 3 4 MOLEX 4 PIN CONNECTOR Date: not saved! Sheet: 1/1 REV: TITLE: Document Number: BMSV11-Maestro 1 2 MOLEX 2 PIN CONNECTOR
CNY17F VCC GND SPU01M-12 VCC GND 190 10k CNY17F VCC GND 190 10k CNY17F VCC GND 190 10k SPU01M-12 VCC GND SPU01M-12 VCC GND Control de continuidad de contactor nº1 Control de continuidad de contactor nº2 Control de continuidad de contactor nº3 LED1 OK2 1 2 4 5 PS1 +VIN 1 -VIN 2 -VOUT 4 +VOUT 6 R3 R7 LED2 OK1 1 2 4 5 R2 R6 LED3 OK3 1 2 4 5 R1 R4 PS2 +VIN 1 -VIN 2 -VOUT 4 +VOUT 6 PS3 +VIN 1 -VIN 2 -VOUT 4 +VOUT 6 CONTINUIDAD-1 CONTINUIDAD-2 CONTINUIDAD-3 1 2 MOLEX 2 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR Date: not saved! Sheet: 1/1 REV: TITLE: Document Number: BMSV11-Maestro
SpiceOrder 1 SpiceOrder 2SpiceOrder 1 SpiceOrder 2 1N4004 GND 47k 1.2k 12V GND GND GND VCC JUMPER_OPEN 190 JUMPER_OPEN BC337 2.2k 1N4004 GND 47k 1.2k 12V GND GND GND VCC JUMPER_OPEN 190 JUMPER_OPEN BC337 2.2k Control de contactor nº1 Control de contactor nº2 D1 R15 R18 LED4 J2 21 R5 LED5 J3 21 T1 R11 D2 R12 R13 LED6 J4 21 R19 LED7 J5 21 T2 R20 CONTACTOR-1 CONTACTOR-2 1 2 MOLEX 2 PIN CONNECTOR 1 2 3 MOLEX 3 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 3 MOLEX 3 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR Date: not saved! Sheet: 1/1 REV: TITLE: Document Number: BMSV11-Maestro
SpiceOrder 1 SpiceOrder 2 OLED_0.96_I2C_WITHOUT_HOLES GND GND VCC VCC 1N4004 GND 47k 1.2k 12V GND GND GND VCC JUMPER_OPEN 190 JUMPER_OPEN BC337 2.2k 10k VCC GND 10k VCC GND VCC GND 3k 3k VCC VCC Control de contactor nº3 Pantalla OLED Módulo Bluetooth Comunicaciones I2C Termistores SCL SCL VCC VCC GND GND SDA SDA U$1 STATE STATE RX RX TX TX GND GND +5V VCC KEY KEY D3 R21 R22 LED8 J6 21 R23 LED10 J7 21 T3 R24 R25R26 R27 R28 TXBT RXBT SCL SCL SDA SDA ENABLE CONTACTOR-3 TERMISTOR-1 TERMISTOR-2 1 2 MOLEX 2 PIN CONNECTOR 1 2 3 MOLEX 3 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 MOLEX 2 PIN CONNECTOR 1 2 3 4 MOLEX 4 PIN CONNECTOR Date: not saved! Sheet: 1/1 REV: TITLE: Document Number: BMSV11-Maestro
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 127 getTick = xTaskGetTickCount(); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); while (1) { byteBalanceo = 255; // aqui hay que hacer la conversión a 4.2V por seguridad iVoltajeMin = 1024; for (byte i = 0; i < 8; i++) { if (aVoltajes[i] < iVoltajeMin) { iPosicionBalanceo = i; iVoltajeMin = aVoltajes[i]; } } bitClear(byteBalanceo, iPosicionBalanceo); digitalWrite(latchPin, LOW) ; // Latch a LOW para que no varíe la salida shiftOut(dataPin, clockPin, LSBFIRST, byteBalanceo); // Aqui va Num digitalWrite(latchPin, HIGH) ; // Latch a HIGH fija valores en la salida Serial.print("Byte balanceo: "); Serial.println(byteBalanceo); Serial.print(""); vTaskDelayUntil(&getTick, 1000 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ // Función que se ejecuta siempre que se reciben datos del master // siempre que en el master se ejecute la sentencia endTransmission // recibirá toda la información que hayamos pasado a través de la sentencia Wire.write void receiveEvent(int howMany) { for (byte i = 0; i < 8; i++) { // Enviamos un byte Wire.write(aVoltajes[i]); } Wire.write(intensidad); Wire.write(int(tempC)); // Paramos la transmisión Wire.endTransmission(); }
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 128 10. ANEXO V: Software de la placa maestra // Para el RTOS #include <Arduino_FreeRTOS.h> // Para el CAN #include <mcp_can.h> // Para la micro SD #include <SPI.h> #include <SD.h> // I2C #include <Wire.h> // Bluetooth #include <SoftwareSerial.h> // Termistor #include <math.h> // OLED //#define __DEBUG__ //#include <Adafruit_GFX.h> //#include <Adafruit_SSD1306.h> /*--------------------------------------------------*/ /*---------------------- TEMPS----------------------*/ /*--------------------------------------------------*/ float tempC = 0.0; /*--------------------------------------------------*/ /*---------------- CONTACTORES----------------------*/ /*--------------------------------------------------*/ const int PinContactor1 = A1; const int PinContactor2 = A2; const int PinContactor3 = A3; const int SupervisionContactor1 = 6; const int SupervisionContactor2 = 7; const int SupervisionContactor3 = 8; boolean Contactor1 = false; boolean Contactor2 = false; boolean Contactor3 = false; boolean Contactor1Supervisado = false; boolean Contactor2Supervisado = false; boolean Contactor3Supervisado = false; /*--------------------------------------------------*/ /*---------------------- TEMPS----------------------*/ /*--------------------------------------------------*/ int aTemps[6] = {0, 0, 0, 0}; const int PinTermistor1 = A7; const int PinTermistor2 = A6; /*--------------------------------------------------*/ /*-------------------- Voltajes---------------------*/ /*--------------------------------------------------*/ // Array de datos que contiene primero los voltajes, luego intensidad, luego temperaturas y después bit de fallo int aVoltajes[32] = {1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024}; /*--------------------------------------------------*/ /*-------------------- Intensidad-------------------*/ /*--------------------------------------------------*/
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 129 int aIntensidad[4] = {0, 0, 0, 0}; /*--------------------------------------------------*/ /*-------------------- SOC--------------------------*/ /*--------------------------------------------------*/ float capacidadBateria=70.0; float SOC=1.0; /*--------------------------------------------------*/ /*-------------------- Micro SD---------------------*/ /*--------------------------------------------------*/ const int chipSelect = 10; /*--------------------------------------------------*/ /*-------------------- IMD--------------------------*/ /*--------------------------------------------------*/ const int PinIMD = A0; /*--------------------------------------------------*/ /*-------------------- CAN--------------------------*/ /*--------------------------------------------------*/ const int SPI_CS_PIN = 10; MCP_CAN CAN(SPI_CS_PIN); /*--------------------------------------------------*/ /*---------------- BLUETOOTH------------------------*/ /*--------------------------------------------------*/ SoftwareSerial BT1(3, 4); /*--------------------------------------------------*/ /*---------------- OLED-----------------------------*/ /*--------------------------------------------------*/ //// Definir constantes //#define ANCHO_PANTALLA 128 // ancho pantalla OLED //#define ALTO_PANTALLA 64 // alto pantalla OLED // //// Objeto de la clase Adafruit_SSD1306 //Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1); /*--------------------------------------------------*/ /*-------------------- Tareas-----------------------*/ /*--------------------------------------------------*/ void Contactores(void *param); void Termistores(void *param); void SupervisionContactores(void *param); void MicroSD(void *param); void IMD(void *param); void I2C(void *param); void Comunicaciones(void *param); //void OLED(void *param); void soc(void *param); TaskHandle_t Task_Handle_1; TaskHandle_t Task_Handle_2; TaskHandle_t Task_Handle_3; TaskHandle_t Task_Handle_4; TaskHandle_t Task_Handle_5; TaskHandle_t Task_Handle_6;
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 130 TaskHandle_t Task_Handle_7; //TaskHandle_t Task_Handle_8; TaskHandle_t Task_Handle_9; void setup() { Serial.begin(9600); xTaskCreate(Contactores, "Contactores", 100, NULL, 3, &Task_Handle_1); xTaskCreate(Termistores, "Termistores", 100, NULL, 1, &Task_Handle_2); xTaskCreate(SupervisionContactores, "SupervisionContactores", 100, NULL, 3, &Task_Handle_3); xTaskCreate(MicroSD, "MicroSD", 100, NULL, 1, &Task_Handle_4); xTaskCreate(IMD, "IMD", 100, NULL, 3, &Task_Handle_5); xTaskCreate(I2C, "I2C", 100, NULL, 2, &Task_Handle_6); xTaskCreate(Comunicaciones, "Comunicaciones", 100, NULL, 2, &Task_Handle_7); //xTaskCreate(OLED, "OLED", 100, NULL, 1, &Task_Handle_8); xTaskCreate(soc, "soc", 100, NULL, 1, &Task_Handle_9); } // Aunque no usemos el loop hay que añadirlo void loop() { } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void Contactores(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); pinMode(PinContactor1, OUTPUT); pinMode(PinContactor2, OUTPUT); pinMode(PinContactor3, OUTPUT); while (1) { if (Contactor1) { digitalWrite(PinContactor1, HIGH); } else { digitalWrite(PinContactor1, LOW); } if (Contactor2) { digitalWrite(PinContactor2, HIGH); } else { digitalWrite(PinContactor2, LOW);
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 131 } if (Contactor3) { digitalWrite(PinContactor3, HIGH); } else { digitalWrite(PinContactor3, LOW); } vTaskDelayUntil(&getTick, 50 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void SupervisionContactores(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); pinMode(SupervisionContactor1, INPUT); pinMode(SupervisionContactor2, INPUT); pinMode(SupervisionContactor3, INPUT); while (1) { if (!digitalRead(SupervisionContactor1) && Contactor1Supervisado) { Contactor1 = false; } else if (digitalRead(SupervisionContactor1) && Contactor1Supervisado) { Contactor1 = true; } else if (digitalRead(SupervisionContactor1) && !Contactor1Supervisado) { Contactor1 = false; } else if (!digitalRead(SupervisionContactor1) && !Contactor1Supervisado) { Contactor1 = true; } if (!digitalRead(SupervisionContactor2) && Contactor2Supervisado) { Contactor2 = false; } else if (digitalRead(SupervisionContactor2) && Contactor2Supervisado) { Contactor2 = true; }
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 132 else if (digitalRead(SupervisionContactor2) && !Contactor2Supervisado) { Contactor2 = false; } else if (!digitalRead(SupervisionContactor2) && !Contactor2Supervisado) { Contactor2 = true; } if (!digitalRead(SupervisionContactor3) && Contactor3Supervisado) { Contactor3 = false; } else if (digitalRead(SupervisionContactor3) && Contactor3Supervisado) { Contactor3 = true; } else if (digitalRead(SupervisionContactor3) && !Contactor3Supervisado) { Contactor3 = false; } else if (!digitalRead(SupervisionContactor3) && !Contactor3Supervisado) { Contactor3 = true; } vTaskDelayUntil(&getTick, 50 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void IMD(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); pinMode(PinIMD, INPUT); while (1) { if (digitalRead(PinIMD)) { Contactor1 = true; Contactor2 = true; Contactor3 = true; } else { Contactor1 = false; Contactor2 = false; Contactor3 = false;
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 133 } vTaskDelayUntil(&getTick, 50 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void Comunicaciones(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); while (CAN_OK != CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k { Serial.println("CAN BUS Shield init fail"); Serial.println(" Init CAN BUS Shield again"); delay(100); } Serial.println("CAN BUS Shield init ok!"); //inicializacion Bluetooth BT1.begin(38400); //Inicia la comunicacion Bluetooth unsigned char CanMSG[8] = {0, 0, 0, 0, 0, 0, 0, 0}; int ciclos = 0; String dataString = ""; while (1) { if (sizeof(aVoltajes) / 8 == 0) { ciclos = sizeof(aVoltajes) / 8; } else { ciclos = trunc(sizeof(aVoltajes) / 8) + 1; } for (int j = 0; j < ciclos; j++) { for (int i = 0; i < 8; i++) { dataString = dataString + String(aVoltajes[(j + 1) * 8 + i]) + ","; CanMSG[i] = aVoltajes[(j + 1) * 8 + i]; } CAN.sendMsgBuf(0x00, 0, 8, CanMSG); } if (sizeof(aIntensidad) / 8 == 0) { ciclos = sizeof(aIntensidad) / 8; } else {
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 134 ciclos = trunc(sizeof(aIntensidad) / 8) + 1; } for (int j = 0; j < ciclos; j++) { for (int i = 0; i < 8; i++) { dataString = dataString + String(aIntensidad[(j + 1) * 8 + i]) + ","; CanMSG[i] = aIntensidad[(j + 1) * 8 + i]; } CAN.sendMsgBuf(0x00, 0, 8, CanMSG); } if (sizeof(aTemps) / 8 == 0) { ciclos = sizeof(aTemps) / 8; } else { ciclos = trunc(sizeof(aTemps) / 8) + 1; } for (int j = 0; j < ciclos; j++) { for (int i = 0; i < 8; i++) { dataString = dataString + String(aTemps[(j + 1) * 8 + i]) + ","; CanMSG[i] = aTemps[(j + 1) * 8 + i]; } CAN.sendMsgBuf(0x00, 0, 8, CanMSG); } BT1.println(dataString); Serial.println(dataString); vTaskDelayUntil(&getTick, 200 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void Termistores(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); const int Rc = 10000; //valor de la resistencia const int Vcc = 5; const int SensorPIN = A0; const float A = 1.11492089e-3; const float B = 2.372075385e-4; const float C = 6.954079529e-8; float K = 2.5; //factor de disipacion en mW/C float raw = 0.0; float V = 0.0; float R = 0.0;
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 135 float logR = 0.0; float R_th = 0.0; float kelvin = 0.0; while (1) { raw = analogRead(PinTermistor1); V = raw / 1024 * Vcc; R = (Rc * V ) / (Vcc - V); logR = log(R); R_th = 1.0 / (A + B * logR + C * logR * logR * logR ); kelvin = R_th - V * V / (K * R) * 1000; aTemps[5] = round(kelvin - 273.15); raw = analogRead(PinTermistor2); V = raw / 1024 * Vcc; R = (Rc * V ) / (Vcc - V); logR = log(R); R_th = 1.0 / (A + B * logR + C * logR * logR * logR ); kelvin = R_th - V * V / (K * R) * 1000; aTemps[6] = round(kelvin - 273.15); vTaskDelayUntil(&getTick, 1000 / portTICK_PERIOD_MS); } } /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ //void OLED(void *pvParameters) //{ // (void) pvParameters; // // TickType_t getTick; // getTick = xTaskGetTickCount(); // // #ifdef __DEBUG__ // Serial.begin(9600); // delay(100); // Serial.println("Iniciando pantalla OLED"); // #endif // // // Iniciar pantalla OLED en la dirección 0x3C // if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) // { // #ifdef __DEBUG__ // Serial.println("No se encuentra la pantalla OLED"); // #endif // while (true); // } // // while (1) // { // // Limpiar buffer // display.clearDisplay(); // // // Tamaño del texto // display.setTextSize(1); // // Color del texto
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 136 // display.setTextColor(SSD1306_WHITE); // for (int j = 0; j < 2; j++) // { // for (int i = 0; i < 4; i++) // { // display.setCursor(j * 64, i * 10); // display.print("V"); // display.print((i + 1) * (j + 1)); // display.print(": "); // } // } // display.drawLine(0, 40, 128, 40, SSD1306_WHITE); // // display.setCursor(0, 43); // display.print("I:"); // display.setCursor(64, 43); // display.print("T:"); // // display.drawLine(0, 51, 128, 51, SSD1306_WHITE); // // display.setCursor(0, 52); // display.print("Esclavo 1"); // // display.drawLine(60, 0, 60, 64, SSD1306_WHITE); // // // Enviar a pantalla // display.display(); // vTaskDelayUntil(&getTick, 40 / portTICK_PERIOD_MS); // } //} /*--------------------------------------------------*/ /*---------------------- Tasks ---------------------*/ /*--------------------------------------------------*/ void MicroSD(void *pvParameters) { (void) pvParameters; TickType_t getTick; getTick = xTaskGetTickCount(); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.print("Initializing SD card..."); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); // don't do anything more: return; } Serial.println("card initialized."); while (1) { // make a string for assembling the data to log: String dataString = "";
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 143 void setup() { // Define the window size size(displayWidth, displayHeight); //surface.setResizable(true); /*----------------------------------------------------------------- ---------------Inicializamos variables----------------------------- -----------------------------------------------------------------*/ for (int i=0; i<numeroDatos; i++) { datosBluetooth[i]=0.0; } for (int i=0; i<4; i++) { ZoomsRealizadosX[i]=0; ZoomsRealizadosY[i]=0; } for (int i=0; i<4; i++) { graficoSeleccionado[i]=false; } /*----------------------------------------------------------------- ---------SE LLAMA A TODOS LOS CONSTRUCTORES DE LOS OBJETOS--------- -----------------------------------------------------------------*/ for (int j=0; j<numeroDatos; j++) { datos[j] = new GPointsArray(); } for (int j=0; j<4; j++) { indicesDatos[j]=j; datosaGraficar[j] = new GPointsArray(); } for (int j=0; j<5; j++) { botonesCentrar[j] = new ControlP5(this); botonesZoomX[j] = new ControlP5(this); botonesZoomY[j] = new ControlP5(this); } botonGraficosDefecto = new ControlP5(this); // Inicializa los graficos for (int i=0; i<=3; i++) { graficos[i]=new GPlot(this); } // Creamos el selector de modo de visualizacion de datos guiController = new GUIController(this); seleccionModoController = new IFRadioController("Mode Selector"); modoAnalisis = new IFRadioButton("", width*52/100, height*2/100, seleccionModoController);
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 144 modoOnline = new IFRadioButton("", width*52/100, height*6/100, seleccionModoController); guiController.add(modoOnline); guiController.add(modoAnalisis); modoAnalisis.setSize(width/60, width/60); modoOnline.setSize(width/60, width/60); // Cuadro de texto para escribir los mensajes del bluetooth cuadroComunicaciones = new ControlP5(this); // Añadimos las listas desplegables para escoger lo que se quiere graficar listaDesplegable1 = new ControlP5(this); listaDesplegable2 = new ControlP5(this); botonGraficos = new ControlP5(this); botonCargar = new ControlP5(this); botonBluetoothConnect = new ControlP5(this); botonBluetoothDisconnect = new ControlP5(this); // Creamos el objeto grafico temperaturas GraficoTemperaturas = new TemperaturasBateria (width*33/40, height*33/54, 0.5); // Creamos el objeto knob del velocimetro knobVelocimetro = new ControlP5(this); // Creamos los objetos de los sliders SliderSOC = new ControlP5(this); SliderBMSTemp = new ControlP5(this); sliderAnimacion = new ControlP5(this); // create a toggle and change the default look to a (on/off) switch look toggleAnimacion = new ControlP5(this); } /*-------------------------------------------------------------------- --------------- -----------------------FUNCION QUE PARAMETRIZA TODOS LOS OBJETOS------ --------------- ---------------------------------------------------------------------- -------------*/ void crearObjetos() { /*----------------------------------------------------------------- ---------ZONA IZQUIERDA DEL PROGRAMA (GRAFICOS)-------------------- -----------------------------------------------------------------*/ // Colocamos el fondo de pantalla fondo = loadImage("fondo2.jpeg"); fondo.resize(width, height); // Colocamos el icono del equipo y la firma iconoETSIB = loadImage("logoetsib.png"); iconoETSIB.resize(0, height*10/100); // Lista desplegable para configurar los gráficos listaDesplegable1.addScrollableList("dropdown1")
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 145 //.setPosition(width/30, height/50) .setPosition(width/9, height/30) .setSize(width/15, height/10) .setBarHeight(height/50) .setItemHeight(height/50) .addItems(etiquetasEjeY) //.setType(ScrollableList.LIST) // currently supported DROPDOWN and LIST ; // Lista desplegable para configurar los gráficos List listaGraficos = Arrays.asList("Grafica 1", "Grafica 2", "Grafica 3", "Grafica 4"); /* add a ScrollableList, by default it behaves like a DropdownList */ listaDesplegable1.addScrollableList("dropdown2") //.setPosition(width/30, height/50) .setPosition(width/30, height/30) .setSize(width/15, height/10) .setBarHeight(height/50) .setItemHeight(height/50) .addItems(listaGraficos) //.setType(ScrollableList.LIST) // currently supported DROPDOWN and LIST ; // Botón que coloca a todos los gráficos una variable por defecto botonGraficosDefecto.addButton("buttonGraficosDefecto") .setPosition(width*41/200, height*8/100) .setImages(loadImage("defecto1.png"), loadImage("defecto2.png"), loadImage("defecto3.png")) .updateSize(); // Coloca todos los botones de zooms y centrar graficos for (int j=0; j<5; j++) { String nombreFuncionCallback=""; nombreFuncionCallback="buttonZoomY"+j; botonesZoomY[j].addButton(nombreFuncionCallback) .setImages(loadImage("zoomY1.png"), loadImage("zoomY2.png"), loadImage("zoomY3.png")) .updateSize() .onPress(new CallbackListener() { // a callback function that will be called onPress public void controlEvent(CallbackEvent theEvent) { String name = theEvent.getController().getName(); ZoomY(int(name.substring(11))); } } ); nombreFuncionCallback="buttonCentrar"+j; botonesCentrar[j].addButton(nombreFuncionCallback) .setImages(loadImage("expand1.png"), loadImage("expand2.png"), loadImage("expand3.png")) .updateSize() .onPress(new CallbackListener() { // a callback function that will be called onPress public void controlEvent(CallbackEvent theEvent)
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 146 { String name = theEvent.getController().getName(); buttonCentrar(int(name.substring(13))); } } ); nombreFuncionCallback="buttonZoomX"+j; botonesZoomX[j].addButton(nombreFuncionCallback) .setImages(loadImage("zoomX1.png"), loadImage("zoomX2.png"), loadImage("zoomX3.png")) .updateSize() .onPress(new CallbackListener() { // a callback function that will be called onPress public void controlEvent(CallbackEvent theEvent) { String name = theEvent.getController().getName(); ZoomX(int(name.substring(11))); } } ); if(j==0) { botonesZoomY[j].setPosition(width*24/100, height*((19*j))/100); botonesCentrar[j].setPosition(width*24/100, height*(4+(19*j))/100); botonesZoomX[j].setPosition(width*24/100, height*(8+(19*j))/100); } else { botonesZoomY[j].setPosition(width*44/100, height*(- 2+(19*j))/100); botonesCentrar[j].setPosition(width*44/100, height*(2+(19*j))/100); botonesZoomX[j].setPosition(width*44/100, height*(6+(19*j))/100); } } // Botón que se pulsa para añadir el dato seleccionada en la gráfica deseada // gracias a las listas desplegables botonGraficos.addButton("buttonGraficos") .setPosition(width*20/100, height*3/100) .setImages(loadImage("imgrafico1.png"), loadImage("imgrafico2.png"), loadImage("imgrafico3.png")) .updateSize(); // Inicializa los graficos for (int i=0; i<=3; i++) { graficos[i].setPos(width*3/200, height*(15+(19*i))/100); graficos[i].setDim(width*38/100, height*13/100); } /*----------------------------------------------------------------- ---------ZONA DERECHA SUPERIOR DE COMUNICACIONES-------------------
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 147 -----------------------------------------------------------------*/ // Botón para conectarse por bluetooth al bms botonBluetoothConnect.addButton("buttonBluetoothConnect") .setPosition(width*189/200, height*5/100) .setImages(loadImage("bluetooth1.png"), loadImage("bluetooth2.png"), loadImage("bluetooth3.png")) .updateSize(); botonBluetoothConnect.hide(); // Botón para desconectarse botonBluetoothDisconnect.addButton("buttonBluetoothDisconnect") .setPosition(width*189/200, height*5/100) .setImages(loadImage("bluetooth3.png"), loadImage("bluetooth2.png"), loadImage("bluetooth1.png")) .updateSize(); botonBluetoothDisconnect.hide(); // Botón para cargar los datos en el modo análisis botonCargar.addButton("buttonCargar") .setPosition(width*94/100, height*5/100) .setImages(loadImage("botoncargar1.png"), loadImage("botoncargar2.png"), loadImage("botoncargar3.png")) .updateSize(); // Cuadro de texto para escribir los mensajes del bluetooth textoCuadro = cuadroComunicaciones.addTextarea("txt") .setPosition(width*82/100, height*13/100) .setSize(width*14/100, height*20/100) .setFont(createFont("arial", 16)) .setLineHeight(14) .setColor(color(0)) .setColorBackground(color(255)) .setColorForeground(color(0, 0, 255)); ; textoCuadro.hide(); /*----------------------------------------------------------------- ---------ZONA DERECHA INFERIOR DONDE SE ANIMAN TODOS LOS DATOS----- -----------------------------------------------------------------*/ speedKnob = knobVelocimetro.addKnob("speedKnob") .setRange(0, 200) .setValue(0) .setPosition(width*34/50, height*22/50) .setRadius(width/30) .setColorForeground(color(0, 76, 153)) .setColorBackground(color(51, 153, 255)) .lock() ; rpmKnob = knobVelocimetro.addKnob("rpmKnob") .setRange(0, 6000) .setValue(0) .setPosition(width*39/50, height*22/50) .setRadius(width/30) .setColorForeground(color(0, 76, 153)) .setColorBackground(color(51, 153, 255)) .lock()
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 148 ; SliderSOC.addSlider("sliderSOC") .setPosition(width*31/50, height*45/100) .setSize(width/50, height*5/50) .setRange(0, 100) .setColorBackground(color(51, 153, 255)) .setValue(100.0) .lock() ; SliderBMSTemp.addSlider("sliderBMSTemp") .setPosition(width*28/50, height*45/100) .setSize(width/50, height*5/50) .setRange(0, 100) .setColorBackground(color(51, 153, 255)) .setValue(100.0) .lock() ; // Colocamos el icono del mapa mapWidth=displayWidth/8; mapHeight=displayWidth/7; origenMapaX=width*86/100; origenMapaY=height*37/100; MapaLosArcos = loadImage("LosArcosRecto.png"); MapaLosArcos.resize(round(mapWidth), round(mapHeight)); image(MapaLosArcos, origenMapaX, origenMapaY); // Gráfico de los voltajes de las celdas plotC = new GPlot(this); plotC.setPos(round(displayWidth*101/200), height*23/38); // Tamaño del grafico plotC.setDim(round(displayWidth*3/10), round(displayHeight/5)); plotC.setYLim(2.4, 5.0); plotC.getTitle().setText("Estado celdas en instante: " + str(0)); plotC.getTitle().setTextAlignment(LEFT); plotC.getTitle().setRelativePos(0.1); plotC.getXAxis().getAxisLabel().setText("Celda"); plotC.getYAxis().getAxisLabel().setText("Voltaje (V)"); plotC.drawGridLines(GPlot.BOTH); plotC.drawLabels(); plotC.startHistograms(GPlot.VERTICAL); // Slider que controla las animaciones de todos los datos sliderAnimacion.addSlider("sliderAnimacion") .setPosition(width*64/100, height*183/200) .setLabelVisible(false) .setSize(width*8/100, height*2/100) .setRange(1, 99) .setValue(50) .setDecimalPrecision(0) ; sliderAnimacion.hide(); // Botón que activa o desactiva la función de animación toggleAnimacion.addToggle("toggleAnimacion") .setPosition(width*56/100, height*237/256)
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 149 .setSize(50, 20) .setValue(true) .setLabelVisible(false) .setMode(ControlP5.SWITCH) ; toggleAnimacion.hide(); } /*-------------------------------------------------------------------- --------------- -----------------------FUNCION QUE COLOCA TODOS LOS TEXTOS, FONDO...-- --------------- ---------------------------------------------------------------------- -------------*/ void plantillaPorDefecto() { background(255); image(fondo, 0, 0); image(iconoETSIB, width*30/100, height*1/100); textSize(16); fill(0); textAlign(CENTER); text("by Markel Lizarralde", width*34/100, height*13/100); textAlign(LEFT); text("Analizar archivo guardado", width*54/100, height*4/100); text("Analizar datos Online", width*54/100, height*8/100); fill(255); // Funciones que se encargan de dibuar los contornos de la aplicación contorno1(0, true); contorno2(0, true); contorno3(0, true); /* add a ScrollableList, by default it behaves like a DropdownList */ listaDesplegable1.show(); botonGraficos.show(); speedKnob.show(); rpmKnob.show(); SliderSOC.show(); SliderBMSTemp.show(); textoCuadro.show(); for (int j=0; j<5; j++) { botonesZoomY[j].show(); botonesCentrar[j].show(); botonesZoomX[j].show(); }
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 150 botonCargar.hide(); botonBluetoothConnect.hide(); botonBluetoothDisconnect.hide(); plotC.beginDraw(); plotC.drawBackground(); plotC.drawBox(); plotC.drawXAxis(); plotC.drawYAxis(); plotC.getTitle().setText("Estado celdas en instante: " + str(contadorAnimaciones)); plotC.drawTitle(); plotC.drawHistograms(); plotC.activatePointLabels(); plotC.drawLabels(); plotC.endDraw(); for (int i=1; i<=NumeroSensoresTemp; i++) { temperaturas[i-1] = 0.0; } GraficoTemperaturas.Graficar(temperaturas); //text(str, x1, y1, x2, y2) textSize(16); fill(0); textAlign(CENTER, CENTER); text("Temperatura", width*57/100, height*41/100); text("motor (ºC)", width*57/100, height*43/100); text("SOC (%)", width*63/100, height*42/100); text("RPM", width*244/300, height*42/100); text("Velocidad", width*214/300, height*40/100); text("(km/h)", width*214/300, height*42/100); fill(255); image(MapaLosArcos, origenMapaX, origenMapaY); //text(str, x1, y1, x2, y2) textSize(16); fill(0); textAlign(LEFT); text("Temperatura máxima: ", width*86/100, height*90/100); text("Temperatura media: ", width*86/100, height*92/100); text("Temperatura mínima: ", width*86/100, height*94/100); text("Voltaje máximo: ", width*75/100, height*90/100); text("Voltaje medio: ", width*75/100, height*92/100); text("Voltaje mínimo: ", width*75/100, height*94/100); fill(255); // Contornos de la zona de animacion y contorno interior de slider y boton animacion strokeWeight(3); stroke(0); noFill(); rect(width*74/100, height*88/100, width*24/100, height*7/100, 10); } /*-------------------------------------------------------------------- ---------------
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 151 ---------------- FUNCION QUE COLOCA LOS TEXTOS Y ASPECTO DEL MODO ONLINE-------------- ---------------------------------------------------------------------- -------------*/ void plantillaOnline() { // Borramos todos los datos que había ya que puede que cambiemos de modo de visualización // Si pasamos de online a analisis no queremos que se grafiquen los datos del online y viceversa for (int i=0; i<numeroDatos; i++) { datos[i].removeRange(0, datos[i].getNPoints()); } for (int i=0; i<4; i++) { datosaGraficar[i].removeRange(0, datos[i].getNPoints()); } // Quitamos las interacciones con los graficos para el directo for (int i=0; i<4; i++) { graficos[i].deactivatePointLabels(); graficos[i].deactivatePanning(); graficos[i].deactivateZooming(); graficos[i].updateLimits(); } toggleAnimacion.hide(); sliderAnimacion.hide(); textoCuadro.show(); botonGraficos.show(); botonCargar.hide(); botonBluetoothConnect.show(); botonBluetoothDisconnect.hide(); datosCargados=false; } /*-------------------------------------------------------------------- --------------- ---------------- FUNCION QUE COLOCA LOS TEXTOS Y ASPECTO DEL MODO ANÁLISIS------------ ---------------------------------------------------------------------- -------------*/ void plantillaAnalisis() { // Borramos todos los datos que había ya que puede que cambiemos de modo de visualización // Si pasamos de online a analisis no queremos que se grafiquen los datos del online y viceversa for (int i=0; i<numeroDatos; i++) { datos[i].removeRange(0, datos[i].getNPoints()); } for (int i=0; i<4; i++) { datosaGraficar[i].removeRange(0, datos[i].getNPoints()); }
BMS para una motocicleta eléctrica Markel Lizarralde Bilbao 152 // Ponemos a 0 este valor para que las animaciones no accedan a un indice que no existe // Esto podría ocurrir porque no se ha cargado el archivo a leer aún numeroMuestreos=0; // Activamos las interacciones con los graficos ya que en el modo online está desactivado for (int i=0; i<4; i++) { graficos[i].activatePointLabels(); graficos[i].activatePanning(); graficos[i].activateZooming(1.1, CENTER, CENTER); graficos[i].updateLimits(); } toggleAnimacion.show(); sliderAnimacion.show(); textoCuadro.show(); botonGraficos.show(); botonCargar.show(); botonBluetoothConnect.hide(); botonBluetoothDisconnect.hide(); // Contornos de la zona de animacion y contorno interior de slider y boton animacion stroke(0); strokeWeight(2); rect(width*51/100, height*90/100, width*22/100, height*5/100, 10); strokeWeight(1); textSize(16); fill(0); textAlign(CENTER, CENTER); text("Visualización - Animación", width*57/100, height*117/128); fill(255); } /*-------------------------------------------------------------------- --------------- ----------------FUNCION QUE GESTIONA LA CONEXIÓN BLUETOOTH------------ --------------- ---------------------------------------------------------------------- -------------*/ void gestionarConexion() { if (ConexionBluetooth) { //println("Bluetooth activado"); if (conexionNueva) { println("nueva conexion"); selectOutput("Selecciona directorio para guardar los datos:", "fileToWrite"); while (archivoElegido==false) { delay(1); //if (seleccionArchivoCancelado)