esp32-cambiar-frecuencia-procesador

Cómo cambiar la frecuencia del CPU en el ESP32

En el ESP32 es posible variar la frecuencia de funcionamiento del CPU, con objetivo de reducir el consumo energético.

Al ajustar cuidadosamente la frecuencia de reloj según tus necesidades, puedes lograr un equilibrio óptimo entre rendimiento y eficiencia energética.

El proceso es bastante sencillo y, en ciertos proyectos, puede puede proporcionar mejor el rendimiento y eficiencia energética del ESP32. de ESP32.

Sin embargo, cambiar la frecuencia del procesador es una técnica avanzada. Podéis esperar todo tipo de “cosas raras”, como que millis o delay dejarán de ser correctos.

Así que únicamente debéis usarla si estáis seguros de lo que hacéis. Experimenta con diferentes frecuencias y observa cómo afecta el rendimiento y el consumo de tu proyecto.

Cómo variar la frecuencia del CPU del ESP32

Como decía, es bastante sencillo variar la frecuencia de la CPU del ESP32 en el entorno Arduino. El código necesario está definido en la biblioteca esp32-hal-cpu.h, que proporciona funciones para gestionar la frecuencia de reloj.

// La función acepta las siguientes frecuencias como valores válidos:
// 240, 160, 80 <<< Para todos los tipos de cristal XTAL
// 40, 20, 10 <<< Para XTAL de 40MHz
// 26, 13 <<< Para XTAL de 26MHz
// 24, 12 <<< Para XTAL de 24MHz
bool setCpuFrequencyMhz(uint32_t cpu_freq_mhz);

Como podemos ver en la documentación de esta función, también puede aceptar 80, 160 o 240 como entradas válidas.

Pero para las velocidades más bajas, depende del cristal (XTAL) que tengamos. Podemos obtener la velocidad de nuestro cristal con esta función.

uint32_t getXtalFrequencyMhz(); // En MHz

Después de realizar un cambio en la frecuencia del reloj de la CPU, puedes verificar el valor de la frecuencia de reloj de la CPU leyendo el valor de retorno de la siguiente función.

uint32_t getCpuFrequencyMhz(); // En MHz

Ejemplo de código

Utiliza la función setCpuFrequencyMhz() para establecer la frecuencia de reloj deseada. Puedes utilizar frecuencias como 240, 160, 80 según tus necesidades. Más opciones son posibles en función del cristal que tengáis.

void setup() {
  Serial.begin(115200);

  // Establecer la frecuencia de la CPU a 80 MHz para optimización de consumo
  setCpuFrequencyMhz(80);

  // Imprimir la frecuencia del cristal XTAL
  Serial.print("Frecuencia del Cristal XTAL: ");
  Serial.print(getXtalFrequencyMhz());
  Serial.println(" MHz");

  // Imprimir la frecuencia de la CPU
  Serial.print("Frecuencia de la CPU: ");
  Serial.print(getCpuFrequencyMhz());
  Serial.println(" MHz");

  // Imprimir la frecuencia del bus APB
  Serial.print("Frecuencia del Bus APB: ");
  Serial.print(getApbFrequency());
  Serial.println(" Hz");
}

void loop() {
  // en este ejemplo aqui nada
}