Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

¿Qué tan bajo (potencia) puedes llegar?

En mi última publicación, "Fundamentos del modo de bajo consumo de Arm Cortex-M", exploramos los fundamentos de los modos de bajo consumo que se pueden encontrar en todos los procesadores Arm Cortex-M y cómo podríamos aprovechar las instrucciones WFI y WFE para poner un procesador dormir. Sin embargo, la pregunta que realmente permanece es ¿cómo se implementan estos modos de bajo consumo en un microcontrolador real y cómo afectan esos modos a nuestro sistema integrado? En esta publicación, exploraremos con más detalle cómo podemos poner un microcontrolador a dormir y ver cuánta energía nos compra.

Experimentación en modo de bajo consumo

La mejor manera de explorar los modos de bajo consumo es seleccionar un microcontrolador y ejecutar el procesador en varios modos de bajo consumo. Para esta publicación, decidí desempolvar mi probada y verdadera placa NXP Kinetis-L Freedom con la que no solo he experimentado, sino que he utilizado en muchos productos, aplicaciones y cursos. También decidí, bien o mal, medir no solo la cantidad de energía que extraía el microcontrolador, sino toda la placa de desarrollo. La MCU suele ser uno de los dispositivos que más energía consume en una placa, pero a menudo he descubierto que medir la corriente del sistema completo me recuerda que no es el único consumidor de energía en la placa. La optimización del microcontrolador puede ser muy útil, pero no siempre es el único dispositivo que puede requerir optimización energética.

Comience con una medición de referencia

Siempre que estoy trabajando para optimizar el consumo de energía de un producto, primero empiezo tomando una medición de energía de referencia. Esto se hace normalmente perfilando el consumo de corriente del dispositivo durante varios segundos o minutos para comprender dónde estamos comenzando. Para mi experimento con la placa de desarrollo, dejé el Kinetis-L en modo de ejecución sin suspensión implementada, todos los periféricos encendidos y configuré la placa para alternar un LED periódicamente. Usando IAR Embedded Workbench con un depurador I-Jet y el I-Scope, pude perfilar una línea de base simple para mi placa ~ 16.9 mA cuando el LED estaba apagado y ~ 18.0 mA cuando el LED estaba encendido, que se puede ver a continuación en Figura 1. Como puede ver, es importante tener en cuenta de dónde toma su medida o, de lo contrario, puede estar significativamente desviado en su análisis.

haz clic para ampliar la imagen

Figura 1. Una medida de corriente de la placa de desarrollo con un LED alternando una vez por segundo. (Fuente:Autor)

Optimización de la energía con los modos de espera y sueño profundo

La forma más rápida de ver algunos ahorros de energía es implementar el modo de espera o de suspensión profunda. Un examen de la hoja de datos de los procesadores Kinetis-L muestra que el modo de espera consume entre 3.7 y 5.0 mA a 3 voltios. En este modo, la CPU y los relojes periféricos están deshabilitados, pero el flash está en modo dormido, lo que permite que el procesador aún se despierte dentro de un marco de tiempo de interrupción (12-15 ciclos de reloj). El modo de espera es fácil de implementar, el código para ingresar al modo de espera se puede ver a continuación:

void Sleep_Wait (void)
{
SCB_SCR &=~ SCB_SCR_SLEEPDEEP_MASK;
asm (“WFI”);
}

Desplácese o arrastre la esquina del cuadro para expandir según sea necesario.

Con solo esas dos líneas de código, el consumo de corriente de la placa de desarrollo cae de 18,0 mA a 15,9 mA. ¡Eso es una disminución del 11,6% en el consumo actual! Si la placa estuviera alimentada por una batería de 680 mA, la duración de la batería del dispositivo habría pasado de 37,8 horas a 42,8 horas. ¡Un aumento de cinco horas con solo dos líneas de código!

Lo bueno de estos modos de potencia de alto nivel es que fácilmente podemos dar un paso más. En lugar de poner el procesador en modo de espera, podemos moverlo a un modo de espera de suspensión profunda usando el siguiente código:

void Sleep_Deep (void)
{
SCB_SCR | =SCB_SCR_SLEEPDEEP_MASK;
asm ("WFI");
}

Desplácese o arrastre la esquina del cuadro para expandir según sea necesario.

Todo lo que hicimos fue ajustar un solo bit en el registro SCB_SCR y ahora hemos pasado de un consumo de corriente original de 18 mA a 14,8 mA. ¡Eso es una disminución del 17,8% en el consumo actual! Nuevamente, suponiendo que la placa se alimentara con una batería de 680 mA, ¡la duración de la batería ahora habría pasado de 37,8 horas a 46 horas! ¡Estos son grandes ahorros por solo un par de líneas de código y es solo la punta del iceberg!

