Estoy empezando con procesadores Cortex M, pero tengo mucha experiencia con MCU de 8 bits.
Digamos que tengo un búfer que debe actualizarse cada 5 ms. Hay una interrupción que ocurre cada 5 ms y el búfer se actualiza y se ejecutan los cálculos necesarios. La MCU vuelve a dormir, hasta que ocurre la siguiente interrupción.
A 500 KHz en mi MCU 8051, esta tarea tarda 3 ms. A 32MHz en mi MCU 8051, esta tarea toma (número compuesto) 0.2ms.
En el 8051, descubrí que requería menos corriente para ejecutar la MCU a 500 KHz y dormir durante menos tiempo entre la interrupción de 5 ms, en lugar de ejecutarlo a la velocidad más rápida (32 MHz) y dormir más.
En un PIC, fueron los resultados inversos. Era mejor ejecutar la MCU rápido y dormirla rápidamente. (PIC tiene una gran AppNote 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 48 MHz (o cualquiera que sea la velocidad máxima del reloj de MCU), este es un punto discutible.
Pero, en general, ¿qué han visto al perfilar sus sistemas?
Estoy seguro de que el Cortex M usa menos energía por aumento de MHz según la hoja de datos, pero que me aspen si mi 8051 dice lo mismo, pero en realidad no funciona así cuando comencé a mezclar los modos de ahorro de energía. .
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 formas de "dormir" y "correr".
La mayoría de las MCU tienen diferentes modos de "profundidad" de suspensión. Puede dormir con el oscilador interno de 32kHz, despertarse y luego ejecutar desde un oscilador interno más rápido, o iniciar un PLL interno y multiplicar el oscilador para obtener una velocidad más alta (pero el PLL toma tiempo = energía para comenzar), puede despertarse y comenzar un cristal externo (también requiere tiempo y energía para estabilizarse).
Algunas MCU tienen periféricos que pueden hacer mucho sin usar la MCU (p. ej., 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 importe el estado interno). Algunas MCU pueden usar temporizadores y DMA para activar el ADC, transferir datos y solo reactivar la CPU cuando, p. 1000 muestras están listas, por lo que puede dormir mucho más si solo cambia los requisitos de su aplicación.
En un proyecto en el que trabajé, un STM32L011 tenía la mejor eficiencia energética cuando dormía con un oscilador interno de 32 kHz y funcionaba con un oscilador interno de 2,1 MHz. No generalices. Si mis cálculos fueran más exigentes, entonces tal vez aumentar la velocidad del reloj para reducir el tiempo de procesamiento podría brindar una mejor eficiencia energética (incluso a expensas de tener que esperar a que el sistema del reloj se reconfigure y estabilice).
Arsenal