¿Cuál es la mejor manera de estimar el consumo de energía de un microcontrolador Atmega328p?

Actualmente estoy trabajando con un microcontrolador barebone Atemga328p implementado dentro de un diseño alimentado por batería. Me he dado cuenta de que no tengo ni idea de cómo se clasifican los microcontroladores en cuanto al consumo de energía.

En referencia a la hoja de datos que contiene información sobre el Atmega328p ( http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete .pdf ), establece que el consumo de energía de un modo de operación de 1Mhz, 1.8V, 25C consume 0.2 mAs de corriente. Tengo varias preguntas con respecto a este número:

  • Debido a que estos microcontroladores pueden operar a 8Mhz y 16Mhz, ¿el consumo de energía es una función lineal de la frecuencia? es decir, ¿operar a 8 MHz consume 0,2 mA * 8 = 1,6 mA de corriente?

  • ¿Cuál es la relación entre el voltaje y el consumo de energía? Entiendo que la potencia de CC está definida por W = VI, sin embargo, si tuviera que operar a 3,3 V, ¿no consumiría menos corriente? Sin embargo, no estoy seguro de si esa es una suposición correcta.

  • Supongo que la potencia de salida enumerada también excluye cualquier potencia adicional que el chip esté suministrando a E/S (es decir, suministrar 10 mA a un LED aumentaría la cantidad total de corriente que ingresa al microcontrolador). Sin embargo, ¿ciertas operaciones dentro del microcontrolador hacen que consuma más energía? Específicamente estoy interesado en el caso de implementar comunicaciones seriales como SPI. Suponiendo que estoy tratando de usar SPI sin un dispositivo esclavo conectado (por lo tanto, no hay forma de perder energía externa), ¿el microcontrolador seguiría usando más energía?

Agradezco cualquier ayuda que se proporcionará!

hay muchos periféricos que se pueden apagar para reducir el consumo de energía, por lo que tener SPI habilitado o deshabilitado afectará el consumo actual. Hay muchos recursos en línea sobre cómo hacer que los atmega328 funcionen con poca energía.
@WesleyLee Ya veo. ¿Cómo diseñaría exactamente para esto? ¿O simplemente se convertirá en prueba y error?
Si es la cifra real que le interesa, creo que tendrá que averiguarlo empíricamente. Esta podría ser una lectura interesante: gammon.com.au/power
FWIW, la corriente consumida es aproximadamente lineal con la frecuencia. En modos de muy bajo consumo, esto podría no ser cierto en absoluto, porque el micro está en un estado inactivo y su frecuencia de funcionamiento normal apenas afecta el consumo.

Respuestas (3)

Debido a que estos microcontroladores pueden operar a 8Mhz y 16Mhz, ¿el consumo de energía es una función lineal de la frecuencia? es decir, ¿operar a 8 MHz consume 0,2 mA * 8 = 1,6 mA de corriente?

En primer lugar, el 328 puede funcionar a muchas más velocidades; su velocidad de reloj máxima es de 20MHz, y se admite al menos hasta 32kHz, posiblemente más baja. Cualquier cosa intermedia también es válida.

En cuanto al consumo de energía, eche un vistazo a la hoja de datos , en particular, el gráfico en la sección 33.1.1 (Características típicas del ATmega328 -> Corriente de suministro activo):

328 corriente de alimentación activa

Como puede ver, la corriente aumenta aproximadamente linealmente con la velocidad del reloj. En mi experiencia, hay un componente "estático" en el consumo de energía que se agrega al consumo de energía relativo a la velocidad, y esta parte puede dominar a velocidades de reloj muy bajas. Pero esto dependerá de la tensión de alimentación y de los periféricos habilitados.

¿Cuál es la relación entre el voltaje y el consumo de energía? Entiendo que la potencia de CC está definida por W = VI, sin embargo, si tuviera que operar a 3,3 V, ¿no consumiría menos corriente? Sin embargo, no estoy seguro de si esa es una suposición correcta.

Los circuitos integrados basados ​​en transistores generalmente consumen menos corriente a voltajes más bajos; podría aproximarlos como una carga resistiva (que no es del todo precisa pero lo suficientemente justa para una estimación). Nuevamente, la hoja de datos tiene un gráfico útil (misma sección):

328 corriente activa vs vcc

Como puede ver, la relación es incluso más fuerte que la lineal, tiene una ligera curva cuadrática. A 5V consume alrededor de 1mA, para una potencia de 5mW. A la mitad de eso, 2,5 V, son solo 0,4 mA, lo que da como resultado una potencia de 1 mW. ¡El bajo voltaje es imprescindible si la baja potencia es su objetivo!

Supongo que la potencia de salida enumerada también excluye cualquier potencia adicional que el chip esté suministrando a E/S (es decir, suministrar 10 mA a un LED aumentaría la cantidad total de corriente que ingresa al microcontrolador).

Correcto.

Sin embargo, ¿ciertas operaciones dentro del microcontrolador hacen que consuma más energía? Específicamente estoy interesado en el caso de implementar comunicaciones seriales como SPI.

