
Qué tipo de tontería, algunos lectores probablemente pensarán cuando vean el título de la publicación. ¿El autor cometió un error en el recurso? ¿O se planeó colocarlo en el centro "Geek Health"? Y estarán en parte en lo cierto, pero solo en parte ... Bajo el corte, hablaremos sobre un método para reducir y optimizar el consumo de energía de los dispositivos electrónicos.
Hace algún tiempo, la placa X-NUCLEO-LPM01A cayó en mis manos, que por el momento estaba inactiva hasta que decidí estudiar el consumo de energía de un dispositivo diseñado con energía autónoma.

Esta placa fue desarrollada por STMicroelectronics y se posiciona como "Power Shield, placa de expansión Nucleo para la medición del consumo de energía". No encontré una descripción explicativa en idioma ruso en la red para trabajar con este devkit y decidí resolverlo yo mismo, y al mismo tiempo compartir información con la respetada comunidad de habro.
Si destacamos la principal, la placa de expansión es una fuente de energía programable de 1.8 a 3.3 voltios con la capacidad de medir la corriente de carga en tiempo real (en modo dinámico hasta
50 mA) con una frecuencia de muestreo de hasta 100 kHz. El dispositivo puede funcionar de forma independiente y como parte de un complejo de hardware y software. Para mostrar gráficamente los valores medidos, se utiliza la utilidad STM32Cube MonitorPower . Este software también le permite establecer todos los parámetros necesarios y llevar a cabo el procesamiento en caso de que ocurra un evento (inicio del disparador). X-NUCLEO-LPM01A está afilado para trabajar con placas Nucleo-32 (64, 144), Arduino Nano (Uno), para este propósito se colocan los escudos correspondientes, pero es posible trabajar con placas arbitrarias. La foto a continuación muestra la conexión del dispositivo en estudio a uno de los conectores de la placa.

Además del software de aplicación, X-NUCLEO-LPM01A admite el modo de comando, para el cual cualquier programa de terminal debería funcionar. (Aquí parece que me emociono un poco, HTerm terminó con una media patada, pero tuve que jugar un poco con mi ZOC favorito). Además, a juzgar por la descripción, a través del uso del controlador VCP, el dispositivo puede verter datos en el puerto COM con una velocidad de hasta 3686400 baudios. Se garantiza una velocidad tan alta en particular mediante la transmisión de un flujo de datos binarios (para frecuencias de muestreo superiores a 50 KHz), para los caracteres ASCII la velocidad es ligeramente menor.
Más específicamente, la tarea que intentaré resolver usando X-NUCLEO-LPM01A es:
Para obtener información sobre el consumo dinámico de energía de los nodos de interés en el producto diseñado utilizando el disparador X-NUCLEO-LPM01A en los lugares estudiados del código del programa.
En el proceso de funcionamiento continuo del dispositivo para organizar la acumulación de los fragmentos necesarios para su posterior análisis generalizado.
La captura de pantalla siguiente muestra el registro actual de la tarjeta SD durante la grabación de datos.

