Un osciloscopio con picos de corriente marcados entre largos periodos planos de reposo, conectado a una pequeña placa con microcontrolador
Contenido

Cómo medir el consumo de un microcontrolador correctamente

Cómo medir el consumo de un microcontrolador: rango dinámico, voltaje de carga, frecuencia de muestreo, aislar el riel y estimar la duración de la batería.

La hoja de datos (datasheet) dice 1.5 µA en reposo. El multímetro del banco dice 180 µA. El estimado de batería del plan de producto supuso el primer número, y el prototipo de un sensor de nivel para un tanque en un rancho de Chihuahua va a durar semanas en lugar de años. Ninguno de los dos números está mal; miden cosas distintas. Para medir el consumo de un microcontrolador de una forma que prediga la duración de la batería, tienes que capturar corrientes que abarcan cuatro o cinco órdenes de magnitud, que cambian en microsegundos y que no vienen solo del microcontrolador. Esta guía recorre los pasos, con la investigación en instrumentación y los métodos de benchmark que muestran dónde fallan las mediciones de siempre.

Puntos clave

  • Los dispositivos de bajo consumo abarcan un rango enorme: un estudio de un nodo sensor midió corrientes de cerca de 1 µA a 30 mA, y otro señala estados de energía del microcontrolador que abarcan cinco órdenes de magnitud.
  • Una resistencia shunt lo bastante grande para resolver microamperes tira demasiado voltaje con miliamperes. Esa caída (el voltaje de carga) baja la alimentación y sesga el resultado.
  • Los despertares cortos suelen dominar. En el ejemplo de abajo, 5 ms de actividad por segundo cuestan veinte veces más carga que los 995 ms restantes de reposo.
  • Mide solo el riel del microcontrolador, con el depurador desconectado; las sondas de depuración, los LED, los reguladores y las resistencias pull-up pueden sumar más corriente que el chip.
  • Benchmarks como el ULPMark-CoreProfile de EEMBC miden un ciclo completo de reposo y despertar porque eso, y no la cifra de reposo de la hoja de datos, es lo que vacía las baterías.

El problema: el número de la hoja de datos no es el número del producto

Las corrientes de reposo de la hoja de datos se miden con el chip solo, a un voltaje y una temperatura dados, con todos los periféricos apagados y los pines configurados para evitar fugas. Un prototipo tiene un regulador con su propia corriente de reposo, un sensor que nunca duerme, una entrada flotante, un LED y una sonda de depuración todavía conectada. Y la corriente promedio de un dispositivo que trabaja por ciclos la dominan la frecuencia y la duración de sus despertares, que la hoja de datos no puede conocer.

Medirlo bien es más difícil de lo que parece, porque la corriente cambia órdenes de magnitud en cuestión de milisegundos.

Paso 1: Decide qué necesitas saber

Hay dos preguntas distintas. La corriente promedio en un ciclo de operación realista predice la duración de la batería. La energía por evento (una lectura del sensor, una inferencia, una transmisión de radio) te dice qué parte del firmware optimizar. La segunda requiere una medición resuelta en el tiempo; la primera se puede hacer con un instrumento que promedia, solo si la ventana de promedio cubre muchos ciclos completos.

Paso 2: Elige un instrumento para el rango dinámico

Di Nisio y sus colegas, en IEEE Transactions on Instrumentation and Measurement (2016), estudiaron un nodo de sensores inalámbrico cuya corriente de trabajo iba de cerca de 1 µA a 30 mA, un rango de 30,000 a 1. Rottleuthner, Schmidt y Wählisch, al describir su sistema de medición in situ para dispositivos IoT de gama baja, señalan que los estados de energía de un microcontrolador pueden abarcar cinco órdenes de magnitud.

La dificultad central es la resistencia shunt. A modo de ilustración, un shunt de 1 Ω tira 30 mV con 30 mA, lo cual es aceptable, pero solo 1 µV con 1 µA, demasiado poco para medirlo bien. Un shunt de 10 Ω resuelve mejor los microamperes y tira 300 mV con 30 mA, lo que puede provocar un brownout en un dispositivo de 1.8 V o de 3.3 V. Di Nisio y sus colegas encontraron que un shunt simple subestima el consumo porque su caída baja el voltaje de alimentación, y que un amplificador de shunt convencional se equivocó en la corriente de apagado del nodo por cerca de dos órdenes de magnitud. Su solución mantuvo la carga a voltaje constante con un amplificador de realimentación, lo que permitió usar shunts más grandes. Los monitores de energía comerciales y las unidades de fuente-medición resuelven el mismo problema con cambio automático de rango o diseños con realimentación.

