En esta guía, te muestro 3 medidas de hardware y 1 de software que reducen el consumo de energía del microcontrolador Arduino hasta en un 89%.
En este tutorial se realizan las siguientes medidas:
- Utilice un microcontrolador más pequeño (hardware)
- Reducir la velocidad del reloj (hardware)
- Reducir la tensión de funcionamiento (hardware)
- Utilice el modo de bajo consumo de Arduino (software)
Resultados de reducción del consumo de energía de Arduino
La siguiente tabla resume los resultados de todos los métodos para reducir el consumo de energía y también muestra los microcontroladores utilizados en este artículo.
Referencia del microcontrolador 9V Reducir la velocidad del reloj 9V Reducir la velocidad del reloj y la tensión de funcionamiento 3,3 V Activar el modo de bajo consumo 3,3 V Activar el modo de bajo consumo 9 V
Microcontrolador | Referencia 9V | Reducir la velocidad de reloj 9V | Reducir la velocidad de reloj y el voltaje de funcionamiento 3. 3V | Habilitar modo de bajo consumo 3,3V | Habilitar modo de bajo consumo 9V |
---|---|---|---|---|---|
Arduino Nano | 22.1 mA | 18.5 mA (-16%) | 3.4 mA (-85%) | 3.4 mA (-84%) | 4.8 mA (-78%) |
Arduino Pro Mini 5V | 14.6 mA | 10.0 mA (-32%) | 3.7 mA (-75%) | 1.6 mA (-89%) | 3.2 mA (-78%) |
Arduino Pro Mini 3.3V | 5.1 mA | 3.8 mA (-25%) | 3.7 mA (-27%) | 1.6 mA (-69%) | 3.2 mA (-38%) |
Arduino Uno | 98.4 mA | 42.8 mA (-57%) | 11.6 mA (-88%) | 11.5 mA (-88%) | 27.9 mA (-72%) |
Arduino Mega | 73.2 mA | 61.8 mA (-16%) | 16.7 mA (-77%) | 11.9 mA (-84%) | 26.9 mA (-63%) |
De la tabla que resume los resultados de las mediciones de consumo de energía, se pueden extraer los siguientes resultados principales:
- la menor consumo de corriente después de todos los métodos de reducción posibles Arduino Pro Mini con 1,58 mA. Esta es una reducción del 89% para la versión de 5V y del 69% para la versión 3.3 de Arduino Pro Mini.
- El mayor consumo de corriente de referencia lo tiene el Arduino Uno con 98,43 mA. Incluso el Arduino Mega es un PCB más grande con más componentes eléctricos integrados en la placa, el consumo de corriente del Mega es menor a 73.19mA porque el Arduino Mega no se ejecuta en 16 MHz sino en 8 MHz.
- la el consumo de corriente de referencia más bajo en el Arduino Pro Mini en la versión de 3.3 V con 5.13 mA. Si no desea utilizar ningún modo de ahorro de energía y no necesita una fuente de alimentación de 5V, debe trabajar con el Arduino Pro Mini 3.3V.
- El mejor método para ahorrar energía es activar el modo de bajo consumo y reducir la velocidad del reloj para que el microcontrolador pueda trabajar directamente con 3.3V. Con este método, el consumo de corriente se puede reducir en un 83% en promedio en comparación con la medición de referencia. con 9V y sin optimización.
- Después de habilitar la velocidad de reloj reducida y el voltaje de funcionamiento reducido de 3.3V, el consumo de corriente del Arduino Pro Mini en la versión de 5V es el mismo que en la versión 3.3. V del microcontrolador.
También recomiendo encarecidamente mi libro electrónico gratuito de hojas de datos de microcontroladores, donde encontrará información detallada sobre el consumo de energía para varias placas de microcontroladores Arduino, ESP8266 y ESP32.
La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.
Operating Voltage | 3.3V | 5V |
---|---|---|
Arduino Nano | Amazon | AliExpress |
Arduino Pro Mini | Amazon | AliExpress |
Arduino Uno | Amazon | AliExpress |
Arduino Mega | Amazon | AliExpress |
Multímetro (interfaz USB) | AliExpress | |
Fuente de alimentación DC | Amazon | AliExpress |
En las siguientes secciones le muestro cómo implementar las técnicas para reducir el consumo de energía de Arduino.
Utilice la placa Arduino correcta para reducir el consumo de energía
En este artículo, cubrimos diferentes microcontroladores, desde los más grandes como el Arduino Mega hasta los más pequeños como el Arduino Pro Mini. Tenga en cuenta al planificar su proyecto que requiere un menor consumo de energía: todos los dispositivos eléctricos en la PCB necesitan energía para funcionar. Por lo tanto, el primer paso para reducir el consumo de energía de Arduino es:
Utilice el microcontrolador más pequeño adecuado para su proyecto para eliminar hardware innecesario.
Por ejemplo, si desea construir una estación meteorológica que solo requiera 5 entradas digitales y 1 entrada analógica, elija el Arduino Nano (22.05mA) o el Arduino Pro Mini (14.62mA) en lugar de un Arduino Uno (98.43 mA).
Las mediciones se realizan con un multímetro USB en el estado inactivo del microcontrolador después de flashear un script Arduino vacío en el microcontrolador. La siguiente imagen muestra el cableado de las diversas placas Arduino y la configuración de medición.
- Arduino Nano
- Arduino Pro Mini
- Arduino Uno
- Arduino Mega
- Configuración de medida
Arduino Nano
Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini
Arduino Uno
Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega
Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
Configuración de medida
El siguiente gráfico de barras muestra la medida de referencia para todas las placas Arduino, suministradas con un voltaje de 9V. Cada barra muestra el consumo de energía de una placa Arduino.
Reducción de la velocidad del reloj para reducir el consumo de energía de Arduino
Para reducir aún más el consumo de energía, puede reducir la velocidad del reloj. La velocidad del reloj define la cantidad de operaciones que Arduino puede realizar por segundo. La siguiente tabla muestra la frecuencia de reloj predeterminada para los microcontroladores Arduino, analizados en este artículo.
Frecuencia de reloj predeterminada del microcontrolador de la placa Arduino
Arduino Nano | ATmega328 | 16 MHz |
Arduino Mini 5V | ATmega328 | 16 MHz |
Arduino Mini 3.3V | ATmega328 | 8 MHz |
Arduino Uno | ATmega328 | 16 MHz |
Arduino Mega REF3 | ATmega2560 | 8 MHz |
La velocidad de reloj predeterminada para la mayoría de los microcontroladores Arduino es un cristal de 16 MHz, lo que equivale a 16 millones de instrucciones por segundo. Pero en la mayoría de los casos, no necesita la velocidad de funcionamiento completa, por lo que puede cambiar la velocidad del reloj.
Reducir la velocidad del reloj de 16 MHz a 8 MHz
Pero también hay una desventaja si reduce la velocidad del reloj. Si entra en el modo de ahorro de energía durante un tiempo después de que finaliza el script, el microcontrolador Arduino tarda más en ejecutar el script y se reduce el tiempo en el modo de ahorro de energía. Por ejemplo, si la secuencia de comandos se ejecuta 4 segundos en 16 MHz y pausa la secuencia de comandos durante 10 segundos en el modo de ahorro de energía, el mismo script tarda 8 segundos en 8 MHz y, por lo tanto, el tiempo en el modo de ahorro de energía se reduce a 6 segundos. En circunstancias excepcionales, el consumo de corriente puede aumentar al reducir la velocidad del reloj.
La siguiente imagen muestra cómo el tiempo de ejecución y la suspensión se bloquean con el tiempo a 16MHz y 8MHz.
Para reducir la velocidad del reloj, puede utilizar el reloj del sistema preestablecido que reduce la velocidad del reloj en un factor de división. La frecuencia de reloj reducida afecta al procesador y a todos los dispositivos síncronos, como pines de E / S, convertidor analógico a digital (ADC) y flash.
Dado que existe un mecanismo de bloqueo que evita que la frecuencia del reloj cambie, existe un procedimiento de escritura especial de dos pasos que se debe seguir para cambiar la frecuencia por los bits CLKPS:
- Escriba el bit de habilitación de cambio del preescalador de reloj (CLKPCE) a uno y todos los demás bits CLKPR a cero.
- En los cuatro ciclos, escriba el valor deseado en CLKPS mientras escribe un cero en CLKPCE.
Puede encontrar la explicación detallada en las hojas de datos de los microcontroladores (por ejemplo, para el ATmega328P en la página 32) En la tabla anterior, vinculé la hoja de datos de cada microcontrolador ATmega:
La siguiente tabla muestra cómo se construye el Registro de escala de reloj previo (CLKPS) para que sepamos qué bits debemos establecer en 0 o 1.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Definición | CLKPCE | CLKPS2 | CLKPS1 | CLKPS0 |
Ahora necesitamos saber cómo configurar los bits CLKPS para configurar el factor de división del reloj. La siguiente tabla muestra el posible pre-cambiador y su combinación de bits CLKPS3.
CLKPS3 | CLKPS2 | CLKPS2 | CLKPS0 | Factor de división del reloj |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 4 |
0 | 0 | 1 | 1 | 8 |
0 | 1 | 0 | 0 | 16 |
0 | 1 | 0 | 1 | 32 |
0 | 1 | 1 | 0 | 64 |
0 | 1 | 1 | 1 | 128 |
1 | 0 | 0 | 0 | 256 |
Código de programa Arduino para reducir la velocidad del reloj
Para reducir la velocidad del reloj de 16 MHz a 8 MHz, a través del código del programa Arduino, debemos seguir el procedimiento de escritura de dos pasos de los bits CLKPS en la función de configuración:
- Habilite el cambio del preescalador de reloj escribiendo el bit CLKPCE en 1 y establezca todos los demás bits en 0, lo que equivale a 0x80.
- Establezca el factor de división en 2, que equivale a 0x01.
void setup() { CLKPR = 0x80; // (1000 0000) enable change in clock frequency CLKPR = 0x01; // (0000 0001) use clock division factor 2 to reduce the frequency from 16 MHz to 8 MHz } void loop() { }
Impacto de la velocidad de reloj reducida en el consumo de energía de Arduino
El cableado de las diferentes placas Arduino para medir el consumo de energía para la velocidad de reloj reducida es el mismo, lo usamos antes para la medición de referencia.
Cada microcontrolador se alimenta con 9V gracias a una fuente de alimentación de laboratorio. El multímetro digital está conectado en serie para medir el consumo de corriente. Todas las medidas se insertan en la tabla en la parte superior del artículo y también se muestran en el siguiente gráfico de barras.
Reducir la velocidad del reloj muestra los siguientes resultados:
- La mayor reducción relativa en el consumo de corriente ve el Arduino Uno con una reducción del 56,56% (de 98,43 mA a 42,76 mA)
- La reducción relativa más baja la tiene el Arduino Mega con un 15,62% (de 73,19 mA a 61,76 mA).
- En promedio, la reducción en el consumo de corriente para estos microcontroladores Arduino es del 29%, pero depende en gran medida de cada placa Arduino individual.
Velocidad de reloj y voltaje de funcionamiento reducidos para reducir el consumo de energía de Arduino
El último paso en las acciones del hardware es reducir la tensión de funcionamiento. Cuando se reduce la tensión de funcionamiento, también se reduce el consumo de energía (P = V * I). Pero si desea reducir el voltaje de funcionamiento, también debe reducir la velocidad del reloj, lo que ya hicimos en la sección anterior.
La dependencia entre el voltaje de funcionamiento y la velocidad del reloj se puede encontrar en la hoja de datos de los microcontroladores Arduino. Las siguientes imágenes muestran esta dependencia para ATmega328 y ATmega2560.
ATmega328
ATmega2560
La siguiente tabla le brinda una descripción general de las placas Arduino consideradas, el microcontrolador integrado, el voltaje de suministro mínimo reducido con la velocidad de reloj correspondiente y también el voltaje de suministro mínimo normal con la velocidad de reloj estándar.
Microcontrolador de placa Arduino Voltaje de suministro mínimo reducido Voltaje de suministro mínimo normal
Arduino Nano | ATmega328 | 2,7 V (8 MHz) | 4,5 V (16 MHz) |
Arduino Mini 5V | ATmega328 | 2,7 V (8 MHz) | 4,5 V (16 MHz) |
Arduino Mini 3.3V | ATmega328 | – | 2,7 V (8 MHz) |
Arduino Uno | ATmega328 | 2,7 V (8 MHz) | 4,5 V (16 MHz) |
Arduino Mega REF3 | ATmega2560 | 1,8 V (4 MHz) | 2,7 V (8 MHz) |
Impacto de la velocidad del reloj y el voltaje de funcionamiento reducidos en el consumo de energía de Arduino
Para la medición del consumo de corriente, conecto las placas Arduino en el pin de 3.3V directamente a la fuente de alimentación y reduzco el voltaje de suministro de 9V a 3.3V. Las siguientes imágenes muestran el cableado diferente para la configuración de 3.3V.
- Arduino Nano
- Arduino Pro Mini
- Arduino Uno
- Arduino Mega
Arduino Nano
Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.
Arduino Pro Mini
Arduino Uno
Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.
Arduino Mega
Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.
Dado que el regulador de voltaje incorporado necesita un voltaje más alto para funcionar, debe omitir los reguladores de voltaje externos y conectar la fuente de alimentación directamente al pin de 3.3V.
Estoy usando el mismo script de Arduino que para la velocidad de reloj reducida. El siguiente gráfico de barras muestra las medidas de consumo de energía para reducir la velocidad del reloj y el voltaje de funcionamiento.
Con la reducción del voltaje de funcionamiento, vemos que el consumo de corriente se reduce aún más para las placas de microcontroladores Arduino.
- La reducción del voltaje de funcionamiento tiene el mayor impacto en el sitio del hardware, ya que puede reducir el voltaje en promedio más del 70% en combinación con la reducción de la velocidad del reloj.
- Arduino Nano y Arduino Mega solo tuvieron una pequeña reducción en la velocidad de reloj reducida con aproximadamente un 16% de disminución en el consumo de corriente, pero experimentaron una gran reducción después de que el voltaje d. Power cayó a 3.3V. Como resultado, el consumo de corriente disminuye en un 84,54% para el Arduino Nano y en un 77,13% para el Arduino Mega.
- Porque la única diferencia para el Arduino Pro Mini en las versiones de 5V y 3.3 es la velocidad del reloj y el voltaje de funcionamiento, el consumo de corriente es el mismo después de las mediciones con 3,73 mA.
Influencia de la tensión de funcionamiento reducida en sistemas alimentados por batería
La reducción del voltaje de suministro también tiene otro efecto positivo, si su fuente de alimentación para el microcontrolador Arduino es una batería. El voltaje de la batería se reduce hasta que se alcanza el voltaje mínimo del microcontrolador. Si reduce la tensión de funcionamiento del microcontrolador, se amplía el tiempo hasta que se alcanza este umbral, consulte la siguiente imagen.
Utilice el modo de bajo consumo de Arduino para reducir el consumo de energía
Después de las tres técnicas de hardware para reducir el consumo de energía de Arduino, usamos el modo de bajo consumo de Arduino para reducir aún más el consumo de energía. El modo de bajo consumo desactiva todas las siguientes funciones que utilizan energía para funcionar:
Inactivo
- Temporizador 0,1,2
- Comunicación SPI y UART
- Oscilador externo
Activo
- Interfaz de dos hilos
- Watchdog
- Interrupción externa
También puede deshabilitar otras dos funciones del microcontrolador ATmega, pero la configuración de la biblioteca que usamos le permite decidir si desea habilitar o deshabilitar la función.
- Convertidor analógico a digital (ADC): El convertidor de analógico a digital se utiliza en los pines de E / S digitales de la placa Arduino. Un voltaje de entrada analógica entre 0 V y VCC se convierte en un valor digital mediante un convertidor de 10 bits, por ejemplo. Por lo tanto, los voltajes se convierten a un valor numérico entre 0 y 1023.
- Detector de caída de voltaje (DBO): El detector de caída de voltaje monitorea el voltaje del sistema y asegura que si el voltaje del sistema cae por debajo de un umbral, el microcontrolador Arduino se apaga hasta que el voltaje del sistema se eleva por encima del umbral.
Para activar el modo de bajo consumo utilizamos el Biblioteca de bajo consumo de Rocketscream. No puede agregar la biblioteca de bajo consumo como una biblioteca estándar en el IDE de Arduino, pero los siguientes 3 pasos agregan la biblioteca manualmente al IDE de Arduino.
- Descargue la biblioteca como una carpeta ZIP de la página oficial de rocketscream github.
- Descomprima la carpeta descargada y agregue la carpeta a la carpeta raíz de la biblioteca
- Cambie el nombre de la carpeta para que no haya un nombre de versión
Código de programa Arduino para activar el modo de bajo consumo
Las siguientes líneas muestran el código Arduino para el modo de bajo consumo. Queremos medir el consumo de energía para el modo de bajo consumo con una tensión de funcionamiento de 9 V y 3,3 V. Por lo tanto, necesitamos diferenciar en el código Arduino, si necesitamos reducir la velocidad del reloj o no. Para la medida de 9V, comente las dos líneas en la función de configuración.
#include "LowPower.h" void setup() { CLKPR = 0x80; // (1000 0000) enable change in clock frequency CLKPR = 0x01; // (0000 0001) use clock division factor 2 to reduce the frequency from 16 MHz to 8 MHz } void loop() { delay(4000); LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF); }
En la primera línea incluimos el bajo consumo biblioteca rocketscream. Ya conoces la función de configuración donde reducimos la frecuencia del reloj. En la función de bucle, espero 4 segundos hasta que la placa Arduino entra en modo de bajo consumo durante 2 segundos, donde también apagamos el convertidor analógico a digital y el detector de caída de voltaje para reducir aún más el consumo de corriente.
También existe la posibilidad de configurar la librería de bajo consumo que el microcontrolador despierta mediante un disparador externo. Pero si establece un tiempo para dormir, no puede elegir arbitrariamente el tiempo para dormir. El temporizador de vigilancia solo tiene períodos específicos (definidos dividiendo el reloj por una cantidad definida) durante los cuales puede dormir:
enum period_t { SLEEP_15MS, SLEEP_30MS, SLEEP_60MS, SLEEP_120MS, SLEEP_250MS, SLEEP_500MS, SLEEP_1S, SLEEP_2S, SLEEP_4S, SLEEP_8S, SLEEP_FOREVER };
Impacto del modo de bajo consumo en el consumo de energía de Arduino
Debido a que queremos probar la influencia de la tensión de funcionamiento en el modo de bajo consumo, necesitamos realizar dos mediciones diferentes por microcontrolador.
Modo de menor potencia con voltaje de suministro de 9V
Si solo queremos probar la biblioteca de bajo consumo, conectamos el pin VIN a la fuente de alimentación y en el código comentamos las líneas que reducen la velocidad del reloj.
El siguiente gráfico de barras muestra el consumo de corriente de las placas Arduino en modo de bajo consumo con un voltaje de funcionamiento de 9V.
Ahora bien, esta es la primera vez en este tutorial donde vemos que el consumo de corriente aumenta debido al aumento en el voltaje de operación de 9V en comparación con los 3.3V del capítulo anterior.
El consumo de energía del Arduino Nano aumenta en 3.41mA en medición con velocidad de reloj reducida y voltaje de operación de 3.3V a 3.83mA. Además, Arduino Uno y Arduino Mega tienen un mayor consumo de energía en modo de bajo consumo con 9V en comparación con la velocidad de reloj reducida y el voltaje de operación de 3.3V.
Pero para el Arduino Pro Mini, el consumo de energía se reduce a 3.2mA desde 3.73mA.
Pero no solo depende de la placa Arduino si necesita usar el modo de bajo consumo con un suministro de voltaje de 9V sobre la velocidad de reloj reducida con un voltaje de operación de 3.3V. Si tiene un sensor o cualquier otro componente electrónico conectado al Placa Arduino que necesita voltaje de suministro de 5 V, debe elegir el modo de suministro de energía más bajo con voltaje de suministro de 9 V para proporcionar un voltaje de suministro estable de 5 V al sensor.
Modo de menor potencia con voltaje de suministro de 3.3V
Si podemos reducir la tensión de alimentación, debemos combinar todas las medidas que hemos tomado antes. Por lo tanto, conectamos la fuente de alimentación al pin de 3.3V y reducimos la frecuencia del reloj en el código Arduino.
El siguiente gráfico de barras muestra el consumo de corriente de las placas Arduino en modo de bajo consumo con un voltaje de funcionamiento de 3,3 V.
Si no necesitamos una tensión de alimentación de 5 V en el circuito, la combinación del modo de menor potencia, la velocidad de reloj reducida y por tanto la tensión de alimentación de 3,3 V tiene el menor consumo de energía de todas las mediciones.
El consumo de energía del Arduino Uno se reduce en un 88,37% de 98,43 mA a 11,45 mA. Además, el Arduino Mega tiene un consumo de energía muy bajo de 11,85 mA para el tamaño de la placa.
El consumo de corriente más bajo tiene el Arduino Pro Mini con 1.58mA. Podríamos reducir el consumo del Arduino Pro Mini 3.3V en un 69,20% y el del Arduino Pro Mini 5V en un 89,19%.
La siguiente imagen muestra la medición actual del Arduino Pro Mini directamente desde el multímetro.
En la captura de pantalla, puede ver que el Arduino Pro Mini 3.3V ingresa periódicamente al modo de apagado y reduce la corriente de 5.25mA a 1.58mA.
Si tiene alguna pregunta sobre la reducción del consumo de corriente para las placas Arduino, utilice la sección de comentarios a continuación para hacer preguntas. Les responderé lo antes posible.