Sí. Los AVR, incluido el 328, pueden desactivar muchos de sus periféricos internos, como SPI, UART, ADC, temporizadores, etc. Desactivarlos reducirá su consumo de energía. La pregunta es por cuánto; en mi experiencia, esos periféricos consumen una energía insignificante en comparación con la CPU principal a 5 V/20 MHz, pero a velocidades de reloj más bajas o cuando la CPU duerme mucho, la energía periférica puede ser significativa. Para bajo consumo, deshabilite todo lo que no necesite.

Una nota sobre las hojas de datos: tienden a presentar los mejores escenarios. Sospecho que las cifras y los gráficos de consumo de energía en la hoja de datos están con todos los periféricos deshabilitados.

La información en la hoja de datos es útil, pero si desea aprovechar al máximo su potencia, debe realizar experimentos y mediciones. Medir el consumo de corriente:

  • A diferentes velocidades de reloj
  • En diferentes VCC (¡observe el VCC mínimo para una velocidad de reloj dada!)
  • Con cada uno de los periféricos deshabilitados o habilitados
  • En los distintos modos de suspensión
  • Uso de las distintas fuentes de reloj

En general, para optimizar la potencia de su proyecto 328, siga estos pasos:

  • Optimice su código. Cuantos menos ciclos necesite para hacer su trabajo, menos energía necesitará.
  • Ejecute el 328 a la velocidad de reloj más baja que pueda.
  • Ejecute el 328 al voltaje más bajo que pueda (considerando la velocidad del reloj).
  • Deje que el 328 duerma cuando no tenga nada que hacer.
  • Deshabilite todos los periféricos que no necesite.
  • Trate de usar el oscilador RC interno de 128 kHz si es posible.

Realmente depende de cuánto trabajo tenga que hacer su 328. A 20 MHz/5 V, un 328 activo consume alrededor de 20 mA = 100 mW, pero a baja velocidad de reloj y voltaje, 1 mW es muy factible. Gran diferencia.

Cuando se opera con voltajes bajos, cerca de la tolerancia del 328, es posible que también desee considerar cómo lidiar con la caída de voltaje de la batería. Discutir la capacidad de la batería y la caída de voltaje está más allá de esta respuesta, pero este video de EEVblog es un excelente punto de partida.

Descubrí que el equipo de medición para mediciones de tan alta resolución es demasiado costoso para mi presupuesto de desarrollo y prohibitivamente avanzado para mis habilidades de bricolaje.

En cambio, descubrí que cargar un capacitor grande y alimentar el circuito con eso y ver cuánto tiempo antes de que se apague, es una buena manera de medir las diferencias relativas en las configuraciones de hardware.

Si su software está organizado de tal manera que en su mayoría hace las mismas cosas con las mismas entradas, puede probar fácilmente y ver cuánto se ve afectado el consumo de energía al cambiar ciertas configuraciones de hardware.

Puede variar el voltaje de carga y la capacitancia para obtener un dominio de medición dentro de límites aceptables. A veces es demasiado esperar para ver si tomará 30 segundos o 25 en una determinada configuración, si 0,3 frente a 0,25 podría haber sido suficiente. Caballos para cursos y todo eso.

No es demasiado difícil estimar la energía contenida en un capacitor cargado a un cierto voltaje, por lo que también se puede estimar/calcular el consumo total de energía.

"... las mediciones de alta resolución son demasiado caras..." - ¿Cómo es eso? Solía ​​​​tener solo un multímetro de mierda de $ 10, y mide hasta µA muy bien. Incluso si su precisión no es muy buena (que probablemente sea el caso), sigue siendo útil para obtener valores aproximados y hacer mediciones relativas.
La alta resolución de @marcelm estaba pensada tanto en el tiempo como en el dominio de frecuencia/muestreo. Si tiene un tiempo infinito, puede obtener una precisión infinita, pero a menudo desea muestrear a cierta velocidad. Cuando esa velocidad aumenta, el precio también lo hace o la precisión/resolución disminuye. Nunca hice un caso en contra de las medidas aproximadas :)
@marcelm, además de los problemas de resolución, ¿la caída de voltaje no suele ser un problema cuando se intenta medir valores de corriente pequeños con multímetros? Al menos encontré problemas con un multímetro relativamente barato y uno puede encontrar muchos informes en línea sobre el voltaje de carga demasiado alto para incluso obtener resultados útiles.
@maxschlepzig El voltaje de carga puede ser un problema, y ​​siempre es bueno tenerlo en cuenta. Dicho esto, el voltaje de carga disminuye con la corriente, y mi experiencia es que rara vez es un gran problema si se limita al extremo inferior de un rango de medición. Dicho multímetro de mierda, por ejemplo, tiene una derivación de 1 kΩ para su rango de 200 µA. Eso significa una caída de 0,2 V a 200 µA, que puede ser significativa. Si usa ese rango solo para 0.1-20 µA, todavía son 200 pasos, pero la caída máxima es solo 20 mV. Todavía bastante útil para mediciones aproximadas.

Hay más que un simple microcontrolador en el diseño integrado, por lo que si el consumo de energía de la MCU no es significativo en comparación con el consumo total de energía del diseño integrado, es bueno centrarse en otros periféricos para implementar estrategias de ahorro de energía.

Algunas técnicas que he enumerado aquí en mi artículo para el diseño de sistemas integrados de bajo consumo.

Si está enlazando a su propio sitio web, debe ser muy explícito al respecto; ver también Cómo no ser un spammer.