← Notas desde el banco de trabajo.
Por qué la corriente en reposo supera a la hoja de datos
La hoja de datos promete unos cuantos microamperes en reposo profundo. La placa en tu banco consume cientos. Un dispositivo pensado para funcionar años con una pila de botón duraría semanas, y el firmware parece correcto.
Rara vez el chip miente. La cifra de la hoja de datos describe el chip solo, en un modo con nombre, con cada pin en un estado conocido y nada más conectado. Tu producto agrega un regulador, sensores, una flash, un monitor de batería, una cabecera de programación y decenas de pines, y cada uno puede sumar corriente. Encontrar esos microamperes es un método, no una adivinanza. Empieza por saber exactamente con qué estás comparando.
Lee qué significa el número de la hoja de datos
Revisa tres cosas antes de comparar nada.
Primero, el modo. Los fabricantes usan nombres que no coinciden. STM32 Stop y Standby, nRF52 System ON idle y System OFF, y ESP32 light sleep y deep sleep son estados distintos que mantienen vivas cosas distintas. Una cifra de «deep sleep» puede incluir o excluir el reloj de tiempo real y la retención de RAM, y tu firmware puede estar usando un modo más ligero que el de la primera página.
Segundo, las condiciones: voltaje de alimentación, temperatura, qué fuentes de despertar están habilitadas, y si el número es típico o máximo. La fuga aumenta con la temperatura, así que una lectura a temperatura ambiente favorece a un dispositivo que va a vivir en un gabinete caliente.
Tercero, dónde se mide el número. Se mide en los pines de alimentación del chip. No incluye nada de lo que pongas alrededor del chip.
Descarta primero la sonda de depuración
La causa más común de una lectura equivocada es la herramienta que cargó el firmware.
En los STM32, el registro de configuración de depuración (DBGMCU_CR) contiene bits como DBG_STOP y DBG_STANDBY. Mantienen los relojes funcionando en los modos de bajo consumo para que un depurador pueda seguir conectado. El registro se limpia con un reset de encendido, no con un reset del sistema. Si reseteas el chip después de una sesión de depuración, los bits pueden seguir activos. El chip duerme, pero no del todo, y la corriente se queda por encima de la cifra de la hoja de datos hasta que se quita la alimentación.
En los nRF52, una sesión de depuración o un paso de programación puede dejar al chip en modo de interfaz de depuración. Eso mantiene parte del chip funcionando y suma corriente hasta que se reinicia la alimentación. Mientras hay un depurador conectado, System OFF se emula en lugar de ser real. Las propias respuestas del foro de Nordic dan el mismo consejo: reinicia la alimentación y luego mide.
Los kits de desarrollo ESP32 tienen otro problema. El kit trae un regulador lineal, un puente USB a serial y un LED de encendido, y juntos pueden consumir miliamperes sin importar lo que haga el chip. Una lectura en un kit de desarrollo no dice nada sobre la corriente en reposo del chip. Mide en el pin de alimentación del módulo, o en tu propia placa.
La regla es simple: mide una compilación de release, con la sonda desconectada, después de un ciclo completo de alimentación. La misma regla aplica en una línea de producción. Una unidad que se programa y se verifica sin un ciclo de alimentación puede leer alto por razones que no existirán en campo. Decide en qué punto del procedimiento de prueba se hace la lectura de corriente en reposo, y asegúrate de que se haya reiniciado la alimentación antes.
Los sospechosos de siempre
Una vez que la sonda queda fuera de la ecuación, la corriente excedente casi siempre está en la placa o en la configuración de los pines.
| Fuga | Cómo ocurre | Qué revisar |
|---|---|---|
| Pines | Entradas flotantes, o pines manejados contra una resistencia | El estado de cada pin en reposo, en el esquemático y en el firmware |
| Pull-ups | Una resistencia al riel en una línea mantenida en bajo | El valor de la resistencia y el nivel de la línea en reposo |
| Regulador | La corriente en reposo propia del regulador | Su curva con tu carga ligera real |
| Periféricos | Sensores, radios y cambiadores de nivel que arrancan encendidos | Los valores por defecto de los registros y el modo de apagado de cada parte |
| Flash | Flash SPI externa que se queda en standby | Su comando de deep power-down, y si el firmware lo envía |
Pines. Una entrada CMOS flotante puede quedar cerca de la mitad del riel, donde conducen los dos transistores de su etapa de entrada. La guía de bajo consumo de ST para STM32 es poner los pines sin usar en modo analógico, lo que apaga el disparador Schmitt de entrada y cualquier resistencia de pull. En el ESP32, los pull-ups y pull-downs internos vienen habilitados por defecto. Si un circuito externo maneja el pin durante el reposo profundo, circula corriente por ellos. La documentación de Espressif te indica aislar el pin con rtc_gpio_isolate() antes de dormir. Solo los pines con capacidad RTC pueden mantenerse o aislarse durante el reposo profundo, así que revisa la tabla de pines antes de asignar funciones.
Pull-ups. Un pull-up de 10 kΩ en un botón que se mantiene en bajo cuesta 330 µA a 3.3 V. Eso es solo V dividido entre R, y cualquier camino resistivo a través del riel lo cuesta de forma continua. Un par de resistencias de 1 MΩ que forman un divisor de voltaje de batería a través de 3.6 V cuesta 1.8 µA, que puede ser tan grande como todo el presupuesto de reposo. Muestrea la batería a través de un interruptor en lugar de dejar el divisor conectado, y elige los valores de pull-up para el estado de reposo, no solo para la velocidad de flanco.
Reguladores. La corriente en reposo de un regulador es un costo fijo que pagas todo el día. Un regulador lineal elegido por su caída de voltaje o su ruido puede consumir más solo por estar ahí que lo que consume el microcontrolador dormido. Lee la curva de corriente en reposo con tu carga y temperatura reales, no el número del encabezado. En un diseño que duerme la mayor parte del tiempo, el regulador es una decisión de primer orden.
Periféricos. Muchos sensores arrancan en un modo de conversión continua. Lee los valores por defecto de los registros y luego pon cada parte en su propio modo de apagado o de disparo único antes de que el microcontrolador duerma. Cuidado también con la alimentación inversa: un periférico alimentado que maneja un pin de un chip sin alimentar puede alimentar a ese chip a través de sus diodos de protección, y las lecturas dejan de tener sentido.
Flash. En ESP-IDF, el reposo profundo apaga la flash SPI sin importar la configuración, mientras que el light sleep la deja encendida por defecto. Espressif recomienda el modo deep power-down de la flash en lugar de cortarle la alimentación en light sleep. La misma lógica aplica a cualquier flash NOR externa: su corriente en standby suele ser muchas veces su corriente en deep power-down, y la parte se queda en standby hasta que el firmware le indique otra cosa — vale la pena revisarlo temprano si ya estás calificando una flash de segunda fuente para la placa.
Encuéntrala en el banco
Trabaja en este orden.
- Mide en la batería, con el instrumento correcto. Un multímetro de banco en un rango de microamperes pone una resistencia shunt en serie con la alimentación, y el voltaje que cae en ella puede provocar un brownout en el objetivo cuando el chip despierta. También cambia de rango a mitad de una ráfaga. Un perfilador de corriente, o un shunt pequeño leído con un osciloscopio o un amplificador de registro, no tiene este problema.
- Lee la traza, no el promedio. Las ráfagas de despertar se esconden dentro de los promedios. Un dispositivo que despierta una vez por segundo y consume 10 mA durante 10 ms promedia 100 µA solo por la ráfaga, muy por encima de un piso de reposo de unos cuantos microamperes. Los picos periódicos son despertares: el RTC, un watchdog, un intervalo de radio o una interrupción de sensor. Un piso plano y elevado es una fuga estática. Formas distintas tienen causas distintas.
- Marca la traza. En una compilación de depuración, alterna un pin libre en cada estado del firmware para poder alinear el código con la corriente. Quita el marcador antes de la medición final, porque el pin mismo consume corriente.
- Divide el hardware por mitades. Levanta la salida del regulador, quita el sensor o corta un puente de un riel completo, y observa cómo baja el piso. Esto solo funciona si la placa te lo permite.
- Mide en caliente. Repite a la temperatura que el producto verá realmente. Una fuga invisible a temperatura ambiente puede dominar en el extremo alto del rango.
Deja espacio para encontrarla la próxima vez
Unas cuantas decisiones de layout abaratan mucho la próxima ronda de depuración.
- Un footprint de shunt en la ruta de la batería. Un enlace de cero ohms que puedes reemplazar por un shunt de medición, o un lugar limpio para insertar un medidor.
- Rieles conmutados para sensores y flash. Un interruptor de carga convierte una fuga terca en una línea de firmware.
- Puntos de prueba y puentes en cada riel. Son lo que hace posible dividir por mitades sin retrabajo.
- Divisores del monitor de batería que se puedan apagar.
- Una verificación de corriente en reposo en la prueba de producción. Atrapa la unidad con un error de ensamblaje o un puente de soldadura perdido, y es donde aparece la lectura de «programada pero sin ciclo de alimentación». Pertenece al diseño del fixture, no es algo que se agregue al final.
La corriente en reposo es a la vez un problema de la placa y del firmware, y por eso sigue sin resolverse cuando se depuran por separado. Trabajamos en ambos lados. Envíanos el esquemático, una compilación del firmware, una traza de corriente del estado de reposo, y la batería y la duración de batería que necesitas.
¿Persigues una corriente en reposo que no coincide con la hoja de datos? Encontramos a dónde se va la corriente, en la placa y en el firmware.
Herramientas para este tema
- Grabador ESP32 en el navegador Graba un .bin por USB desde el navegador. Lee primero el chip y el archivo, y rechaza firmware compilado para otro chip, otra revisión u otro tamaño de flash.
- Grabador STM32 en el navegador Graba un .dfu, .hex o .bin por USB DFU desde el navegador. Lee primero el mapa de flash y la identidad del chip y rechaza firmware cuyos bytes o tabla de vectores no le pertenecen. Nunca toca los option bytes.
- Terminal serie en el navegador Conecta una placa USB y lee o envía texto y hex por serie desde el navegador. Velocidad y formato, perfiles de reset DTR/RTS para ESP32 y Arduino, marcas de tiempo y registro guardado. Nada sale de tu computadora.
Notas relacionadas
- Logging to an SD card without corrupting it on power loss How to log to an SD card without corrupting it when power drops: when to sync FAT, where littlefs fits, and the hold-up hardware that matters.
- Why a load cell reading drifts with an HX711 Why load cell readings creep or jump with an HX711, and the wiring, reference, filtering and calibration checks that separate real drift from noise.
- Why a current monitor reads wrong at 1 mA Why an INA226-class shunt monitor misreads small currents, how to size the shunt, and when to switch ranges or measure sleep current another way.