domingo, mayo 17, 2009

Universal Battery Charger

Mi proyecto de este mes es un cargador de baterías universal, es decir, carga todo tipo de baterías (NiCd, NiMh, LiPo (o LiPoly), SLA, litio, etc), todo controlado en forma inteligente por el PIC 16F877A para garantizar el cuidado de la vida útil de las baterías y obtener su máxima eficiencia.

Estoy haciendo código fuente, por ahora, les muestro una foto de preview:












Análisis de carga/descarga de baterías NiCd y NiMh

La carga es el proceso de restaurar la capacidad original a una batería descargada. Con el fin de lograr una mayor vida útil, se debe cargar con el método apropiado.

Se usan varios métodos para cargar celdas recargables:

1. Carga de corriente rápida: 1CmA (temperatura de carga rápida: 0 C a 40 C). Para lograr controlar y detener la carga rápida, se recomienda cargar a más de 0.5CmA pero menos de 1CmA. La carga de baterías a más de 1CmA puede causar que se active la ventilación de seguridad por el aumento de la presión interna de las baterías, causando fuga de electrolítos. Cuando la temperatura de las baterías se detecta por un termistor u otro tipo de sensor, y su temperatura está bajo 0 C o sobre los 40 C al comienzo de la carga, se debe realizar una carga flotante, en lugar de una carga rápida. Una carga rápida se debe detener cuando cualquiera de los valores descriptos más abajo alcanza el nivel señalado:

  • Control del límite voltaje superior: Aprox. 1.8V/celda. Este método de carga se cambia a flotante si el voltaje de la batería alcanza aproximadamente 1.8V/celda debido a problemas o funcionamiento incorrecto de alguna naturaleza.
  • Valor de dV/dt (o corte por delta pico): 5 a 10mV/celda. Cuando el voltaje de la batería cae de su pico un 5 a 10mV/celda durante la carga rápida, está se debe detener, y el método de carga se debe cambiar a flotante.
  • Valor de dT/dt (o corte por temperatura): 1 a 2 C/min. Cuando un aumento en la temperatura de batería por unidad de tiempo se detecta en el termistor u otro tipo de sensor de temperatura durante la carga rápida, y el aumento de temperatura es detectado por el sensor, la carga rápida debe detenerse y el método de carga cambiarse a flotante.
  • Tiempo límite: 90 minutos.


2. Para cargar baterías excesivamente descargadas, primero aplicar carga flotante para que la corriente fluya, y luego proceder con la carga rápida una vez que el voltaje de la batería se elevó.
Voltaje inicial para carga rápida: Aprox. 0.8V/celda con una corriente de 0.2 ~ 0.3 CmA.

Requisitos:

  • Espera inicial: 10 minutos. Esto previene que los circuitos de detección de dV/dt se active por el tiempo especificado al comienzo de la carga rápida. Sin embargo, la detección dT/dt puede estar activa en este periodo. Esto es necesario para baterías que fueron dejadas sin carga durante mucho tiempo o fueron excesivamente descargadas, etc. La espera inicial es necesaria para prevenir que la carga se detenga (para prevenir malos funcionamientos) debido a pseudos -dV/dt.
  • Corriente flotante o de mantenimiento: 0.033 a 0.05 CmA. Cuando el flujo de corriente es alto, la temperatura de las baterías aumenta, causando que las características de la batería se deterioren.
  • Tiempo de carga rápida: 60 minutos.
  • Tiempo total: 10 a 20 horas. Sobrecargar una batería NiXX, aun en carga flotante o de mantenimiento, causa el deterioro en las características de las baterías. Para prevenir la sobrecarga por carga flotante o cualquier otro método, se debe proveer de un temporizador para regular el tiempo total de carga.


Análisis de carga/descarga de baterías SLA (Sealed Lead-Acid) Plomo-Ácido

A diferencia de las baterías NiXX, este tipo de baterías se cargan a voltajes fijos en lugar de corrientes fijas.

