Batería LiPo para drones
Índice:
- Conceptos generales sobre drones.
- Material necesario y montaje de los componentes hardware
- Mando RC y receptor. Programación en Arduino
- MPU6050 y su programación en Arduino
- → Batería LiPo
- Control de estabilidad y PID
- Motores, ESC y su programación en Arduino
- Calibración de hélices y motores
- Software completo y esquema detallado
- Probando el Software completo antes de volar
- Como leer variables de Arduino en Matlab
Introducción a las baterías LiPo para drones
La batería que yo utilizo es una 3S de 11.1V de tensión nominal y 2200mAh.
Empecemos con un poco de teoría básica… Una batería compuesta de 3 celdas en serie es una 3S y una compuesta de 10 celdas es una 10S. La tensión de cada celda puede variar en función de la carga de la que disponga (SOC), pero rondará los 3.7V. Esto hace que si tenemos una 3S su voltaje ronde los 3×3.7V = 11.1V.
Por otro lado, si hemos comprado una batería de 4400mAh (4.4Ah), significa que es capaz de entregar 4.4Amp ininterrumpidamente durante 1h. A esto se le llama descargar la batería a 1C o a corriente nominal. Ahora bien, ¿qué sucede si extraemos el doble de corriente (8.8A) ininterrumpidamente? Pues que la batería durará la mitad de lo previsto, media hora. Y así sucesivamente. Si extraemos por ejemplo 4 veces más de corriente de la nominal, la durará 4 veces menos, 15 minutos. Pero hay un límite de corriente máxima que podemos extraer de la batería, a partir del cual la puede sobrecalentarse en exceso e incluso llegar a explotar. La corriente máxima que se puede extraer de la batería tiene que venir especificada por el fabricante, normalmente en la propia etiqueta. En mi caso la corriente máxima de descarga es 30C, lo que equivale a 30×4.5A = 135A. Tener en cuenta que estamos extrayendo 15 veces más corriente de la especificada, ¡por lo que a batería durará 30 veces menos, ¡tan solo 2 minutos! Nunca lleguéis a estos límites de corriente de descarga por precaución.
Tiempo (min) = Capacidad de la batería (Amp*min) / Velocidad de descarga (Amp)
A mas amperios hora mas duración de batería, pero también mas peso y volumen. Tened esto en cuenta a la hora de comprar una. Para esta aplicación una de 4500Ah es lo ideal, no compréis una batería demasiado pesada con el objetivo de poder volar mas tiempo, es posible que el drone no pueda despegar por el exceso de peso.
Montaje Hardware de una batería
Un error muy común a la hora de trabajar con baterías es asumir que está completamente cargada estará a 11.1V, y cuando esté completamente descargada bajará a 0V. ERROR y MUCHO CUIDADO. Una batería a 0V está muerta, no descargada. Es muy importante saber identificar cuándo esta se ha descargado y detener el drone para no dañarla. Para ello habrá que monitorizar la tensión de nuestra batería continuamente y definir un umbral inferior de tensión a partir del cual el drone tendrá que detenerse y descender. Personalmente, nunca dejo que la tensión de cada celda baje de los 3.5V, lo que hace que la tensión de batería mínima sea de 10.5V. Con 10.5V considero que está totalmente descargada y detengo el drone. Cuanto más la descarguemos mas sufrirá y estaremos reduciendo su vida útil. Monitorizar la tensión de la batería durante el vuelo es extremadamente importante. Para ello necesitaremos un divisor resistivo. Recordad que las entradas analógicas de nuestra placa Arduino admiten únicamente tensiones inferiores a 5V, por lo que es necesario escalar la tensión de batería a un máximo de 5V. Los valores que yo he utilizado se muestran a continuación:
Como veis, cuando la batería está completamente cargada, la salida del divisor resistivo será de 4.8V, mientras que cuando esté descargada será de 4V, únicamente 0.8V de resolución, pero es más que suficiente para esta aplicación:
Fijaos también en la referencia de conector que incluye la batería que compréis. El conector más habitual suele ser el XT60. Fijaos en que sea compatible con vuestra placa de distribución de potencia, si no, tendréis que cortar los cables de la batería y hacer un empalme.
Software para lectura de batería
Leer una entrada analógica en Arduino es tan simple como esto:
float voltage = analogRead(A6) * (5.0 / 1023.0);
Pero cuidado. Hay que tener en cuenta que la alimentación de la placa no será exactamente de 5V, por lo que es importante medir con un polímetro la entrada +5V respecto de GND y anotar el valor de alimentación real que llega a nuestra placa. En mi caso esta tensión es de 4.92V, por lo que es necesario corregir este offset para no alterar la medida de la tensión de batería. De esta forma conseguimos minimizar el error de lectura a unos pocos mili-voltios:
float voltage = analogRead(A6) * (4.92 / 1023.0);
A continuación podéis encontrar el código que utilizo para leer la tensión de batería. Podéis cargarlo y comprobar que la lectura de la tensión de batería y la lectura hecha con polímetro son similares, en mi caso el error es de 10mV. Para poder ejecutarlo es necesario montar el divisor resistivo como hemos visto mas arriba :
#define usCiclo 50000 // Ciclo de ejecución de software en microsegundos
long loop_timer;
float tension_bateria, lectura_bat = 0.00;
void setup() {
Serial.begin(115200);
}
void loop() {
while (micros() - loop_timer < usCiclo); // Hacemos una lectura cada 'usCiclo' microsegundos
loop_timer = micros();
lectura_bat = analogRead(A6);
tension_bateria = 2.5 * (lectura_bat * 4.92 / 1023);
Serial.println(tension_bateria);
}
Advertencia de montaje
- Mucho cuidado a la hora de montar y cablear la batería y el divisor resistivo. Tenéis que aseguraros de que el polo positivo y el negativo nunca van a tocarse entre sí. Pensad que el drone puede chocar, puede perder el control y caer, puede aterrizar bruscamente… pues bien, en ninguna de estas situaciones podemos permitir que haya un cortocircuito. A la hora de hacer el conexionado pensad que tiene que ser algo robusto, que ninguno de los cables o aislamientos vaya a soltarse debido a un golpe. Dejad distancia entre los cables, aisladlos bien utilizando cinta aislante. Si los dos polos se tocan, se produce un cortocircuito y podemos generar un incendio.
- Finalmente, una advertencia. Cuidado también con dejar la batería conectada a nuestro drone durante largos periodos de tiempo. El consumo de corriente del divisor resistivo es ínfimo, pero puede acabar por descargárnosla hasta los 0V si la dejamos el suficiente tiempo conectada, haciendo que muera. Recomiendo hacer mediciones periódicas de la tensión de carga, aun teniéndola desconectada, para evitar que se auto-descargue por debajo de valores de tensión peligrosos.
Continuar con la siguiente entrada:
- Conceptos generales sobre drones
- Material necesario y montaje de los componentes hardware
- Mando RC y receptor. Programación en Arduino
- MPU6050 y su programación en Arduino
- Batería LiPo
- → Control de estabilidad y PID
- Motores, ESC y su programación en Arduino
- Calibración de hélices y motores
- Software completo y esquema detallado
- Como leer variables de Arduino en Matlab
Buenas, para el montaje del divisor resistivo ¿has utilizado también una placa de montaje? ¿Podrías incluir enlace de compra de las resistencias? ¿Hay que tener algún cuidado especial en el tipo de cableado a utilizar?
kedaria mui grande el dron este¿
Buenas Elver, uno 450mm, lo que mide el frame.
Un saludo!!
Hola de nuevo. Repasando este post me he dado cuenta de algunas cosas que no me terminan de cuadrar:
– Comentas que con el divisor resistivo que tu indicas, cuando la batería está totalmente cargada (11,1V) la salida del divisor y por tanto la entrada A6 tendrá una tensión de 4.8V y cuando esté descargada (10,5V) la salida del divisior y por tanto la entrada A6 tendrá una tensión de 4.0V. No obstante haciendo los cálculos con los valores de las resistencias que indicas no se obtienen dichos valores sino 4.44V cuando la batería está cargada y 4.2V con la batería descargada. De hecho, estos son los valores que aparecen en la gráfica que adjuntas.
– Por otro lado, tampoco entiendo la influencia de que la placa consuma 4.92V en lugar de 5V para después volver a escalar el valor del voltaje de A6 y obtener el voltaje real de la batería. Estos 4.92V significan que las entradas analógicas realmente solo pueden estar entre 4.92V y 0V.
– Por último, en la línea 20 del código que adjuntas multiplicas la lectura de la batería por 2.95 para obtener realmente la tensión de la batería a partir de la medida de A6. Pero según los valores del divisior resistivo que indicas, ¿no debería de ser 2.5? (180+270)/180=2.5
Buenas Alvaro,
Buen apunte 😉
Ahora mismo no puedo mirarlo, pero lo reviso sin falta.
Gracias
Muy buenas! Retomo el proyecto del drone, así que aprovecho y te pregunto ahora que estoy por este punto. He hecho las conexiones como indicas. Tengo una LiPo de 11.1V y 2200mAh. Cuando mido la tensión con el polímetro directamente sobre los polos positivo y negativo de la batería, me da 12.22V aprox. Después de compilar el código tal y como está en el post, leo en el monitor serie de Arduino el valor 13.73.
He medido también el valor de la salida del divisor de tensión y me da 4,78V aprox, por lo que el divisor de tensión veo que me da un resultado coherente.
Mi pregunta es, ¿qué estoy viendo realmente en el terminal? ¿Es coherente ese valor de 13,73V que veo en el terminal?
Muchas gracias!!
Hola Arduproject, se agradece todo este trabajo que estoy tratando de digerir. Ojalá hicieses un curso de Udemy con el tema del Drone, para los que no somos tan duchos sería muy bueno ir paso a paso porque nos aparecen muchas dudas.
Saludos.
Hola
Con la bateria de 4500mAh ¿Aproximadamente cuanto tiempo de vuelo tendría?
Hola, es muy difícil de estimar, ya que el consumo de los motores no es constante. Calcula unos 20mins.