El kode dot integra un sistema de alimentación complejo y sofisticado, pero a la vez robusto, modular y fácil de usar. Se puede alimentar de tres maneras: de la batería de 500mAh, del USB-C o a través de los conectores externos.El sistema está formado por estos componentes:
Power Management Integrated Circuit (PMIC)
Indicador de combustible (Fuel Gauge, en español no tiene mucho sentido la traducción)
La parte central del sistema de alimentación es un PMIC que se encarga de gestionar de dónde se obtiene la energía, si de la batería, del USB-C o de los conectores externos.Además, el PMIC se encarga de la seguridad y la protección de los componentes, asegurando la protección contra sobrecargas, cortocircuitos o sobrecorrientes. Además,nos permite obtener datos de la batería y de la alimentación.También permite generar desde la batería un bus de 5V y hasta 2A de corriente que se puede usar para alimentar periféricos externos a través de los conectores externos.
El fuel gauge es un componente que se encarga de medir varios datos de la batería y darnos un análisis de su estado.Así podemos conocer los siguientes datos de la batería:
Capacidad restante
Estado de carga
Tiempo restante de uso
Voltaje de la batería
Temperatura de la batería
Salud
Corriente de salida o entrada
Además, nos avisa ante posibles problemas como sobrecargas, cortocircuitos, sobrecorrientes, etc.
Este es el principal regulador de tensión del kode dot y soporta hasta 1A de corriente. Se encarga de estabilizar la tensión a 3V3 y alimenta estos integrados:
ESP32-S3
Expansor de pines
Reloj de tiempo real
Amplificador de audio
Micrófono
IMU de 6 ejes
Magnetómetro de 3 ejes
Así, cuando el kode dot entre en estado de suspensión, este regulador se encarga de mantener la tensión en el ESP32-S3 y a los integrados internos.
El bus de 5V y 2A que genera el PMIC está conectado al conector superior y al trasero del kode dot. Si el USB-C está conectado, la potencia del bus de 5V proviene de este. Si no está conectado, la potencia del bus de 5V proviene de la batería.Además, se puede conectar por uno de los conectores externos una fuente externa de alimentación de 5V para cargar el kode dot.
No conectes una fuente externa de 5V a la vez que está conectado el USB-C.
Este regulador se puede activar o desactivar para darle alimentación a los periféricos del kode dot. Por defecto está activado, para desactivarlo pon el siguiente pin en LOW:
Con este código puedes ver los parámetros que devuelve el fuel gauge de la batería.
bq27220_test.ino
Copy
/** * Example usage of the Texas Instruments BQ27220 battery fuel gauge. * Reads state of charge, voltage, current, and temperature over I²C. * Displays charging status and estimated time to full when charging. *//* ───────── KODE | docs.kode.diy ───────── */#include <Wire.h>#include <BQ27220.h>/* I²C pin configuration for ESP32-S3 */#define SDA_PIN 48 /* SDA line */#define SCL_PIN 47 /* SCL line *//* Battery fuel gauge driver instance */BQ27220 gauge;void setup() { /* Initialize serial port for debug output */ Serial.begin(115200); /* Start I²C bus with custom SDA/SCL pins */ Wire.begin(SDA_PIN, SCL_PIN); /* Initialize the BQ27220 fuel gauge */ if (!gauge.begin()) { Serial.println("BQ27220 not found!"); while (1) delay(1000); /* Halt execution if not found */ } Serial.println("BQ27220 ready.");}void loop() { /* Read battery parameters */ int soc = gauge.readStateOfChargePercent(); // State of charge (%) int mv = gauge.readVoltageMillivolts(); // Voltage (mV) int ma = gauge.readCurrentMilliamps(); // Current (mA), positive = charging float tC = gauge.readTemperatureCelsius(); // Temperature (°C) /* Print basic battery information */ Serial.print("SOC= "); Serial.print(soc); Serial.print("% "); Serial.print("V= "); Serial.print(mv); Serial.print(" mV "); Serial.print("I= "); Serial.print(ma); Serial.print(" mA "); Serial.print("T= "); Serial.print(tC, 1); Serial.print(" °C"); /* If charging, show estimated time to full */ if (ma > 0) { int ttf = gauge.readTimeToFullMinutes(); Serial.print(" TTF= "); Serial.print(ttf); Serial.print(" min"); } Serial.println(); delay(1000); /* Update once per second */}
Puedes probar los códigos de ejemplo mediante el IDE de Arduino o el IDE de ESP-IDF o descargar los códigos en nuestro drive:Códigos de la alimentación