ARM Cortex M Consumo de energía: durmiendo con velocidades de reloj más altas versus velocidades de reloj más bajas

4

Estoy empezando con los procesadores Cortex M, pero tengo mucha experiencia con las MCU de 8 bits.

Supongamos que tengo un búfer que debe actualizarse cada 5 ms. Hay una interrupción que se realiza cada 5 ms y el búfer se actualiza y se ejecutan los cálculos necesarios. La MCU vuelve a dormir, hasta que se produce la siguiente interrupción.

A 500 KHz en mi 8051 MCU, esta tarea toma 3 ms. A 32MHz en mi 8051 MCU, esta tarea toma (compuesto número) 0.2ms.

En el 8051, descubrí que se necesitaba menos corriente para ejecutar realmente la MCU a 500 KHz y dormir por menos tiempo entre la interrupción de 5 ms, en lugar de ejecutarla a la velocidad más rápida (32MHz) y dormir más tiempo.

En un PIC, fueron los resultados inversos. Era mejor ejecutar el MCU rápido y dormirlo rápidamente. (PIC tiene una excelente nota de aplicación sobre el ahorro de energía, y mencionan ambos enfoques).

Para los procesadores Cortex M, ¿es más eficiente energéticamente ejecutar el sistema rápidamente y dormirlo rápidamente? ¿O debería apuntar a la velocidad de reloj más lenta?

Entiendo que este cálculo depende de la tarea, obviamente, si necesita una interrupción de 48MHz (o cualquiera que sea la velocidad máxima del reloj de la MCU), este es un punto discutible.

Pero en general, ¿qué han visto cuando perfilan sus sistemas?

Estoy seguro de que el Cortex M utiliza menos energía por aumentos de MHz por la hoja de datos, pero me darían una paliza si mi 8051 dice lo mismo, pero en realidad no funciona así cuando empecé a mezclar en el modos de ahorro de energía.

    
pregunta Leroy105

1 respuesta

3

Esto depende mucho de su aplicación exacta, MCU exacta y circuito exacto. No hay una opción definitiva entre "dormir mucho, correr rápido" o "correr lento todo el tiempo", ya que hay muchas maneras de "dormir" y "correr".

La mayoría de las MCU tienen diferentes "profundidades" de los modos de suspensión. Puede dormir con un oscilador interno de 32 kHz, despiértese y luego ejecute desde un oscilador interno más rápido, o inicie un PLL interno y multiplique el oscilador para obtener una velocidad más alta (pero el PLL toma tiempo = energía para comenzar), puede despertarse y comenzar a Cristal externo (también lleva tiempo y poder para estabilizarse).

Algunas MCU tienen periféricos que pueden hacer mucho sin usar la MCU (por ejemplo, el PRS en EFM32). Si dice que necesita una interrupción periódica para calcular algo, entonces probablemente también necesite ingresar los datos (a menos que solo el estado interno sea importante). Algunas MCU pueden usar temporizadores y DMA para activar el ADC, transferir datos y solo activar la CPU cuando, por ejemplo. 1000 muestras están listas, por lo que puede dormir mucho más si simplemente cambia los requisitos de su aplicación.

En un proyecto en el que he trabajado, un STM32L011 tenía la mejor eficiencia energética cuando dormía con un oscilador interno de 32 kHz y funcionaba desde el oscilador interno de 2,1 MHz. No generalizar. Si mis cálculos fueran más exigentes, tal vez aumentar la velocidad del reloj para reducir el tiempo de procesamiento podría brindar una mejor eficiencia de energía (incluso a costa de tener que esperar a que el sistema del reloj se reconfigure y estabilizar).

    
respondido por el filo

Lea otras preguntas en las etiquetas