Las opciones prácticas, más o menos en orden de capacidad: un multímetro en modo de promedio (solo para estados estables), un shunt con osciloscopio o sistema de adquisición (ve las ráfagas, rango limitado), y un monitor de energía dedicado o una unidad de fuente-medición con cambio de rango automático (rango y velocidad).

Paso 3: Muestrea lo bastante rápido para ver las ráfagas

Un microcontrolador puede despertar, leer un sensor y volver a dormir en un milisegundo. Si el instrumento promedia en 100 ms o muestrea lento, se pierde o embarra esos eventos. Di Nisio y sus colegas adquirieron a 1 millón de muestras por segundo en ventanas de 100 s para medir su nodo. No siempre vas a necesitar esa velocidad, pero sí suficientes muestras dentro del evento más corto para integrar su carga.

Paso 4: Mide solo el riel que te interesa

Alimenta el microcontrolador desde el instrumento de medición y nada más. Quita o abre los puentes de los LED, sensores y reguladores que no quieres en el número, o mídelos en rieles separados. Desconecta la sonda de depuración: una sonda conectada puede mantener encendida la lógica de depuración y puede alimentar al chip por sus líneas de señal. El montaje de energía del benchmark MLPerf Tiny llega al punto de poner una interfaz de E/S aislada y con traductores de nivel entre la computadora y el dispositivo, para medir solo la potencia del núcleo.

Después configura el firmware como va a correr el producto: pines sin usar en un estado definido, periféricos y relojes sin usar apagados, y el modo de reposo real en uso.

Paso 5: Marca los eventos e integra

Cambia el estado de un pin GPIO al inicio y al final de cada evento que quieras atribuir (lectura del sensor, transmisión de radio, inferencia) y captúralo junto con la traza de corriente. Integra la corriente en la ventana marcada para obtener la carga, y multiplícala por el voltaje de alimentación para obtener la energía. Rottleuthner y sus colegas metieron este tipo de atribución por tarea en el propio sistema operativo, con llamadas para iniciar y detener el trazo, y reportaron errores medianos de corriente de cerca de 1 % a 200 µA y de 0.5 % arriba de 1.8 mA con un monitor de shunt comercial.

Paso 6: Convierte la medición en duración de batería

La corriente promedio es la suma de la corriente de cada estado por la fracción de tiempo que pasa en él. Un dispositivo ilustrativo duerme a 2 µA, despierta una vez por segundo durante 5 ms a 8 mA y transmite una vez por minuto durante 20 ms a 15 mA:

  • Despertares: 8 mA × 0.005 = 40 µA
  • Transmisiones: 15 mA × 0.020 / 60 = 5 µA
  • Reposo: unos 2 µA
  • Total: unos 47 µA

El despertar de 5 ms aporta veinte veces la carga de los 995 ms de reposo. Con una pila de botón de 620 mAh, 47 µA duran unas 13,200 horas, cerca de año y medio, antes de descontar temperatura, autodescarga y el comportamiento de la pila con cargas pulsadas. Las optimizaciones más efectivas casi siempre son despertar menos veces o por menos tiempo, no bajar la corriente de reposo.

El benchmark ULPMark-CoreProfile de EEMBC parte de la misma lógica: corre un ciclo de un segundo en el que la parte activa es cerca de 3 % del tiempo, así que el reposo y las transiciones de entrada y salida, incluida la retención de la RAM, dominan el puntaje.

Paso 7: Repite en distintos voltajes y temperaturas

La corriente de reposo, en particular, cambia con la temperatura y el voltaje de alimentación. Mide en los extremos que va a ver el producto, y al voltaje de la batería cerca del final de su vida, antes de confiar en el estimado.

Métodos para medir el consumo de un microcontrolador, comparados

Método Rango dinámico Resolución en el tiempo Voltaje de carga Sirve para Se le escapa
Multímetro en modo de promedio Moderado, rangos manuales Lenta (promedia) Puede ser grande en rangos bajos Corriente de reposo estable Ráfagas; cambios de rango
Shunt + osciloscopio o DAQ Limitado por el shunt elegido Rápida Crece con el valor del shunt Forma y duración de los eventos Reposo en microamperes con un shunt chico
Shunt + amplificador de corriente Limitado Moderada a rápida Lo fija el shunt Corriente activa Corrientes muy bajas (en un estudio, error de ~100×)
Monitor de energía o SMU con cambio de rango o realimentación Amplio (µA a decenas de mA y más) Rápida Bajo Ciclos completos, energía por evento Poco, si el riel está aislado
Monitor in situ en el dispositivo Moderado a amplio Moderada Bajo a moderado Mediciones largas en campo, atribución por tarea Eventos muy cortos a baja frecuencia de muestreo