Método de carga:
1. Verificar si la batería.
2. Si está bien, iniciar la carga a corriente constante a capacidad/10.
3. Cuando el voltaje alcance 2.55V/celda cambiar a carga por voltaje constante a 2.45V/celda.
4. Si la corriente cae por debajo de capacidad/20 entonces cambiar a carga flotante.
5. Cargar en forma flotante a 2.25V/celda por tiempo indefinido (máximo recomendable 20 horas).

Requisitos:

Una batería SLA no debería descargarse a menos de 1.5V/celda.
Voltaje máximo para baterías SLA es de 3V/celda.

Análisis de carga/descarga de baterías LiPO (litio polímero) y LiIon(ion de litio)

Método de carga:
1. Corriente constante hasta 1C hasta que el voltaje alcance los 4.2V/celda.
2. Voltaje constante a 4.2V/celda hasta que la corriente caiga a la capacidad / 15.
3. Carga flotante a capacidad / 30 por 30 minutos.

Requisitos:
Una batería LiPO no debería descargarse a menos de 2.5V/celda.
Voltaje máximo para baterías LiPO (litio polímero) es de 4.5V/celda.

En base a estas recomendaciones, diseñé el cargador con las siguientes características:

Descripción Valor por defecto

Corriente máxima de carga: 0 a 5A
Corriente máxima de descarga: 440mA ( I = V/R -> I = 12/27 -> I=0.444mA)
Modos: 0:NiMh, 1:SLA, 2:NiCd, 3:LiPo, 4: LiIon
Capacidad de celdas: 3000mAh
Número de celdas: (1 a 19) 6

Carga: (0.1 a 25.5) (10) -> 3000*1.0=3A
Descarga: (0.1 a 25.5) (40) -> 3000*4.0=12A

Espera delta pico: 10 minutos

Corte por bajo voltaje (por celda):
NiCd (0 a 2550) 800mV
NiMh (0 a 2550) 1000mV
LiPo (2500 a 3500) 3000mV
SLA (1500 a 2500) 2000mV

Delta pico (0 a 255):
NiCd 10mV
NiMh 5mV

Voltaje máximo por celda:
NiCd 1680mV
NiMh 1680mV
LiPo (3500 a 4500) 4200mV
SLA (2000 a 3000) 2500mV (2.5V x 6 celdas = 15V - voltaje máximo para SLA de 12V)

Corriente final (% de la corriente de carga inicial, 0 a 255):
LiPo (5%) -> 3000*5/100=150mA
SLA (5%) -> 3000*5/100=150mA

Timeout
NiCd y NiMh 65 min a 1C, 130 min para 0.5C, etc

Tiempo total: 20 h

Universal Battery Charger 0.01



Universal Battery Charger 0.98

La funcionalidad está al 80%

Refactoring...










Software de PC

Carga de batería SLA de 1200mAh de 6 celdas a 0.1C


Carga de batería LiIon (de celular) de 920mAh de 1 celda a 0.3C


Descarga de batería LiIon


Carga de batería NiMH de 2500mAh 2 celdas a 0.5C


29-10-2009 Disponibilidad de PCBs
Están disponibles en la sección de descargas los PCBs del cargador gracias al amigo Emiliano del foro de uControl:








Licencia
Los archivos e imagenes de este sitio se encuentran disponible bajo la licencia Creative Commons (Attribution-Share Alike 3.0 Unported)

Video del cargador funcionando:



* Videos.


Aviso de seguridad
La sobrecarga de baterías Li-Ion y Li-Poli puede llegar a ser explosiva:


Si van a hacer pruebas, por favor, haganlo con baterías NiCd o en su defecto NiMH, y luego pasen a las SLA, al último, con las basadas en Iones de litio

Documentación completa del proyecto

Este es el diseño del PCB del amigo Emiliano del foro uControl (www.ucontrol.com.ar).

Luego de pedirle permiso para su publicación aquí están las fotos de su excelente trabajo:











En el caso del LCD vamos a dar dos versiones, así se adapta a 16x1 o 14x1, en su caso tenía uno de 7x2



