Publicaciones

Tutoriales Arduino - frecuencia en los pines PWM de Arduino UNO

  Tutoriales sobre Arduino

 

Tutoriales


TAMBIÉN VEA:
Rrecuencia en los pines PWM de Arduino en este caso para el UNO

Arduino Uno es uno de los tableros de desarrollo más utilizados en estos días. Se puede utilizar para casi cualquier aplicación. Una de esas aplicaciones es en circuitos de alta frecuencia.


"Hay una cierta frecuencia predeterminada para cada pin PWM, que se llama cuando se usa el comando analogWrite en ese pin. Y esta frecuencia predeterminada se puede cambiar a un valor tan alto como 65Khz y tan bajo como 30Hz usando solo un código de línea”.

Registro en cuestión TCCR2B para el caso de nuestro Ejemplo con PIN3




Aquí está la frecuencia predeterminada de cada pin PWM de Arduino UNO:


Frecuencia PWM para D3 y D11: 490.20 Hz (El DEFAULT)

Frecuencia PWM para D5 y D6: 976.56 Hz (El DEFAULT)

Frecuencia PWM para D9 y D10: 490.20 Hz (El DEFAULT)



Si requerimos pulsos de alta frecuencia. Uno de esos proyectos es un convertidor Buck. Entonces, para lograr una frecuencia más baja o más alta que la frecuencia predeterminada en los pines PWM, se puede usar un código de línea antes de inicializar el pin PWM, ya que la salida se muestra a continuación:


Frecuencia de PWM para pines D5 & D6

TCCR0B = TCCR0B & B11111000 | B00000001;
set timer 0 divisor to     1 for PWM frequency of 62500.00 Hz

TCCR0B = TCCR0B & B11111000 | B00000010;
set timer 0 divisor to     8 for PWM frequency of  7812.50 Hz

  TCCR0B = TCCR0B & B11111000 | B00000011;
set timer 0 divisor to    64 for PWM frequency of   976.56 Hz (The DEFAULT)

TCCR0B = TCCR0B & B11111000 | B00000100;   
 set timer 0 divisor to   256 for PWM frequency of   244.14 Hz

TCCR0B = TCCR0B & B11111000 | B00000101;    
set timer 0 divisor to  1024 for PWM frequency of    61.04 Hz



Frecuencia de PWM para pines D9 & D10

TCCR1B = TCCR1B & B11111000 | B00000001;    
Set timer 1 divisor to     1 for PWM frequency of 31372.55 Hz

TCCR1B = TCCR1B & B11111000 | B00000010;    
set timer 1 divisor to     8 for PWM frequency of  3921.16 Hz

  TCCR1B = TCCR1B & B11111000 | B00000011;    
set timer 1 divisor to    64 for PWM frequency of   490.20 Hz (The DEFAULT)

TCCR1B = TCCR1B & B11111000 | B00000100;    
set timer 1 divisor to   256 for PWM frequency of   122.55 Hz

TCCR1B = TCCR1B & B11111000 | B00000101;    
set timer 1 divisor to  1024 for PWM frequency of    30.64 Hz



Frecuencia de PWM para pines D3 & D11

TCCR2B = TCCR2B & B11111000 | B00000001;
set timer 2 divisor to     1 for PWM frequency of 31372.55 Hz

TCCR2B = TCCR2B & B11111000 | B00000010; 
set timer 2 divisor to     8 for PWM frequency of  3921.16 Hz

TCCR2B = TCCR2B & B11111000 | B00000011;   
set timer 2 divisor to    32 for PWM frequency of   980.39 Hz

TCCR2B = TCCR2B & B11111000 | B00000100;   
set timer 2 divisor to    64 for PWM frequency of   490.20 Hz (The DEFAULT)

TCCR2B = TCCR2B & B11111000 | B00000101;   
set timer 2 divisor to   128 for PWM frequency of   245.10 Hz

TCCR2B = TCCR2B & B11111000 | B00000110;   
set timer 2 divisor to   256 for PWM frequency of   122.55 Hz

TCCR2B = TCCR2B & B11111000 | B00000111;   
 set timer 2 divisor to  1024 for PWM frequency of    30.64 Hz

EJEMPLO:

Para mostrarle cómo cambia la frecuencia al aplicar el código anterior, se simula el circuito Arduino en Proteus:

Echa un vistazo a: Cómo agregar la biblioteca Arduino a Proteus y simular proyectos Arduino

Se seleccionan dos Arduino y se colocan en el Panel frontal

El pin digital 3 (pin PWM) de cada Arduino está conectado al osciloscopio

Se escriben dos programas separados para cada Arduino:
Programa A - Frecuencia por defecto en el Pin 3

void setup() {
pinMode(3,OUTPUT);
// ponga su código de configuración aquí, para ejecutar una vez:
}
void loop() {
analogWrite(3,155);
// pon tu código principal aquí, para ejecutar repetidamente:
}


Programa B - Frecuencia modificada en el Pin 3
void setup() {
TCCR2B = TCCR2B & B11111000 | B00000111; // for PWM frequency of    30.64 Hz
pinMode(3,OUTPUT);
// ponga su código de configuración aquí, para ejecutar una vez:
}
void loop() {
analogWrite(3,155);
// pon tu código principal aquí, para ejecutar repetidamente:
}

Programa C - Frecuencia modificada en el Pin 3
void setup() {
TCCR2B = TCCR2B & B11111000 | B00000001; // for PWM frequency of 31372.55 Hz
pinMode(3,OUTPUT);
// ponga su código de configuración aquí, para ejecutar una vez:
}
void loop() {
analogWrite(3,155);
// pon tu código principal aquí, para ejecutar repetidamente:
}

El archivo hex de los programas anteriores se entrega a Arduino.

Ejecutar simulación



Se puede ver claramente en el osciloscopio que la frecuencia es diferente y también tiene otro modo de jemplo de este modo:

Example: DC motor drive on the Arduino UNO, pins 5 and 6

For Fast PWM of 62.500 kHz (prescale factor of 1)
Use these two lines in the setup function:

TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00); 
TCCR0B = _BV(CS00); 

And modify the line in the wiring.c function in the Arduino program files
hardware\arduino\cores\arduino\wiring.c :
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(1 * 256))

For Phase-correct PWM of 31.250 kHz (prescale factor of 1)
Use these two lines in the setup function:

TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00); 
TCCR0B = _BV(CS00); 

And modify the line in the wiring.c function in the Arduino program files
hardware\arduino\cores\arduino\wiring.c :
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(1 * 510))


Más información sobre este artículo aquí https://playground.arduino.cc/Main/TimerPWMCheatsheet
Share this Article on :
 
d Copyright Electrónica Net Andino 2006 | Design by Net Andino | Published by Editor de Templates | Powered by Net Andino .