Arduino: Control de frecuencia PWM con ajustes de temporizador de contador

Recientemente necesité establecer la frecuencia PWM de Arduino a 20KHz, con la capacidad de cambiar la cuadratura (relación entre el período de repetición del pulso y la duración del mismo). Quería hacerlo sin usar las bibliotecas – ajustes del contador de tiempo.

Decidí compartirlo, por si alguien lo necesita.

El código en sí mismo:

[snippet slug=frecuencia-pwm-del-arduino lang=abap]

El código debes añadirlo a la configuración. Setup timer – contador 1, sólo el canal A, por lo tanto la señal requerida estará sólo en la clavija D9.

La frecuencia se ajusta por el valor en el registro ICR1. A continuación encontrará los valores probados y su correspondiente frecuencia.

ICR1=10; // 100 kHz
ICR1=20; // 50 kHz
ICR1=30; // 33 kHz
ICR1=40; // 25 kHz
ICR1=50; // 20 kHz
ICR1=60; // 16.6 kHz
ICR1=70; // 14.3 kHz
ICR1=80; // 12.5 kHz
ICR1=90; // 11.1 kHz
ICR1=100; // 10 kHz

Si se cambia la preselección, las frecuencias serán diferentes, por ejemplo, con la preselección 64 y ICR1=50, la frecuencia será de 2,5 kHz.

El cociente se controla por el valor en el registro OCR1A, depende del valor en ICR1, de modo que el valor máximo de OCR1A es igual al valor en ICR1, si son iguales a una señal constante. Si OCR1A = ICR1 / 2, se obtiene el meandro (la duración del pulso y la longitud de la pausa entre los pulsos son iguales). Otro ejemplo: Con ICR1 = 50 (20kHz) y OCR1A = 10, la longitud del pulso es del 20%.

Se puede cambiar el valor de OCR1A en el bucle y el factor de carga cambiará en consecuencia.

Te puede interesar  Arduino Pro Micro

Probado en Proteus, y luego ejecutado en Arduino Nano, todo funciona.

P.D. Si alguien mas sabe cómo cambiar la frecuencia de la PWM  y el factor de carga, especialmente en el temporizador de tiempo 2, se agradecería la ayuda.