STM32Cube MonitorPower permite no solo cualitativamente, sino también cuantitativamente evaluar el consumo de energía del dispositivo en estudio. Los valores mínimos, máximos y promedio de la corriente consumida y el valor de energía integrado se muestran en la parte inferior de la imagen. Dichos datos están disponibles tanto para la medición completa como para el fragmento seleccionado.
En el manual del usuario, se observa que la activación del disparador de la medición se lleva a cabo por un impulso en la pata del escudo arduino D7. Al final resultó que, solo un inicio del proceso con la grabación continua posterior funciona. El intento de organizar un modo de inicio-parada para registrar la corriente (en ambos frentes del pulso) no tuvo éxito. Es decir, una vez que comienza a grabar en el lugar correcto en el frente ascendente, no es posible ralentizar el proceso con un frente descendente del pulso. Y esto no es exactamente lo que esperaba obtener de este dispositivo.
Se puede establecer un modo de inicio-parada totalmente controlado utilizando la secuencia de comandos del programa del terminalel equipo | la descripcion |
htc | captura de control de host |
volt 3300-03 | tensión de alimentación en el canal medido 3300 mV |
acqtime 0 | medición continua sin límite de tiempo |
freq 10000 | frecuencia de muestreo 10 kHz |
empezar | inicio de medición |
... | medición (los datos se vierten en el terminal) |
parar | fin de la medida |
El problema es que este es un control manual que no está sincronizado con los eventos en el controlador de destino. Por supuesto, puede intentar formar la secuencia de comandos indicada en el lado del dispositivo en estudio, no en el host, pero luego el flujo de salida de datos de X-NUCLEO-LPM01A también se rociará en el controlador y no está claro qué hacer con ellos, y la redirección de la salida a "algún lugar_ a_otro_ lugar" tampoco está disponible, ( aunque hay pines UART Tx, Rx en la placa, aparecen como "reservados" en el manual y probablemente no estén involucrados en la versión actual del firmware). Salí de esta situación de la siguiente manera:
La siguiente secuencia de comandos se forma en el lado del host (computadora)el equipo | la descripcion |
htc | captura de control de host |
volt 3300-03 | tensión de alimentación en el canal medido 3300 mV |
acqtime 1 | duración de la medición (se puede usar un rango de 10 μs a 10 segundos) |
trigsrc d7 | sincronización del comienzo de la medición con un borde ascendente pulso en el pin D7 |
freq 10000 | frecuencia de muestreo 10 kHz |
empezar | inicio de medición |
... | medición (los datos comienzan en el borde del pulso y se detienen vierta después del tiempo especificado en acqtime) |
Ahora los datos se capturarán en lotes, en lugar de en una secuencia continua. Este enfoque le permite explorar el consumo del circuito en diferentes lugares del programa y en diferentes intervalos de tiempo, que están bastante lejos el uno del otro. Es decir, si es necesario recopilar información sobre el consumo de energía de un dispositivo que funciona una hora (día, semana), no es necesario que escriba una secuencia continua, e incluso con una frecuencia de muestreo máxima, y luego comprenda este desorden, solo proporcione el algoritmo de operación anterior. Y si el programa del terminal escribe marcadores de tiempo en su registro, como se muestra en la imagen a continuación, entonces será bastante simple analizar el historial de eventos desde dicho archivo.

Es como una grabadora de video con detección de movimiento y marcas de tiempo.
Déjame darte un par de capturas de pantalla obtenidas usando X-NUCLEO-LPM01A . El primero es el consumo de energía del controlador mientras lee datos del ADC incorporado. Se leen 32 valores por interrupción del temporizador con una frecuencia de 4 KHz y se almacenan en la memoria.

En el segundo: lectura y almacenamiento de datos similar, pero solo el controlador "se permite dormir" después de cada medición, hasta que se produce la siguiente interrupción del temporizador, utilizando uno de los modos de ahorro de energía disponibles.

Un delta significativo en el consumo de corriente durante la medición, ~ 6 mA, se nota inmediatamente. Estos dos ejemplos no pretenden optimizar el consumo de energía de los dispositivos de baja potencia, sino que solo demuestran las capacidades del X-NUCLEO-LPM01A , que es capaz de medir corrientes de 1 nA.
En conclusión, diré que, en mi humilde opinión, este dispositivo parece ser una herramienta perfectamente adecuada que puede ocupar el lugar que le corresponde al lado del osciloscopio y el analizador de señales lógicas en la mesa de inserción. Y el uso del enfoque descrito permitirá no solo "moderar el apetito del controlador" en el desarrollo de dispositivos críticos de energía, sino también comprender mejor la dinámica de los procesos en los diversos modos de ahorro de energía utilizados activamente por los desarrolladores de dispositivos electrónicos modernos.
El costo del tablero: más de 7,000 rublos, eclipsa el arcoíris de la imagen, pero ¿una cantidad tan insignificante en la actualidad puede evitar que un verdadero geek tenga este maravilloso kit de desarrollo?
PD A pesar de la indicación en UM de que UART está reservado para futuras aplicaciones, todavía me quedé pegado y descubrí que vive como una segunda interfaz (la E / S está duplicada desde VCP) a una velocidad de 921600 8N1 y puede usarse como un comando, formando inicio y parada para el comienzo: el final de la medición. La desventaja de este enfoque será la disponibilidad obligatoria de UART gratis en el lado del controlador en estudio, sin mencionar el hecho de que 921600 baudios son a menudo imposibles a bajas frecuencias de reloj.
PPS Ya después de escribir el artículo, noté una diferencia en las últimas imágenes de ~ 2 mA en la entrada de la medición y al final de la misma. Probablemente no apagué el reloj ADC, o dejé el temporizador para trabajar, pero esto es, como le gusta decir a Leonid Kanevsky: "una historia completamente diferente" ...