Como cambiar la frecuencia de un PWM en Arduino Deja un comentario

Hoy vamos a ver cómo cambiar la frecuencia de un pin de salida analógico en Arduino, para lo cuál nos va a tocar configurar los registros que controlan los Timers asociados a los pin PWM. Pero tranquilos, que vamos a dejarlo fácil en una única función.

El empleo de timers es algo normal en procesadores. Sin embargo, frecuentemente nos habréis visto recomendar evitar su manipulación en Arduino dado que puede tener efectos inesperados, sobre todo en librerías de terceros. Entonces, si normalmente recomendamos evitar manipualar los Timers en Arduino ¿Para qué querremos modificar ahora su frecuencia? Pues, básicamente, porque esto permite mejorar el comportamiento de ciertos dispositivos cuando son controlados por una señal PWM.

Recordemos que al controlar un dispositivo mediante una señal PWM, realmente estamos encendiendo y apagando el dispositivo por completo múltiples veces por segundo. Eso no es lo mismo que aplicar una auténtica señal analógica y, como normal general, a muchos actuadores el control con PWM les sienta fatal.

Aumentar la frecuencia del PWM puede mejorar el funcionamiento de ciertos dispositivos, porque tienen menos tiempo para “darse cuenta” de que lo hemos apagado. Si la inercia del dispositivo es suficiente, y su frecuencia natural superior a la del PWM, el comportamiento será (casi) idéntico al alimentar con una tensión analógica.

Anuncio:

El caso práctico más frecuente lo tenemos al controlar la velocidad de un motor, que al controlar con un PWM apagamos y encendemos el motor múltiples veces por segundo. El motor es una carga inductiva, y cada encendido supone un hermoso picos de arranque. Así lleva a la situación de que al aplicar una reducción de la velocidad, el motor consume más, se calienta más, hace más ruido… cuando, a priori, podríamos pensar que debería ser al revés porque está funcionado a menos velocidad.

Eso tampoco significa que podamos subir la frecuencia de forma indefinida como locos. No todos los drivers que estemos empleando van a soportar la frecuencia y si no la soportan… ¡cataplum!. Hay que mirar cada caso en particular pero, en general, subir la frecuencia del control PWM 4-10 Khz, resulta bastante razonable.

Así que aquí tenéis un chuletario con la frecuencia, prescalers, valores por defecto y consecuencias de cada uno de los pines PWM para procesadores Atmega328p y Atmega 32u2, así como una función para modificarlo de forma sencilla.

Atmega 328p (Arduino Uno, Nano)

Frecuencia

Pins Timer Frecuencia
5, 6 Timer0 62500 Hz
9, 10 Timer1 31250 Hz
3, 11 Timer2 31250 Hz

Valores por defecto

Pins Timer Prescalers Frecuencia
5, 6 Timer0 64 977Hz
9, 10 Timer1 64 490Hz
3, 11 Timer3 64 490Hz

Prescalers

Pins Timer Prescalers
5, 6 Timer0 1 8 64 256 1024
9, 10 Timer1 1 8 64 256 1024
3, 11 Timer2 1 8 32 64 128 256 1024

Consecuencias y efectos

Pins Timer Efecto
5, 6 Timer0 delay() y millis()
9, 10 Timer1 Librería servo
3, 11 Timer2

Código

Atmega 32U (Micro y Leonardo)

Frecuencias

Pins Timer Frecuencia
3, 11 Timer0 64500Hz
9, 10 Timer1 31250Hz
5 Timer3 31250Hz
6, 13 Timer4 31250Hz

Valores por defecto

Pins Timer Prescalers Frecuencia
3, 11 Timer0 64 977Hz
9, 10 Timer1 64 490Hz
5 Timer3 64 490Hz
6, 13 Timer4 64 490Hz

Prescalers

Pins Timer Prescalers
3, 11 Timer0 1 8 64 256 1024
9, 10 Timer1 1 8 64 256 1024
5 Timer3 1 8 64 256 1024
6, 13 Timer4 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384

Consecuencias

Pins Timer Efecto
3, 11 Timer0 delay() y millis()
9, 10 Timer1
5 Timer3
6, 13 Timer4

Código

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección
tutoriales de Arduino

Anuncio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0
    0
    Tu Carrito
    Tu carrito esta vacíoVolver a la tienda
    Enviar Whatsapp
    Hola 👋
    ¿En qué podemos ayudarte?