Aprovechamiento de los modos Stop y VLLS para consumo de corriente uA

El uso del modo de parada tiene el potencial de reducir aún más el consumo de corriente de la MCU hasta otros dos miliamperios al deshabilitar los relojes del núcleo y del sistema. Lo que encontrará es que cuanto menor es el modo de energía, más código se necesita para implementarlo y más complejo se vuelve el código para reactivar el sistema. El código para ingresar al modo de parada en el Kinetis-L se puede ver a continuación:

void Sleep_Stop (void)
{
volatile unsigned int dummyread =0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL | =SMC_PMCTRL_STOPM (0);
dummyread =SMC_PMCTRL;
Sleep_Deep ();
}

Desplácese o arrastre la esquina del cuadro para expandir según sea necesario.

Observe que el modo de parada se controla a través de un registro de control de administración de energía y una vez que se establece el estado, se llama a la función Sleep_Deep para terminar de configurar el modo de energía y ejecutar WFI.

Hasta este punto, hemos estado hablando del dibujo de la MCU de 1 a 2 mA. ¡Un microcontrolador moderno tendrá modos de energía que pueden generar microamperios o incluso nanoamperios! El procesador Kinetis-L debutó alrededor de 2013, y su modo de parada de fugas muy bajas (VLLS) consume solo de 135 a 496 microamperios. El código para inicializar este modo de energía se puede ver a continuación:

void Sleep_VLLS1 (void)
{
volatile unsigned int dummyread =0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL | =SMC_PMCTRL_STOPM (0x4);
SMC_VLLSTRL =SMC_VLLSCTRL_LLSM (1);
dummyread =VLLS_CTRL;
Sueño_profundo ();
}

Desplácese o arrastre la esquina del cuadro para expandir según sea necesario.

En este punto, ¡el microcontrolador no consumiría casi nada de energía!

El efecto de los modos de bajo consumo en la latencia de activación

Como hemos visto hasta ahora, mover el procesador a modos de energía cada vez más bajos es una excelente manera de ahorrar energía, pero esos ahorros tienen un costo. Cuanto menor sea el estado de energía del procesador, más tiempo se necesita para que el procesador se active y realice un trabajo útil. Por ejemplo, si tuviera que usar el modo de parada estándar, se necesitarían 2 us más la latencia de interrupción para que el procesador se active y comience a ejecutar el código nuevamente. No está mal. Sin embargo, si tuviera que usar uno de los modos VLLS en el Kinetis-L, ¡tendría una latencia de activación al arrancar el procesador más otros 53 a 115 microsegundos! Esto puede no ser aceptable según la aplicación. La Figura 2 muestra transiciones adicionales de los modos de bajo consumo al estado de ejecución en el Kinetis-L.

haz clic para ampliar la imagen

Figura 2. Tiempos de transición de los modos de bajo consumo a varios modos en el Kinetis-L. (Fuente:hoja de datos de Kinetis-L)

Conclusión

Los microcontroladores Arm tendrán todos los modos estándar de bajo consumo, pero cada proveedor de silicio personaliza los modos de bajo consumo que están disponibles para los desarrolladores. Como hemos visto, los proveedores de silicio a menudo ofrecen varios modos que actúan como fruta madura que tienen un efecto mínimo en la latencia de activación. ¡También proporcionan varios modos de muy bajo consumo que casi apagan el procesador y consumen solo unos pocos cientos de microamperios o menos! Los desarrolladores a menudo necesitan equilibrar la cantidad de energía que quieren consumir con la rapidez con la que necesitan que su sistema se despierte y responda a los eventos. Las compensaciones son definitivamente específicas de la aplicación, por lo que no espere poder ejecutar el modo de energía más baja en cada producto y aplicación.


Jacob Beningo es un consultor, asesor y educador de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente su software, sistemas y procesos. No dude en contactarlo en [email protected], en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes.


Incrustado

  1. ¿Cómo se puede aprovechar la supervisión de impresoras 3D para escalar la fabricación aditiva?
  2. ¿Cómo se puede escalar a producción aditiva en serie con MES aditivo?
  3. La placa de visión de IA de bajo consumo dura "años" con una sola batería
  4. Cómo los datos de IIoT pueden impulsar la rentabilidad en la fabricación ajustada
  5. ¿Cuántas realidades puede tener en automatización industrial?
  6. Cómo un corte de energía puede dañar sus suministros de energía
  7. Causas del factor de potencia bajo
  8. Aprenda a soldar latón naval
  9. ¿Cómo cargo un capacitor?
  10. Cómo ajustar PDP puede ahorrarle dinero
  11. ¿Cómo se puede fortalecer el sistema hidráulico?