Cómo ponerlo en práctica

Si tienes una hora

Desconecta el depurador, alimenta solo el riel del MCU desde tu instrumento y mide la corriente de reposo. Compárala con la cifra de la hoja de datos; una diferencia grande apunta a un pin con fuga, un periférico o una pieza externa.

Si tienes un sprint

Captura un ciclo de operación completo con un instrumento que cubra tu rango y muestree lo bastante rápido, marca cada evento con un GPIO y arma una tabla de carga por evento. Ordénalos y optimiza primero el más grande.

Si quieres que dure toda la vida del producto

Agrega una prueba de regresión de consumo que mida la corriente promedio en cada versión del firmware, con el ciclo de trabajo real del producto, y que falle si se pasa del presupuesto. Un cambio de una línea que deja corriendo el reloj de un periférico puede partir a la mitad la duración de la batería.

La pregunta que debes hacerte: “¿Qué evento de mi ciclo de trabajo cuesta más carga, y ya lo medí en el riel solo y con el depurador desconectado?”

Preguntas frecuentes

¿Cómo se mide la corriente de reposo de un microcontrolador?

Alimenta solo el riel del microcontrolador desde un instrumento que pueda resolver microamperes sin una caída de voltaje grande, desconecta el depurador y las demás cargas, configura pines y periféricos como va a correr el producto y espera a que la lectura se estabilice en el modo de reposo real.

¿Por qué mi corriente de reposo medida es mucho mayor que la de la hoja de datos?

Las causas comunes son una sonda de depuración conectada, pines flotantes o mal configurados, periféricos o relojes que se quedaron corriendo, piezas externas como reguladores, sensores y LED en el mismo riel, y medir en un modo de reposo más ligero que el que se quería.

¿Qué es el voltaje de carga en una medición de corriente?

Es el voltaje que cae en el medidor o en la resistencia shunt que mide la corriente. Baja el voltaje que llega al dispositivo, lo que puede cambiar su comportamiento o provocar un brownout con corrientes altas, y limita qué tan grande puede ser el shunt para resolver corrientes pequeñas.

¿Qué tan rápido tengo que muestrear la corriente?

Lo bastante rápido para tener varias muestras dentro del evento más corto que quieres medir. Los despertares y las ráfagas de radio pueden durar bastante menos de un milisegundo, así que es común usar de decenas a cientos de kilomuestras por segundo; un montaje de investigación muestreó a 1 MS/s.

¿Cómo estimo la duración de la batería a partir de mediciones de corriente?

Multiplica la corriente de cada estado de operación por su fracción de tiempo y suma para obtener la corriente promedio, luego divide la capacidad de la batería entre ese promedio. Descuenta temperatura, autodescarga, voltaje al final de la vida y efectos de las cargas pulsadas.

Lecturas relacionadas: cómo medir un demo de IA embebida, polling vs interrupciones vs DMA y de tarjeta de desarrollo a producto.

Fuentes

  1. Di Nisio, A., Di Noia, T., Guarnieri Calò Carducci, C., y Spadavecchia, M. (2016). “High Dynamic Range Power Consumption Measurement in Microcontroller Based Applications.” IEEE Transactions on Instrumentation and Measurement, 65(9), 1968–1976. https://doi.org/10.1109/TIM.2016.2549818
  2. Rottleuthner, M., Schmidt, T. C., y Wählisch, M. (2019). “Eco: A Hardware-Software Co-Design for In Situ Power Measurement on Low-end IoT Systems.” arXiv:1909.10609. https://arxiv.org/abs/1909.10609
  3. EEMBC. “ULPMark-CoreProfile.” https://www.eembc.org/ulpmark/ulp-cp/
  4. Banbury, C., Reddi, V. J., Torelli, P., Holleman, J., et al. (2021). “MLPerf Tiny Benchmark.” Proceedings of the Neural Information Processing Systems Track on Datasets and Benchmarks. arXiv:2106.07597. https://arxiv.org/abs/2106.07597
Escrito porAlphaCrew Studio

Creamos contenido técnico y animación, desarrollamos apps y plataformas a la medida y configuramos flujos de trabajo con IA para equipos de ingeniería y tecnología.