Descargas en la sección correspondiente del blog.

62 comentarios:

  1. Tiene una pinta excelente. En cuanto lo publiques, lo armaré.

    Muchas gracias

    Un saludo

    ResponderEliminar
  2. Muy buenos tus proyectos!!

    Espero la publicacion total para armarlo.

    ResponderEliminar
  3. Luis Alberto, el código lo podés compilar bajando el SDCC 2.9.0 de http://sdcc.sourceforge.net

    saludos!

    ResponderEliminar
  4. Ok.Felixls,gracias lo intento,suerte

    ResponderEliminar
  5. Hola felix, es muy interesante tu blog y me gusta la presentación. Soy de Venezuela y me gustaría saber que software usas para la realización de las PCB y esquemas, porque yo uso Proteus pero no me da la calidad de presentacion 3D como la mustran las fotos cargadas en tu blog. Gracias de Antemano. electronica.ebnpd@gmail.com

    ResponderEliminar
  6. Hola Profe_Electrónica, usaba Eagle gratuito con Eagle3d, pero ahora uso KiCad, y es a mi forma de ver mejor, aunque las presentaciones en 3d no sean tan coloridas, por ahora

    ResponderEliminar
  7. Gracias,por tu generosidad.un saludo desde Quilmes

    ResponderEliminar
  8. Felicitaciones! que maravilloso proyecto, ya llevaba yo rato buscando un buen cargador para SLA y Li-Ion. Gracias!

    ResponderEliminar
  9. Hola jose, feliz año!

    Mira lo del buzer es bastante raro, prueba desoldarlo y comprobar que voltaje tienes, si es 5v, entonces se te quemó el transistor o está invertido.

    El programa para la pc todavía no está listo, aunque te aseguro que no es necesario para usar el cargador.

    saludos.

    ResponderEliminar
  10. Esta bien lo que publica Felixls. La verdad que si realmente te interesa como a mi me intereso,c on los circuitos de carga y descarga que es una de las cosas mas dificiles de lograr del cargador en si y un poco de ingenio, dedicacion y ganas. Lee recorre la web y re-lee lo que tenes y veras como en el transcurso de todo esto progresan No esta en bandeja, pero con ganas esta todo lo necesario para hacerlo por uno mismo. Ya veran que bueno esta hacerlo. De momento Felixls gracias por todo la imfo compartida. Me ah sido de gran ayuda y utilidad.

    Ademas lo mas dificil de encontrar es toda la explicacion de como se carga y descarga cada tipo de bateria. "Traduci" todo eso a un lenguaje donde el PIC lo "entienda" y ahi tendran un cargador de baterias. Luego poco a poco agregen mas tipo de baterias y asi se ira haciendo universal. Comiencen por que pueda cargar una bateria, luego busquen y agregen las otras.
    Una vez mas gracias Felixls

    ResponderEliminar
  11. alvaro, que bueno que te sirva, justamente ese es el tema si se pone un poco de esfuerzo se puede hacer el código sin problemas. saludos!

    leandro, esa placa la hizo un amigo, ya que la mia había pasado por varias modificaciones y estaba "fea", lo que normalmente se hace en ese caso es usar contact flux. saludos

    ResponderEliminar
  12. Felixls tengo 6 celdas de litio de una bateria de laptop, estan buenas porque solo se utilizaron 3 meses y se averio el circuito de carga. Quisiera poder hacer algo con ellas, soy estudiante de Ing Electronica y hobbista. Me interesa mucho el mundo del diseño. Diseño robots sencillos para la universidad (seguidores de luz, seguidores de linea, de pasillo, etc) Podrias ayudarme o guiarme de como manipular estas baterias?? Algo por donde empezar, he buscad mucho y he visto que son muy delicadas y pueden llegar a ser peligrosas. Gracias de antemano. Las celdas tienen este codigo SDI 18650-28A consegui sus detalles tecnicos aqui http://www.samsungsdi.com/battery/cylindrical-ICR18650-28A.jsp

    ResponderEliminar
  13. Ramón, ni idea si lo puede hacer. saludos.

    Virgili, no, LVP está en off. Lo de la celda está explicado, para el caso, una pila de 1.5v es una celda. saludos.

    Volk, uno que programé en java. saludos.

    Lithium, se tiene el mismo cuidado que con cualquier otra batería de litio, pero, te recomiendo separarlas antes de manipularlas. saludos

    ResponderEliminar
  14. hola felix me gustaria mucho armar este proyecto bueno he estado viendo tus publicaciones en el foro de control bueno los enlaces de 4shared ya stan rotos no se si pudieras colgarlo una vez mas elcodigo y toda la infomacon

    ResponderEliminar
    Respuestas
    1. Los enlaces están esta página (sección DESCARGAS)

      saludos.

      Eliminar
  15. que tal felixts exelentes proyectos tengo una duda sobre el pwm la entrada AN0 solo tomas la medida a mostrar o creas un lazo cerrado para estabilizar el voltaje de salida, que metodo usastes grasias

    ResponderEliminar
    Respuestas
    1. Se crea un lazo cerrado de acuerdo al valor leido se ajusta el duty del pwm.

      saludos.

      Eliminar
  16. hi and mabuhay from philippines, i made this project for recreational purposes, but i am having trouble powering it up. Sometimes there is a display and working but many times when i unplugged the power and plug it again...the charger display are only blocks, there are no letters all function button not working. what could be the problem

    ResponderEliminar
    Respuestas
    1. Hola LEI, al apagarse el equipo no posee carga, por ello el PIC se mantiene activo no así el LCD, cuando el voltaje cae por un determinado nivel el PIC debería resetearse (media Watchdog) pero no lo implementé, eso debería corregirse.

      saludos.

      Eliminar
  17. hola felixls, quisiera q me enviaras la documentacion completa del este cargador, yo quiero trabajarlo con un 18f4550 ya lo tengo con el bootloader del usb, quisiera q me ayudaras con al documentacion tuya para poderme hacer este cargador..... felipe_corream@hotmail.com

    ResponderEliminar
    Respuestas
    1. La documentación que tengo está publicada.

      saludos.

      Eliminar
  18. Sou do brasil e montei seu projeto,pois achei
    ótimo,só me faltou dica de como fazer o indutor
    gostária de saber quantas voltas e qual número do fio pra enrolar.
    Agradeço ajuda
    josue

    ResponderEliminar
    Respuestas
    1. Hola Josue, deberías utilizar algún calculador, pero para que te des una idea deberían ser 15 vueltas sobre un toroide de 2cm de diámetro exterior.

      saludos.

      Eliminar
  19. Do You have newer version of Your code for "Universal battery charger"? Version 1.0 has a few issues:
    - It looks like "reset" does not work correctly after turn on. It is neccesary to turn on/off few times for correct charger status on LCD.
    - Programming temperature on which charger should stop charging does not work.

    ResponderEliminar
    Respuestas
    1. No tengo una nueva versión y es cierto que tiene varios problemas pero como ya no trabajo con PIC no voy a publicar otras versiones de este cargador.

      saludos.

      Eliminar
  20. Que maravilla!! un proyecto genial!! excelente aporte! a armarlo ni bien se pueda :D

    ResponderEliminar
  21. Hola estmado Felix, tengo una pequeña pregunta acerca de tu diseño, cual es la funcion exacta de del transistor de descarga, no entiendo muy bien la funcion de realizar la descarga de la bateria? Podrias explicarme.

    ResponderEliminar
    Respuestas
    1. Normalmente una batería no necesita descargarse, pero hay algunos tipos que si lo necesitan para ajustar las celdas que la componen y queden con el mismo nivel de carga.

      saludos.

      Eliminar
    2. Muchas gracias amigo, me has sacado una grande duda. No me quedaba muy claro. Gracias de nuevo, saludos.

      Eliminar
  22. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  23. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  24. gr8 work...i finished one but i m getting error in hex file when i m simulating it on PIC SIMULATOR ID it gives error >>invalid 'checksum' field in the record<< and after burning hex file on "pic" the charger is not working..can you send me the hex file on my email id plzzz.my id is yashmeena26@gmail.com.

    ResponderEliminar
  25. hello felixls
    My name name is Luigi from Italy, I congratulate you on your web page
    I built the universal battery charger, following your project and I am having problems its operation. I checked the entire project and the PCB is ok and also the components.
    when I make the discharge of a battery pack, all I get is the amount of discharge that makes mA during the discharge but the number decreases instead of increasing.
    Then I did some tests charge of various cells and just started charging me that is the end,
    I state that I did not use the NTC thermistor because they are temporarily not.
    Why do I immediately terminates the charge cycle?, maybe it is because it does not insert the NTC thermistor.
    If you kindly leave me an e-mail, make a video and sent so as to make you see the anomalies
    Thank you for your availability and a greeting
    cellui@yahoo.it

    ResponderEliminar
  26. hola el codigo no se encuentra mas disponible para descargar??

    ResponderEliminar
  27. Felix, felicitaciones por el proyecto, tengo una duda, quisiera empezar por compilar el software, entiendo que lo has hecho en Eclipse, correcto? Estoy viendo si lo puedo "levantar" con el NetBeans. Si por ahi tenes el soft ya compilado, mejor!
    Abrazo y muchas gracias!!

    ResponderEliminar
  28. felicitaciones, me gustaria saber si todavia tienes el esquema en eagle, porque yo tb gasto la misma version, y asi la podria tener guardadita o darle alguna modificacion..

    Un saludo y gracias por el tutorial, me enseñe mucho
    Alfredo

    ResponderEliminar
  29. Se pueden conseguir las PCB en algún sitio ??, gracias

    ResponderEliminar
  30. Felixls! A mí es "PCBsValores.pcb" pero no puedo abrirlo en Eagle. ¿Por que programa es creado este fichero?

    ResponderEliminar
  31. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  32. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  33. Una felixls voy a hacerlo mi pregunta me descarge el esquema pero en la foto sale una bobina que no esta en valores en necesaria o se puede pasar de ella

    ResponderEliminar
  34. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  35. Good morning, I want to make your charger but my hardware vendor doesn't have high-current inductors... I have some ferrite/permalloy toroids, savaged from dead ATX PSUs... can i make inductor myself? How many turns of wire are necessary?

    Thanks in advance and many compliments for your nice projects!

    Davide from Italy

    ResponderEliminar
  36. Hola Sergio, estoy por armar tu cargador, pero primero quiero recomplilar el Codigo en SDCC, no para cambiarle el nombre y presentarlo en la facu porque por suerte ya me recibí, y no de electronico precisamente! Lo quiero recompilar para ver que tan poco espacio libre queda y empezar a estudiar como meter el tema de la EEPROM externa para guardar las estadísticas ahí.. Pero de entrada al compilar el código original me tira error: no target memory available for section "ID_menu_21" hice mil pruebas y parece que algo no anda bien. El SDCC que uso es el 3.2 y ya actualice todos los PATHS, etc..
    Se agradece ayuda!

    ResponderEliminar
  37. This project is so cool!
    You to send me the complete the source code of this project.
    My mail address is rashid0214@gmail.com.
    Thanks very much.

    ResponderEliminar
  38. i made long time ago replica of your charger, works fine
    http://www.youtube.com/watch?v=lyTDYuytMRs
    i also put link to your site

    ResponderEliminar
  39. Ola gostaria informação de como copilar codigo esta dando erro.

    Clean: Deleting intermediary and output files.
    Clean: Deleted file "chargeprocess.O".
    Clean: Deleted file "charger.O".
    Clean: Deleted file "dischargeprocess.O".
    Clean: Deleted file "display.O".
    Clean: Deleted file "menu.O".
    Clean: Deleted file "C:\Users\noot\Desktop\pub\Nova pasta\Battery\battery.mcs".
    Clean: Done.
    Executing: "C:\Program Files (x86)\SDCC\bin\sdcc.exe" chargeprocess.c -c -mpic14 -p16F877A
    Executing: "C:\Program Files (x86)\SDCC\bin\sdcc.exe" charger.c -c -mpic14 -p16F877A
    Executing: "C:\Program Files (x86)\SDCC\bin\sdcc.exe" dischargeprocess.c -c -mpic14 -p16F877A
    Executing: "C:\Program Files (x86)\SDCC\bin\sdcc.exe" display.c -c -mpic14 -p16F877A
    Executing: "C:\Program Files (x86)\SDCC\bin\sdcc.exe" menu.c -c -mpic14 -p16F877A
    Executing: "C:\Program Files (x86)\gputils\bin\gplink.exe" "C:\Users\noot\Desktop\pub\Nova pasta\Battery\chargeprocess.o" "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o" "C:\Users\noot\Desktop\pub\Nova pasta\Battery\dischargeprocess.o" "C:\Users\noot\Desktop\pub\Nova pasta\Battery\display.o" "C:\Users\noot\Desktop\pub\Nova pasta\Battery\menu.o" -o "battery.HEX"
    message: using default linker script "C:\Program Files (x86)\gputils\lkr\16f877a.lkr"
    error: missing definition for symbol "_lcd_message", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_T2CON", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_TRISE", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_adc_read", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_PORTA", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_adc_init", required by "C:\Users\noot\Desktop\pub\Nova
    error: missing definition for symbol "_CCP2CON", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    error: missing definition for symbol "_CCP1CON", required by "C:\Users\noot\Desktop\pub\Nova pasta\Battery\charger.o"
    Link step failed.
    BUILD FAILED: Tue Nov 05 18:55:10 2013

    ResponderEliminar
  40. hola no puedo descargar el esquema, al descargar bajo un archivo. zip pero los documentos internos no los puedo abrir, quiero realizar ese cargador, espero su pronta respuesta de alguien saludos

    ResponderEliminar
  41. https://www.youtube.com/watch?v=UOYxnr07zz0

    Dear Moderador,
    this project is so cool!? you to send me the complete circuit diagram and the source code of? this project. My mail address is rashid0214@gmail.com.
    thanks very much.

    ResponderEliminar
    Respuestas
    1. rob_caetano@yahoo.com.br

      Ola esta tudo ai no site e so baixa fiz e funciona que e uma beleza.
      gostaria de aprender a copilar para fazer umas mudanças nas variaveis
      pois esta dando alguns erros se e que o inventor me permita e agradeço pela
      publicação do artigo funciona muito bem.

      Eliminar
  42. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  43. the inductance calculation is wrong
    where do you come up with ~470u value

    ResponderEliminar
  44. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  45. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  46. hola felix disculpa me puedes proporsionar los planos de tu cargador es que me gustaria hacerlo para cargar unas baterias de litio este es mi correo solana1946@hotmail.com saludos espero q me puedas ayudar

    ResponderEliminar
  47. Sir, Can i use IRF9640 instead IRF9530? IRF540 instead IRFIRF530? and SR560 instead SB5100?

    Thanks in advance.

    ResponderEliminar
  48. Hola amigo, estoy tratando de de correr el programa en eclipse, pero la momento de correr me sale un error:
    Error: no se ha encontrado o cargado la clase principal felixls.ui.Runner
    Espero me puedas ayudar ya que estoy interesado en esta parte del proyecto.

    Gracias de antemano.
    Saludos.

    ResponderEliminar
  49. Hola Felix, he realizado tu proyecto y me parece fanatastico, solo que entro en el menu y cuando voy a cargar vuelve al inicio, a la bienvenida.
    El boton de start es como si volviera al menu anterior...
    sabes a que puede ser debido.
    Gracias anticipadas.

    ResponderEliminar
  50. hola feliz saludos desde colombiaporfavor me podrias pasar el esquematico del cargador de baterias y el listado de materiales te lo agradeceria mi correo es johangomez9624@gmail.com gracias .

    ResponderEliminar